{"alexa":{"add_echo":{"cancel":"Cancel","create_error":"Couldn't add this Echo device","description":"Register a new Amazon Echo device for a unit.","done":"Done","name_label":"Device name","name_placeholder":"e.g. Loft 4B Echo","not_configured":"Alexa isn't set up for your account yet. Contact SuiteOp support to enable it.","property_label":"Property","property_placeholder":"Select a property","submit":"Add device","submitting":"Adding…","success_step_1":"Plug in the Echo and complete Amazon setup for Alexa Smart Properties.","success_step_2":"Register it to the unit named \"{name}\" under your organization.","success_step_3":"Say \"Alexa, open House Guide\" to test.","success_title":"Echo added","title":"Add Echo"},"device_settings":{"ai_instructions_hint":"Adds context only. It can't unlock codes or Wi-Fi.","ai_instructions_label":"Device AI instructions","ai_instructions_placeholder":"e.g. This unit's Wi-Fi password is on the fridge magnet.","delete_button":"Remove device","delete_confirm_description":"This unlinks the device from Alexa. The Echo hardware itself is not affected.","delete_confirm_title":"Remove this Echo?","delete_error":"Couldn't remove this device","delete_success":"Echo removed","delete_title":"Remove Echo","description":"Voice assistant settings for this Echo.","health_label":"Health","last_heard_label":"Last heard","last_reset_label":"Last reset","last_reset_never":"Never","never_heard":"Never","profile_label":"Profile","profile_placeholder":"Organization default","property_label":"Property","property_required":"Choose the property this Echo is in.","relink_button":"Re-link","relink_error":"Couldn't re-link this Echo","relink_hint":"If linking with Alexa didn't finish, re-link this Echo to try again.","relink_hint_linked":"If this Echo stops answering, re-link it. It won't respond for about a minute while it re-links.","relink_success":"Re-link started. It can take a minute to show as linked.","relinking":"Re-linking…","save":"Save","save_error":"Couldn't save these settings","save_success":"Settings saved","saving":"Saving…"},"devices":{"assign_profile":"Assign profile","assign_profile_description":"Choose a profile to apply to the selected devices.","assign_profile_error":"Couldn't assign the profile","assign_profile_partial_error":"Couldn't update {count} devices","assign_profile_placeholder":"Organization default","assign_profile_success":"Profile assigned to {count} devices","assign_profile_title":"Assign profile","cancel":"Cancel","clear":"Clear selection","column_health":"Health","column_last_heard":"Last heard","column_name":"Name","column_profile":"Profile","column_property":"Property","column_status":"Status","empty":"No Echo devices yet. Add one to get started.","never_heard":"Never","save":"Save","saving":"Saving…","select_all":"Select all devices","select_row":"Select device","selected_count":"{count} selected","status_linked":"Linked","status_pending":"Waiting for Amazon link","title":"Devices"},"health_status":{"checked":"Checked {time}","not_set_up":"Not set up","offline":"Offline","online":"Online","unknown":"Unknown"},"page":{"add_echo":"Add Echo","privacy_note_body":"Voice requests are not recorded by SuiteOp. Guests hear only information from your guest portal.","privacy_note_title":"Guest voice privacy","supported_devices":"Works with Amazon Echo, Echo Dot, Echo Show and other Alexa-enabled speakers."},"profile":{"default_conflict":"Another profile was just made the default. Refresh and try again.","default_required":"Set another profile as the default before deleting this one."},"profile_dialog":{"ai_instructions_hint":"Adds context only. It can't unlock codes or Wi-Fi.","ai_instructions_label":"AI instructions","ai_instructions_placeholder":"e.g. Mention the rooftop pool is open until 10pm.","cancel":"Cancel","create_success":"Profile created","create_title":"New profile","default_description":"New Echo devices use this profile unless one is set on the device.","default_label":"Default profile","description":"Profiles give Echo devices a shared greeting and AI instructions.","edit_title":"Edit profile","greeting_hint":"Use '{firstName}' and '{propertyName}' to personalize the greeting.","greeting_label":"Greeting template","greeting_placeholder":"Welcome, '{firstName}'! You're checked into '{propertyName}'.","name_label":"Name","name_placeholder":"e.g. Downtown lofts","save":"Save","save_error":"Couldn't save this profile","saving":"Saving…","show_settings":{"title":"Echo Show display","description":"Controls what Echo Show devices using this profile display: the welcome card on the home screen, and the photos and offers shown when a guest opens the skill.","welcome_card_label":"Welcome card","gallery_enabled_label":"Photo gallery","gallery_max_label":"Photos to show","offers_label":"Offers","offers_off":"Off","offers_featured":"Featured only","offers_featured_and_special":"Featured and special offer"},"update_success":"Profile updated"},"profiles":{"default_badge":"Default","delete":"Delete","delete_confirm_description":"Devices using this profile will fall back to the organization default.","delete_confirm_title":"Delete profile?","delete_error":"Couldn't delete this profile","delete_success":"Profile deleted","edit":"Edit","empty":"No profiles yet. Create one to give your Echo devices a shared greeting and AI instructions.","new_profile":"New profile","title":"Profiles"}},"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","booking_sites":"Booking sites"}},"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","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","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","cleanings_reviewed":"{attributed} of {total} cleanings","inspections_reviewed":"{attributed} of {total} inspections","jobs_reviewed":"{attributed} of {total} jobs","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","remove_attribution":"Remove credit","remove_attribution_title":"Remove this credit?","remove_attribution_description":"This review stops counting toward the cleanliness score for {name}. Removing a credit is permanent — it cannot be added back later.","remove_attribution_success":"Credit removed","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"},"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.","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}}.","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 kept on canceled bookings","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":"Of guests who opened the portal","guest_revenue_per_stay":"Guest revenue per stay","guest_revenue_per_stay_sub":"Per stay whose guest opened the portal","revenue_per_stay":"Store revenue per stay","revenue_per_stay_sub":"Store purchases only, per stay whose guest opened the portal","portal_reach":"Portal reach","portal_reach_sub":"Stays whose guest opened the portal","aov":"Average order value","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":"Of guests offered protection","deposits_held":"Currently on hold","deposits_held_sub":"Card holds still open today — 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","frame_hint":"Guests checking in during this period. Each stage counts guests on its own, so a later stage can be larger than an earlier one.","portal_openers":"Opened the portal","offer_openers":"Opened an offer","checkout_stays":"Started checkout","purchasing_stays":"Bought","purchasing_stays_hint":"Guests who bought, whether or not a portal visit was recorded. Approved purchases count before the payment is captured.","purchases":"Purchased","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}}","openers_without_offers":"{count, plural, zero {No guests opened the portal at properties with no offers available} one {# guest opened the portal at a property with no offers available} two {# guests opened the portal at properties with no offers available} few {# guests opened the portal at properties with no offers available} many {# guests opened the portal at properties with no offers available} other {# guests opened the portal at properties with no offers available}}","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","internal_excluded_with_purchase_count":"{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}} excluded","not_tracked_before":"Not tracked before {date}","revenue_over_time":"Store revenue over time","revenue_frame":"By guest check-in date, the same stays as the revenue tiles."},"table":{"title":"Per offer","col_offer":"Offer","col_portal_openers_hint":"Guests who opened the portal at properties where this offer is assigned.","col_saw":"Saw","col_opened":"Opened","col_rate":"Saw → bought, per guest","col_revenue":"Revenue","deleted_upsell":"Deleted offer","deleted_group":"Removed offers","unnamed":"Untitled offer","rate_low_volume":"n/a — {count, plural, zero {no guests saw it} one {# guest saw it} two {# guests saw it} few {# guests saw it} many {# guests saw it} other {# guests saw it}}","not_tracked_note":"Portal, offer and checkout columns and the rate are not tracked before {date}."},"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":"Industry benchmark: 2–7 days before check-in","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.","portal_tracked_since":"Portal visits tracked from {since}","reason_no_portal_stays":"No guest opened the portal during this period.","reason_no_offered_stays":"No guest was offered protection during this period.","collecting":"{collected} of {needed} guests have opened the portal 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","no_store_title":"No store set up","no_store_body":"Attach rate and store revenue per stay appear once you have a live offer in your guest store.","no_store_cta":"Set up your store","incomplete_window":"This period isn't over yet, so it can still grow. Compared with the same period last year.","incomplete_window_no_comparison":"This period isn't over yet, so it can still grow.","delta_points":"{value} pts"}},"financials":{"sections":{"costs_title":"Costs","costs_description":"What you spent — operating costs billed to tasks, with budget and approval status."}},"booking_sites":{"description":"How visitors find, browse and book on your booking site. Days are counted in UTC.","site_label":"Booking site","no_sites":"No booking sites yet","range_required":"Choose a date range to see this site's analytics.","empty":"No visits or bookings in this period","kpis":{"sessions":"Sessions","conversion_rate":"Conversion rate","conversion_rate_hint":"Confirmed bookings divided by sessions","bookings":"Confirmed bookings","revenue":"Booked revenue ({currency})","revenue_hint":"Includes bookings cancelled or refunded later.","avg_booking_value":"{value} average per booking","lead_time":"Median lead time","length_of_stay":"Median length of stay","days":"{count, plural, one {# day} other {# days}}","nights":"{count, plural, one {# night} other {# nights}}"},"funnel":{"title":"Booking funnel","description":"From the first visit to a confirmed booking.","sessions":"Sessions","searches":"Searches","listing_views":"Listing views","checkouts":"Checkouts started","bookings":"Confirmed bookings","step_rate":"{rate} of the previous step"},"daily":{"sessions_title":"Sessions per day","bookings_title":"Confirmed bookings per day","sessions":"Sessions","bookings":"Bookings"},"channels":{"title":"Channels","description":"Sessions by how visitors arrived, and bookings by their last visit before booking.","col_channel":"Channel","col_sessions":"Sessions","col_bookings":"Bookings","col_conversion":"Conversion","col_revenue":"Booked revenue","geo_hint":"Visits from AI assistants such as ChatGPT, Perplexity, Gemini, Copilot and Claude. This is your generative engine optimization (GEO) traffic.","labels":{"ai_assistant":"AI assistant","ai_agent_mcp":"AI agent (booked through MCP)","paid_search":"Paid search","paid_social":"Paid social","organic_search":"Organic search","organic_social":"Organic social","email":"Email campaigns","referral":"Referral","direct":"Direct"}},"sources":{"title":"Booking sources","description":"The source and medium of the last visit before each confirmed booking.","col_source":"Source","col_medium":"Medium","col_bookings":"Bookings","col_revenue":"Booked revenue","direct":"Direct"},"landing_pages":{"title":"Top landing pages","description":"The first page of each session. Pages that share a pattern, such as listing pages, are grouped.","col_page":"Page","col_sessions":"Sessions"},"listings":{"title":"Top listings","col_listing":"Listing","col_views":"Views","col_quotes":"Quotes","col_bookings":"Bookings","unknown":"Listing no longer available"},"devices":{"title":"Devices","desktop":"Computer","mobile":"Phone","tablet":"Tablet device"},"countries":{"title":"Countries","col_country":"Country","col_sessions":"Sessions"},"crawlers":{"title":"Crawler visits","description":"Page fetches by bots that identified themselves. Self-identified, not verified.","hits":"Page fetches","kinds":{"ai_search":"AI search","ai_user":"AI assistant, on a user's request","ai_training":"AI training","search":"Search engine"}},"search_console":{"title":"Google Search Console","description":"How this site shows up in Google Search.","connect":"Connect Search Console","connect_description":"Connect a Google account that can see this site's Search Console property. SuiteOp only gets read access.","connect_error":"Couldn't start the Google connection. Try again.","read_only":"Search Console isn't connected. Ask someone who manages booking sites to connect it.","disabled":"Search Console is turned off for this site.","disabled_read_only":"Search Console is turned off for this site. Ask someone who manages booking sites to turn it on.","enable":"Turn on Search Console","enable_error":"Couldn't turn on Search Console. Try again.","reconnect":"Reconnect Google","reauth_description":"Google access expired or was removed. Reconnect to keep seeing search data.","reauth_read_only":"Google access expired or was removed. Ask someone who manages booking sites to reconnect it.","needs_property_read_only":"Search Console is connected, but no property has been chosen yet.","property_label":"Search Console property","property_placeholder":"Select a property","property_description":"Choose the property that matches this booking site's domain.","property_forbidden":"The connected Google account can't read this property. Choose another one.","no_properties":"This Google account has no verified Search Console property. Add the site in Search Console, or reconnect with another account.","change_property":"Change property","saved":"Search Console property saved","save_error":"Couldn't save the property. Try again.","connected_as":"connected as {email}","data_through":"data through {date}","no_data":"No search data for this period yet","clicks":"Clicks","impressions":"Impressions","ctr":"Click-through rate","position":"Average position","clicks_per_day":"Clicks per day","impressions_per_day":"Impressions per day","top_queries":"Top search queries","top_pages":"Top pages in search","col_query":"Search query","col_page":"Page","sitemaps":"Submitted sitemaps","no_sitemaps":"No sitemap has been submitted for this property.","sitemap_summary":"{submitted, plural, one {# URL submitted} other {# URLs submitted}}","sitemap_errors":"{count, plural, one {# error} other {# errors}}","indexing_title":"Indexed pages (sample)","indexing_loading":"Checking a sample of pages with Google…","indexing_summary":"{indexed} of {sampled} sampled pages are indexed","indexing_checked":"Checked on {date}","indexing_unavailable":"No sample available yet."}},"backup_code_saves":{"title":"Guests saved by backup codes","subtitle":"Reservations a backup code was swapped in for, by swap date","empty":"No backup codes needed this period","previous_period":"Previous period: {count}","open_list":"Show the reservations saved by backup codes","top_properties":"Top properties: {names}","no_property":"No property","list_title":"Reservations saved by backup codes","list_description":"{count, plural, one {# reservation} other {# reservations}} in this period, newest swap first","no_confirmation_code":"No confirmation code","triggers":{"automatic":"Automatic","guest":"Guest","property_manager":"Manager","unknown":"Unknown"},"columns":{"reservation":"Reservation","property":"Property","trigger":"Triggered by","swapped_at":"Swapped"}}},"approvals":{"title":"Costs & Approvals","tab":{"tasks":"Tasks & Payments","financial":"Financial","time_off":"Time Off","timesheets":"Timesheets"},"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}}. Approved costs are marked ready to sync; a task is released once every cost on it is approved. Shifts are 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","over_allowance":"Over their allowance by {amount}","unlimited_balance":"Unlimited policy"},"no_permission":"You don't have permission to view approvals. Contact your organization administrator.","tasks":{"group":{"attention":"Needs attention","cleared":"Auto-cleared","done":"Done","shared":"Shared with you","waiting":"Waiting for approval","none":{"department":"No department","property":"No property","member":"Unassigned"},"flagged_count":"Flagged: {count}"},"empty":{"attention":"Every completed task cleared on its own.","cleared":"Nothing auto-cleared right now.","done":"No tasks approved in the last 30 days.","filtered":"No tasks match the current filters.","waiting":"Nothing is waiting for approval."},"showing_partial":"Showing {shown} of {total}","load_more":"Load more","load_more_failed":"Couldn't load more. Try again.","approve":"Approve","view":"View","approve_all":"Approve all","approve_loaded":"{count, plural, one {Approve the # loaded} other {Approve the # loaded}}","approve_failed":"Approval failed. Try again.","review_selected":"{count, plural, one {Review # task} other {Review # tasks}}","selected_count":"{count, plural, one {# task selected} other {# tasks selected}}","selected_over_limit":"{count, number} selected — approve or decline up to {max, number} at a time","unassigned":"Unassigned","untitled":"Untitled task","col":{"tasker":"Tasker","status":"Status","task":"Task","property":"Property","time":"Time","cost":"Cost","billable":"Billable","actions":"Actions"},"table":{"select_all":"Select all","select_row":"Select {name}","expand_all":"Show all cost lines","collapse_all":"Hide all cost lines","expand_row":"Show cost lines for {name}","collapse_row":"Hide cost lines for {name}"},"status":{"needs_review":"{count, plural, one {Needs review (#)} other {Needs review (#)}}","auto_cleared":"Auto-cleared","approved":"Approved","declined":"Declined"},"auto_cleared_reason":"Nothing unusual: no money beyond payroll, time close to the estimate, requirements met, time untouched.","flag":{"money":"Carries money beyond payroll — contractor pay, materials or expenses.","variance":"Tracked time is more than 50% off the estimate.","override":"Completed with unmet requirements.","ai_flagged":"{count, plural, one {# photo flagged by AI.} other {# photos flagged by AI.}}","edited_time":"Time edited by someone other than the worker.","auto_clock_out":"The worker was clocked out automatically.","cancelled":"Cancelled, but it carries a cost — time already worked or materials bought."},"time":{"allotted":"Estimate {duration}","no_estimate":"No estimate"},"cost_caption":{"payroll":"Payroll","on_approval":"Pay run on approval","owed":"Owed","in_run":"In a pay run","held":"Held","paid":"Paid","not_paid":"Not paid","no_payouts":"Payouts not set up","before_payouts":"Before payouts started","paid_elsewhere":"Paid outside SuiteOp","awaiting_payout_account":"No payout account","before_payout_account":"Before payout account","timesheet_pending":"Waiting on timesheet","timesheet_approved":"Approved in timesheet"},"pay_status":{"payroll":"Payroll","on_approval":"Goes in the next pay run once approved","owed":"Owed — goes in the next pay run","in_run":"In a pay run","held":"Held: {reason}","held_no_reason":"Held","paid":"Paid","not_paid":"Not paid — the task was declined","no_payouts":"Not paid through SuiteOp — payouts aren't set up","before_payouts":"Not paid through SuiteOp — the work predates payouts","paid_elsewhere":"Not in pay runs — paid outside SuiteOp","awaiting_payout_account":"Not paid through SuiteOp: they have no payout account, so pay this work outside SuiteOp. To put it in a pay run, open their profile, Compensation, set Paid through SuiteOp to On and tick “Also pay their earlier approved, unpaid work”.","before_payout_account":"Not paid through SuiteOp: done before they set up a payout account, so pay it outside SuiteOp. To put it in a pay run, open their profile, Compensation, set Paid through SuiteOp to On and tick “Also pay their earlier approved, unpaid work”.","timesheet_pending":"Paid with the timesheet — not approved yet","timesheet_approved":"Approved in the timesheet"},"lines":{"line":"Cost line","member":"Member","internal":"Internal","billable":"Billable","bill_to":"Bill to","pay":"Pay","no_cost":"No cost attached to this task."},"routing":{"owner":"Owner statement","owner_hint":"Charged on the owner's statement","guest":"Guest","recovered":"Billed another way","recovered_hint":"Already recovered — nothing to sync","absorbed":"Absorbed","absorbed_hint":"We cover it — counts as our cost","unrouted":"Not routed","change":"Change where this is billed","read_only":"Only members who can edit task costs can change this.","with_reason":"{billTo} · {reason}","reason_title":{"recovered":"How is this already billed?","absorbed":"Why are we absorbing this?"},"reason_description":{"recovered":"The cost is recovered, just not through the owner's statement, so nothing syncs. Recording how keeps it out of your absorbed total.","absorbed":"Absorbed means nobody pays it back — it counts as your own cost. If you recover it another way, choose Billed another way instead."},"reason_label":"Reason","save":"Save","cancel":"Cancel","update_failed":"Couldn't change where this is billed. Try again.","reason":{"kept_from_booking_revenue":"Kept from booking revenue","covered_by_management_fee":"Covered by the management fee","invoiced_to_owner_separately":"Invoiced to the owner separately","part_of_recurring_charge":"Part of a recurring charge","charged_to_guest":"Charged to the guest (deposit or damage claim)","our_error":"Our error","goodwill":"Goodwill","quality_issue":"Quality issue","insufficient_documentation":"Insufficient documentation"}},"summary":{"title":"{count, plural, one {Approve # task} other {Approve # tasks}}","description":"Here is what happens when you confirm.","destination":"Destination","effect":"What happens","amount":"Amount","contractor":"Team pay","contractor_effect":"Goes in the next pay run","owner":"Owner statement","owner_effect":"Billed to the property owner","recovered":"Billed another way","recovered_effect":"Already recovered — nothing to sync","absorbed":"Absorbed","absorbed_effect":"Counts as our own cost","unrouted":"Not yet routed","unrouted_effect":"Billable, but no routing chosen yet","nothing":"No money moves — this only records the review.","confirm":"{count, plural, one {Approve # task} other {Approve # tasks}}","cancel":"Cancel"},"drawer":{"title":"Task","description":"Review the task's flags, time and cost lines, then approve it.","completed":"Completed {date}","flags":"Why it needs a look","open_task":"Open task","declined":"Why it was declined","declined_note":"Not paid, and not billed to the owner.","cancelled":"Cancelled {date}","assignee_contractor":"<chip>{name}</chip> · contractor","time_vs_estimate":"{actual} · estimate {estimate}","time_no_estimate":"{actual} · no estimate","see_photos":"See photos","ai_none_flagged":"{count, plural, one {AI checked # photo — none flagged.} other {AI checked # photos — none flagged.}}","money":{"label":"Who is paid and who is billed","pay":"Pay","pay_member":"{name}'s pay","other":"Other costs","owner":"Owner is charged","owner_caption":"On the owner statement","guest":"Guest is charged"},"flag":{"variance":"Took {actual} against a {estimate} estimate ({deviation}).","ai_photo":"{checked, plural, one {AI flagged {flagged} of the # photo it checked.} other {AI flagged {flagged} of the # photos it checked.}}","money_both":"Carries money beyond payroll: {pay} of contractor pay and {other} of other costs.","money_pay":"Carries money beyond payroll: {pay} of contractor pay.","money_other":"Carries money beyond payroll: {other} of other costs."},"table":{"what":"What","cost":"Cost","billable":"Billable","billed_to":"Billed to","total":"Total","guest_caption":"Charged to the guest"},"approve":{"pays_bills":"Approve · pays {pay}, bills {bill}","pays":"Approve · pays {pay}","bills":"Approve · bills {bill}"}},"group_by":{"label":"Group by","option":"Group by: {by}","status":"Status","department":"Department","property":"Property","member":"Assignee"},"ai_verified":"Photos verified by AI: {count}.","decline":{"action":"Decline","undo":"Undo decline","undo_failed":"Couldn't undo the decline. Try again.","title":"{count, plural, one {Decline this task?} other {Decline the selected tasks (#)?}}","description":"The work won't be paid and nothing is billed to the owner. The amounts stay on record, and you can undo this.","reason_label":"Reason","reason_placeholder":"What was wrong with the work?","confirm":"Decline","in_pay_run":"This task's pay is already in a pay run or paid, so it can't be declined. Adjust it in the pay run instead.","failed":"Couldn't decline. Try again.","partial":"{declined} of {total} declined — the rest can no longer be declined.","blocked":{"in_run":"Its pay is already in a pay run","paid":"Its pay has already been paid","exported":"It has already been exported to payroll"}}},"timesheets":{"group":{"attention":"Needs attention","cleared":"Auto-cleared","in_progress":"In progress","done":"Approved"},"empty":{"attention":"Nothing needs a look in this period.","cleared":"No timesheets waiting in this period.","in_progress":"No hours logged in this period yet.","done":"No approved timesheets in this period yet.","filtered":"No timesheets match these filters."},"period":{"previous":"Previous pay period","next":"Next pay period","closed":"Ended","in_progress":"In progress — approve once it ends"},"col":{"member":"Team member","status":"Status","days":"Days","worked":"Worked","breaks":"Breaks","time_off":"Time off","cost":"Cost","billable":"Billable","actions":"Actions"},"table":{"select_all":"Select all","select_row":"Select {name}"},"status":{"needs_review":"{count, plural, one {Needs review (#)} other {Needs review (#)}}","auto_cleared":"Auto-cleared","approved":"Approved","in_progress":"In progress"},"auto_cleared_reason":"Clocked time with nothing unusual.","flag":{"auto_clock_out":"Clocked out automatically on at least one day.","edited":"Time was edited by someone other than the worker.","open_entry":"Still clocked in — an entry has no end time.","no_rate":"Hours worked, but no pay was calculated. Check this person's pay rate.","time_off_pending":"A time-off request in this period is waiting for a decision."},"unnamed":"Unnamed member","approve":"Approve","view":"View","approve_all":"Approve all","approve_selected":"{count, plural, one {Approve # timesheet} other {Approve # timesheets}}","selected_count":"{count, plural, one {# timesheet selected} other {# timesheets selected}}","approve_failed":"Approval failed. Try again.","drawer":{"title":"Timesheet","description":"Review this person's time for the pay period, then approve it.","flags":"Why it needs a look","flag":{"auto_clock_out":"Clocked out automatically on {day} — the clock ran until {time}. Set the real end time.","edited":"Time was edited by someone other than {name} ({editor}, {day}).","open_entry":"Still clocked in since {when}.","time_off_pending":"A time-off request in this period is waiting for a decision ({policy}, {dates}, {hours})."},"go_to_day":"Go to {day}","review_request":"Review request","days":"Days","expand_all":"Expand all","collapse_all":"Collapse all","no_entries":"No clocked time in this period.","totals":"Period totals","pay":"Pay","pending_value":"{value} · pending","worked":"{value} worked","pay_total":"{value} pay","billable_total":"{value} billable","day_flag":{"auto_clock_out":"Auto clock-out","edited":"Edited","open_entry":"Still clocked in","no_rate":"No pay rate","time_off_pending":"Time off pending"},"table":{"time":"Time","hours":"Hours","task":"Task","pay":"Pay","billable":"Billable"},"still_clocked_in":"still clocked in","not_on_task":"Not on a task","untitled_task":"Untitled task","entry_type":{"work":"Work","paid_break":"Paid break","unpaid_break":"Unpaid break"},"earlier_period":"Hours tracked in an earlier period","flat_rate":"Flat rate","rate":"{rate}/hr","rate_times":"{rate}/hr × {duration}","billable_rate":"≈ {rate}/hr","pay_note":{"task_open":"Priced when the task is completed","task_other_period":"Paid in the period the task was completed","no_rate":"No pay rate"},"edited_by":"Edited by {name}","edit":"Edit this entry","auto_clock_out_hint":"The clock was never stopped, so it ran until {time}. Set the real end time.","set_end_time":"Set real end time","time_off":"Time off","time_off_request":{"pending":"Time-off request · not decided yet","approved":"Approved"},"time_off_status":{"approved":"Approved","pending":"Pending"},"supply":{"not_pay":"cost, not pay","link":"In Tasks & Payments"},"day_total":"Day total","day_note":{"paid_break":"+ {value} paid break","unpaid_break":"+ {value} unpaid break","time_off":"+ {value} time off","time_off_pending":"+ {value} time off (pending)","supplies":"supplies {value} approved in Tasks & Payments"},"in_progress_note":"This pay period hasn't ended yet. It can be approved once it does.","no_pay_note":"No pay to approve: no rate is set for these hours.","approve_note":"Approving accepts every hour and pay line of this period.","export_csv":"Export CSV","approve":"Approve period","approve_pay":"Approve period · {pay} pay","approve_pay_billable":"Approve period · {pay} pay · {billable} billable","csv":{"date":"Date","start":"Start","end":"End","hours":"Hours","type":"Type","task":"Task","property":"Property","department":"Department","rate":"Pay rate","pay":"Pay","billable":"Billable","status":"Status","task_pay":"Task pay"}},"errors":{"period_open":"This pay period hasn't ended yet, so it can't be approved.","schedule_changed":"Someone's pay schedule changed since this list loaded. Reload the timesheets and try again."},"schedule":{"label":"Pay schedule","default":"Default schedule"}}},"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"},"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"}},"authority_filings":{"tiles":{"needs_you":{"label":"Needs you","hint":"Rejected or blocked"},"waiting":{"label":"Waiting for guest","hint":"No ID uploaded yet"},"sent":{"label":"Sent, awaiting reply","hint":"Usually answered in minutes"},"accepted":{"label":"Accepted","hint":"Last {days} days"}},"toolbar":{"search_placeholder":"Guest, property or reservation #","search_label":"Search filings","authority":"Authority:","property":"Property:","all":"All","export_csv":"Export CSV","export_selected":"Export selected ({count})"},"group_hint":{"text":"{count} of these are fixed by one action: updating the {authority} login refiles {names} automatically.","action":"Update {login} login"},"table":{"select_all":"Select all stays","select_row":"Select {name}’s stay","stay":"Stay","property":"Property","check_in":"Check-in","deadline":"Deadline","what_happened":"What happened","actions":"Actions","empty_filtered":"No stays match these filters.","empty":{"needs_you":"Nothing needs you right now.","waiting":"No guest is missing an ID.","sent":"Nothing is waiting on an authority.","accepted":"No stays accepted in the last {days} days."},"truncated":"Showing the first {shown} of {total} stays, here and in the export. Narrow the filters to see the rest."},"csv":{"booking_ref":"Reservation #","authority":"Authority","channel":"Channel","reason":"Reason","authority_message":"Authority message"},"channel":{"direct":"Direct"},"deadline":{"hours_left":"{count}h left","days_left":"{count, plural, one {# day left} other {# days left}}","missed":"Missed","filed":"Filed"},"status":{"blocked":"Blocked","rejected":"Rejected","waiting_guest":"Waiting","sent":"Sent","accepted":"Accepted"},"reason":{"login_rejected":"{login} login rejected","code_refused":"Property code refused","no_login":"{login} has no login","guest_no_id":"No ID uploaded yet","not_registered":"Property not registered","field_refused":"Guest details refused","not_sent":"Ready to send"},"action":{"update_login":"Update login","connect_login":"Connect login","fix_code":"Fix code","edit_guest":"Edit guest","set_up":"Finish setup","send_now":"Send now","sending":"Sending…"},"toast":{"resent":"Resent to {authority}. The answer usually arrives within minutes.","sent":"Sent to {authority}. The answer usually arrives within minutes.","already_filed":"Already filed with {authority}. Nothing was sent again."},"sheet":{"close":"Close","title_with_guests":"{name} + {count, plural, one {# guest} other {# guests}}","dates":"{from} → {to}","alert":{"title":{"rejected":"{authority} rejected this stay on {date}","blocked":"We couldn’t send this stay to {authority}","waiting_guest":"Waiting for {name} to upload an ID","sent":"Sent to {authority} on {date}","accepted":"{authority} accepted this stay on {date}","not_sent":"Not sent to {authority} yet"},"body":{"login_rejected":"{authority} refused the saved login, so nothing can be sent. Update it and this stay is refiled automatically.","no_login":"There’s no {authority} login yet. Connect one and this stay is filed automatically.","code_refused":"{authority} didn’t accept this property’s {codeName}. Fix the code and the stay is resent.","guest_no_id":"The stay is filed as soon as {name} uploads an ID.","sent":"Usually answered in minutes. There’s nothing for you to do.","accepted":"Nothing left to do for this stay.","not_registered":"This property isn’t registered with {authority} yet. Finish its setup so its stays can be filed.","document_number":"{authority} refused {name}’s document number. Correct it below and resend.","birth_date":"{authority} refused {name}’s birth date. Correct it below and resend.","field_refused":"{authority} refused a guest detail without saying which one.","not_sent":"{name}’s ID is in and nothing blocks this stay any more, but it hasn’t been sent to {authority} yet."},"authority_said":"Authority said:","title_undated":{"rejected":"{authority} rejected this stay","sent":"Sent to {authority}","accepted":"{authority} accepted this stay"}},"guest":{"meta_lead":"Lead guest · {document}","meta_minor":"{age, plural, one {# year old} other {# years old}} · {document}","no_issues":"No issues","field":{"birth_date":"Birth date","document_number":"Document number"},"document":"{type} ending {last4}","document_type":{"PASSPORT":"Passport","NATIONAL_ID":"National ID","FOREIGNER_RESIDENCY_PERMIT":"Residence permit","SPANISH_RESIDENCE_PERMIT":"Spanish residence card","other":"ID document"},"unchanged":"This is the value {authority} refused.","pick":{"title":"Correct the refused detail","guest":"Guest","field":"Detail","value":"Corrected value","hidden_guest":"Guest {number} (name hidden)"},"hidden_name":"Name hidden","meta_lead_hidden":"Lead guest","hidden_details":"Details hidden"},"after":{"title":"After you resend","send":"We send the corrected report to {authority} through GuestAdmin","wait":"The stay shows “Sent, awaiting reply” — you can close this","notify":"It moves to Accepted, or back to Needs you with the new reason"},"footer":{"resend":"Resend to {authority}","update_login":"Update login","connect_login":"Connect login","fix_code":"Fix code","set_up":"Finish setup","sending":"Sending…","send_now":"Send now"},"loading":"Loading stay…"}},"authority_overview":{"funnel":{"title_week":"Stays this week","title_days":"Stays in the last {days} days","subtitle":"Where every stay that checked in stands now. Click a group to see who’s stuck.","on_time":"filed before the deadline","headline":"of {total} accepted by the police","empty":"No guests checked in during this period.","segment":{"rejected":"Rejected","blocked_setup":"Blocked by setup","not_sent":"Ready to send","waiting_guest":"Waiting for the guest","awaiting":"Sent, awaiting answer"}},"at_risk":{"title":"Stays late or about to miss the deadline","see_all":"See all {count, plural, one {# open stay} other {# open stays}}","empty":"Nothing at risk. Every stay due soon is filed or on its way.","open":"Open {guest}’s stay"},"countdown":{"hours":"{hours}h","days":"{days}d","left":"left","late":"late"},"guest_plus":"{name} + {count}","reason":{"login_rejected":"{authority} rejected your login on {date}","login_rejected_undated":"{authority} rejected your login","code_refused":"{authority} refused this property’s {code}","no_login":"{realm} has no login yet, so we can’t file","not_registered":"This property isn’t registered with {authority} yet","guest_no_id":"Guest hasn’t completed online check-in yet","field_refused":"{authority} refused the guest details","not_sent":"Ready to send — nothing blocks it any more"},"reason_long":{"login_rejected":"The {realm} login stopped working on {date}, so the portal refuses it. Update the login so we can file this stay.","login_rejected_undated":"The {realm} login stopped working, so the portal refuses it. Update the login so we can file this stay.","code_refused":"{authority} refused this property’s {code}: “{message}”. Fix the code so we can file this stay.","code_refused_unquoted":"{authority} refused this property’s {code}. Fix the code so we can file this stay.","no_login":"{realm} has no login yet. Connect one so we can file this stay.","not_registered":"This property isn’t registered with {authority} yet. Register it so we can file this stay.","guest_no_id":"{guest} hasn’t completed online check-in yet. We file as soon as their details arrive.","field_refused":"{authority} refused the guest details: “{message}”. Check them against the ID photo and send the stay again.","field_refused_unquoted":"{authority} refused the guest details. Check them against the ID photo and send the stay again.","not_sent":"The guest’s details are in and nothing blocks this stay any more, but it hasn’t been sent yet. Send it now."},"action":{"update_login":"Update login","connect_login":"Connect login","fix_code":"Fix code","set_up":"Register property","edit_guest":"Fix guest details","open_reservation":"Open reservation","send_now":"Send now","sending":"Sending…"},"action_long":{"update_login":"Update {realm} login","connect_login":"Connect {realm} login","fix_code":"Fix code","set_up":"Register property","edit_guest":"Fix guest details","open_reservation":"Open reservation","send_now":"Send now"},"time":{"today":"Today {time}","yesterday":"Yesterday {time}","tomorrow":"Tomorrow {time}","on_day":"{day} {time}"},"setup":{"title":"Setup","finish":"Finish","can_file":"of {total} properties can file","properties":"{count, plural, one {# property} other {# properties}}","missing":{"codes":"Missing codes","logins":"Missing logins","addresses":"Missing addresses","refused":"Refused by the authority","ready":"Ready to register"}},"new_properties":{"title":"{count, plural, one {# new property} other {# new properties}} from {source}","source_direct":"SuiteOp","source_pms":"your PMS","more":"{count, plural, one {# more} other {# more}}","body":"{names} {count, plural, one {was matched to its authority.} other {were matched to their authorities.}}","needs_code":"{count, plural, one {It just needs its code.} other {Each just needs its code.}}","some_need_code":"{count, plural, one {# still needs its code.} other {# still need their codes.}}","add_codes":"{count, plural, one {Add # code} other {Add # codes}}","all_ready":"{count, plural, one {It’s ready to register.} other {They’re all ready to register.}}","some_ready":"{count, plural, one {# is ready to register.} other {# are ready to register.}}","register":"{count, plural, one {Register # property} other {Register # properties}}"},"by_authority":{"title":"By authority","empty":"No authority to report to yet.","ready":"{ready} / {total}","col":{"authority":"Authority","ready":"Properties ready","filed":"Guests filed","accepted":"Accepted","login":"Login","open":"Open"},"login":{"key_per_unit":"Key per unit","rejected":"Rejected {date}","rejected_undated":"Rejected","not_connected":"Not connected","count":"{count, plural, one {# login} other {# logins}}"}},"drawer":{"loading":"Loading the stay","title_with_guests":"{name} + {count, plural, one {# guest} other {# guests}}","open_reservation":"Open reservation","close":"Close","status":{"blocked":"Not filed yet","rejected":"Refused by the police","waiting":"Waiting for the guest","sent":"Sent, waiting for the authority’s answer","accepted":"Accepted by the police"},"due_today":"today {time}","due_tomorrow":"tomorrow {time}","due_on":"{date} {time}","due":"Due {due} · {hours}h left","overdue":"Deadline passed · {when}","guests":"Guests","guests_complete":"{done} of {total} complete","no_guests":"No guest details yet. They arrive when the guest completes online check-in.","activity":"Activity"},"guest":{"lead":"Lead guest · {document}","minor":"Minor, age {age} · {document}","document":"{type, select, PASSPORT {Passport} NATIONAL_ID {National ID} FOREIGNER_RESIDENCY_PERMIT {Residence permit} SPANISH_RESIDENCE_PERMIT {Spanish residence permit} other {ID document}}","id_verified":"ID verified","details_collected":"Details collected","refused":"{field, select, birth_date {Date of birth refused} other {Document number refused}}"},"activity":{"blocked":"Couldn’t file","refused":"Filing refused","quoted":"{when} · “{message}” from {portal}","same_error":"{when} · same error","refiled":"Sent again","refiled_detail":"{when} · corrected and sent to {authority}","sent":"Sent to the police","sent_detail":"{when} · sent to {authority}","accepted":"Accepted","accepted_detail":"{when} · accepted by {authority}","checked_in":"Check-in completed","checked_in_detail":"{when} · {count, plural, one {# guest’s details} other {# guests’ details}} collected online","booked":"Booked","booked_detail":"{date} · {channel}"}},"authority_reporting":{"title":"Authority reporting","subtitle":"Register every guest with the police, without opening a single government portal.","sheet_title":"Registration sheet","tabs":{"label":"Authority reporting sections","overview":"Overview","setup":"Setup","filings":"Filings","logins":"Logins","setup_left":"{count} left","count_unavailable":"Count unavailable"},"period":{"last_7_days":"Last 7 days","last_30_days":"Last 30 days","last_90_days":"Last 90 days"},"login_name_taken":"Another login for this authority already has that name.","login_not_used":"SIBA has no shared login. Each unit’s access key goes on the unit.","login_authority_fixed":"A saved login can’t move to another authority. Add a new login instead.","login_mismatch":"That login belongs to a different authority than this property.","missing_code":"Add the registration code first.","no_authority":"We can’t tell which authority this property reports to. Add its street address.","refile_refused":"This stay can’t be sent yet. Fix what’s blocking it first.","unknown_guest":"That guest isn’t on this stay any more. Reload and try again.","guest_admin_no_property_id":"GuestAdmin created the property but didn’t return its id. Try again in a minute.","demo_org_refused":"Demo organizations can’t send anything to the authorities.","org_muted_refused":"Sending to the authorities is paused for this organization."},"authority_setup":{"open_sheet":"Open registration sheet","hero":{"of_total":"/ {total}","label":"{count, plural, one {property is registered with its authority} other {properties are registered with their authority}}","explain":"The other {count} can’t send guests to the police yet. {tasks, plural, =0 {Once the authorities confirm, you’re done.} =1 {The task below fixes all of them.} other {The # tasks below fix all of them.}}"},"legend":{"registered":"Registered","needs_code":"Needs a code or login choice","needs_login":"Needs a login","needs_address":"Needs an address","pending":"Waiting for the authority","ready":"Ready to send"},"auto_done":{"title":"Already done by SuiteOp","review":"Review matches","matched_authorities":{"title":"Matched {count, plural, one {# property} other {# properties}} to their authority","detail":"From each property’s street address"},"id_step":{"detail":"Guests upload ID and fill police fields at check-in","title":"The ID step is on {count} of {total, plural, one {# check-in portal} other {# check-in portals}}"},"id_step_missing":{"title":"No check-in portal collects guest IDs yet","detail":"Add the authority reporting step to a portal so guests upload ID and fill the police fields at check-in.","action":"Open verification steps"}},"tasks":{"heading":"Finish setup","ordered_by":"Ordered by how many properties each task unblocks","unblocks":"Unblocks {count, plural, one {# property} other {# properties}}","expand":"Show details","collapse":"Hide details","logins":{"title":"Connect {count, plural, one {# more authority login} other {# more authority logins}}","description":"One login per authority covers every property in its area. {connected} of {total} are connected.","connected":"Connected","title_fix":"Update {count, plural, one {# rejected login} other {# rejected logins}}"},"codes":{"title":"Finish registration: {count, plural, one {# property} other {# properties}}","description":"Each property needs its own code from the authority. Fill them in one sheet, paste a column, or import a CSV and we’ll match rows by address. Where an authority has several logins, choose which one each property uses."},"addresses":{"title":"Fix {count, plural, one {# address} other {# addresses}}","description":"{count, plural, one {{names} has no street number, so we can’t tell which authority it reports to.} other {{names} have no street number, so we can’t tell which authority they report to.}}","action":"Edit addresses"},"wait":{"title":"Wait for the authorities to confirm","description":"Registrations are processed by each authority, usually within 24 hours. Anything they reject shows up here with the reason.","description_pending":"{count, plural, one {# property is} other {# properties are}} waiting for the authority, usually answered within 24 hours. Anything they reject shows up here with the reason."},"ready":{"title":"Send {count, plural, one {# ready property} other {# ready properties}} to the authorities","description":"They have their code and login. Check them in the registration sheet and send them."},"done":{"title":"Every property is registered","description":"New properties show up here when they need a code or a login."}},"rows":{"properties_in":"{count, plural, one {# property} other {# properties}} in {cities}","properties_dot_cities":"{count, plural, one {# property} other {# properties}} · {cities}","connect":"Connect login","edit":"Edit","update":"Update login","rejected":"Rejected","logins":"{count, plural, one {# login} other {# logins}}","key_per_unit":"Key per unit — no login","properties":"{count, plural, one {# property} other {# properties}}","unverified":"Not verified yet"},"logins":{"heading":"Authority logins","subheading":"SuiteOp files every guest with these logins and uses them for nothing else.","connected":"Connected","used_by":"Used by {count, plural, one {# property} other {# properties}}","rejected_detail":"Rejected on {date}: “{message}”","missing":"No login yet","missing_detail":"{count, plural, one {# property can’t} other {# properties can’t}} send guests until you connect one.","add_another":"Add another login","rejected_plain":"The authority rejected this login","unverified":"Not verified yet. The authority confirms it with the next registration or filing."},"key_per_unit":{"title":"Key per unit — no login","body":"{authority} gives each unit its own access key. Add them in the registration sheet, next to each property."},"login_form":{"description_connect":"SuiteOp files guests with this login for {count, plural, one {# property} other {# properties}} in {cities}.","description_edit":"{name} · used for {count, plural, one {# property} other {# properties}}.","rejected_on":"The authority rejected this login on {date}","find_it":"Find it in","find_it_hint":"Use the web service credentials, not the login you use to browse the portal.","username":"Username","password":"Password","keep_current":"Leave blank to keep the current one","fields":{"landlord_code":{"label":"Landlord code","hint":"Código de arrendador, shown next to your web service user."},"owner_nif":{"label":"Owner NIF","hint":"The tax ID of the property owner the authority has on file."},"ws_key":{"label":"Web service key","hint":"The WSKey generated in Alloggiati Web for SuiteOp."}},"errors":{"required":"Required"},"cancel":"Cancel","save":"Save","connect":"Connect login","saved":"{authority} login saved","description_connect_count":"SuiteOp files guests with this login for {count, plural, one {# property} other {# properties}}.","description_add":"Add another login when some properties file under a different account, such as an owner’s own.","rejected":"The authority rejected this login","name":"Login name","name_hint":"Only shown in SuiteOp, to tell logins apart.","default_name":"Main","saved_sent":"{authority} login saved and sent to {count, plural, one {# property} other {# properties}}","saved_partial":"Login saved. Sent to {count, plural, one {# property} other {# properties}}.","push_failed":"{count, plural, one {# property didn’t get it} other {# properties didn’t get it}}","push_failed_hint":"These properties still file with the previous login.","done":"Done"},"empty":{"title":"No properties report to an authority","description":"Guests are reported to the police for properties in {countries}. Properties there show up here once they have a street address.","action":"Go to properties"}},"authority_sheet":{"back":"Back to setup","eyebrow":"Authority reporting · Setup","title":"Registration sheet","import_csv":"Import CSV","register":"Register {count, plural, one {# property} other {# properties}}","register_toast":"{count, plural, one {# property sent} other {# properties sent}} for registration. We’ll tell you when the authority answers.","grid_label":"Registration sheet","empty":"No properties match this view.","search":"Find a property","views":{"label":"Views","missing":"Missing info","all":"All properties","rejected":"Rejected","pending":"Pending"},"columns":{"property":"Property","address":"Address","login":"Login","code":"Registration code","landlord":"Landlord code","unit":"Unit number","key":"Access key","status":"Status"},"tags":{"from_pms":"From PMS","required":"Required","ses_only":"SES only","siba_only":"SIBA only","new":"New"},"group":{"properties":"{count, plural, one {# property} other {# properties}}","meta":"{properties} · {codeName}","meta_format":"{properties} · {codeName}, {format}","complete":"{done}/{total} complete","connect_first":"Connect the login first","connect_login":"Connect login","expand":"Show {name}","collapse":"Hide {name}"},"format":{"digits":"{count} digits","prefix_digits":"{prefix} + {count} digits","per_unit":"{codeName} per unit"},"more":{"missing":"+ {count} more missing","hidden":"{count} complete hidden by this view"},"cell":{"missing":"Missing","account_default":"Account default","not_needed":"Not needed","key_saved":"Key saved"},"issue":{"digits":"{count} digits — needs {needed}","prefix_digits":"Needs {prefix} + {count} digits","format":"Wrong format","too_long":"{column}: {max} characters max","refused":"Refused by {authority}"},"login":{"per_unit":"Key per unit","none":"Choose a login"},"status":{"ready":"Ready to register","invalid":"Fix code","missing":"Missing code","rejected":"Rejected","registered":"Registered","pending":"Pending","no_login":"Needs a login","not_sent":"Not sent"},"status_bar":{"selected":"{count, plural, one {# cell selected} other {# cells selected}}","paste":"Paste a column","fill_down":"Fill down","clear":"Clear","ready":"{count} ready to register","to_fix":"{count} to fix","missing":"{count} still missing"},"import":{"title":"Import from a spreadsheet","file_meta":"· {rows, plural, one {# row} other {# rows}} · {columns, plural, one {# column} other {# columns}}","replace":"Replace","close":"Close","read_error":"We couldn’t read that file. Save it as CSV and try again.","match":{"title":"How do we find each property?","csv_column":"Match the CSV column","to_our":"to our","fields":{"address":"Address","name":"Property name"},"forgiving":"Address matching ignores accents, “C/” vs “Calle”, and floor formats like “1ºA” vs “1 A”.","csv_column_label":"CSV column to match on","field_label":"Our field to match against"},"fill":{"title":"What should we fill in?","csv_column":"CSV column","example":"Example","goes_into":"Goes into","goes_into_label":"Where {column} goes","targets":{"code":"Registration code","landlord":"Landlord code","unit":"Unit number","key":"Access key","skip":"Don’t import"},"auto_detected":"Auto-detected","only_empty":"Only fill empty cells — never overwrite a code already entered","duplicate":"Two columns go into {target}. Choose one."},"preview":{"title":"Preview","filled":"{count, plural, one {property gets a code} other {properties get a code}}","filled_all":"Every {authority} gap","filled_but_one":"All {gaps} {authority} gaps but one","filled_some":"{count} of {gaps} {authority} gaps","filled_none":"No property matched yet","ambiguous":"{count, plural, one {matches {properties} properties} other {match more than one property}}","ambiguous_desc":"You’ll pick in the sheet","skipped":"{count, plural, one {row skipped} other {rows skipped}}","skipped_desc":"Already registered or not yours"},"footer_note":"Changes land in the sheet as a draft. Nothing is sent until you press Register.","cancel":"Cancel","fill_button":"Fill {count, plural, one {# property} other {# properties}}","toast":"Filled {count, plural, one {# property} other {# properties}} from {file}. Review, then Register.","empty_file":"{file} has no rows to import.","quote_error":"{file} has a broken quote on line {line}. Fix it in the spreadsheet and export it again.","extra_columns_error":"{file} has more values than columns on line {line}, usually a comma inside an address. Put that value in quotes, or export the file again."},"unsaved":"{count, plural, one {# unsaved change} other {# unsaved changes}}","all_saved":"All changes saved","save_draft":"Save draft","saving":"Saving…","registering":"Registering…","saved_toast":"{count, plural, one {# property saved} other {# properties saved}}. Nothing is sent until you press Register.","register_failed_toast":"{count, plural, one {# property wasn’t sent} other {# properties weren’t sent}}. The reason is on each row.","empty_none":"None of your properties report to an authority yet.","paste_truncated":"{count, plural, one {# value wasn’t pasted} other {# values weren’t pasted}}: this group has no more rows in this view.","refusal":{"registered":"Already registered","pending":"Already sent","rejected":"Refused by the authority","missing_code":"Code missing","invalid_code":"Code in the wrong format","missing_login":"No working login","missing_address":"Address missing","not_found":"Property not found","missing_emergency_phone":"No support phone in the guest portal","location_unmatched":"GuestAdmin can’t place the address","invalid_payload":"Property details incomplete","guest_admin_refused":"Refused by GuestAdmin"}},"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_bulk_title":"Auto-assign {count, plural, one {# task} other {# tasks}}","confirm_heading_assigned":"Already assigned · will be replaced","confirm_heading_unassigned":"Not assigned yet","confirm_replace_warning":"{count, plural, one {# task already has a person} other {# tasks already have a person}}. Auto-assign will replace {people}.","confirm_more_people":"{count, plural, one {# more person} other {# more people}}","confirm_description":"{assigned} of {total} selected tasks are already assigned. Auto-assign will reassign them. 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.","confirm_title":"Reassign existing assignees?","confirm_action":"Continue"},"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","filter_failed_outside_working_hours":"Eligible staff work this day, but the task falls outside their working hours","assigned_over_capacity":"Assigned while over their daily hours cap","preferred_finishes_before_due":"Assigned to someone whose day still ends this task before it is due","all_candidates_overrun":"Everyone eligible is expected to run past this task's due — assigned to the least loaded","preferred_finishes_within_hours":"Assigned to someone who finishes this task within their working hours","all_candidates_past_hours":"Everyone eligible is expected to finish past their working hours — assigned anyway","extra_crew_arrives_after_due":"Nobody free could reach this job before it is due — the extra hands were added anyway, so the crew is met and the minutes are not","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","outside_working_hours":"Outside their working hours"},"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","outside_working_hours":"Outside their working hours"}},"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…","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_summary_off":"Off {days}.","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.","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}","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"}},"availability":{"save_failed":"Couldn't save working hours. Try again.","weekly":{"title":"Working hours","description":"When {firstName} works in this department. Auto-assign only gives them tasks that fit these hours.","any_time":"Any time","any_time_hint":"No hours set, so auto-assign can give them work on any day, at any time. Turn on a day to set hours.","off":"Off","day_toggle":"Works on {day}","start_time":"{day} start time","end_time":"{day} end time","add_hours":"Add hours","remove_hours":"Remove these hours","same_every_day":"Same hours every day","save":"Save working hours","saved":"Working hours saved"},"dates":{"title":"Date changes","description":"One-off changes to {firstName}'s hours, like a day off or shorter hours on one date.","empty":"No date changes coming up.","add":"Add date change","show_past":"Show past","hide_past":"Hide past","all_departments":"All departments","off":"Off","edit":"Edit date change","remove":"Remove date change","remove_confirm_title":"Remove this date change?","remove_confirm_description":"Their hours on that day go back to their weekly hours. You'll see any work that would move before it's saved.","remove_confirm":"Remove","add_title":"Add a date change","edit_title":"Edit date change","dialog_description":"Changes this one day only. Weekly hours stay as they are.","date_label":"Date","date_placeholder":"Pick a date","department_label":"Department","mode_off":"Off all day","mode_hours":"Different hours","start_time":"Start time","end_time":"End time","add_hours":"Add hours","remove_hours":"Remove these hours","cancel":"Cancel","save":"Save","saved":"Date change saved","removed":"Date change removed"},"preview":{"title_week":"{count, plural, one {Saving moves # task} other {Saving moves # tasks}}","title_date":"{count, plural, one {Saving moves # task on {date}} other {Saving moves # tasks on {date}}}","description":"These tasks haven't started and no longer fit the new hours.","summary_title":"{count, plural, one {Saved: # task changed} other {Saved: # tasks changed}}","summary_description":"What happened to the tasks that no longer fit.","summary_stayed":"{count, plural, one {# task stays with its assignee: no one else was available} other {# tasks stay with their assignee: no one else was available}}","stays":"No one available, stays with {name}","stays_generic":"No one available, stays where it is","off_crew":"Removed from the crew","error":"Couldn't move, check this task","hidden":"{count, plural, one {+ # more in properties you can't see} other {+ # more in properties you can't see}}","background":"{count, plural, one {# more will be re-placed in the background} other {# more will be re-placed in the background}}","capped":"…and more not shown","no_due":"No due date","cancel":"Cancel","confirm":"Save and reassign","done":"Done"},"bulk":{"title":"{count, plural, one {Set working hours for # member} other {Set working hours for # members}}","description":"Replaces their weekly hours in this department. Turn every day off to clear their hours, so they can work any time.","apply":"Apply","cancel":"Cancel","progress":"Saving {done} of {total}…","done":"{count, plural, one {Working hours set for # member} other {Working hours set for # members}}","failed":"{count, plural, one {# member couldn't be updated} other {# members couldn't be updated}}"}},"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","templates_count":"{count, plural, one {# template} other {# templates}}","managed_by":"Managed by {names}"},"toc":{"nav_label":"Department sections","roster":"Roster","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":{"duration_minutes":"{minutes} min","duration_hours":"{hours}h","duration_hours_minutes":"{hours}h {minutes}min"},"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":"Playbooks","count":"{count, plural, one {# active playbook} other {# active playbooks}}","empty_hint":"No playbooks 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","auto_assign_issues_label":"Auto-assign reported issues","auto_assign_issues_description":"When on, issues reported in this department (from the app, phone, guest portal, inbox or SuiteScan) are assigned automatically like other tasks. When off, they stay unassigned until a manager assigns them. Only applies while auto-assignment is on."},"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.","status_unconfirmed":"We couldn't confirm your subscription status. 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","products_services":"Products & Services","status":"Status","details_unavailable":"Plan details are unavailable. Contact support for assistance.","payment_failed":"A payment on your account failed.","billing_period":"Billing Period","core_products":"Core products","add_ons":"Add-ons","next_invoice":"Next Invoice","amount":"Amount","trial_ends":"Trial Ends","launch_period":"Launch period — billing starts","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 Details","section_company":"Company details","section_address":"Address","section_contact":"Billing contact","company_name":"Company Name","company_name_placeholder":"Acme Properties LLC","vat":"VAT Number","vat_placeholder":"EU123456789","contact_name":"Billing Contact Name","contact_name_placeholder":"Jane Doe","billing_email":"Billing Contact Email","billing_email_placeholder":"billing@yourcompany.com","billing_email_hint":"Invoices and receipts are sent here. Changing the organization owner does not change it.","street":"Street Address","city":"City","state":"State / Region","postal_code":"Postal Code","country":"Country","save":"Save Details","saving":"Saving…","save_success":"Billing details 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"},"rates":{"title":"What you're paying","col_billed":"Billed","col_rate":"Rate","col_monthly":"Monthly","properties":"{count, plural, =1 {# property} other {# properties}}","devices":"{count, plural, =1 {# device} other {# devices}}","per_property":"{amount} / property","per_device":"{amount} / device","each":"{amount} each","units":"{count, plural, one {# unit} other {# units}}","core_subtotal":"Core subtotal","density":"{count} per property","other":"Other","adjustments":"Mid-period adjustments","all_in":"All-in","annual_note":"Billed annually — shown as the monthly equivalent","empty":"Rates appear here once your subscription is active.","unavailable":"We couldn't load your rates right now. Try again in a moment.","unmapped_note":"Per-unit rates are withheld while a new product on your invoice is being classified. The amounts are complete and SuiteOp is on it.","tax":"Tax","charged":"Total charged","family":{"screen_and_protect":"Screen & Protect","authority_reporting":"Authority Reporting","sex_offender_query":"Nationwide Sex Offender Query"}},"roi":{"eyebrow":"Return on SuiteOp","horizon_last_period":"Last period","horizon_ytd":"YTD","horizon_trailing_12m":"Last 12 months","stat_return":"Return","stat_generated":"Generated {range}","split_waivers":"Damage waivers","split_waivers_count":"{count, plural, one {# waiver} other {# waivers}}","split_upsells":"Upsells","split_upsells_count":"{count, plural, one {# purchase or approved request} other {# purchases and approved requests}}","split_share_caption":"Share of revenue generated","fx_footnote":"Your bill of {usd} converted at 1 USD = {rate} {currency} ({date}).","cta_prompt":"Want to push these numbers even higher?","cta_calendar":"Schedule time with your account manager","cta_email":"Schedule time to meet with Madeline"},"tabs":{"overview":"Plan Overview","add_ons":"Product Add-Ons"},"add_ons":{"title":"Product add-ons","intro":"Optional services that plug into your guest journey. Each one is a step in your pre-check-in flow, and you only pay for what runs.","active":"Active","inactive":"Inactive","pricing_label":"Pricing","cta_enable":"Turn on in portal verify settings","cta_manage":"Manage in portal verify settings","unavailable":"We couldn't load which add-ons you use right now. Try again in a moment.","screen_and_protect":{"title":"Screen & Protect","tagline":"Guest screening and damage protection in one step","blurb":"Verify every booking before arrival and cover the stay against damage, inside the pre-check-in flow your guests already complete.","pricing":"Per booking or per night. Per-night screenings are billed after checkout, on the stay's final dates. Turn on cost optimization and the cheaper option is chosen for each stay when it is screened."},"sex_offender_query":{"title":"Nationwide Sex Offender Query","tagline":"A national registry check on every verified guest","blurb":"Adds a registry lookup to the Identity Check in your verification step, so a flagged name never reaches a door code.","pricing":"$0.25 per check."},"authority_reporting":{"title":"Authority Reporting","tagline":"Guest registration filed with the authorities for you","blurb":"Through GuestAdmin, guest details are reported to the local authorities automatically wherever the law requires it.","pricing":"$3 per property per month. It activates as you add properties."}}},"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. If a profile already matches, nothing is created and you can open that profile instead.","duplicate_candidate":"A profile already holds one of these identifiers. Nothing was created.","duplicate_candidate_stale":"A profile already held one of the identifiers you submitted, so nothing was created. Save again to submit your changes.","open_existing":"Open existing profile"},"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","outcome_unknown":{"title":"Import could not be confirmed","description":"The connection dropped before the server answered, so some profiles may already be in the list. Check the list before you import again — any profile already there will be reported as a duplicate."},"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}}"}}},"booking_sites":{"page_title":"Booking sites","page_description":"Your own websites where guests book with you directly. Each site has its own address, design and listings.","shared":{"copied":"Copied","copy_failed":"Couldn't copy. Select the text and copy it by hand.","copy_value":"Copy {label}","reveal":"Show","hide":"Hide"},"list":{"create":"Create site","empty_title":"No booking sites yet","empty_description":"Create a site to start taking direct bookings on your own address.","empty_description_read_only":"Ask someone who manages the booking engine to create one.","col_name":"Name","col_address":"Address","col_status":"Status","col_domains":"Custom domains","status_live":"Live","status_not_live":"Not live yet","status_archived":"Archived","managed_in_code":"Managed by a developer","empty_pms":"To take bookings, a site needs a connected PMS that accepts them, such as Guesty or Hostaway.","empty_pms_link":"Connect a PMS","col_actions":"Actions"},"create":{"title":"Create a booking site","description":"Give your site a name. We set up its address and a starter design for you.","name_label":"Site name","name_placeholder":"Acme Stays","name_hint":"Guests see this name on your site. You can change it, and the address, later.","cancel":"Cancel","submit":"Create site","error":"Couldn't create the site. Try again.","created_title":"Site created","created_description":"We're publishing your site. This usually takes a few minutes.","created_description_not_built":"Your site is set up. It goes live the first time it's published.","address_label":"Your site's address","open_site":"Open site settings","done":"Done","next_steps":"Next, choose the listings guests can book and make the design your own.","description_prefilled":"We set up its address and start it with your organization's logo, brand color, contact email and every listing guests can book. You can change any of it later.","next_steps_review":"Next, check your listings and make the design your own.","layout_label":"How should your site be organized?","theme_label":"Choose a theme","theme_hint":"You can change the layout and theme later on the Design tab."},"detail":{"eject":"Developer access","eject_unavailable":"Not available for this site yet: its code can't be shared with a developer.","view_analytics":"View analytics","archived_note":"This site is archived. Restore it to make changes.","not_found_title":"Site not found","not_found_description":"This site doesn't exist or was removed.","back_to_sites":"Back to booking sites","eject_hint":"Give a developer access to this site's code.","code_access":"Code access","code_access_hint":"This site is managed in code. Find the repository or get a new access token.","managed_in_code_tooltip":"A developer manages this site's code. You can still change the design on the Design tab: a save changes only the design settings and keeps the developer's other changes, and both go live together. If the developer removes the design settings from the code, the Design tab can no longer save.","more_actions":"More actions","template":{"managed":"SuiteOp template · Up to date","managed_version":"Template v{version} · Up to date","on_template":"SuiteOp template","on_version":"Template v{version}","updates_off":"Updates off — managed in code","custom":"Custom site","paused":"Template v{version} is on hold: this site has changes outside its design settings, and we never overwrite them. Changed files:","failed":"Template v{version} didn't pass its checks, so it wasn't published. Your site is unchanged."}},"archive":{"archive_site":"Archive site","archive_hint":"Take the site offline. You can restore it later.","title":"Archive {name}?","description":"Guests will no longer be able to visit or book on this site, at its SuiteOp address or your own domains. Nothing is deleted: its design, listings and settings are kept, and you can restore it any time from Archived sites.","confirm":"Archive site","archived":"{name} is archived. You can restore it from Archived sites.","archive_error":"Couldn't archive the site. Try again.","restore":"Restore","restored":"{name} is restored","restored_description":"It's back in your booking sites. If it was live before, guests can visit it again at the same address.","restore_error":"Couldn't restore the site. Try again.","section_title":"Archived sites ({count})","section_hint":"These sites are offline. Restore one to bring it back."},"readiness":{"title":"Get your site ready","description":"A few steps and guests can book with you directly.","progress":"{done} of {total} steps done","optional":"Optional","status_done":"Done","status_todo":"To do","ready_title":"Your site is ready for bookings","ready_description":"Guests can find your site and book directly with you.","dismiss":"Got it","publish_requested":"Your site is going online. This usually takes a few minutes.","publish_error":"Couldn't put your site online. Try again.","items":{"pms":{"title":"Connect your property management system","done":"Connected and ready to take bookings."},"listings":{"title":"Choose the properties guests can book","done":"{count, plural, one {# property} other {# properties}} can be booked on your site."},"payments":{"title":"Get paid","done":"Payments go to {account}.","done_pms":"Your PMS collects payment from guests."},"published":{"title":"Put your site online","done":"Your site is live."},"bookings_open":{"title":"Accept bookings","done":"Guests can book and pay."},"domain":{"title":"Use your own web address","done":"Your site is on your own web address."}},"problems":{"pms_not_connected":"New bookings go straight into your PMS, so connect it first.","pms_cannot_book":"Your connected PMS can't take bookings from your site. Connect one that can, like Guesty or Hostaway.","no_listings":"No properties are on your site yet.","no_bookable_listings":"None of the properties on your site can be booked yet. Each one says why.","no_payment_account":"Connect a payment account, like Stripe, so guests can pay.","payment_account_unavailable":"The payment account chosen for this site is turned off.","payment_account_not_ready":"{account} isn't fully set up yet.","pms_cannot_collect":"Your PMS can't collect payment for this site. Let SuiteOp collect it instead.","not_published":"Your site isn't online yet.","publishing":"Your site is going online. This usually takes a few minutes.","publish_failed":"The last try to put your site online didn't work.","bookings_closed":"Bookings are turned off, so guests can look but can't book.","no_custom_domain":"Your site works on its free address. You can add your own, like book.yourname.com."},"fix":{"pms_not_connected":"Connect PMS","pms_cannot_book":"See options","no_listings":"Choose properties","no_bookable_listings":"See why","no_payment_account":"Connect payments","payment_account_unavailable":"Fix payments","payment_account_not_ready":"Finish setup","pms_cannot_collect":"Change who collects","not_published":"Put site online","publish_failed":"See what happened","bookings_closed":"Turn on bookings","no_custom_domain":"Add your address"}},"payment_status":{"title":"Payments","goes_to":"Payments go to {account}.","pms_collects":"Your PMS collects payment from guests.","not_ready":"{account} isn't fully set up yet.","problems":{"no_payment_account":"No payment account is connected, so guests can't pay yet.","payment_account_unavailable":"The payment account chosen for this site is turned off.","pms_cannot_collect":"Your PMS can't collect payment for this site."}},"tabs":{"theme":"Design","listings":"Listings","content":"Content","domains":"Domain","deployments":"Versions","keys":"Developer keys","tracking":"Tracking","seo":"SEO","checkout":"Checkout","payments":"Payments","editor":"Edit with AI","advanced":"Advanced","advanced_hint":"For developers: every published version, and the keys a custom-built site uses."},"theme":{"read_only":"You can view the design. Ask someone who manages the booking engine to change it.","save":"Save","save_hint":"Saving publishes your changes to the site.","saved":"Saved","saved_deploying":"Saved. Your changes go live in a few minutes.","saved_not_deployed":"Your changes go live the next time the site is published.","save_error":"Couldn't save the design. Try again.","stale":"This site was changed somewhere else since you opened this page. Reload to see the latest version. Your unsaved changes will be lost.","reload":"Reload","older_template_note":"Your site runs an older version of our template, so this won't show yet. It will once your site is updated.","not_managed":"This site's design is managed by a developer, so it can't be edited here.","invalid":"This site's design settings can't be read, so they can't be edited here. Ask the site's developer to fix them.","layout":{"title":"Layout","description":"How your site is organized. You can change it at any time.","listings":"Listings","listings_hint":"A search-first grid of your rentals.","locations":"Locations","locations_hint":"Your buildings first, then the apartments in each.","locations_note":"The home page shows the buildings you add under Content. Until you add one, it shows your rentals.","areas":"Areas","areas_hint":"Neighborhoods or towns first, then the stays there.","single":"Single property","single_hint":"One property or a small hotel.","areas_note":"The home page leads with your areas that have stays. Until one does, it shows your rentals.","single_note":"The home page tells your property's story, with its rooms, what it offers and where it is.","coming_note":"For now, your site shows this layout like Listings. Its own pages are coming soon."},"look":{"title":"Theme","description":"How your site looks. Each theme is built from your brand color and keeps text easy to read.","folio_hint":"Classic and elegant, like a magazine","hearth_hint":"Warm and welcoming, for inns and B&Bs","circuit_hint":"Modern and crisp, for city apartments","tide_hint":"Coastal, light and airy","noir_hint":"Dark, calm and luxurious","fjord_hint":"Simple and calm, Nordic style","preview_eyebrow":"Book direct","preview_heading":"Stays worth coming back to","preview_button":"Book now","preview_card":"Sea view apartment","preview_meta":"Sleeps 4 · 2 bedrooms"},"brand":{"title":"Brand","description":"The name and images that identify your site.","name":"Site name","logo_url":"Logo image link","logo_url_hint":"A link to your logo image, starting with https://. Leave empty to show the site name instead.","logo":"Logo","logo_hint":"Shown at the top of every page. A PNG with a transparent background looks best. Without a logo, the site shows its name.","favicon":"Browser tab icon","favicon_hint":"The small icon guests see in their browser tab. A square image works best.","favicon_url":"Browser tab icon link","favicon_url_hint":"The small icon guests see in their browser tab. Leave empty for the default.","logo_on_dark":"Logo for dark backgrounds","logo_on_dark_hint":"Used on dark sections and over photos. A light or white version of your logo works best. Without one, the site uses your main logo."},"colors":{"title":"Colors","description":"Your brand color sets the whole palette. The theme picks the rest so text stays easy to read.","primary":"Brand color","primary_foreground":"Button text","background":"Background","foreground":"Text","accent":"Links and highlights","contrast_low":"{first} and {second} are hard to read together. Pick colors with more contrast.","primary_hint":"Used for buttons and links. The theme builds every other color from it.","secondary":"Second color","secondary_hint":"Optional. Used for small highlights like badges and tags.","secondary_add":"Add a second color","secondary_remove":"Remove","note_light_brand_ink_label":"Your color is light, so buttons keep it and use dark text.","note_button_darkened":"Your color is too light for white text, so buttons use a slightly darker shade of it.","note_brand_lifted":"Your color is shown a little lighter so it stands out on this dark theme.","note_brand_text_darkened":"Links and headings in your color are shown a little darker so they stay readable.","advanced":"Advanced: replace a theme color","advanced_hint":"Each theme picks these colors for you. Replace one only if you need an exact color.","use_theme_color":"Use the theme's color","follows_theme":"Using the theme's color.","problem_background":"Text is too hard to read on this background ({ratio}:1, needs 4.5:1), so the site keeps the theme's background.","problem_foreground":"This text color is too hard to read on the background ({ratio}:1, needs 4.5:1), so the site keeps the theme's color.","problem_accent":"This link color is too hard to read on the background ({ratio}:1, needs 4.5:1), so the site keeps the theme's color.","problem_primary_foreground":"This button text color is too hard to read on your buttons ({ratio}:1, needs 4.5:1), so the site keeps the theme's color."},"fonts":{"title":"Fonts","description":"The typefaces for headings and body text.","heading":"Heading font","body":"Body font","theme_default":"Theme default ({font})"},"locales":{"title":"Languages","description":"The languages guests can read the site in.","languages":"Site languages","default":"Default language","default_hint":"Shown when a guest's language isn't one of the site languages."},"link_pages":{"home":"Home","stays":"Stays","about":"About","blog":"Blog","things_to_do":"Things to do","contact":"Contact","other":"Another address…","other_label":"Link address"},"nav":{"title":"Navigation","description":"The links in the site's main menu.","empty":"No menu links yet.","item":"Link {number}","label":"Label","href":"Address","add":"Add link","remove":"Remove link {number}","limit":"Up to {max} links."},"footer":{"title":"Footer","description":"The text and links at the bottom of every page.","text":"Footer text","links":"Footer links","empty":"No footer links yet.","item":"Link {number}","label":"Label","href":"Address","add":"Add link","remove":"Remove link {number}","limit":"Up to {max} links."},"seo":{"title":"Search and sharing","description":"How the site appears in search results and when a link is shared.","title_template":"Page title","title_template_hint":"Use %s where the page's own title goes, for example: %s · Acme Stays.","default_description":"Description","default_description_hint":"Shown in search results for pages without their own description.","og_image_url":"Sharing image link","og_image_url_hint":"The image shown when someone shares a link to your site. It must start with https://.","og_image":"Sharing image","og_image_hint":"Shown when someone shares a link to your site."},"image":{"upload":"Upload image","replace":"Replace","remove":"Remove","drop_hint":"Drop an image here, or upload one from your computer.","help":"JPG, PNG, WebP or GIF, up to 10 MB.","uploading":"Uploading image","upload_failed":"Couldn't upload the image. Try again.","invalid_file":"This file can't be used. Choose a JPG, PNG, WebP or GIF image up to 10 MB.","preview":"Current image"}},"listings":{"title":"Listings","description":"Choose the properties guests can book on this site.","read_only":"You can view the listings. Ask someone who manages the booking engine to change them.","choose":"Choose listings","search_placeholder":"Search properties","selected":"{count} of {max} selected","remove":"Remove {name}","empty":"There are no properties to add yet.","not_bookable":"Not bookable","not_bookable_reason":"Guests can't book this listing on the site yet. It must be linked to an active listing in a connected PMS that takes direct bookings, and be open for booking.","reasons":{"pms_not_connected":{"text":"It isn't linked to a listing in a connected PMS.","fix":"Connect your PMS"},"pms_cannot_book":{"text":"Its PMS can't take bookings from your site.","fix":"See PMS options"},"property_disabled":{"text":"It's disabled in SuiteOp. Enable it in its settings.","fix":"Open property settings"},"property_not_bookable":{"text":"Its “Open for booking” setting is off in SuiteOp.","fix":"Open property settings"},"property_inactive":{"text":"It's turned off for booking in SuiteOp.","fix":"Open property settings"},"listing_disabled":{"text":"It's turned off in your PMS. Turn it back on there.","fix":"Open PMS connection"},"payment_automation_needs_setting":{"text":"Its payment settings in your PMS don't fit who collects payment on this site.","fix":"Change who collects payment","ask":"Turn off its payment automation in your PMS, or ask SuiteOp to turn on PMS payment handling."}},"save":"Save","saved":"Listings saved","save_error":"Couldn't save the listings. Try again."},"content":{"read_only":"You can see this site's content. Changing it needs permission to manage booking sites.","sections":{"buildings":"Buildings","areas":"Areas","page_sections":"Page sections"},"photos":{"list_label":"Photos","upload":"Upload photos","drop_hint":"Drop photos here, or upload them from your computer.","help":"JPG, PNG, WebP, HEIC or GIF, up to 10 MB each. Up to {max} photos. The first one is the cover.","help_single":"JPG, PNG, WebP, HEIC or GIF, up to 10 MB.","limit_reached":"You've added the most photos allowed ({max}). Remove one to add another.","uploading":"Uploading {file}","upload_failed":"Couldn't upload {file}. Try again.","retry":"Try again","dismiss":"Remove {file}","photo_label":"Photo {position} of {count}","cover":"Cover","drag":"Drag photo {position} to move it","actions":"Options for photo {position}","make_cover":"Make cover photo","move_earlier":"Move earlier","move_later":"Move later","remove":"Remove photo"},"address":{"search_placeholder":"Search for the address","search_unavailable":"Address search isn't available right now.","change":"Change","remove":"Remove","map_label":"Map showing where guests will see this place"},"units":{"suggestions":"Suggestions","select_group":"Select the {count, plural, one {# unit} other {# units}} of {label}","unit_count":"{count, plural, one {# unit} other {# units}}","choose":"Choose units","search_placeholder":"Search units","selected":"{count, plural, =0 {No units selected} one {# unit selected} other {# units selected}}","remove":"Remove {name}","empty":"Your organization has no units yet.","in_building":"In {name}","not_on_site":"Not on your site yet","not_bookable":"Can't take bookings","note_added":"{count, plural, one {# unit will also be added to your site} other {# units will also be added to your site}}","note_moved":"{count, plural, one {# unit will move from {from}} other {# units will move from {from}}}"},"sheet":{"more":"More options","delete":"Delete","cancel":"Cancel","close":"Close","save":"Save","discard_title":"Discard changes?","discard_description":"Your changes haven't been saved.","discard":"Discard","keep_editing":"Keep editing"},"building":{"add_title":"Add building","untitled":"Untitled building","sheet_description":"What guests see about this building on your site.","name":"Name","name_placeholder":"e.g. The Onyx","area":"Area","no_area":"No area","new_area":"New area…","area_help":"The neighborhood or city guests find this building in.","description":"Description","description_placeholder":"What makes this building special? Mention the neighborhood, the views, what's nearby.","characters":"{count} / {max} characters","photos":"Photos","address":"Address","address_help":"Guests see this place on your site's map.","units":"Units in this building","units_help":"Tick the units guests can book in this building. A unit can be in one building only.","saved":"Building saved","save_error":"Couldn't save the building. Try again.","deleted":"Building deleted","delete_error":"Couldn't delete the building. Try again.","delete_title":"Delete this building?","delete_description":"Its units stay on your site. Its photos and text are removed. This can't be undone."},"area":{"add_title":"Add area","untitled":"Untitled area","sheet_description":"A neighborhood or city guests can browse by.","name":"Name","name_placeholder":"e.g. Old City","kind":"Kind","kind_neighborhood":"Neighborhood","kind_city":"City","part_of":"Part of","no_city":"No city","part_of_help":"The city this neighborhood is in, if you list cities too.","description":"Description","description_placeholder":"What's it like to stay here? Mention the feel, the food, how to get around.","characters":"{count} / {max} characters","photos":"Photos","address":"Address (optional)","address_help":"A point guests see on your site's map, like the middle of the neighborhood.","saved":"Area saved","save_error":"Couldn't save the area. Try again.","deleted":"Area deleted","delete_error":"Couldn't delete the area. Try again.","delete_title":"Delete this area?","delete_description":"Buildings in it stay on your site with no area. This can't be undone."},"buildings":{"title":"Buildings","description":"Group your units into buildings so guests can browse them. Drag to change the order your site shows them in.","add":"Add building","untitled":"Untitled building","unit_count":"{count, plural, =0 {No units} one {# unit} other {# units}}","col_photo":"Photo","col_name":"Name","col_area":"Area","col_units":"Units","drag":"Drag to change the order","order_saved":"Order saved","order_error":"Couldn't save the order. Try again.","empty_title":"No buildings yet","empty_description":"Group your units into buildings so guests can browse them.","empty_with_suggestions":"Group your units into buildings so guests can browse them. {count, plural, one {We found # likely building in your units — start from it:} other {We found # likely buildings in your units — start from one:}}","use_suggestion":"{label} · {count, plural, one {# unit} other {# units}}"},"areas":{"title":"Areas","description":"The neighborhoods and cities guests can browse by. Drag to change the order.","add":"Add area","untitled":"Untitled area","kind_neighborhood":"Neighborhood","kind_city":"City","col_name":"Name","col_kind":"Kind","drag":"Drag to change the order","order_saved":"Order saved","order_error":"Couldn't save the order. Try again.","empty_title":"No areas yet","empty_description":"Add the neighborhoods or cities your buildings are in, so guests can browse by area."},"advanced":{"label":"Advanced","import_title":"Import content","import_description":"Bring in a whole site's content from one file: posts, page sections, buildings and areas. For developers and site moves.","import_action":"Import from file"},"fields":{"optional":"(optional)","none":"None","pick_one":"Choose one","pick_date":"Pick a date","pick_many":"Choose any","nothing_to_pick":"Nothing to choose from yet.","link_label":"Button text","link_label_placeholder":"e.g. Book your stay","link_url":"Link","link_url_placeholder":"https://… or /stays","invalid":"This doesn't fit your site's latest design anymore.","clear":"Clear"},"item":{"add_title":"New {type} entry","untitled":"Untitled","save_draft":"Save draft","publish":"Publish","update":"Update","unpublish":"Unpublish","save_error":"Couldn't save. Try again.","deleted":"Deleted","delete_title":"Delete this entry?","delete_description":"It disappears from your site and its photos are removed. This can't be undone.","advanced":"Web address and publish date","slug":"Web address","slug_placeholder":"made-from-the-title","slug_help":"The end of this page's link. Leave it empty and we'll make one from the title.","publish_date":"Publish date","publish_date_placeholder":"When you publish","publish_date_help":"Pick a future day to schedule it. It goes live on your site that day."},"collection":{"description":"Add, edit and publish your {type} entries. Changes go live on your site when you save.","add":"Add new","untitled":"Untitled","empty_title":"Nothing in {type} yet","empty_description":"Write your first entry. You can save it as a draft and publish when it's ready.","col_photo":"Photo","col_title":"Title","col_state":"Status","col_date":"Date","state":{"draft":"Draft","scheduled":"Scheduled","published":"Published"},"drag":"Drag to change the order","order_error":"Couldn't save the order. Try again.","range":"{from}–{to} of {total}","previous":"Previous","next":"Next"},"page_sections":{"title":"Page sections","description":"The words and photos of your site's pages. Until you save one, your site shows its own default.","save":"Save","discard":"Discard changes","save_error":"Couldn't save the section. Try again."},"custom_fields":{"title":"More details","help_building":"Extra details your site shows about each building.","help_area":"Extra details your site shows about each area."},"import":{"title":"Import content","description":"Paste or upload a content file. Check it first to see what will change; nothing changes until you import.","file":"Content file (JSON)","upload":"Upload file","placeholder":"'{ \"version\": 1, … }'","check":"Check file","apply":"Import","cancel":"Cancel","preview_title":"What this file will do","will_create":"Add: {what}","will_update":"Update: {what}","will_remove":"Hide: {what}","count_types":"{count, plural, one {# content type} other {# content types}}","count_areas":"{count, plural, one {# area} other {# areas}}","count_buildings":"{count, plural, one {# building} other {# buildings}}","count_items":"{count, plural, one {# {type} entry} other {# {type} entries}}","units_matched":"{name}: {count, plural, =0 {no units found} one {# unit found} other {# units found}}","problem":{"unknown_type":"Skipped entries of \"{subject}\": your site doesn't have that kind of content.","unknown_area":"\"{subject}\" isn't an area in this file, so nothing was linked to it.","no_units":"No units matched \"{subject}\". Its units are left as they are.","invalid_item":"Skipped \"{subject}\": some of its values don't fit.","invalid_item_field":"Skipped \"{subject}\": the value of {field} doesn't fit."},"invalid_json":"This isn't a valid JSON file.","invalid_bundle":"This file isn't a SuiteOp content file. Check its format.","too_large":"This file is too large to import at once. Split its entries across smaller files and import each one.","done":"Content imported","done_with_problems":"Imported. Some entries were skipped:","error":"Couldn't import the file. Try again."},"types":{"add":"Add content type","settings":"Content type settings","code_owned":"Managed in your site's code","picker":{"title":"What would you like to add?","description":"Pick a starting point. You can rename it and change its fields before you save.","scratch_name":"Start from scratch","scratch_description":"Just a title to begin with. Add the fields you need.","already_on_site":"Already on your site"},"presets":{"blog":{"name":"Blog","description":"Articles and news, each on its own page.","fields":{"title":"Title","cover":"Cover photo","excerpt":"Short summary","body":"Article"}},"faq":{"name":"FAQ","description":"Common guest questions, with your answers.","fields":{"question":"Question","answer":"Answer"}},"testimonials":{"name":"Testimonials","description":"Kind words from past guests.","fields":{"name":"Guest name","quote":"What they said","rating":"Rating","photo":"Photo","stay":"Where they stayed"},"help":{"rating":"From 1 to 5"}},"team":{"name":"Team","description":"The people behind your stays.","fields":{"name":"Name","role":"Role","photo":"Photo","bio":"About"}},"events":{"name":"Events","description":"What's on nearby, each on its own page.","fields":{"title":"Title","date":"Date","end_date":"End date","location":"Where","cover":"Photo","description":"Description","link":"Tickets or more info"}}},"blank":{"name":"New collection","fields":{"title":"Title"}},"field_types":{"text":"Short text","rich_text":"Long text","image":"Photo","gallery":"Photos","number":"Number","boolean":"Yes / no","date":"Date","option":"Choice from a list","link":"Web link"},"reference":{"listing":"Link to a listing","building":"Link to a building","area":"Link to an area","collection":"Link to another entry"},"references":{"listing":"Links to listings","building":"Links to buildings","area":"Links to areas","collection":"Links to other entries"},"sheet":{"add_title":"New content type","add_description":"Name it and choose what each entry has. Nothing shows on your site until you add entries.","edit_description":"Rename it or change what each entry has.","code_description":"This content type comes from your site's code, so it can only be changed there.","name":"Name","name_placeholder":"For example: Local tips","description":"Description","description_placeholder":"Optional: one sentence about what goes here","routable":"Each entry gets its own page","routable_help":"Turn on for things like articles, where each entry has its own web address.","routable_fixed":"Set when this content type was made. It can't be changed.","fields_title":"Fields","fields_help":"What you fill in for each entry, in this order.","removed_help":"Removing a field hides it from your site; what was already written in it is kept.","field_name":"Field name","field_help":"Hint","field_help_placeholder":"Optional: shown under the field when filling it in","field_required":"Required","title_badge":"Entry title","options_kept":"Its choices are kept as they are.","move_up":"Move up","move_down":"Move down","remove":"Remove field","add_field":"Add a field","new_field_name":"New field name","new_field_kind":"What it holds","add_field_confirm":"Add field","cancel_field":"Cancel","advanced":"Advanced","keys_help":"Keys are used by your site's code and never change.","type_key":"Content type key","save_error":"Couldn't save the content type. Try again.","archive":"Archive","archived":"Content type archived","archive_error":"Couldn't archive the content type. Try again."},"archived":{"title":"Archived content types","description":"Hidden from your site. Their entries are kept.","restore":"Restore","restore_error":"Couldn't restore the content type. Try again.","entries":"{count, plural, one {# entry} other {# entries}}"}}},"domains":{"title":"Domains","description":"Your site already works on its free address below, with nothing to set up. Add your own domain only if you want guests to book on an address you own.","default_badge":"Free address","change":"Change address","add":"Add domain","empty":"You haven't added a domain of your own. Your free address works without one.","active":"Active","pending":"Waiting for setup","verify":"Check setup","verified":"Your domain is set up and live.","not_verified":"We can't see the records yet. Changes at your domain provider can take a few hours to show up.","certificate_pending":"Your domain is connected. We're still securing it (HTTPS). Check again in a few minutes.","certificate_failed":"We couldn't secure this domain (HTTPS). Remove it and add it again to retry.","verify_error":"Couldn't check the domain. Try again.","dns_instructions":"{count, plural, one {Add this record} other {Add these # records}} where you manage your domain (your domain provider), then select Continue setup.","dns_routing_label":"Points your domain to your site","dns_certificate_label":"Lets us secure your domain (HTTPS)","remove":"Remove","remove_title":"Remove this domain?","remove_description":"Guests can no longer reach the site on {hostname}. You can add the domain again later.","remove_confirm":"Remove domain","removed":"Domain removed","remove_error":"Couldn't remove the domain. Try again.","cancel":"Cancel","change_title":"Change the site address","change_description":"The old address redirects to the new one for 30 days.","change_label":"Address name","change_hint":"Lowercase letters, numbers and hyphens.","change_preview":"The site will be at","change_submit":"Change address","changed":"Address changed","change_error":"Couldn't change the address. Try again.","add_title":"Add a domain","add_description":"Use a domain you own, such as book.example.com. Next, we show the records to add where you manage the domain.","add_submit":"Add domain","added":"Domain added. Add its records where you manage the domain to finish.","add_label":"Domain","add_error":"Couldn't add the domain. Try again.","copy_all":"Copy all records","copied_all":"Records copied","status_live_hint":"Live. Guests can book on this address.","status_pending_hint":"Not connected yet. Finish adding its records where you manage the domain.","continue_setup":"Continue setup","dns_ownership_label":"Proves the domain is yours","wizard":{"step_of":"Step {current} of {total}","title":"Connect your own domain","intro":"We'll walk you through it step by step. It usually takes about 10 minutes.","free_address_note":"No rush: your site already works on its free address, and keeps working while you set this up.","domain_hint":"We recommend www.yourdomain.com, or a subdomain like book.yourdomain.com.","bare_domain_warning":"{domain} is your main domain. Most domain providers can't connect a main domain to a site this way, so we recommend {www} instead. Guests won't notice the difference.","use_www":"Use {www}","domain_submit":"Continue","detecting":"Finding out where {domain} is managed…","provider_title":"Where is your domain managed?","provider_hint":"This is usually the company you bought the domain from.","provider_detected":"It looks like {domain} is managed at {provider}. If that's not right, pick another one below.","provider_not_detected":"We couldn't tell automatically. Pick the company you bought your domain from. Not sure? Choose the last option.","provider_submit":"Show me the steps","later":"Finish later","records_title":"{count, plural, one {Add this record at {provider}} other {Add these # records at {provider}}}","records_title_other":"{count, plural, one {Add this record where you manage your domain} other {Add these # records where you manage your domain}}","open_provider":"Open {provider}","field_names":"{provider} calls the two fields “{nameField}” and “{valueField}”.","name_relative_hint":"Type the name exactly as shown: {zone} is added for you.","name_full_hint":"If your provider adds your domain to the end of the name by itself, type only the part before it.","cloudflare_proxy":"Important: set Proxy status to “DNS only” (grey cloud) on each record. With the orange cloud on, your domain won't connect.","apex_unsupported":"{provider} can't connect a main domain like {domain} this way. Remove this domain and add {www} instead.","copy_all":"Copy all records","copied_all":"Records copied","field_type":"Type","field_name":"Name","field_value":"Value","ttl_hint":"If you're asked for a TTL, leave the default.","back":"Back","records_submit":"I've added them, check now","check_title":"Checking {domain}","check_wait":"Changes usually show up within minutes, but can take up to a few hours.","check_failed":"We couldn't check your records just now. Select Check again in a moment.","securing":"All records found! We're now securing your domain (HTTPS). This usually takes a few minutes.","auto_recheck":"We check again every 30 seconds while this window is open. You can also close it and come back later with Continue setup. Your free address keeps working in the meantime.","show_instructions":"Show me the steps again","check_again":"Check again","connect":"Connect domain","close":"Close","status_found":"Found","status_missing":"Not found yet","status_wrong":"Needs a fix","seen_old_address":"Your domain still points to another address ({seen}), usually an old website record. Delete that record (type A), then add the record above.","seen_cloudflare_proxy":"Cloudflare is hiding this record behind its proxy ({seen}). Set its Proxy status to “DNS only” (grey cloud).","seen_other_value":"We found a different value: {seen}. Replace it with the value above.","done_title":"Your domain is live!","done_body":"Guests can now book on your own address. Your free address keeps working too.","done_close":"Done","providers":{"godaddy":{"step_1":"Sign in to GoDaddy and open your Domain Portfolio.","step_2":"Select your domain, then select DNS.","step_3":"For each record below, select Add New Record, choose the Type, fill in the two fields, then select Save.","name_field":"Name (or Host)","value_field":"Value (or Points to)"},"cloudflare":{"step_1":"Log in to Cloudflare and select your domain.","step_2":"In the menu, open DNS, then Records.","step_3":"For each record below, select Add record, choose the Type and fill in the two fields.","step_4":"Set Proxy status to “DNS only” (grey cloud), then select Save.","name_field":"Name","value_field":"Target (Content for TXT)"},"namecheap":{"step_1":"Sign in to Namecheap, open Domain List and select Manage next to your domain.","step_2":"Open the Advanced DNS tab.","step_3":"Under Host Records, select Add New Record for each record below, choose the type, fill in the two fields, then select the check mark to save.","name_field":"Host","value_field":"Target (Value for TXT)"},"squarespace":{"step_1":"Sign in to Squarespace, open Domains and select your domain.","step_2":"Open DNS (sometimes called DNS Settings).","step_3":"Under Custom records, select Add record for each record below, choose the Type, fill in the two fields, then select Save.","name_field":"Host","value_field":"Data"},"wix":{"step_1":"Sign in to Wix and open Domains.","step_2":"Select the menu (⋯) next to your domain, then Manage DNS Records.","step_3":"In the CNAME and TXT sections, select Add Record for each record below, fill in the two fields, then select Save.","name_field":"Host Name","value_field":"Value"},"ionos":{"step_1":"Log in to IONOS and open Domains & SSL.","step_2":"Select the gear icon next to your domain, then DNS.","step_3":"For each record below, select Add record, choose the type, fill in the two fields, then select Save.","name_field":"Host name","value_field":"Points to (Value for TXT)"},"hostinger":{"step_1":"Log in to hPanel, open Domains and select your domain.","step_2":"Open DNS / Nameservers.","step_3":"Under Manage DNS records, choose the Type, fill in the two fields, then select Add Record. Repeat for each record below.","name_field":"Name","value_field":"Target (TXT value for TXT)"},"other":{"label":"Other / I'm not sure","step_1":"Sign in where you bought your domain (or wherever its DNS is managed).","step_2":"Look for a page called DNS, DNS settings, Zone editor or Manage DNS.","step_3":"Add each record below: choose the type, then fill in the name and the value.","name_field":"Name or Host","value_field":"Value, Target or Points to"}}}},"deployments":{"title":"Versions","description":"Every published version of your site, newest first. A new version goes live once it passes our checks.","empty_title":"Nothing published yet","empty_description":"Your site is published the first time you save its design.","deploy_now":"Publish now","deploy_again":"Publish again","deploy_requested":"Publishing started","deploy_error":"Couldn't start publishing. Try again in a few minutes.","stuck":"This version stopped responding. Publish again to restart it.","script_deleted":"This version is no longer kept, so it can't be restored.","show_older":"Show older versions","open_preview":"Open preview","open_keys":"Open developer keys","rollback":"Restore this version","rollback_title":"Restore this version?","rollback_description":"The version from {version} becomes your live site. You can publish the newer version again later.","rollback_confirm":"Restore version","rollback_success":"Restored. This version is now live.","rollback_error":"Couldn't restore this version. Try again.","status":{"queued":"Waiting","building":"Publishing","checking":"Checking","ready":"Preview ready","live":"Live","failed":"Didn't publish","superseded":"Earlier version"},"errors":{"host_entry_unpublishable":"This version couldn't go live because of a problem with the site's setup. Contact support, or ask your developer to create a new key under Developer keys and publish again.","contract_check_failed":"This version didn't pass our quality checks, so your live site wasn't changed. Your developer can see what failed under Details.","script_name_collision":"This version couldn't be published. Save a new change and publish again.","content_kind_changed":"This version couldn't go live: its code changes a content type from a collection to a section, or the reverse. Ask your developer to give that type a new key and publish again.","content_field_changed":"This version couldn't go live: its code changes a content field so the text or photos already saved in it would no longer show. Ask your developer to give that field a new key and publish again.","deployment_not_rollbackable":"This version is no longer kept, so it can't be restored.","unknown":"This version didn't publish and no reason was given. Publish again, and contact support if it keeps happening.","other":"This version didn't publish. Publish again, and contact support if it keeps happening."},"checks":{"manifest":"Site manifest","checkout":"Checkout","events":"Tracking events","lighthouse":"Speed, accessibility and search scores","axe":"Accessibility","secrets":"No secrets in the published site"},"details":"Details"},"keys":{"title":"Developer keys","description":"Only needed if a developer builds their own site or app on your listings. Your SuiteOp site already has its key. A key is safe to use in a browser.","create":"Create key","create_title":"Create a new key?","create_description":"The new key becomes the site's live key. The current key keeps working until you revoke it.","create_confirm":"Create key","create_error":"Couldn't create the key. Try again.","created_title":"Your new key","created_once":"Copy the key now. It is shown only once.","created_label":"Publishable key","created_done":"Done","empty":"This site has no keys yet.","col_key":"Key","col_status":"Status","col_created":"Created","col_last_used":"Last used","col_actions":"Actions","never_used":"Never","status_live":"Live","status_active":"Active","status_revoked":"Revoked","live_hint":"The live key is the one the site uses. To replace it, create a new key, then revoke the old one.","revoke":"Revoke","revoke_title":"Revoke this key?","revoke_description":"Anything still using {key} stops working right away. This can't be undone.","revoke_confirm":"Revoke key","revoked":"Key revoked","revoke_error":"Couldn't revoke the key. Try again."},"origins":{"title":"Allowed origins","description":"The website addresses that may use this site's keys from a browser. Requests from anywhere else are refused.","host_title":"Always allowed","host_description":"The site's own addresses. They follow its default address and active domains.","own_title":"Your origins","own_description":"Add an origin for each other place the keys are used, such as http://localhost:4321 for local development.","empty":"No extra origins.","origin_label":"Origin {number}","add":"Add origin","remove":"Remove origin {number}","save":"Save","saved":"Allowed origins saved","save_error":"Couldn't save the allowed origins. Try again."},"payments":{"title":"Who collects payment","description":"Choose who charges the guest's card for bookings made on this site.","read_only":"You can view this setting. Ask someone who manages the booking engine to change it.","save":"Save","saved":"Payment setting saved","save_error":"Couldn't save the payment setting. Try again.","collection":{"label":"Payment collection","suiteop":{"label":"SuiteOp charges at booking","description":"The guest pays when they book. The charge goes through your payment account."},"pms":{"label":"Your PMS charges the card","description":"The guest's card is saved with the booking in your PMS. Your PMS charges it on the schedule you set there."}},"fallback":{"label":"Listings your PMS can't charge","description":"Some listings are on a PMS account that can't collect payments for the site.","suiteop":{"label":"SuiteOp charges them at booking","description":"These listings stay bookable. The guest pays when they book, through your payment account."},"none":{"label":"Don't take bookings on them","description":"These listings can't be booked on the site until your PMS can charge for them."}}},"eject":{"title":"Developer access","subtitle":"Give a developer access to this site's code.","archived_subtitle":"This site is archived, so no new code access can be given. Access already handed out can still be revoked.","explainer":"This creates an access token for the site's code. Before you continue:","points":{"code_access":"Anyone with the token can change every part of the site's code.","theme_edits":"The Design tab keeps working only while the configuration file keeps the block this dashboard manages.","contract_check":"Every change is still checked before it goes live. A version that fails the checks isn't published."},"cancel":"Cancel","generate":"Generate access","error":"Couldn't create the access. Try again.","remote_label":"Repository URL","token_label":"Access token","token_once":"This token is shown only once and expires on {date}. Store it in a password manager.","cli_label":"Set up on the developer's computer","cli_copy":"Copy the commands","cli_hint":"The login command asks for the access token. The last command needs a test key from a staging site's Developer keys tab.","revoke":"Revoke this token","revoke_title":"Revoke this token?","revoke_description":"The token stops working right away for anyone using it. This can't be undone.","revoke_confirm":"Revoke token","revoked":"Token revoked","revoke_error":"Couldn't revoke the token. Try again.","revoke_all":"Revoke all code access","revoke_all_title":"Revoke all code access?","revoke_all_description":"Every access token issued for this site's code stops working right away, including ones handed out earlier. Access with an hour or less left ends on its own. This can't be undone.","revoke_all_confirm":"Revoke all access","revoked_all":"{count, plural, =0 {There was no active code access to revoke} one {Code access revoked (# token)} other {Code access revoked (# tokens)}}","revoke_all_error":"Couldn't revoke the code access. Try again.","done":"Done","managed":{"title":"This site is managed in code","since":"A developer has had access to this site's code since {date}.","new_token":"Get a new access token","new_token_hint":"Use this if your token expired or you lost it. Tokens you got before stop working.","new_token_title":"Get a new access token?","new_token_description":"Every access token you got before for this site's code stops working right away. Access with an hour or less left ends on its own. This can't be undone.","new_token_confirm":"Get a new token","close":"Close"}},"tracking":{"title":"Tracking","description":"Send bookings and enquiries from this site to your analytics and ad accounts. Browser tags load only for visitors who accept cookies.","read_only":"You can view these settings. Ask someone who manages the booking engine to change them.","status":{"active":"Active","disabled":"Paused","error":"Needs attention","pending_oauth":"Waiting for Google"},"enabled_label":"Send events to this account","secret_saved":"Saved. Leave empty to keep it.","last_success_label":"Last success","last_error_label":"Last error","never":"Never","save":"Save","saving":"Saving…","save_success":"Tracking settings saved","save_error":"Couldn't save the tracking settings","remove":"Remove","remove_title":"Remove this connection?","remove_description":"Events stop going to this account. You can connect it again later.","cancel":"Cancel","confirm_remove":"Remove","remove_success":"Connection removed","remove_error":"Couldn't remove the connection","test":{"button":"Send test event","running":"Sending…","error":"Couldn't run the test. Try again.","ok":"Test event accepted.","invalid":"The account rejected an ID. Check the IDs and save again.","unauthorized":"The account refused access. Check the secret or token.","not_found":"The account couldn't find this ID. Check it and save again.","unavailable":"The service didn't answer. Try again in a few minutes.","missing_secret":"Add the secret before testing.","test_code_required":"Add a test event code before testing, so the test doesn't count as a real event.","not_testable":"This connection has nothing to test. Check it in the tag's own preview tool.","reauth_required":"Google access expired. Reconnect your Google account.","payload_only":"The event format is valid, but Google doesn't check the API secret here. Confirm a test purchase shows in GA4 Realtime."},"ga4":{"description":"Measure visits and bookings. Purchases are also sent from our server, so ad blockers don't hide them.","measurement_id":{"label":"Measurement ID","description":"In Google Analytics: Admin, Data streams, your web stream."},"api_secret":{"label":"Measurement Protocol API secret","description":"Create one in the same web stream, under Measurement Protocol API secrets."},"picker":{"not_connected":"Connect your Google account to choose your website from a list. No codes to copy.","connect":"Connect Google","reconnect":"Reconnect Google","connected_as":"Connected as {email}","connected":"Google account connected","reauth_required":"Google access expired. Reconnect to choose from your Google Analytics properties.","switch_account":"Use another Google account","property_label":"Google Analytics property","property_placeholder":"Choose a property","stream_label":"Website","stream_placeholder":"Choose your website","no_properties":"This Google account has no Google Analytics properties. Create one in Google Analytics, or use another account.","no_streams":"This property has no website stream yet.","create_stream":"Create a stream for this site","create_stream_refused":"Google refused to create the stream. The connected Google account needs Editor access to this property.","create_secret":"Create secret","create_secret_refused":"Google refused to create the secret. The connected account needs Editor access, and the property must have acknowledged user data collection in Google Analytics (Admin → Data streams → Measurement Protocol API secrets).","save_to_create_secret":"Save to create the Measurement Protocol secret for this stream.","secret_created":"Measurement Protocol secret created","open_google_analytics":"Open Google Analytics","create_error":"Couldn't create it in Google Analytics. Try again."}},"google_ads":{"description":"Upload bookings to Google Ads as conversions, using the ad click that brought the guest.","not_connected":"Connect the Google account that manages your Google Ads account.","connect":"Connect Google account","reconnect":"Reconnect Google account","connect_error":"Couldn't start the Google connection. Try again.","connected_as":"Connected as {email}","reauth_required":"Google access expired. Reconnect to keep sending conversions.","customer_id":{"label":"Customer ID","description":"The 10-digit ID at the top of Google Ads. Dashes are fine."},"login_customer_id":{"label":"Manager account ID (optional)","description":"Only when you reach this account through a manager account."},"purchase_conversion_action_id":{"label":"Booking conversion action ID","description":"In Google Ads: Goals, Conversions, your booking action. Use its numeric ID."},"lead_conversion_action_id":{"label":"Enquiry conversion action ID (optional)","description":"A separate action for enquiries, if you track them."},"tag_id":{"label":"Google tag ID (optional)","description":"Starts with AW-. Used for remarketing audiences only."}},"meta":{"description":"Send bookings to Meta through the pixel and the Conversions API.","pixel_id":{"label":"Pixel ID","description":"In Events Manager: Data sources, your pixel."},"access_token":{"label":"Conversions API access token","description":"Generate it in the pixel's settings, under Conversions API."},"test_event_code":{"label":"Test event code (optional)","description":"While this is set, every event is a test event. Clear it when you are done testing."}},"gtm":{"description":"Load your own Google Tag Manager container on every page of the site.","container_id":{"label":"Container ID","description":"Starts with GTM-. Shown at the top of your Tag Manager workspace."}},"callback":{"connecting":"Connecting your Google account…","success_title":"Google account connected","success_description":"Go back to the booking site's Tracking settings to finish setting up Google Ads.","error_title":"Couldn't connect your Google account","denied":"Google access wasn't granted. Start again and allow access.","missing_params":"The link from Google is incomplete. Start the connection again.","failed":"The connection didn't go through. Start it again from the Tracking settings.","back":"Back to the dashboard","success_description_search_console":"Next, choose the Search Console property for this booking site in its analytics.","back_to_analytics":"Back to booking site analytics","back_to_tracking":"Back to tracking settings","success_description_analytics":"Go back to the booking site's Tracking settings to choose your Google Analytics website."},"manual_toggle":"Enter IDs manually"},"experiments":{"title":"Experiments","description":"Split visitors between the live version of this site and another version — an earlier one, or a preview that has never been live — then keep the one that books more.","read_only":"You can view experiments. Ask someone who manages the booking engine to start or stop one.","new":"New experiment","new_disabled_running":"Stop the running experiment before you start another.","empty":"No experiments yet.","col_versions":"Versions","col_split":"Split","col_status":"Status","col_started":"Started","col_actions":"Actions","version_a":"Version A · {commit}","version_b":"Version B · {commit}","split_value":"{b}% to version B","status":{"running":"Running","stopped":"Stopped"},"outcome":{"a":"Version A kept","b":"Version B promoted","none":"No winner"},"stop":"Stop experiment","keep":"Keep version A","promote":"Promote version B","show_results":"Show results","hide_results":"Hide results","results":{"col_variant":"Version","col_sessions":"Sessions","col_bookings":"Bookings","col_conversion":"Conversion rate","col_revenue":"Revenue","variant_a":"Version A (live)","variant_b":"Version B","note":"Sessions are counted once a day and only for visitors who accepted analytics cookies. Bookings and revenue are up to date; the conversion rate only counts bookings from days whose sessions are in.","error":"Couldn't load the results."},"create":{"title":"New experiment","description":"Version A is the version that is live now. Choose the version to test against it: an earlier version, or a preview that has never been live.","variant_b_label":"Version B","variant_b_option":"{commit} · built {date}","kind_standby":"Earlier version","kind_preview":"Preview from the branch {branch}","no_candidates":"There is no version to test yet. Push the new version to a preview branch, or deploy it and roll back to the version you want as A, then start the experiment.","split_label":"Visitors sent to version B (%)","split_help":"A new visitor is assigned once and keeps the same version on every visit.","cancel":"Cancel","submit":"Start experiment","confirm_title":"Start this experiment?","confirm_description":"{percent}% of new visitors will see version B as soon as you start.","confirm":"Start","error":"Couldn't start the experiment"},"stop_confirm":{"title":"Stop this experiment?","description":"Every visitor gets version A again and no winner is recorded. This can't be undone, but you can start a new experiment afterwards.","confirm":"Stop without a winner","error":"Couldn't stop the experiment"},"keep_confirm":{"title":"Keep version A?","description":"Every visitor gets version A again and version A is recorded as the winner. This can't be undone, but you can start a new experiment afterwards."},"promote_confirm":{"title":"Promote version B?","description":"Version B becomes the live version for every visitor and the experiment ends. To undo it, restore version A in the versions list.","description_preview":"Version B becomes the live version for every visitor and the experiment ends. Version B is a preview from the branch {branch}: the site's main branch does not contain its code until you merge it, and the next publish of the main branch would replace it. To undo it, restore version A in the versions list.","confirm":"Promote version B","error":"Couldn't promote version B"},"no_candidates":"There is no version to test yet. Push the new version to a preview branch, or publish it and restore the version you want as A, then start the experiment."},"checkout":{"title":"Booking checkout","description":"Ask guests for extra details and offer add-ons while they book. Both appear in fixed places in the checkout, and everything you write is shown as plain text.","read_only":"You can view these settings. Ask someone who manages the booking engine to change them.","save":"Save","saving":"Saving…","save_success":"Checkout settings saved","save_error":"Couldn't save the checkout settings","fields":{"title":"Custom fields","description":"Questions the guest answers before paying. The answers show on the reservation in SuiteOp; they aren't sent to your PMS yet.","empty":"No custom fields yet.","add":"Add field","limit":"Up to {max} fields.","field_n":"Field {n}","label":"Label","key":"Field key","key_description":"Made from the label for a new field. Lowercase letters, numbers and underscores, starting with a letter. It files the guest's answer on the booking, so keep it once guests have answered.","type":"Type","types":{"text":"Short text","textarea":"Long text","select":"Dropdown","checkbox":"Checkbox","number":"Number","date":"Date"},"required":"Required","max_length":"Maximum length","min":"Minimum","max":"Maximum","options":"Options","option_value":"Value","option_label":"Option label","add_option":"Add option","remove_option":"Remove option","remove":"Remove field","label_description":"The question guests see at checkout.","advanced":"Advanced"},"upsells":{"title":"Add-ons at booking","description":"Guests can add these upsells while they book and pay for them with the stay. An upsell is offered only when it applies to the listing, is priced in the booking's currency, and SuiteOp charges the booking at checkout. Paid upsells are posted to your PMS as charges; free ones aren't sent to your PMS yet.","empty":"No purchase upsells yet. Create one in the guest portal's upsells.","limit":"Up to {max} upsells."}},"ai_editor":{"title":"Edit with AI","description":"Describe a change and the assistant makes it on a private copy of your site. Nothing goes live until you review the changes and publish them.","start":"Start editing","start_hint":"The assistant starts from your site as it is today.","earlier_title":"Earlier sessions","status_open":"Open","status_merged":"Published","status_discarded":"Discarded","chat_empty":"Tell the assistant what to change. For example: “Change the hero title to Sea Breeze.”","you":"You","assistant":"Assistant","message_label":"Your request","message_placeholder":"Describe the change you want…","send":"Send","working":"Working on it… This can take a few minutes.","changed_files":"{count, plural, one {# file changed} other {# files changed}}","turn_interrupted":"This request stopped before the assistant replied. The changes it made are kept.","stopped_step_cap":"The assistant reached its step limit for one request. The changes so far are kept. Send another message to continue.","stopped_token_cap":"The assistant reached its size limit for one request. The changes so far are kept. Send another message to continue.","stopped_output_cap":"The assistant's reply was cut off at its length limit. The changes so far are kept. Send another message to continue.","budget_exhausted":"This session has used all of its AI allowance. Publish or discard it, then start a new one.","tab_changes":"Changes","tab_preview":"Preview","no_changes":"No changes yet.","diff_added":"Added","diff_modified":"Changed","diff_deleted":"Deleted","diff_binary":"This file isn't text, so it can't be shown here.","diff_truncated":"This file is long. Only the beginning is shown.","diff_unchanged":"Unchanged lines not shown: {count}","diff_more_files":"Only the first {count} changed files are shown.","preview_none":"No preview yet. One is built after the assistant changes a file.","preview_waiting":"The preview is being built. This takes a few minutes.","preview_ready":"The preview is ready and passed every check.","preview_failed":"The preview didn't pass its checks. Ask the assistant to fix what is listed below.","preview_not_mergeable":"This preview can't be published. Ask the assistant for another change to build a new one.","preview_checkout_note":"On the preview of a live site, checkout is turned off, so no real booking can be made there.","merge":"Publish changes","merge_hint":"You can publish once the preview is ready and has passed its checks.","merge_hint_changes":"You can publish once the latest changes are shown under Changes.","merge_hint_too_many_files":"Too many files changed to show them all, so these changes can't be published.","merge_title":"Publish these changes?","merge_description":"Files changed: {count}. Publishing replaces your live site with these changes. This can't be undone from here.","merged":"Published. Your changes are going live.","merged_not_deployed":"Saved to your site. Publish it from Advanced, then Versions, to make it live.","discard":"Discard","discard_title":"Discard this session?","discard_description":"Every change the assistant made in this session is thrown away. Your live site is not affected.","discarded":"Session discarded.","behind":"Your site changed after this session started, so these changes can't be published. Start again from the latest version and repeat your request.","restart":"Start again from latest"},"wizard":{"description":"A few quick questions so your site starts out looking like your business. Nothing is created until the last step.","steps":"Setup steps","progress":"Setup progress","step_of":"Step {step} of {total}","next":"Next","back":"Back","discard_title":"Discard this site setup?","discard_description":"Your choices so far aren't saved. You can start again any time.","discard_confirm":"Discard","discard_cancel":"Keep setting up","properties":{"title":"Your properties","description":"Choose the properties guests can book on this site. We selected every property that's ready for bookings.","choose":"Choose properties","selected":"{count} of {total} selected","empty":"You don't have any properties yet. You can create the site now and add them later.","load_failed_continue":"You can still continue: the site starts with every property that's ready for bookings.","not_bookable_note":"{count, plural, one {# property can't} other {# properties can't}} take bookings yet. They still show on your site and start taking bookings once fixed.","max":"A site can sell up to {max} properties."},"layout":{"title":"Your business","description":"This decides how your site's pages are organized. You can change it later.","question":"What best describes your business?","suggested":"Suggested","listings":{"name":"Vacation rentals","hint":"Homes and apartments, each booked on its own. Guests browse and search all of them.","why":"We suggest Vacation rentals because your properties are at different addresses."},"locations":{"name":"Buildings or aparthotel","hint":"Units in one or more buildings. Guests pick a building, then a unit.","why":"We suggest Buildings or aparthotel because several of your properties share an address."},"areas":{"name":"By neighborhood","hint":"Stays spread over towns or neighborhoods. Guests pick an area first.","why":"We suggest By neighborhood because your properties are in several towns."},"single":{"name":"Single property or boutique hotel","hint":"One place to stay. The whole site is about it.","why":"We suggest Single property because you chose one property."}},"brand":{"title":"Your brand","description":"Your name, logo and colors. We started from your SuiteOp brand. Change anything you like.","name":"Site name","name_hint":"Guests see this name on your site.","import_label":"Import from your website","import_placeholder":"yourwebsite.com","import_hint":"We read the logo, colors and fonts from your website. You can change them after.","import":"Import","importing":"Importing…","import_found":"Done. We filled in what we found on your website.","import_nothing":"We couldn't find a logo or colors on that website. Pick them below instead.","import_failed":"Couldn't import from that website. Try again, or pick your brand below.","logo":"Logo","logo_hint":"Shown on light backgrounds.","logo_on_dark":"Logo for dark backgrounds","logo_on_dark_hint":"Optional. A white or light version, for photos and dark sections.","colors":"Colors","colors_hint":"Pick a palette or your own brand color. The theme builds every other shade from it and keeps text easy to read.","own_brand":"Your brand","preview":"Preview","preview_hint":"Shown in the {theme} theme. You choose the theme next.","palettes":{"ocean":"Ocean","lagoon":"Lagoon","sky":"Sky","forest":"Forest","sage":"Sage","olive":"Olive","sand":"Sand","terracotta":"Terracotta","sunset":"Sunset","coral":"Coral","blush":"Blush","plum":"Plum","royal":"Royal blue","midnight":"Midnight","slate":"Slate","charcoal":"Charcoal"}},"theme":{"title":"Look and feel","description":"Pick a theme. Each one is shown with your logo, colors and properties.","question":"Choose a theme","fonts":"Fonts","fonts_hint":"Each theme comes with its own fonts. Pick another pair if you prefer.","fonts_theme":"Theme's own: {fonts}","fonts_imported":"From your website: {fonts}","fonts_sample_heading":"Stay with us"},"review":{"title":"Review and create","description":"Check your choices. You can change all of them later in the site's settings.","name":"Name","properties":"Properties","properties_value":"{count, plural, =0 {None yet} one {# property} other {# properties}}{unbookable, plural, =0 {} other { (# not ready for bookings)}}","properties_default":"Every property that's ready for bookings","layout":"Business type","theme":"Theme","colors":"Colors","colors_default":"Your organization's brand color","fonts":"Fonts","logo":"Logo","logo_none":"No logo. Your site's name is shown instead.","change":"Change {item}","change_short":"Change","bookings_off":"Bookings stay off for now. Your site goes live so you can check it, and you turn on bookings when you're ready."}}},"booking_sites_seo":{"title":"Search engines and AI","description":"How Google and AI assistants find and describe your site. Changes apply within a minute.","read_only":"You can view these settings. Ask someone who manages the booking engine to change them.","ai_crawlers":{"title":"AI assistants","description":"Choose whether AI assistants, such as ChatGPT, may read your site and recommend it to travelers."},"presets":{"allow_all":{"label":"Allow all","description":"AI assistants and answer engines can read and cite your site. Recommended."},"search_only":{"label":"Search only","description":"AI search engines can cite your site; crawlers that collect training data are blocked."},"block_all":{"label":"Block all","description":"No AI crawler may read your site."}},"overrides":{"title":"Rules for individual AI crawlers","description":"Change the choice above for one crawler only.","options":{"preset":"Use preset","allow":"Allow","disallow":"Block"}},"llms_summary":{"label":"Summary for AI assistants (llms.txt)","description":"A short description of your business that AI assistants read first."},"robots_append":{"label":"Additional robots.txt rules","description":"Added as-is to the end of robots.txt. Only change this if you know what it does."},"save":"Save","saving":"Saving…","save_success":"SEO settings saved","save_error":"Couldn't save SEO settings","redirects":{"title":"Redirects","description":"Send visitors and search engines from old addresses to new ones.","add":"Add redirect","empty":"No redirects yet.","from_path":"From path","to_url":"To","status_code":"Type","status_301":"Permanent (301)","status_302":"Temporary (302)","actions":"Actions","edit":"Edit","delete":"Delete","confirm_delete":"Delete","cancel":"Cancel","save":"Save","dialog_create_title":"Add redirect","dialog_edit_title":"Edit redirect","delete_title":"Delete this redirect?","delete_description":"Visitors to the old address will no longer be sent to the new one.","save_success":"Redirect saved","save_error":"Couldn't save the redirect","delete_success":"Redirect deleted","delete_error":"Couldn't delete the redirect"},"privacy":{"title":"Privacy","description":"The cookie banner shown to visitors of this site, and the Google Consent Mode signals it sends. Changes apply within a minute.","mode":{"label":"Cookie consent","regional":{"label":"Regional (recommended)","description":"Visitors in the EEA, the UK and Switzerland see the banner and are opted out until they accept. Everyone else is opted in."},"strict":{"label":"Strict","description":"Every visitor sees the banner and is opted out until they accept."}},"privacy_policy_url":{"label":"Privacy policy link","description":"Shown in the cookie banner. A page on this site (/privacy) or a full https:// address."},"save":"Save","saving":"Saving…","save_success":"Privacy settings saved","save_error":"Couldn't save privacy settings","pending_domain":"No domain is live for this site yet, so visitors get the regional default. These settings apply once the site is published on its domain."},"advanced":"Advanced settings"},"calry":{"reconnect_account_mismatch":"Calry returned a different account than the one you are reconnecting. Sign in to the same PMS account and try again.","reconnect_target_not_found":"This account can't be reconnected. It may have been disconnected or removed."},"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","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.","support_impersonated":"You can't message the SuiteOp team while signed in as another user."},"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…","irreversible_hint":"This cannot be undone.","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 time zone…","zone_unavailable":"Property time zone unavailable. Times are shown in the organization's time zone.","zone_unavailable_utc":"Time zone unavailable. Times are shown in UTC.","status_executing":"Executing...","value_yes":"Yes","value_no":"No","value_cleared":"Cleared","user_approved":"Approved","user_rejected":"Rejected","email_preview":"Email preview","enum_assignment_mode_auto":"Auto-assign","enum_assignment_mode_property_default":"Property default","enum_assignment_mode_specific":"Specific person","enum_assignment_mode_unassigned":"Unassigned","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_event_anchor_check_in":"Check-in","enum_event_anchor_check_out":"Check-out","enum_event_anchor_confirmation":"Booking confirmed","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_occupancy_stay_operator_between":"Is between","enum_occupancy_stay_operator_eq":"Is equal to","enum_occupancy_stay_operator_gt":"Is greater than","enum_occupancy_stay_operator_gte":"Is greater than or equal to","enum_occupancy_stay_operator_lt":"Is less than","enum_occupancy_stay_operator_lte":"Is less than or equal to","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_rms":"RMS Cloud","enum_pms_provider_amenitiz":"Amenitiz","enum_pms_provider_resly_direct":"Resly","enum_pms_provider_zeevou_direct":"Zeevou","enum_pms_provider_hostfully_direct":"Hostfully","enum_pms_provider_apaleo":"Apaleo","enum_pms_provider_avantio_direct":"Avantio","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_recurrence_type_daily":"Daily","enum_recurrence_type_monthly":"Monthly","enum_recurrence_type_weekly":"Weekly","enum_reschedule_fallback_keep_original":"Keep the original date","enum_reschedule_fallback_skip":"Skip this occurrence","enum_reschedule_target_check_in_only":"Check-in only day","enum_reschedule_target_check_out_only":"Check-out only day","enum_reschedule_target_fully_vacant":"Fully vacant day","enum_reschedule_target_turn":"Same-day turn","enum_result_fail":"Fail","enum_result_flag":"Flag","enum_result_na":"N/A","enum_result_pass":"Pass","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_scope_type_property":"Property","enum_scope_type_property_group":"Property group","enum_scope_type_tag":"Tag","enum_source_rule_type_all_except_selected":"All except selected","enum_source_rule_type_only_selected":"Only selected","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_recurring":"Recurring","enum_type_reservation":"Reservation","enum_type_text":"Text","enum_type_yes_no":"Yes No","enum_vacancy_gap_operator_between":"Is between","enum_vacancy_gap_operator_eq":"Is equal to","enum_vacancy_gap_operator_gt":"Is greater than","enum_vacancy_gap_operator_gte":"Is greater than or equal to","enum_vacancy_gap_operator_lt":"Is less than","enum_vacancy_gap_operator_lte":"Is less than or equal to","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","enum_variant_every":"Every time","enum_variant_no_turn":"Only when there's no same-day turn","enum_variant_turn":"Only on same-day turns","param_add":"Add","param_address_override":"Address Override","param_assignee_org_connection_id":"Partner company","param_assignee_user_id":"Assignee User","param_assignment_mode":"Assignment","param_auto_assign":"Auto-assign","param_bathroom_count":"Bathroom Count","param_bed_count":"Bed Count","param_bedroom_count":"Bedroom Count","param_booking_channels":"Booking channels","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_choice_id":"Answer","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_day_of_month":"Day of month","param_days_of_week":"Days of week","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_date":"End date","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_event_anchor":"Trigger","param_external_reservation_id":"External Reservation","param_fail_requires_issue":"Fail Requires Issue","param_fail_requires_photo":"Fail Requires Photo","param_field":"Field","param_first_name":"First Name","param_fixed_code":"Fixed Code","param_flag_requires_issue":"Flag Requires Issue","param_flag_requires_photo":"Flag Requires Photo","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_active":"Active","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_graded":"Scored","param_is_inspection_required":"Is Inspection Required","param_is_manager":"Manager","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_items":"Tasks","param_kind":"Kind","param_label":"Label","param_last_name":"Last Name","param_latitude":"Latitude","param_link_next_stay_max_gap_nights":"Link next stay within (nights)","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_cadence_days":"Every N days of stay","param_occupancy_max_stay_days":"Maximum stay (days)","param_occupancy_method":"Occupancy Method","param_occupancy_min_stay_days":"Stay length (days)","param_occupancy_permission_to_enter":"Permission to enter","param_occupancy_repeats":"Repeats during stay","param_occupancy_stay_operator":"Stay length comparison","param_offset_minutes":"Offset (minutes)","param_option_set_id":"Answer List","param_ordered_ids":"Answer Order","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_rank":"Order","param_recurrence_interval":"Repeat every","param_recurrence_type":"Repeats","param_remove":"Remove","param_repeat_annually":"Repeat every year","param_replace":"Replace","param_required_skill_id":"Required Skill","param_reschedule_fallback":"If no day is found","param_reschedule_if_occupied":"Reschedule if occupied","param_reschedule_target":"Move to","param_reschedule_window_days":"Search window (days)","param_reservation_id":"Reservation","param_result":"Result","param_results":"Results","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_scope_type":"Applies to","param_scopes":"Where it applies","param_server_id":"Server","param_skill_ids":"Skill","param_sort_order":"Sort Order","param_source_rule_type":"Channel rule","param_source_text":"Source Text","param_start_date":"Start date","param_start_paused":"Start paused","param_start_time":"Start Time","param_state":"State","param_status":"Status","param_stay_max_nights":"Maximum nights","param_stay_min_nights":"Minimum nights","param_street_address":"Street Address","param_subtotal_cents":"Subtotal Cents","param_tag_id":"Tag","param_target_category_id":"Section","param_task_id":"Task","param_task_name":"Task name","param_temperature":"Temperature","param_template_id":"Template","param_time_of_day":"Time","param_timezone":"Timezone","param_title":"Title","param_to_value":"To Value","param_trigger":"Trigger","param_type":"Type","param_unit_number":"Unit Number","param_user_id":"Person","param_vacancy_cadence_days":"On day N of vacancy","param_vacancy_final_before_arrival":"Final task before arrival","param_vacancy_final_offset_days":"Days before arrival","param_vacancy_gap_operator":"Gap comparison","param_vacancy_max_gap_days":"Maximum gap (days)","param_vacancy_min_gap_days":"Empty gap (days)","param_vacancy_repeats":"Repeats during vacancy","param_value":"Value","param_variant":"Fires on","param_video_url":"Video Url","param_wifi_name":"Wifi Name","param_wifi_password":"Wifi Password","param_workflow_id":"Workflow","param_workflows":"Workflows","tool_addAnswerListChoice":"Add answer","tool_addEntityScopes":"Add entity scopes","tool_addGuidePlace":"Add guide place","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_archiveAnswerList":"Archive answer list","tool_assignDeviceToProperty":"Assign device to property","tool_assignPortalToProperty":"Assign portal to property","tool_cancelReservation":"Cancel reservation","tool_createAnswerList":"Create answer list","tool_createCode":"Create code","tool_createDepartment":"Create department","tool_createDropBoxUpload":"Get photo upload link","tool_createElementCatalogEntry":"Create element catalog entry","tool_createGuideList":"Create guide list","tool_createImageDropBox":"Open photo drop box","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_createRecurringTaskSchedule":"Create recurring task schedule","tool_createReservation":"Create reservation","tool_createReservationTaskSchedule":"Create reservation task schedule","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_deleteElementCatalogEntry":"Delete element catalog entry","tool_deleteGuideList":"Delete guide list","tool_deleteInstruction":"Delete instruction","tool_deletePortalManualCategory":"Delete portal manual category","tool_deletePropertyElement":"Delete property element","tool_deleteTask":"Delete task","tool_delete_workflow":"Delete workflow","tool_duplicateAnswerList":"Duplicate answer list","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_removeAnswerListChoice":"Remove answer","tool_removeEntityScopes":"Remove entity scopes","tool_removeGuidePlace":"Remove guide place","tool_removePropertyScope":"Remove property scope","tool_removeTemplateChecklistItem":"Remove template checklist item","tool_removeTemplateGroup":"Remove template group","tool_remove_workflow_plugin":"Remove workflow plugin","tool_reorderAnswerListChoices":"Reorder answers","tool_reorderGuidePlaces":"Reorder guide places","tool_reorderGuideLists":"Reorder guide lists","tool_reorderInstruction":"Reorder instruction","tool_reorderUpsell":"Reorder upsell","tool_reorderPortalManualCategories":"Reorder portal manual categories","tool_reorderTemplateChecklistItems":"Reorder template checklist items","tool_reorderTemplateGroups":"Reorder template groups","tool_restoreAnswerList":"Restore answer list","tool_retranslateGuideText":"Retranslate guide text","tool_setAnswerListScoring":"Set answer list scoring","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_toggleTaskSchedule":"Pause or start task schedule","tool_unlockDevice":"Unlock device","tool_unpublish_workflow":"Unpublish workflow","tool_updateAnswerList":"Update answer list","tool_updateAnswerListChoice":"Update answer","tool_updateCheckInState":"Update check-in state","tool_updateCode":"Update code","tool_updateDepartment":"Update department","tool_updateDepartmentMembers":"Change department members","tool_updateElementCatalogEntry":"Update element catalog entry","tool_updateEmailTemplate":"Update email template","tool_updateEntityScopes":"Update entity scopes","tool_updateGuideList":"Update guide list","tool_updateGuidePlace":"Update guide place","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_updateTaskSchedule":"Update task schedule","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","tool_contactSupport":"Contact the SuiteOp team"},"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 playbooks...","loading_agent":"Loading playbook...","creating_agent":"Creating playbook...","updating_agent":"Updating playbook...","modifying_agent":"Editing playbook steps...","publishing_agent":"Publishing playbook...","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","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","plugin_connect_title":"Connect {name}","plugin_connect_hint":"Enter the credentials in this secure form — never paste them into the chat.","plugin_connect_button":"Enter credentials","plugin_connect_done":"{name} connected"},"support":{"talk_to_person":"Talk to a person","team_label":"SuiteOp team","divider_handed_off":"Handed to the SuiteOp team · {time}","divider_resolved":"Resolved by {agent} · Opal is back","divider_resolved_team":"Resolved by the SuiteOp team · Opal is back","banner":"The team usually replies within 2 hours (Mon–Fri 9–5 ET). Need Opal for something else?","banner_new_chat":"Start a new chat.","sending":"Sending…","card":{"title":"Send this to the SuiteOp team?","summary_label":"What Opal will share","note_label":"Add a note (optional)","note_label_required":"What do you need help with?","send":"Send to the team","keep_chatting":"Keep chatting with Opal","sent":"Sent to the SuiteOp team","unreachable":"We couldn't reach the team right now. Email support@suiteop.com or try again in a few minutes.","rate_limited":"You've reached today's limit for new support requests. Email support@suiteop.com if it's urgent.","not_permitted":"Support can't be contacted from this session.","disabled":"Contacting the team isn't available for this workspace."},"section":{"title":"Support","past":"Past","status_new_reply":"New reply","status_waiting":"Waiting on the team","status_resolved":"Resolved","untitled":"Support conversation"},"toast":{"new_reply":"{agent} from SuiteOp replied","new_reply_team":"The SuiteOp team replied","view":"View"}}},"check_in_builder":{"page":{"title":"Bulk check-in & check-out instructions","description":"How guests get in and out. Write it once, apply it to many properties, and each guest sees their own door code and WiFi.","back_to_property":"Back to {property}","back_to_property_generic":"Back to property settings","read_only":"Only people who can change properties can edit these 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":"Properties","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","not_set":"not 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","preview_only_toast":"Preview only. Nothing was sent."},"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}}","bar_unsaved":"{property} · unsaved changes","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."}},"claims":{"row":{"report_damage":"Report damage","open_claim":"Open claim","pending":"Waiting for Truvi…","title":"Damage claim","none_filed":"No claim has been filed for this stay.","summary":{"incomplete":"Draft. Not yet submitted to Truvi.","incident_reported":"Submitted. Truvi's claims team is reviewing it.","insufficient_details":"Truvi needs more details before it can continue.","resolution_offered":"Truvi has made a settlement offer that needs your response.","resolution_accepted":"You accepted Truvi's offer. Payment is on its way.","resolution_declined":"You declined Truvi's offer. The claims team is reviewing your reason.","ready_for_payment":"Approved. Truvi is processing the payment.","paid":"Truvi has paid out this claim.","rejected":"Truvi rejected this claim. The claims team's reason is in the messages."},"action":{"continue_draft":"Continue claim","add_details":"Add details","review_offer":"Review offer"},"screening_locked":"Re-screen and cancel are unavailable while a claim exists."},"blocked":{"not_configured":"Damage claims are not enabled for this workspace.","no_verification":"The guest must be screened before a claim can be filed.","unsupported_currency":"Claims can only be filed for reservations in GBP, USD, EUR, CAD, AUD, ZAR or PLN."},"status":{"incomplete":"Draft","incident_reported":"Under review","insufficient_details":"More details needed","resolution_provided":"Offer received","ready_for_payment":"Approved for payment","paid":"Paid","rejected":"Rejected"},"settlement":{"offered":"Offer awaiting your response","accepted":"Offer accepted","declined":"Offer declined"},"category":{"damage":"Damage","excessive_cleaning":"Excessive cleaning","missing":"Missing","stolen":"Stolen"},"age":{"unknown":"Unknown","less_than_one_year":"Less than 1 year","one_year":"1 year","two_years":"2 years","three_years":"3 years","four_years":"4 years","five_years":"5 years","six_to_seven_years":"6–7 years","eight_to_ten_years":"8–10 years","more_than_ten_years":"More than 10 years"},"evidence":{"before_damage_evidence":"Before photos","after_damage_evidence":"After photos","original_invoice_evidence":"Original invoice","repair_cost_evidence":"Repair quote or receipt","required":"Required","optional":"Optional","failed":"Upload failed","retry":"Retry","remove":"Remove","add_file":"Add file","too_large":"The file is larger than {max} MB.","upload_failed":"The file could not be uploaded.","view":"View {name}","open_file":"Open file","preview_title":"Evidence photo"},"pending":{"submit":"Submitting to Truvi…","payout_response":"Sending your response to Truvi…"},"auto_delete":{"first":"This draft will be deleted by Truvi in about 29 days unless it is submitted.","second":"This draft will be deleted by Truvi in about 20 days unless it is submitted.","third":"This draft will be deleted by Truvi in about 10 days unless it is submitted.","final":"This draft will be deleted by Truvi in about 3 days unless it is submitted.","notice":"Truvi will delete this draft around {date} unless it is submitted."},"sheet":{"title":"Damage claim","new_title":"Report damage","description_label":"What happened","description_placeholder":"Describe the damage and how it was discovered…","save":"Save changes","file_claim":"Start claim","refresh":"Refresh","items_title":"Damaged items","no_items":"Add at least one damaged item before submitting.","add_item":"Add item","edit_item":"Edit","remove_item":"Remove","remove_item_confirm_title":"Remove this item?","remove_item_confirm_body":"The item and its evidence are removed from the claim.","item_name":"Item","item_age":"Age of the item","item_category":"Type of claim","item_damage":"Damage description","item_repair_cost":"Repair or replacement cost","item_original_amount":"Original purchase price (optional)","save_item":"Save item","cancel":"Cancel","locked":"Submitted","settlement_for_item":"offered {amount}","comments_title":"Messages","no_comments":"No messages yet.","comment_placeholder":"Write a message to the Truvi claims team…","send":"Send","truvi_agent":"Truvi claims team","settlement_title":"Settlement offer","settlement_offered_on":"offered on {date}","settlement_response":"Your response","approve":"Approve payout","decline":"Decline offer","decline_reason":"Reason for declining","submit":"Submit for review","submit_blocked":"Missing evidence — {list}","submit_wait":"Wait for the uploads to finish before submitting.","delete":"Delete claim","delete_confirm_title":"Delete this claim?","delete_confirm_body":"The claim is removed at Truvi and cannot be recovered.","bounce_title":"Editing reopens the claim","bounce_body":"This claim was already submitted. Saving changes moves it back to draft and it must be submitted again.","continue":"Continue","approve_confirm_title":"Approve this payout?","approve_confirm_body":"Truvi will pay {amount}. This cannot be undone.","decline_confirm_title":"Decline this offer?","decline_confirm_body":"The claim goes back to the Truvi claims team with your reason."},"errors":{"generic":"Truvi could not process that request. Try again in a moment."}},"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.","reconnect_required":"The lock's integration needs reconnecting. This code will be sent once it is.","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","rotation_held":"SuiteOp won't change this V1 door code's PIN on its own. Retry the code or change the stay to issue a new one.","migrated_absent":"This V1 door code is no longer on the lock, and SuiteOp didn't put it back on its own. Retry the code or edit its PIN to restore it.","migrated_v1_revoked":"V1 revoked this door code. SuiteOp never puts it back on the lock.","unknown":"Status unknown","ttlock_offline_undeletable":"TT Lock cannot delete an offline passcode remotely. It stays valid on the lock until {endTime}.","ttlock_offline_undeletable_permanent":"TT Lock cannot delete a permanent offline passcode remotely, and it still opens the lock. Remove it from the lock keypad or the TTLock app.","ttlock_offline_unchangeable":"TT Lock cannot change an offline passcode once it is issued. It keeps its original dates on the lock. Create a new code for the new dates."},"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.","org_muted":"Device changes are paused while outbound communications are paused for this organization. Status, readings, and synchronization remain available.","push_disabled":"Code writing is turned off for this integration account.","reconnect_required":"This device's integration needs to be reconnected before SuiteOp can make changes to it. Reconnect it from the Integrations page, then try again.","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"},"withheld":{"label":"Hidden","available":"Available {date}","no_upcoming_task":"No upcoming task","explanation":"Door codes are shown from 00:00 on the day of your task at the property."},"management":{"title":"Manage code","description":"Review this code’s status and save supported settings.","failure_details":"Latest failure details","update_requested":"Changes requested. Check the code status for confirmation.","cannot_clear_start":"This lock cannot remove an existing start time.","cannot_clear_end":"This lock cannot remove an existing end time.","inspect":"Inspect / settings","read_permission_required":"You need permission to view devices and lock codes.","reinstall":"Re-install","reinstall_title":"Re-install this code?","reinstall_description":"Reconcile this credential on its lock, preserving its PIN, name and access window. This does not change the guest code.","reinstall_queued":"Re-install requested. Check the code status for confirmation.","source_workflow":"This credential is managed by its reservation, user, or backup workflow. Use that workflow to change its settings."},"reservation_delete":{"title":"Delete access from this door?","description":"This removes only the selected door’s credential. Reservation auto-scheduling stays unchanged and may create access again. To stop access across all doors, use Revoke access.","queued":"Removal requested. The lock has not yet confirmed deletion.","local_removed":"The local access record was removed. No credential was deleted from the lock.","unnamed_door":"Selected door"}},"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","filters_more":"+{count} more","filters_clear_all":"Clear all","clear_filter":"Clear filter","clear_filter_named":"Clear {label} filter","no_matching_properties":"No matching properties","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}}","list_truncated":"Showing the first {shown} of {total}.","list_truncated_filtered":"Filtering only the first {shown} of {total}; the rest aren't loaded.","page_of":"Page {page} of {totalPages}","page_number":"Page {page}","no_results":"No results found","sort_ascending":"Sort by {column} ascending","sort_descending":"Sort by {column} descending","sort_clear":"Clear sorting by {column}","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.","grant_ceiling_refused":"You can’t grant permissions you don’t hold: {permissions}.","language_switcher":{"label":"Change language"},"menu":"Menu","saved_views":"Saved Views","saved_views_empty":"No saved views yet","saved_views_search_failed":"Couldn't search saved views.","saved_views_more_hint":"Showing {shown} of {total, plural, one {# view} other {# views}}. Search to find the rest.","saved_views_unsaved":"Unsaved changes","saved_views_default_view":"Default view","saved_views_tag_default":"Default","saved_views_tag_team_default":"Team default","saved_views_rename":"Rename…","saved_views_duplicate":"Duplicate…","saved_views_copy_title":"{name} copy","saved_views_make_my_default":"Make default for me","saved_views_make_team_default":"Make default for everyone","saved_views_remove_team_default":"Remove team default","saved_views_admins":"Admins","saved_views_delete_item":"Delete…","saved_views_save_to":"Save to {name}","saved_views_save_as_new_dialog":"Save as new view…","saved_views_discard":"Discard changes","saved_views_delete_named":"Delete “{name}”?","saved_views_delete_named_description":"The view is removed for everyone who uses it. Tasks are not affected. This can't be undone.","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_view":"Save view","saved_views_save_as_new":"Save as new view","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_not_saved_filters":"Not saved in this view: {filters}. They keep the setting you chose.","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","saved_views_more":"More views","saved_views_all_views":"All views","saved_views_built_in":"Built-in","saved_views_pin":"Pin to tabs","saved_views_pinned":"Pinned","saved_views_pin_named":"Pin {name} to tabs","saved_views_unpin_named":"Unpin {name} from tabs","saved_views_pin_hint":"Pinned views appear as tabs.","saved_views_default_label":"Open by default","saved_views_default_none":"Off","saved_views_default_user":"For me","saved_views_default_org":"For everyone","saved_views_default_org_hint":"Everyone in the organization opens this page on this view unless they set their own default.","saved_views_default_org_private":"Only organization views can be everyone's default.","saved_views_set_my_default":"Set as my default","saved_views_remove_my_default":"Remove my default","saved_views_set_org_default":"Set as organization default","saved_views_remove_org_default":"Remove organization default","saved_views_my_default":"My default","saved_views_org_default":"Organization default","saved_views_default_failed":"The view was saved, but it could not be made the default.","saved_views_default_updated":"Default view updated","saved_views_default_update_failed":"Couldn't update the default view","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","layout":"Layout","compact":"Compact","expanded":"Expanded","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.","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":"Playbook execution log is coming soon."},"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.","session_unconfirmed_title":"We couldn't confirm your session","session_unconfirmed_description":"Your session may have expired, or we couldn't reach our servers. Try again, or sign in again to continue.","session_unconfirmed_sign_in":"Sign in 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}}","unread_conversations":"{count, plural, one {# unread conversation} other {# unread conversations}}"},"group_expand":"Expand group","group_collapse":"Collapse group","rows_per_page":"Rows per page","time_picker":{"hour":"Hour","minute":"Minute","period":"AM/PM","hour_of":"{caption}, hour","minute_of":"{caption}, minute","period_of":"{caption}, AM/PM"},"whats_new":{"label":"What's new","unread":"New updates","title":"What's new","description":"The latest improvements and fixes in SuiteOp.","fix_count":"{count, plural, one {# fix} other {# fixes}} — see all","see_all":"See the full changelog"},"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 outbound is resumed.","refused":"Outbound communications are paused for this account, so nothing was sent. Contact SuiteOp support to resume them.","migration_refused":"Paused by your organization's migration.","lift_action":"Resume outbound","lift_confirm_title":"Resume outbound communications?","lift_confirm_body":"The migration is done. Messages, notifications, integrations and payments will go out again. Anything refused while outbound was paused is not re-sent.","lift_success":"Outbound communications resumed."},"ugc_email_hold":{"banner":"Email sending is paused for review. Guest and automation emails will go out again once SuiteOp has reviewed your account."},"launch_period":{"urgent":"{days, plural, one {# day} other {# days}} left in your launch period. Let's finish your setup.","today":"Today is the last day of your launch period. Let's finish your setup.","ended":"Your launch period has ended. Let's finish your setup.","days_left_pill":"{days, plural, one {# day left} other {# days left}}","last_day_pill":"Last day","finish_setup":"Finish setup","hide":"Hide for now"},"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_booking_engine":"This booking page did not carry over to the new SuiteOp. To book a stay, please contact your host.","body_generic":"This link is from the old SuiteOp and can't be opened here.","continue":"Continue to SuiteOp"},"entity_tags":{"more":"{count} more","load_failed":"Couldn't load the list.","manage_list":"Manage list","manage":"Add or remove labels","added_by_ai":"Added by AI","empty":"No labels yet.","conversation":{"manage":"Add or remove conversation labels","section":"This conversation","lifetime":"Conversation label: applies to this conversation only."},"contact":{"manage":"Add or remove contact labels","hint":"Contact labels follow this guest to every stay. Everyone with inbox or reservation access sees labels, so keep health details out.","section":"This contact, all stays","lifetime":"Contact label: follows the person across every booking."},"reservation":{"manage":"Add or remove reservation labels","section":"This reservation only","lifetime":"Reservation label: applies to this booking only."},"task":{"manage":"Add or remove task labels","section":"This task","lifetime":"Task label: applies to this task only."}},"time_off_off":"Off","time_off_off_between":"Off {from}–{until}","working_hours_outside":"Outside working hours ({hours})","working_hours_not_working":"Not working that day","reauth":{"title":"Confirm it's you","description":"For your security, enter your password to continue.","password_label":"Password","submit":"Continue","totp_description":"Enter the 6-digit code from your authenticator app.","totp_label":"Authentication code","invalid_credentials":"That password is incorrect.","invalid_code":"That code is incorrect. Try again.","rate_limited":"Too many attempts. Wait a few minutes and try again.","failed":"We couldn't confirm your sign-in. Please try again.","required":"For your security, confirm it's you to continue.","unavailable":"We can't confirm your sign-in for this action here. Sign out, sign in again, then try again.","impersonation_refused":"This action isn't available while acting as another user.","no_password":"Your account doesn't use a password. To confirm it's you, sign out and sign in again, then try again.","sign_in_again":"Sign out and sign in again","backup_description":"Enter one of your backup codes. Each code works once.","backup_code_label":"Backup code","use_backup_code":"Use a backup code instead","use_authenticator":"Use your authenticator app instead"},"undo":"Undo","save_changes":"Save changes"},"contact":{"page":{"title":"Contacts","search_placeholder":"Name, email, phone or confirmation code","search_placeholder_name_code":"Name or confirmation code","search_placeholder_short":"Search contacts"},"rail":{"label":"Contact views","groups":{"people":"People"},"views":{"all":"All contacts","upcoming":"Upcoming stays","guests":"Guests","owners":"Owners","vendors":"Vendors","companies":"Companies"},"count_capped":"{count}+"},"views":{"all":"Guests, owners, vendors and companies.","upcoming":"In-house now or arriving in the next 7 days, whether they booked or travel with someone who did.","guests":"Everyone who has stayed or is booked to stay, as the booker or as a guest on someone else’s booking.","owners":"Owners and co-owners of your properties.","vendors":"Cleaners, maintenance and other service companies.","companies":"Company accounts with agreed rates and invoicing."},"list":{"label":"Contacts","columns":{"contact":"Contact","company":"Company","stays":"Stays","next_stay":"Next stay","lifetime_value":"Lifetime value"},"bands":{"soon":"Staying now or within 7 days","rest":"Everyone else","in_house":"In-house","arriving":"Arriving in the next 7 days"},"roles":{"guest":"Guest","owner":"Owner","vendor":"Vendor","company":"Company"},"stays_recent":"{count} in 12 mo","next_stay":{"none":"No stay booked","in_house":"In-house","today":"Today","until":"{property} · until {date}","nights":"{property} · {nights, plural, one {# night} other {# nights}}"},"empty":"No contacts in this view yet.","empty_hints":{"all":"Guests appear here once a booking syncs from your PMS.","upcoming":"Guests staying now or arriving within 7 days appear here.","guests":"Anyone with a booked or past stay appears here.","owners":"Property owners will appear here in a later release.","vendors":"Vendors will appear here in a later release.","companies":"Contacts that are a business rather than a person appear here."},"empty_search":"No contacts match “{term}”","empty_search_hint":"Try a name, email, phone number or confirmation code.","empty_search_hint_name_code":"Try a name or confirmation code.","footer":{"showing":"Showing {shown} of {total}","showing_estimated":"Showing {shown} of about {total}"},"load_more_failed":"Couldn’t load more contacts.","retry":"Retry"},"dock":{"loading":"Loading contact…","crumb":"Contact","previous":"Previous contact","next":"Next contact","message":"Message","edit":"Edit","tabs":{"overview":"Overview","stays":"Stays","identity":"Identity","consent":"Consent"},"tags":{"booker":"Booker","guest":"Guest"}},"overview":{"in_house":"In-house","upcoming":"Upcoming","open_reservation":"Open reservation","tiles":{"stays":"Stays","id_on_file":"ID on file","id_none":"None tied to this guest","marketing":"Marketing consent","marketing_email":"Email","marketing_sms":"SMS","marketing_both":"Email and SMS","marketing_none":"No consent"},"guests_on_stay":"Guests on this stay","recent_stays":"Recent stays","see_all_stays":"See all {count}"},"stays":{"empty":"No stays yet.","on_booking":"on {name}’s booking","no_property":"No property","truncated":"Showing the latest {shown, number} of {total, number} stays."},"identity":{"verification":"Verification on file","verification_none":"No ID check tied to this guest.","verification_none_hint":"An ID check this guest completes shows here. Older checks show on the reservation.","verified_on":"Verified {date}","documents":{"passport":"Passport","id_card":"ID card","driver_license":"Driver’s license","unknown":"Document"},"linked_profiles":"Linked profiles","linked_none":"No linked profiles yet.","linked_none_hint":"When a booking for this guest syncs from your PMS, their profile is linked here.","linked_on":"Linked {date}","external_id_missing":"No guest ID"},"consent":{"marketing":"Marketing consent","email":"Email","sms":"SMS","opted_in":"Opted in · {source}","opted_in_on":"Opted in {date} · {source}","revoked_on":"Unsubscribed {date}","none":"No consent","sources":{"storefront_checkout":"Booking site checkout","other":"Source not recorded"},"revoke":"Revoke","revoke_title":"Revoke email marketing consent?","revoke_description":"{name} will stop getting marketing email. Only the guest can opt in again.","revoke_confirm":"Revoke consent","stay_messages":"Stay messages","stay_messages_always":"Always sent","stay_messages_hint":"Booking and check-in messages don’t need marketing consent.","language":"Language","language_unset":"Not set"},"profile":{"title":"Edit profile","first_name":"First name","last_name":"Last name","display_name":"Display name","phone":"Phone","language":"Language","language_placeholder":"Choose a language","language_unset":"Not set","city":"City","country_code":"Country code","save":"Save","cancel":"Cancel"},"errors":{"company_has_no_identity":"A company has no phone number. Add it to one of its people instead.","contact_outside_scope":"This contact has stays at properties you can’t access, so you can’t change it. Ask an admin.","sms_revoke_unavailable":"SMS consent can’t be revoked here yet.","save_failed":"Couldn’t save. Try again."}},"connection_link":{"request_button":"Request connection","dialog_title":"Request a connection from the account owner","dialog_description":"Create a private link for the person who owns this {provider} account. They connect it themselves — you never see their password.","name_label":"Account name","name_placeholder":"John Doe's {provider} account","expiry_label":"Link expires after (days)","create":"Create link","link_ready_title":"Link ready","link_ready_body":"Send this link to the owner. It works once and expires on {date}.","copy":"Copy link","copied":"Link copied","revoke":"Revoke link","revoke_confirm":"Revoke this link? The owner will no longer be able to use it.","revoked":"Link revoked","create_new":"Create new link","requested_by":"Requested by {name} · {date}","replacement_requested":"Owner asked for a new link","state":{"pending":"Pending connection","opened":"Opened by owner","connecting":"Owner is connecting","syncing":"Syncing","failed":"Connection failed","expired":"Link expired"},"failure":{"provider_denied":"The owner declined access","ownership_conflict":"Already connected to another organization","creator_lost_access":"The link's creator no longer manages integrations","sync_failed":"The first sync failed","callback_failed":"The connection could not be completed","identity_unavailable":"We couldn't identify the account at the provider"},"public":{"title":"{org} is asking to connect your {provider} account","appears_as":"It will appear as “{name}” in {org}'s workspace.","uses_suiteop":"{org} uses SuiteOp to manage its properties.","can_do_title":"What {org} will be able to do","can_do_access_1":"See your devices and their status","can_do_access_2":"Read sensor readings, battery levels and activity history","can_do_access_3":"If you have smart locks: create and remove access codes for guests and staff","can_do_access_4":"If you have smart locks: lock and unlock them remotely","wont_title":"What {org} won't get","wont_redirect":"You sign in on {provider}'s own page. {org} never sees your password.","wont_redirect_seam":"You sign in through Seam, {org}'s device-connection partner, on a secure page. {org} never sees your password.","stop_title":"Stopping later","stop_body":"You can stop sharing at any time by removing the connection in your {provider} account, or by asking {org} to disconnect it.","connect":"Connect {provider}","consent":"By connecting, you agree to SuiteOp's <terms>Terms</terms> and <privacy>Privacy Policy</privacy>.","connecting":"Connecting your account…","syncing":"Almost done — setting up your devices…","done_title":"All set","done_body":"Your {provider} account is now shared with {org}. You can close this page.","failed_title":"This connection didn't go through","failed_body":"If you finished signing in, {org} may still have access — you can remove it at any time in your {provider} account. Ask {org} for a new link, or request one below.","failed_body_credentials":"If {org} received your details, you can revoke them at any time by changing your password or key in your {provider} account. Ask {org} for a new link, or request one below.","expired_title":"This link has expired","expired_body":"Ask {org} for a new link, or request one below.","request_new":"Request a new link","request_sent":"{org} has been asked to send you a new link.","inactive_title":"This link is no longer active","inactive_body":"If you still need to connect, ask the person who sent it for a new link.","error_notice":"That connection didn't go through. You can try again below.","in_progress_notice":"A connection is already in progress — try again in a few minutes.","refresh":"Refresh","load_error":"We couldn't load this link. Check your connection and try again.","can_do_pms":{"listings":"See your listings, reservations and guest details","sync":"Keep this information up to date automatically"},"wont_credentials":"The details you enter are encrypted and only used for this connection. Nobody at {org} can view them.","credential_submit":"Connect {provider}","credential_submitting":"Checking…","credential_error":{"invalid_credentials":"{provider} didn't accept those details. Check them and try again.","unreachable":"We couldn't reach {provider}. Try again in a few minutes.","not_usable":"This link is no longer active.","too_many_attempts":"Too many attempts. Try again later."},"syncing_pms":"Almost done — setting up your listings…"}},"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","guest_issues":"{count, plural, one {{display} guest issue} other {{display} guest issues}}","failed_codes":"{count, plural, one {# failed code} other {# failed codes}}","to_review":"{count, plural, one {# to review} other {# to review}}","deposit_failed":"{count, plural, one {# deposit failed} other {# deposits failed}}","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","no_check_ins":"No check-ins","no_check_outs":"No check-outs","code_failed":"Code failed","verify":"Verify","verification_not_started":"Verification not started","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","empty":"No open tasks assigned to you","all_tasks":"All tasks","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","voice_assistant":"Voice assistants","valve":"Valves","network":"Network devices","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":"Playbooks","today":"Today","time_ago":"{time} ago","runs":"Runs","failed":"Failed","failed_today":"failed today","no_runs_today":"No runs 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","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","portal_reach":"Portal reach","revenue_per_stay_cents":"Revenue per stay","aov_cents":"Average order value","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"},"guest_issues":{"title":"Guest issues","open":"open","open_count":"{count, plural, one {{display} open} other {{display} open}}","oldest":"Oldest","owner_stays":"{count, plural, one {# owner stay} other {# owner stays}}","guest_stays":"{count, plural, one {# guest stay} other {# guest stays}}","all":"All guest issues","more":"+{count} more"},"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"}}},"demo_upgrade":{"banner":{"message":"This is a demo workspace. Keep it and everything you've set up — become a customer.","cta":"Keep this workspace","hide":"Hide for now"},"page_title":"Keep this workspace","page_description":"Become a SuiteOp customer and keep everything you've set up in this demo.","not_available":"This workspace can't be upgraded.","form":{"company_name_label":"Company name","payment_subtitle":"Add the card your subscription will be billed to.","consequences_title":"What happens when you continue","consequence_sample_data":"The demo's sample properties, bookings, tasks and demo logins are deleted.","consequence_owner":"You become the owner of this workspace.","consequence_address":"The workspace's web address and guest portal address change to match the details above.","submit":"Keep this workspace","submitting":"Starting…","error":"We couldn't start setting up your account. Please try again."},"progress":{"title":"Setting up your account…","body":"This can take a few minutes. Keep this page open — we'll take you to your workspace when it's ready.","success":"Your account is ready.","failed_title":"We couldn't finish setting up your account","failed_body":"Check your details and try again. If it keeps happening, contact support."},"address":{"enter_manually":"Enter address manually","search_instead":"Search for an address instead","search_unavailable":"Address search isn't available right now. Enter your address below.","street":"Street address","city":"City","state":"State / region","postal_code":"Postal code","country":"Country","country_placeholder":"Select a country"},"steps":{"company":"Your company","keep":"What comes with you","confirm":"Payment & confirm"},"nav":{"continue":"Continue","back":"Back"},"company":{"region_label":"Region","region_note":"Set when your demo was created. Your SuiteOp contact can change it.","company_title":"Company","company_note":"The name and guest portal address your workspace uses.","billing_title":"Billing","billing_note":"Where your invoices are addressed."},"keep":{"title":"What comes with you","description":"Choose what to keep from this demo. Everything is kept unless you untick it.","loading":"Preparing the list…","failed":"We couldn't prepare the list.","search_placeholder":"Search items","search_empty":"Nothing matches your search.","sample_title":"Sample data","sample_note":"Removed when you continue.","added_title":"Yours","added_note":"Everything you added. Untick what you don't want to keep.","setup_title":"Setup","setup_note":"Templates and configuration prepared for the demo. Untick what you don't need.","automations_paused":"Automations start paused — you switch them on yourself.","kept_of":"{kept} of {total}","tally":"Keeping {added} of yours · {setup} from setup · sample data removed","all":"All","none":"None","keep_all":"Keep all","remove_all":"Remove all"},"categories":{"task_templates":"Task templates & checklists","automations":"Automations","inbox":"Inbox","guest_portal":"Guest portal content","team":"Team structure","property_org":"Property organisation"},"kinds":{"properties":"Properties","bookings":"Bookings","tasks":"Tasks","members":"Members","task_templates":"Task templates","automations":"Automations","message_templates":"Message templates","upsells":"Upsells","guides":"Guides","manuals":"Manuals","check_in_steps":"Check-in steps","departments":"Departments","tags":"Tags","saved_views":"Saved views","devices":"Devices","conversations":"Conversations","reviews":"Reviews","demo_logins":"Demo logins"},"summary":{"title":"Summary","sample_removed":"Sample data removed","added_kept":"Yours kept","note":"What moves into your workspace when you continue."}},"department":{"page":{"title":"Departments","archived":"Archived","subtitle":"Manage departments and team assignments","description":"Teams that do the work. Each has its people, skills, auto-assignment rules and templates.","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","templates":"Templates","template_count":"{count, plural, one {# template} other {# templates}}","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","live":"Live view","events":"Events","overview":"Overview","alexa":"Alexa","status":"Status"},"controls":{"lock_state_locked":"Locked","lock_state_unlocked":"Unlocked","lock_control":"Lock control","swipe_or_double_tap_to_unlock":"Swipe or Double-Tap to Unlock","unlock_confirm_title":"Unlock {device}?","unlock_confirm_title_generic":"Unlock the door?","unlock_confirm_message":"The door unlocks as soon as the lock receives the command.","unlock_confirm_action":"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","heat_setpoint_increase":"Raise heat setpoint","heat_setpoint_decrease":"Lower heat setpoint","cool_setpoint_increase":"Raise cool setpoint","cool_setpoint_decrease":"Lower cool setpoint","save_setpoints":"Save setpoints","save_mode":"Save mode","tap_to_lock":"Tap to Lock","syncing":"Syncing…","locking":"Locking…","unlocking":"Unlocking…","presumed_relocked":"Ready to unlock","lock_door":"Lock door","unlock_confirm":"Unlock this door now?","valve_label":"Water valve","valve_state_open":"Open","valve_state_closed":"Closed","valve_state_unknown":"Unknown","valve_open":"Open valve","valve_close":"Close valve","valve_close_confirm_title":"Close the water valve?","valve_close_confirm_message":"Closing the valve shuts off water to the property until it is opened again.","valve_close_confirm_action":"Close valve"},"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."},"push_paused_banner":{"title":"Device changes are paused","configure":"Configure","configure_unavailable":"Ask an admin with integration access to change this.","configure_no_page":"This account's settings can't be opened from here.","affected_devices_label":"Affected devices"},"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","auth_refused":"The provider refused SuiteOp's authorization for this lock, so its codes can't be read or changed. Reconnect the integration, or check the lock is still in the provider account."},"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_valve_open":"Open valve command","action_valve_close":"Close valve command","action_device_command_result":"Command result","action_device_refresh_status":"Refresh device status","action_device_restart":"Restart command","action_camera_snapshot_requested":"Camera snapshot viewed","action_device_sync_started":"Device sync started","action_device_sync_succeeded":"Device sync completed","action_device_takeover_kept_migrated_codes":"Takeover kept migrated codes","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_device_vendor_alert":"Provider alert","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_reservation_access_repair":"Reservation access repair","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","actor_org_connect_partner":"Partner company"},"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","valve_open_sent":"Open valve command sent","valve_open_failed":"Failed to send open valve command","valve_close_sent":"Close valve command sent","valve_close_failed":"Failed to send close valve 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":{"description":"Configure organization-wide access-code behavior for locks, reservations, and connected systems.","settings_link":"Smart lock settings","unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","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.","code_length_option":"{count, plural, one {# digit} other {# 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","restricted_sequences":"Restricted sequences","restricted_sequences_description":"Generated codes never contain these digit sequences. A single digit keeps that digit out of generated codes entirely. Manually chosen PINs are not checked.","restricted_sequences_placeholder":"e.g. 1234","restricted_sequences_add":"Add","restricted_sequences_remove":"Remove {sequence}","restricted_sequences_empty":"No restricted sequences.","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.","timing_lock_override_hint":"Applies to every guest code unless a lock has its own. (0–300 minutes)","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.","backup_section":"Backup codes","backup_swapping":"Automatic backup code swapping","backup_swapping_description":"Near check-in, replace an inactive reservation code with an active backup code, and let guests request a new code from the portal.","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"}},"reservation_reinstall":{"action":"Re-install Reservation Access","outcome":{"v1_revoked":"V1 revoked this stay's door code on this lock, so SuiteOp never re-installs it."},"confirm_title":"Re-install reservation access on {device}?","confirm_description":"Restore eligible current and future reservation access on this lock only, preserving each PIN and access window. User, master, backup and imported codes stay unchanged.","queued":"Reservation access repair queued.","request_error":"The repair could not be queued. Check the lock and integration settings, then try again.","unavailable":{"device":"This lock is archived, unlinked or missing its provider connection.","inventory":"Wait for the lock’s code inventory to finish before reinstalling reservation access."}},"camera":{"live_view":{"start":"Start live view","continue":"Continue watching","stop":"Stop","seconds_left":"{seconds}s left","unsupported_codec":"This camera streams in a format your browser can't play. Try Safari or a phone browser.","offline":"This camera is offline.","no_permission":"You don't have permission to view live video.","connecting":"Connecting…","ended":"Live view ended.","error":"Couldn't start live view. Try again."},"impersonation_blocked":"Camera footage isn't available while you're signed in as another user.","battery_not_reported":"Battery not reported by Ring","events":{"empty":"No events yet.","empty_ring_hint":"Events appear from the moment this camera was connected to SuiteOp. Not seeing motion events? In the Ring app, open this device's Motion Settings, check that Motion Recording is on, and review Smart Alerts and Motion Zones.","empty_unifi_hint":"UniFi cameras send events through an alarm you set up in UniFi Protect.","empty_unifi_link":"See the setup steps","filter_kind":"Event type","filter_subtype":"Detection","load_more":"Load more"},"kind":{"motion":"Motion","doorbell_press":"Doorbell press"},"subtype":{"motion":"Motion","human":"Person","vehicle":"Vehicle","other_motion":"Other motion"},"clip":{"play":"Play clip","unavailable":"This clip isn't available.","too_old":"Clips are available for 180 days."},"offline":"This camera is offline.","snapshot_unsupported":"This camera can't provide snapshots.","snapshot":{"tab":"Snapshot","refresh":"Refresh","updated_at":"Updated {time}","offline":"This camera is offline.","error":"Couldn't load a snapshot. Try again."}},"ttlock":{"remote_unlock_disabled":"Remote Unlock is turned off for this lock. Turn it on in the TTLock app, then try again."},"network":{"status":"Status","status_restarting":"Restarting","status_console_offline":"Console offline","uptime":"Uptime","clients":"Connected clients","model":"Model","firmware":"Firmware","last_seen":"Last seen","restart":"Restart","restarting":"Restarting…","restart_confirm_title":"Restart {name}?","restart_confirm_body":"The device goes offline for a few minutes while it restarts, and anything connected through it loses its connection until it is back.","restart_started":"Restart started","restart_failed":"Couldn't restart the device. Try again.","hint":{"console_offline":"The whole UniFi system at this location is unreachable — most likely the internet connection or power. Check the modem or ISP.","device_offline":"This device lost power or its network cable. Try restarting it, or check its PoE port on the switch.","restarting":"Restarting — this usually takes about {minutes} minutes.","no_clients":"No devices have connected to this access point for over a day. If guests report Wi-Fi trouble, try restarting it."}},"restart":{"unsupported":"This device can't be restarted remotely.","rate_limited":"This device was restarted a few minutes ago. Wait a few minutes before trying again."}},"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 playbook 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","task":"Task","all":"All","booking":"Direct booking"},"requirement_badge":{"property":"property","reservation":"reservation","device":"device","task":"task","upsell":"upsell","review":"review","opportunity":"opportunity","booking":"direct booking"}},"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 playbook 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 playbook 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 — playbooks referencing it will fail to send.","fallback_name":"this template","cancel":"Cancel","confirm":"Delete template","workflow_warning":"Used by {count, plural, one {# playbook} other {# playbooks}} — 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.","sender_fallback":"Sends from {address}","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.","legacy_convert_confirm_title":"Convert this template to blocks?","legacy_convert_confirm_description":"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."}}},"errors":{"sending_held":"Email sending is paused for review. Contact SuiteOp support to resume it.","recipient_not_member":"Test emails can only be sent to members of your organization."}},"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}","pay_not_configured":"Pay not configured","difference_from_approved":"Difference from the approved {amount}","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.","pay_not_configured":"No pay template covers this shared task, so this person's pay could not be calculated. Choose a pay template on the company connection."},"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_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","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.","scope_headline":{"default":"Default for all properties","properties":"Setting the rate for {count, plural, one {# property} other {# properties}}: {names}","members":"Setting the rate for {count, plural, one {# member} other {# members}} at all properties: {names}","members_at_properties":"Setting the rate for {memberCount, plural, one {# member} other {# members}} ({members}) at {propertyCount, plural, one {# property} other {# properties}} ({properties})","empty":"Choose at least one member or property to set a rate for.","more":"+{count} more"},"hourly_cost_explainer":"Internal cost for hourly work is each member's own hourly pay × the time they work. You only set the billable rate here.","hourly_missing_pay":"{count, plural, one {# member has no hourly pay rate, so their time is costed at zero. Set it on their member profile.} other {# members have no hourly pay rate, so their time is costed at zero. Set it on their member profiles.}}","hourly_missing_pay_named":"{count, plural, one {# member has no hourly pay rate, so their time is costed at zero: {names}.} other {# members have no hourly pay rate, so their time is costed at zero: {names}.}}","target_required":"Choose at least one member or property.","target_members_label":"Members (optional)","target_members_placeholder":"All members","target_properties_label":"Properties (optional)","target_properties_placeholder":"All properties","target_help":"Pick members, properties or both. With both, each member gets this rate at each property.","target_salaried_blocked":"Salaried members can't have a rate override. Remove: {names}.","target_over_limit":"This saves {count, number} rates and one save holds at most {max, number}. Pick fewer properties or members."},"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. Turned off, this person can't clock in or be assigned shifts, and saving unassigns their upcoming shifts.","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","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","scheduled":"Scheduled","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","amount_unknown":"Guesty confirmed it with no amount, and the record's amount is unknown — reconcile it by hand","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","migrated_unconfirmed":"Migrated from V1 and never confirmed here — check V1's outcome and 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.","scope_note":"Going live covers your guest links only. Door codes are set up separately.","locks_link":"Connect a lock provider","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","load_failed":"We couldn't load your setup progress.","no_access":"Setup progress is visible to members who can view properties."},"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","drill_in":"{total, plural, =1 {{ready} of 1 property ready} other {{ready} of # properties ready}}","no_group":"no group","no_portal":"no portal","empty":"No properties yet — import or add properties to see their launch readiness.","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"},"chip":{"ready":"Ready","blocked":"{count, plural, =1 {Blocked · 1 missing} other {Blocked · # missing}}","gap":"Gap · {reason}"},"reason":{"group_missing":"group missing","instructions_missing":"instructions missing","verification_off":"verification off","portal_missing":"portal missing"}},"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"},"staff_view":{"banner":"You are viewing this portal as {name}","banner_unnamed":"You are viewing this portal as the guest","back_to_dashboard":"Back to dashboard"},"check_in_instructions":{"title":"Check-in instructions","subtitle":"Everything you need to get into your place.","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.","im_inside":"I'm inside","checked_out_action":"I've checked out","checked_in_done":"You're checked in. Enjoy your stay!","checked_out_done":"You've checked out. Safe travels!","arrival_unavailable":"Your arrival can't be confirmed right now. If you're already inside, message your host."},"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_invalid_qr":"We couldn't sign you in with this code. If your stay hasn't started yet, use your confirmation code instead.","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...","opening_stay":"Opening your stay…","error_rate_limited":"Too many attempts. Please try again in {time}.","use_booking_code":"Use my confirmation code instead"},"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 available.","tap_to_copy":"Tap to copy","copied":"Copied to clipboard","copy_value":"Copy {label}","valid_until":"Valid until {date}","valid_from":"Valid from {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":"Check-in 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.","code_may_not_work":"This code may not work yet. If it doesn’t open the door, tap “{button}” below or contact your host.","contact_host":"Contact host","checking_status":"Checking your check-in status…","loading_codes":"Loading your access codes…","lock_offline":"This lock is offline, so it can't be unlocked from here. Use your code on the keypad, or contact your host if it doesn't work.","unlock_confirmed":"Unlocked. The lock confirmed it.","unlock_unconfirmed":"We couldn't confirm the door unlocked. Try your code on the keypad, or contact your host.","see_check_out_instructions":"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 past purchases and get help from this page.","companion_waiting_description":"Your check-in instructions and door code unlock once the main guest finishes pre-check-in."},"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":"No further details for this item.","not_found_title":"This information isn’t available","not_found_body":"Your host may have removed it, or it isn’t part of your stay. Go back to see what’s available."},"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_locked_reason":"Your host needs to fix this step first. Contact them if it stays 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.","staff_view_awaiting_guest_confirm":"Every step is done. The check-in is confirmed when the guest next opens it.","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_signed_agreement":"Download signed agreement","download_signed_agreement_failed":"Couldn't download your signed 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","deposit_scheduled_on":"Card saved on {date} · a hold of {amount} is scheduled for {holdDate}","deposit_saved_on":"Card saved on {date} for a security deposit of {amount}"},"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":"Booker 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?"},"identity_check":{"title":"Identity Check","description":"Verify your identity with a photo ID and selfie","description_no_selfie":"Verify your identity with a photo ID","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_movement":"If your host requires it, a short recording of your face following on-screen movement instructions is checked by SuiteOp's AI provider, Google Cloud Vertex AI.","consent_privacy":"Your information will be used by SuiteOp and its verification service providers for identity authentication purposes only.","consent_agree":"I agree to SuiteOp's Terms of Use and Privacy Policy","consent_retention":"Your ID photos, selfie and any movement recording are deleted {days} days after checkout.","consent_retention_no_selfie":"Your ID photos are deleted {days} days after checkout.","desktop_no_phone":"No phone with you? Your host can help you finish this step.","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":"Sending your photos…","waiting":"We're checking your photos now. This page will update when it's done.","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_subtitle_single_page_no_selfie":"You'll photograph the photo page. 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_denied_system_body":"Your computer is blocking the camera for this browser. Allow it in your system's privacy settings, then try again.","camera_unavailable_heading":"Camera couldn't start","camera_unavailable_body":"We couldn't start your camera. It may be in use by another app — close it and try again.","camera_capture_failed":"We couldn't capture the photo. Please try again.","camera_status_align":"Line up the edges of your document with the frame","camera_status_too_dark":"More light needed","camera_status_too_bright":"Too much glare — tilt the document slightly","camera_status_hold_still":"Hold still…","camera_status_reading_barcode":"Hold still — reading the barcode…","camera_status_capturing":"Taking the photo…","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","review_warning_barcode_unread":"We couldn't read the barcode on the back. If your ID has one, retake the photo with the whole barcode sharp and in view.","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":"We're checking your photos now — you can carry on with your check-in.","photos_sent":"Photos sent","checking_status":"Checking…","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_server":"Something went wrong on our side. Please try again in a minute.","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_selfie_required":"This property has changed its check-in settings. Please reload the page and take a selfie to continue.","error_selfie_not_allowed":"This property has changed its check-in settings. Please reload the page and continue without a selfie.","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_back_missing":"Your ID has a back too. Tap Try again, choose the document type that matches your ID, and photograph both sides.","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.","liveness_heading":"Quick movement check","liveness_loading":"Preparing the camera…","liveness_subtitle":"We'll take your photo, then ask you to follow three short instructions.","liveness_blink":"Blink slowly","liveness_turn_left":"Turn left","liveness_turn_right":"Turn right","liveness_hold":"Hold it there…","liveness_retry_gesture":"Let's try that one again","liveness_progress":"{done} of {total} done","liveness_composing":"Almost done…","liveness_escape":"I can't do this","liveness_escape_hint":"You can skip this. A member of the host's team will review your ID and selfie instead.","liveness_trouble_heading":"Having trouble?","liveness_trouble_body":"That's okay. You can try again, or skip this and have a person review your ID.","liveness_try_again":"Try again","liveness_device_heading":"We couldn't start the movement check","liveness_device_body":"Your ID and selfie will be reviewed by the host's team instead.","liveness_device_continue":"Continue","liveness_device_body_no_selfie":"We'll ask you for a selfie next. The host's team will review it with your ID.","staff_view_heading":"Only the guest can do this check","staff_view_body":"You're viewing this portal as staff. Send the guest their portal link so they can verify their identity.","error_staff_view":"You're viewing as staff. Only the guest can submit their ID check.","liveness_prelude_instruction":"Center your face in the oval and hold still — we'll take your photo","liveness_prelude_hint_no_face":"We can't see a face yet","liveness_prelude_hint_one_face":"Only your face in the frame","liveness_prelude_hint_center":"Center your face in the oval","liveness_prelude_hint_closer":"Move a little closer","liveness_prelude_hint_level":"Face the camera straight on","liveness_prelude_hint_eyes":"Open your eyes","liveness_prelude_hint_still":"Hold still","liveness_prelude_done":"Done","liveness_prelude_take_myself":"Take the selfie myself","liveness_prelude_retake":"Retake","liveness_prelude_thumbnail_alt":"Your selfie","liveness_prelude_quality_warning":"This photo may be blurry or dark. Retake it if you can.","liveness_voice":"Voice","reason_movement":"Please follow the on-screen movement instructions and try again."},"agreement":{"title":"Agreement","description":"Review and accept the terms","signature_label":"Signature","signature_hint":"Sign above","signature_clear":"Clear","sign_first_hint":"Sign in the field above before submitting","invalid_payload":"The agreement could not be submitted — please check your signature and name and try again.","signature_not_png":"The signature image could not be read — please clear the pad and sign again.","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","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.","id_needed":"Photo ID needed","all_required":"Add every guest on the booking to continue.","list_full":"Every guest spot is taken.","save_failed":"We couldn't save this guest. Please try again.","adult":"Adult","guest_type":"Adult or child","continue":"Continue","save_guest":"Save guest"},"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","secure_scheduled":"Secure · nothing is charged or held now","hold_scheduled":"Card saved · a hold of {amount} is scheduled for {date}"},"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_summary_hold":"A refundable {amount} hold, placed when you pay and released after check-out.","deposit_summary_hold_before_checkin":"A refundable {amount} hold, placed before check-in and released after check-out.","deposit_summary_charge":"A refundable {amount} deposit, charged when you pay and refunded after check-out.","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_scheduled":"By saving this card you agree that we may place this hold on it and re-authorize the hold 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}","hold_button_amount":"Place {amount} hold","wait_until":"Available to pay {date}","unavailable":"This option is not currently available.","hold_failure":{"title":"We couldn't place your deposit hold","declined":"Your bank declined the hold on the card you saved. Please add a card to finish your check-in.","authentication_required":"Your bank needs you to confirm this card before the hold can be placed. Please enter your card again to confirm it.","request_failed":"This wasn't caused by your card, so adding a new card won't help. Please contact your host to finish your check-in."},"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.","scheduled_hint":"Save your card today. The hold is placed on {date}.","scheduled_consent":"A hold of {amount} will be placed on this card on {date}. Nothing is charged or held now.","save_card_button":"Save card"},"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","submit_failed_title":"We couldn't confirm your details were sent","submit_failed_body":"Your answers are still here. Try again, or go back and check them. If they did get through, your check will show as in progress.","edit_answers":"Check my answers"},"authority_reporting":{"submit_registration":"Submit Registration","title":"Guest Registration","description":"Government-required guest registration","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","save_and_next":"Save & Next Guest","save_and_review":"Save & Review All","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"},"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}","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","failed":"Didn't go through","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}","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"},"view_checkin_instructions":"View check-in instructions","booker":{"edit":"Edit","confirm":"Confirm","sub_step_eyebrow":"{card} · Step {number} of {total}","using_details_from":"Using your details from {card}","card_title_details_id":"Booker Details & ID Verification","card_title_id":"ID Verification","card_description_details_id":"Your contact details and a quick ID check","card_description_details_registration":"Your contact details and the details required by local law","card_description_details_id_registration":"Your contact details, a quick ID check and the details required by local law","card_description_id_registration":"A quick ID check and the details required by local law","card_steps":"{count, plural, one {# step} other {# steps}}: {steps}"},"guests_card":{"scan_id":"Scan ID","scan_hint":"Photograph their ID to fill in the details","scanning":"Reading the ID…","scanning_hint":"This takes a few seconds","scanned":"ID scanned","scanned_hint":"Check the details below","unread_hint":"We couldn't read it. Please type the details.","scan_failed":"We couldn't scan this ID. Please try again or type the details.","details_needed":"Details needed","details_required":"Finish every guest's details to continue.","booker_required":"Finish your own registration first.","add_more":"Add another guest","scan_id_self":"Scan your ID","scan_hint_self":"Photograph your ID to fill in your details"},"legal_terms_of_use":"Terms of Use","legal_privacy_policy":"Privacy Policy"},"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","available_on_checkout_day":"Available on check-out day","opens_in":"Opens in {duration}","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","included":"Included","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_scheduling_outside_window":"That time isn't one this add-on is offered at. Please choose one of the times shown.","error_scheduling_too_soon":"That's too soon for this add-on. Please choose a later date or time.","error_option_selection_required":"Please choose an option for this add-on before adding it to your stay.","error_option_unavailable":"One of the options you picked is no longer available. Please start the purchase again.","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":"On request","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","choice_quantity_hint":"Choose how many of each","choice_quantity_decrease":"Remove one {option}","choice_quantity_increase":"Add one {option}","choice_quantity_line":"{option} ×{count}","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_guest":"Per guest","per_night_capped_at":"{price} / night — capped at {cap}","per_guest_per_night_capped_at":"{price} / guest / night — capped at {cap}","per_guest_capped_at":"{price} / guest — 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}.","request_free_note":"Free of charge. We'll let you know once your request for {itemName} is approved.","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_pick_date":"Pick a date","scheduling_pick_time":"Pick a time","scheduling_missing_hint":"Choose a date and time to continue","scheduling_missing_date_hint":"Pick a date 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","permission_to_enter_text_loading_hint":"Loading the entry terms…","permission_to_enter_text_failed_hint":"We couldn't load the entry terms. Try again to continue.","option_missing_hint":"Select an option to continue","required_option_missing_hint":"Select an option in {fieldName} 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","map_unavailable_title":"Map unavailable","map_unavailable_description":"The map can't be shown here right now. Switch to the list to see every place.","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}}","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","message_us":"Message us","message_us_description":"Chat with us right here","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}","cardholder_name_label":"Name on card","cardholder_name_required":"Enter the name on the card"},"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":"Contact options & tickets","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","ai_assistant_label":"AI assistant","reply_unavailable":"Message unavailable","reply_attachment":"Attachment","edit_error":"Couldn't save the change. Please try again.","cards":{"title_access":"Door access","title_check_in_steps":"Check-in steps","title_times":"Check-in & check-out","title_house_manual":"House manual","title_parking":"Parking","title_upsell":"Offer","valid_window":"Valid {start} – {end}","parking_code":"Parking code","open_access":"Open door access","see_all_steps":"See all steps","open_guide":"Open guide","view_offer":"View offer","complete_precheckin":"Complete pre-check-in","pay_fees":"Pay outstanding fees","locked_precheck":"Available once you complete pre-check-in.","locked_fee":"Available once your outstanding fees are paid.","locked_timer":"Unlocks {date}","locked_review":"We're reviewing your details. This will appear once the review is complete.","locked_declined":"This isn't available right now. Message your host for next steps.","locked_generic":"This will appear closer to your check-in.","unavailable":"This info is no longer available. Message your host if you still need it.","ended":"Your stay has ended, so this is no longer available."}},"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_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","load_error":"We couldn't load your fees"},"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.","load_error":"We couldn’t load your fees","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_payments_paused":"This property isn't accepting payments right now, so this fee couldn't be paid. Please contact your host.","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.","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?","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.","spot_registered":"Already registered — tap if this is you","spot_needs_id":"Needs a photo ID","confirm_title":"You're {name}","your_details":"Your details","confirm_description":"Your host already has your name. Confirm it's you to join the stay.","confirm_submit":"That's me","step_subtitle":"Added to the stay"},"wallet_pass":{"link_invalid":"This wallet pass link has expired or is no longer valid. You can still open your stay with your booking details.","signing_in":"Signing you in…","card_body":"Keep your stay in your phone's wallet — dates, extras and check-in details, always up to date.","all_set_body":"Save your stay to your wallet so check-in details come to you.","add_failed":"We couldn't add your stay to your wallet. Please try again.","badge_alt_apple":"Add to Apple Wallet","badge_alt_google":"Add to Google Wallet","apple_links_hint":"Your door code and stay links live on the pass: tap ⋯, then Pass Details."},"form":{"date_day":"DD","date_month":"MM","date_year":"YYYY","date_invalid":"Enter a valid date","country_placeholder":"Select a country","country_search":"Search countries","country_no_results":"No country found","address_placeholder":"Start typing your address"},"errors":{"not_found":"We couldn't find that. It may have been removed, or the link may be out of date.","provider_unavailable":"This service is temporarily unavailable. Please try again in a few minutes."},"property_scan":{"opening":"Opening your guest portal…"},"embed_pins":{"map":"Map of stays","cluster":"{count, plural, one {# stay} other {# stays}} here, zoom in"}},"impersonation":{"viewing_as":"Viewing as {name} — impersonated by {impersonator}.","exit":"Exit impersonation","expires_soon":"Session ends in {minutes, plural, one {# minute} other {# minutes}}. Start a new impersonation from the admin console to keep working."},"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","expedia":"Expedia","web":"Portal","internal":"Team"},"clear":"Clear filters","scope":{"all":"All","mine":"My inbox","unknown":"Unknown","escalations":"Escalations"},"group_label":{"listing_group":"Listing group","booking_channel":"Channel","booking_source":"Booking source","source":"Source","reservation_status":"Reservation status","check_in_date":"Check-in date","check_out_date":"Check-out date","label":"Conversation label","guest_label":"Contact label","stay_requirement":"Reservation 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":{"unknown_source":"Unavailable source","unknown_booking_source":"Unavailable booking source","unknown_listing_group":"Unavailable listing group","unknown_label":"Conversation label unavailable","unknown_guest_label":"Contact label unavailable","unknown_stay_requirement":"Reservation label unavailable"},"label_all":"All labels","label_section":"Labels","search_placeholder_internal":"Search by member..."},"sort":{"label":"Sort by","newest":"Newest first","oldest_waiting":"Oldest waiting first","aria":"Sort: {sort}"},"rail":{"label":"Inboxes","all":"All inboxes","mine":"My inbox","escalations":"Escalations","drafts":"Drafts","delayed":"Delayed reply","unassigned":"Unassigned","archived":"Archived","needs_you":"Needs you","agent_help_named":"{name} needs your help"},"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","attachment_unimported_preview":"Attachment couldn’t be imported","awaiting_guest_reply":"Waiting for the guest to reply","awaiting_first_response":"Waiting for first response","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_todo":"You're all caught up","no_todo_hint":"Nothing is waiting for a reply. New guest messages appear here.","stay_tabs":{"label":"Other stays","untitled_stay":"Stay","open_thread":"Open conversation","no_conversation":"No conversation","more_stays":"{count, plural, one {+# stay} other {+# stays}}"},"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","travellerLinks":"Companion records","bookingRequests":"Booking requests","marketingSends":"Marketing emails sent","notes":"Notes","ownerLinks":"Owner cards","contactIdentities":"Other emails and phones"}},"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.","back_to_list":"Back to list","no_needs_you":"Nothing needs you here","no_needs_you_hint":"Escalations, Opal's questions and late replies land here the moment they happen."},"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}","direct_email_from":"From {address}","direct_email_replies_hint":"Guest replies to this email go to your own mailbox, not to the Inbox.","direct_email_replies_inbox_hint":"Guest replies to this email go to {address} and come back here to the Inbox.","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","remove_card":"Remove card","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.","scope_missing":"Reconnect {provider} to let SuiteOp send messages on this channel. Until then, they 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…","send_shortcut":"{mod}+Enter to send, Enter for a new line"},"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_may_have_been_delivered":"This message may already have reached the guest. Check the conversation in the PMS before sending it again.","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_email_sender":"Not delivered — no email sender is set up to reach this guest","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)","expedia_pms":"Expedia (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":"Resurfaces"},"ai":{"suggest":"Suggest reply","failed":"Couldn't generate a suggestion","menu":"AI assistant","analyze_now":"Analyse the conversation"},"actions":{"trigger_follow_up":"Trigger now","reply":"Reply","edit":"Edit","menu":"Message actions","save_to_knowledge":"Save to knowledge","create_task":"Create task"},"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","hint_start":"<kbd>{key}</kbd> to start","reason":{"escalated":"Escalated","unsure":"Unsure","late":"{duration} late","late_bare":"Late","draft":"Draft","reading":"Reading"},"who":{"guest":"Guest","guest_via":"Guest · {source}","owner":"Owner","owner_via":"Owner · {source}","vendor":"Vendor","vendor_via":"Vendor · {source}","named":"{name} replied","you":"You replied","team":"Team replied"},"band":{"needs_you":"Needs you","rest":"Everything else","earlier":"Earlier"},"column":{"guest":"Guest","latest":"Why · latest","stay":"Stay","owner":"Owner","updated":"Updated"},"no_stay":"No stay"},"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":"Escalated","banner":"Someone is stuck on this thread","raise":"Escalate","resolve":"Resolve escalation","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 notes yet.","placeholder":"Internal note…","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","channel_via":"{medium} via {via}","attachments_unimported":"{count, plural, one {An attachment on this message couldn’t be imported. Ask the guest to send it again as a photo, PDF or smaller file.} other {# attachments on this message couldn’t be imported. Ask the guest to send them again as photos, PDFs or smaller files.}}","storefront_unverified":"Sent from your booking site's contact form · email not verified"},"reply":{"unavailable":"Message unavailable","from_team":"Team","from_guest":"Guest","attachment":"Attachment","companion_sender":"{name} · guest on this reservation"},"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} escalated","needs_help_raised_with_reason":"{actor} escalated · {reason}","needs_help_raised_system":"Opal escalated · {reason}","needs_help_resolved":"{actor} resolved the escalation","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}","task_created_with_task":"{actor} created task <task></task> from the AI recap","task_filed_by_agent_with_task":"{agent} filed task <task></task> from its recap","agent_help_answered":"{actor} answered the agent"},"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","refresh_labels":"Recap is up to date — refresh topic labels","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","create_task_needs_permission":"Creating a task needs the “{permission}” permission.","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":"Escalate 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","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":"{name} needs your help","cannot_act_title":"{name} 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_open":"What {name} left open","skill_lines_partial":"Some lines were shortened or left out.","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","details_hidden":"Your role can't view this reservation's details · no messages yet","empty_hint":"The first message 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","make_default_named":"Make \"{title}\" the default","default_named":"\"{title}\" is the default","rename_named":"Rename \"{title}\"","rename_label":"New name for \"{title}\"","rename_save":"Save","rename_cancel":"Cancel renaming"},"labels":{"applied_by_ai":"Applied by AI — remove it and it will not come back on its own","manage":"Add or remove labels","manage_taxonomy":"Manage labels","empty":"No labels defined yet. Create them in Settings.","load_failed":"Couldn't load labels.","more":"{count, plural, one {# more label} other {# more labels}}","settings":{"title":"Inbox labels","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.","remove":"Remove {name}","add":"Label"},"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","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_outstanding":"{count, plural, one {# thing still open} other {# things still open}}","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"},"field_assignees":"Assignees","load_failed":"Couldn't load this tab.","tasks_withheld":"{count, plural, one {# more task not shown} other {# more tasks not shown}}","field_check_in":"Check-in","field_check_out":"Check-out","field_booked_on":"Booked on","field_total":"Total","field_access":"Access","field_email":"Email","field_phone":"Phone","field_threads":"Threads","guest_count":"{count, plural, one {# guest} other {# guests}}","thread_count":"{count, plural, one {# thread} other {# threads}}","primary_guest":"Primary guest","open_reservation":"Open reservation","stay_codes_load_error":"Couldn't load door codes.","stay_code_building":"{name} (building)"},"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 Labels, then it can be routed here.","escalation_rules_remove":"Remove rule","escalation_rules_target_placeholder":"Pick a person or department","escalation_rules_title":"Except when labelled","escalation_target_department_hint":"Whoever manages this department","title":"Inbox routing","description":"Give an arriving conversation an owner automatically, instead of leaving it for whoever looks first.","section_assignment":"Assignment","section_labels":"Labels","inbox_count":"{count, plural, one {# inbox} other {# inboxes}}","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.","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":"By default, send to","escalation_manager_placeholder":"The routing departments' manager","escalation_manager_hint":"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 next person is picked","rules_description":"Rules run in order, top first. The first one that separates two people decides. Drag or use the arrows to reorder; 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 person","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 response time set, inbox managers are alerted when it goes unanswered. Leave empty for no limit.","response_target_label":"Answer every guest message within","response_target_placeholder":"No target","response_target_hint":"The clock starts when a guest writes and stops when a reply goes out, from your team or an AI agent. Messages your PMS sends automatically don't stop it. Late conversations are flagged in the inbox.","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_description":"Optional. Leave blank to set no limit.","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.","reply_within_none":"No target","reply_within_minutes":"{minutes} min","reply_within_hour":"1 hour","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_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_hint":"Override the inbox's limit 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. People with “Requires clock-in to shifts” off can't clock in, so they're only picked while finishing a shift already in progress.","then_connector":"then","inbox_picker_label":"Inbox","inbox_picker_on":"{name} · on","inbox_picker_off":"{name} · off","unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","roster_named_title":"Added by name","department_member_named":"Also added by name","department_include_person":"Include {name} again","response_time_title":"Response time (SLA)","reply_within_custom":"Custom…","response_target_custom_label":"minutes (1–10080)","escalations_title":"Escalations","escalations_description":"An escalated conversation goes here as well as to whoever already has it.","escalation_rules_open_labels":"Open Labels","next_up_off":"Auto-assign is off for this inbox, so nobody is picked. Turn it on to see who would get the next conversation.","limits_title":"Limits","operators_only_these":"Only these people receive auto-assigned conversations.","rules_spread_footnote":"At least one of “{first}” and “{second}” stays on, so work never piles onto one person.","next_up_need_spread":"Turn on one of the spreading rules to see who would get the next conversation."}},"agents":{"settings":{"title":"AI 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","tab_knowledge":"Knowledge","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.","name_hint":"Shown beside every reply it sends, and in the thread picker.","answers_inboxes":"Answers {inboxes}","answers_none":"Answers no inbox 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.","histogram_below":"{count, plural, one {# more draft} other {# more drafts}} scored under 50%, below this chart.","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_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_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_hint":"Your own standing instruction for this skill — the house rules it must follow, and when to hand over instead of answering.","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_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_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_guest_prior_stays_label":"Earlier stays","skill_tool_list_guest_prior_stays_hint":"This guest's own earlier stays — dates, unit and what they wrote — matched on the guest record, never by name.","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. All {count} are read-only and pinned to the conversation's own stay.","tools_unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","tool_used_by":"Used by","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","delay_minutes":"{count} min","delay_custom":"Custom","abilities_description":"What the agent may do beyond writing the reply itself.","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_custom":"Your own words","style_none":"None","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","preset_concierge_label":"Polished","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":"Warm & friendly","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":"Short & direct","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. Type @ to name a lookup; only the ones this skill can use are offered.","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_disabled_note":"Off — no skill can call this lookup until it is turned back on.","skill_body_add_tool":"Add a lookup","skill_body_mention_hint":"Type @ anywhere in the procedure to name one of this skill's lookups.","skill_body_no_tool":"No lookup by that name","skill_body_tool_group":"Lookups this skill can use","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","skills_search":"Search skills","col_lookups":"Looks up","col_runs":"Runs · 30 days","skill_group_before":"Before they book","skill_group_arrival":"Arrival and getting in","skill_group_stay":"During the stay","skill_group_changes":"Changes and money","skill_group_leaving":"Leaving and after","skill_group_handoff":"Hand-offs and safety","tool_group_stay":"The stay","tool_group_extras":"Dates, prices and extras","tool_group_listing":"The listing","tool_group_money":"Money","tool_group_access":"Getting in","icon_pick":"Choose an icon","icon_moon":"Moon","icon_sun":"Sun","icon_sunrise":"Sunrise","icon_star":"Star","icon_heart":"Heart","icon_smile":"Smile","icon_headset":"Headset","icon_coffee":"Coffee","icon_leaf":"Leaf","icon_mountain":"Mountain","icon_waves":"Waves","icon_initials":"Initials","status_working":"Working","status_idle":"Idle","card_on_its_own":"On its own","card_reply_delay":"Reply delay","skills_of":"{count} of {total}","ability_on":"On","ability_off":"Off","voice_line":"Voice: {voice}","add_card_title":"Add an agent","add_card_hint":"Pick a voice to start from. Nothing reaches a guest until you give it an inbox.","coverage_title":"Who answers each inbox","coverage_change":"Change","tab_settings":"Settings","tab_activity":"Activity","try_latest":"Try on the latest message","section_where":"Where and when","section_where_hint":"Which inboxes it answers, and how long it waits before replying.","answers_label":"Answers","takes_over":"Takes over from {agent}","hours_title":"Set times","hours_hint":"Times when this agent answers an inbox in place of its usual agent. Each time saves on its own.","hours_empty":"No set times.","hours_pick_inbox":"Which inbox?","hours_row":"{inbox} · {when}","section_on_its_own":"On its own","section_on_its_own_hint":"How much it may send without a person reading it first.","section_voice":"Voice","section_voice_hint":"How it writes. Start from a tone, then make it yours.","words_label":"In your words","example_label":"Example","example_guest":"Hi! What time can we check in on Friday?","preset_soft_example":"Hi Maria! Check-in on Friday is from 3 pm. If anything is unclear when you arrive, just message here and someone will help.","preset_concierge_example":"Good afternoon, Ms. García. Check-in on Friday begins at 3:00 pm, local time. Please let me know if there is anything else I can help with.","preset_direct_example":"Check-in on Friday is from 3:00 pm. Reply here if you need anything before then.","section_may_do":"What it may do","choose_skills":"Choose skills · {count} of {total}","choose_skills_title":"Choose skills","skills_more":"+{count} more","skills_none_assigned":"This agent runs no skills yet.","unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","not_found":"This agent no longer exists. It may have been retired.","back_to_list":"Back to AI agents","skills_hero_title":"Skills are playbooks your agents follow","skills_installed":"Installed","skills_library":"Library · soon","skills_filter_agent":"Agent","skills_filter_any_agent":"Any agent","skill_edited":"Edited","skill_edited_suffix":"edited","skill_builtin":"Built-in skill","col_skill":"Skill","col_settled":"Settled without a person","skill_agents_none":"None","skill_add_to_agent":"Add to agent","skill_create_description":"Pick what it handles and name it. Its steps open next.","skill_test":"Test it","skill_more_actions":"More actions","skill_rename":"Rename and describe","skill_rename_description":"Applied to the page. Nothing is saved until you press Save.","skill_apply":"Apply","skill_steps":"Steps","skill_edit_as_text":"Edit as text","skill_show_steps":"Show as steps","skill_add_step":"Add a step","skill_add_rule":"Add a rule","skill_rules":"Hard rules","skill_lookup_unusable":"This skill can't use this lookup","skill_lookups_unusable":"This skill can't use {names}. Its type sets the lookups it can call.","skill_rail_agents":"Agents that run it","skill_rail_no_agents":"No agents yet.","skill_scope_required":"Changing which agents run a skill needs access to every property. Ask an owner or admin to change it.","skill_rail_lookups":"Lookups it can use","skill_rail_lookups_note":"Set by this skill's type. Only these can be used in the steps.","skill_lookup_off":"Off in Tools","skill_lookup_on":"On","skill_see_runs":"See recent runs","skill_hide_runs":"Hide recent runs","skill_agents_save_failed":"Couldn't update {names}. That change is still unsaved — try again.","skill_not_found":"This skill doesn't exist","skill_not_found_hint":"It may have been retired, or the link is wrong.","skill_back_to_skills":"Back to skills","skill_unsaved":"{count, plural, one {# unsaved change} other {# unsaved changes}}","tools_hero_title":"Lookups let agents check facts, never change them","tools_search":"Search lookups","tools_on":"{count} on","col_lookup":"Lookup","tool_used_by_count":"{count, plural, =0 {No skills} one {# skill} other {# skills}}","tool_change_on":"{name} on","tool_change_off":"{name} off","tools_affected":"{count, plural, one {# skill affected} other {# skills affected}}","tool_save_failed":"Couldn't save {names}. That switch is still waiting — try again.","skill_lookups_off":"Off in Tools — not called until turned back on: {names}","tools_unsaved_leave":"These changes on the Tools tab aren't saved: {changes}. Leaving drops them.","applies_everywhere":"Applies wherever this agent answers.","abilities_count":"{count} of {total} on","usage_inboxes":"{count, plural, one {# inbox} other {# inboxes}}","view":"View","ai_disclosure":{"title":"Mark AI-sent replies","description":"When an agent replies on its own, the message ends with “Sent by an AI assistant” and your organization’s name, and the guest portal shows an “AI assistant” badge. Replies a person sends are never marked.","label":"Mark replies an agent sends on its own","region_default_on":"Default for your region: on","region_default_off":"Default for your region: off","eu_off_warning":"Your organization is hosted in the EU. Turning this off may breach Article 50 of the EU AI Act, which requires telling people when they are talking to an AI.","save_success":"AI reply marking saved","save_error":"Couldn’t save AI reply marking. Your choice isn’t saved yet — try again.","no_permission":"Only members who can manage the organization can change this."}},"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}}"},"schedule":{"add":"Add a time","add_title":"Add a time","edit_title":"Edit a time","sheet_hint":"Another agent answers {inbox} at these times. Outside them, {fallback} answers as usual.","sheet_hint_none":"Another agent answers {inbox} at these times. Outside them, no agent answers.","local_time":"Times are each property’s local time.","agent":"Who answers","repeat":"Repeat","kind_weekly":"Every week","kind_dates":"On dates","days":"Days","first_day":"First day","last_day":"Last day","pick_day":"Pick a day","all_day":"All day","from":"From","until":"Until","overnight":"Runs overnight, until {time} the next morning.","every_day":"Every day","window":"{from} – {to}","window_overnight":"{from} – {to} next day","rule":"{days} · {time}","dates_win":"beats weekly hours","remove_title":"Remove this time?","remove_description":"{agent} stops answering {inbox} at these times. You can add it again later.","save_failed":"Couldn’t save this time. Try again.","answers_at_times":"{inbox} · {count, plural, one {# time} other {# times}}","legend_default":"{agent}, the rest of the week","legend_none":"No agent the rest of the week","discard_title":"Discard this time?","discard_description":"Your changes won’t be saved.","retire_note":"{count, plural, one {Its # set time is removed too.} other {Its # set times are removed too.}}"},"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"},"sent_automatically":"sent automatically"},"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","unassigned":"{count, plural, one {# conversation} other {# conversations}} unassigned","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.","select_all_aria":"Select all loaded conversations"},"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"},"stay_cards":{"open":"Share from this stay","search":"Search this stay's cards","group":{"suggested":"Suggested","all":"All cards","upsells":"Upsells"},"kind":{"house_manual":"House manual","parking":"Parking","address":"Address","upsell":"Upsell","wifi":"WiFi","access":"Door access","times":"Check-in & checkout times","check_in_steps":"Check-in steps"},"price":{"per_night":"{price} / night","per_guest_per_night":"{price} / guest / night","per_guest":"{price} / guest","per_unit":"{price} / unit"},"hint":{"text":"Inserts text","link":"Portal link"},"gated":"After check-in unlocks","unavailable":"Not set up for this property","set_up":"Set up","empty":"This conversation isn't linked to a stay.","channel_note":"This channel can't show cards — picking one inserts text or a portal link you can edit.","chip":"{card} card","shown_live":"Shown live to the guest","cards_blocked":"Cards only show in the portal chat — switch back to it or remove them to send here.","insert":{"wifi":"WiFi network: {network}\nPassword: {password}","wifi_open":"WiFi network: {network}","wifi_password":"WiFi password: {password}","address":"Address: {address}","times":"Check-in: {checkIn}\nCheckout: {checkOut}","parking":"Find parking nearby: {url}","link":"{card}: {url}"},"suggested":{"lead":"Suggested for this reply","share":"Share {card}"},"gone":"That card isn't available for this stay anymore."},"task_chip":{"aria":"{title}, {status}"},"opal_column":{"label":"Opal","show":"Show Opal","hide":"Hide","collapsed_auto_sent":"Auto-replied","collapsed_replied":"Replied","collapsed_not_analysed":"Not analysed","collapsed_nothing_open":"Nothing open","earlier":"{count} earlier","escalated":"Escalated","mark_resolved":"Mark resolved","held":"Held for review","earlier_read":"Earlier read","auto_sent":"<b>Replied automatically.</b> Nothing left.","no_recap":"Not analysed yet.","reading":"Reading…","reading_in":"Reading {when}","working_hint":"Thread, stay and property","feedback_prompt":"Was this read right?","open_count":"Open · {count}","use":"Use","added":"Added","save":"Save","peek":{"open":"Open {name}","escalated":"Escalated","needs_you":"Needs you","reading":"{name} · reading…","replied":"{name} · auto-replied","ready":"{name}","not_analysed":"{name} · not analysed","tap_to_analyse":"Tap to analyse","open_count":"{count} open","reply_ready":"Reply ready"},"answer":{"label":"Your answer for {name}","placeholder":"Answer {name} — the guest won't see this","send":"Send to {name}","failed":"Couldn't send your answer. Try again."},"edits":{"heading":"Opal suggests","count":"{count, plural, one {# edit} other {# edits}}","apply":"Apply","edit":"Edit","dismiss":"Dismiss","save":"Save","cancel":"Cancel","show_full":"Show full text","show_less":"Show less","now":"Now","after":"After","not_set":"Not set","applied":"Applied","applied_toast":"{label} updated","undo":"Undo","undone":"Change undone","undo_failed":"Couldn't undo: the text changed since. Edit it on its own page.","stale_changed":"{label} changed since this read.","stale_find_missing":"The text Opal wanted to change is no longer there.","load_failed":"Couldn't load the current text.","needs_permission":"Needs {permission} to apply","permission":{"manage_inbox":"Manage inbox","modify_properties":"Modify properties","modify_guides":"Modify guides"},"field":{"wifi_name":"WiFi network","wifi_password":"WiFi password","house_rules":"House rules","check_in_description":"Check-in description","description":"Text","short_description":"Short description"},"kind":{"property":"Property","instruction":"Instruction","manual":"House manual","guide_item":"Guide item"}}},"thread":{"more":"More","follow_up_custom":"Custom…","next_opened":"{status} · next opened","undo":"Undo","open_stay":"Open stay","shortcut":"{label} · {key}","hotkey_next_prev":"Next/prev","toast_sent":"Sent · Waiting on guest","toast_escalated":"Escalated","toast_resolved":"Escalation resolved","toast_assigned_self":"Assigned to you","toast_unassigned_self":"No longer assigned to you","toast_assignees_updated":"Assignees updated","hotkey_archive":"Archive"},"knowledge":{"library":{"title":"Team knowledge","add":"Add fact","to_review_badge":"{count} to review","tab":{"active":"Active","needs_check":"Needs check","proposed":"To review","archived":"Archived","dismissed":"Dismissed"},"filter_topic":"Filter by topic","filter_status":"Filter by status","any_topic":"All topics","filter_applies_to":"Filter by where it applies","applies_to_any":"Anywhere","all_properties":"All properties","search_placeholder":"Search facts","load_failed":"Couldn't load team knowledge.","empty":"No facts match these filters.","load_more":"Load more","no_scope":"Applies to no property","hidden_count":"{count, plural, one {Hidden on # property} other {Hidden on # properties}}"},"sheet":{"title_create":"Add fact","title_edit":"Edit fact","title_approve":"Review suggested fact","load_failed":"Couldn't load this fact.","unsaved":"Unsaved","read_only_scope":"This fact also applies to properties outside your access, so you can view it but not change it.","fact_kind":"Fact","fact_title":"What Opal should know","statement":"Statement","statement_helper":"One short fact in plain words. Never include door codes, passwords, email addresses or phone numbers.","topic":"Topic","scope_kind":"Scope","scope_title":"Where it applies","all_properties":"All properties","all_properties_helper":"Every property, including ones you add later.","scope_needs_view_properties":"You need permission to view properties to change where this fact applies.","evidence_kind":"Source","evidence_title":"Where it came from","evidence_open":"Open conversation","meta_learned":"Learned by Opal from a staff reply","meta_approved":"Saved {date}","meta_last_checked":"Last confirmed {date}","dismiss":"Dismiss","toast_created":"Fact saved","toast_updated":"Fact updated","toast_approved":"Saved to team knowledge","toast_archived":"Fact archived","toast_restored":"Fact restored","toast_dismissed":"Suggestion dismissed","expires_at":"Temporary until","expires_at_helper":"Optional. After this date Opal stops using the fact and lists it under Needs check.","expires_at_placeholder":"No end date","subject_title":"What it is about","subject_helper_element":"Opal uses this fact when guests ask about this item or space.","subject_helper_reservation":"Opal uses this fact only in this stay's conversations. It is deleted {days, plural, one {# day} other {# days}} after the stay ends.","needs_check_expired":"This fact expired on {date}, so Opal no longer uses it. Confirm it is still true or archive it.","needs_check_review":"This fact is due for a check. Confirm it is still true, or edit or archive it.","still_true":"Still true","toast_confirmed":"Fact confirmed","create_item_kind":"New item","create_item_title":"Create the item","create_item_helper":"Opal suggested an item this property doesn't have yet. Saving creates it and attaches the fact to it.","create_item_needs_permission":"You need permission to manage properties to create this item. You can still dismiss the suggestion.","create_item_name":"Item name","create_item_category":"Category","create_item_category_placeholder":"Choose a category","create_item_category_required":"Choose a category for the item","create_item_space":"Space","create_item_space_placeholder":"Choose a space","create_item_space_required":"Choose the space the item is in","item_mode_create":"Create a new item","item_mode_attach":"Attach to an existing item","attach_item_title":"Attach to an item","attach_item_helper":"The property may already have this item. Saving attaches the fact to the item you choose.","attach_item":"Item","attach_item_placeholder":"Choose an item","attach_item_required":"Choose the item this fact is about","attach_item_option":"{item} ({space})","item_mode_property":"Keep it as a property fact","property_item_title":"Keep it on the property","property_item_helper":"Saving keeps the fact on the property, without an item."},"topic":{"check_in":"Check-in","check_out":"Check-out","access":"Access","parking":"Parking","wifi":"Wi-Fi","amenities":"Amenities","appliances":"Appliances","house_rules":"House rules","pets":"Pets","cleaning":"Cleaning","maintenance":"Maintenance","trash":"Trash & recycling","local_area":"Local area","transport":"Transport","policies":"Policies","other":"Other"},"status":{"proposed":"To review","active":"Active","dismissed":"Dismissed","archived":"Archived"},"origin":{"manual":"Added manually","correction":"Learned by Opal","message":"Saved from a message"},"property_tab":{"title":"Knowledge","description":"What Opal knows about this property: facts set here, plus those it inherits from its group, its tags and all properties.","add":"Add fact","listing_title":"From listing & settings","listing_description":"These come from the property itself and always take priority over team knowledge. Edit them where they live.","proposed_title":"Suggested by Opal","proposed_title_count":"Suggested by Opal · {count}","section_property":"This property","property_empty":"No facts are set on this property yet.","section_group":"From group · {name}","section_tag":"From tag {name}","section_all":"From all properties","hide_here":"Hide here","show_again":"Show here","override":"Override","hidden_here":"Hidden here","section_elements":"Items & spaces","topics_title":"Topics","all_facts":"All facts","rail_check_in_out":"Check-in / out","rail_address":"Address","rail_address_hidden":"Hidden until verified","rail_house_rules":"House rules","rail_manuals":"House manuals","rail_wifi":"Wi-Fi","rail_manuals_count":"{count, plural, one {# manual} other {# manuals}}"},"group_tab":{"title":"Knowledge","description":"Facts that apply to every property in this group. A property can hide one that does not fit it.","add":"Add fact","empty":"No facts apply to this group yet.","column_statement":"Fact","column_topic":"Topic","column_hidden_for":"Hidden on"},"rail":{"learned":"Opal learned"},"learned":{"back":"Back to inbox","title":"Opal learned","description":"Facts Opal picked up from your team's replies. Save the right ones so Opal can use them in future answers.","load_failed":"Couldn't load Opal's suggestions.","empty":"Nothing to review. New suggestions appear here after your team corrects Opal.","load_more":"Load more","detail_label":"Suggestion details","select_hint":"Select a suggestion to review it.","suggested_scope":"Suggested for","evidence":"Learned from","open_conversation":"Open conversation"},"card":{"title":"Opal learned","evidence":"From the reply above","scope_label":"Save for","scope_property":"This property","scope_group":"Its group","scope_all":"All properties","save":"Save","edit":"Edit fact","dismiss":"Dismiss"},"subject":{"level":{"area":"space","item":"item","sub_item":"sub-item"},"element":"{name} ({level})","this_stay":"This stay","new_item":"New item: {name}","new_item_in":"New item: {name} in {area}"},"state":{"until":"Until {date}","expired":"Expired","needs_check":"Needs check"},"notes":{"element_title":"Knowledge","element_empty":"No facts about this yet.","add_fact":"Add fact","add_note":"Add note","stay_title":"Stay notes","stay_empty":"No notes for this stay yet.","stay_summary_count":"{count, plural, one {# note} other {# notes}}","stay_summary_none":"No notes"},"opal_section":{"title":"Knowledge","add_fact":"Add fact","to_review":"To review","group_property":"This property","group_inherited":"Inherited","group_items":"Items and spaces","empty":"No facts for this property yet.","open_library":"Open library"}}},"integration":{"page_title":"Integrations","connected":"Connected","not_connected":"Not Connected","return_to_not_allowed":"That page can't be returned to after connecting. Start the connection again from Integrations.","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_missing_permissions":"Missing permissions","health_missing_permissions_hint":"This connection was authorized before SuiteOp asked for every permission it now uses, so some features are unavailable. Reconnect to grant them — everything else keeps working.","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.","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_device_codes_warning":"Disconnecting first removes the door codes SuiteOp created on these locks, including codes guests are using right now.","codes_still_live":{"title":"Door codes are still on the locks","description":"SuiteOp could not remove some of the door codes it created on these locks, so they may still open the doors. If you disconnect anyway, SuiteOp can no longer remove them: they stay listed on the archived locks, and you will need to delete them at the lock or in the provider's app.","retry_hint":"If the provider was briefly unavailable, wait a minute and try again before disconnecting.","impossible_hint":"This provider does not let SuiteOp remove these codes (for example Brivo codes, or codes that can only expire), so trying again will not help.","reconnect_hint":"SuiteOp cannot reach the provider through this account. Reconnect it, or turn outbound changes back on, so SuiteOp can remove the codes first.","confirm":"Disconnect anyway"},"disconnect_codes_still_live":"Some door codes SuiteOp created could not be removed from the locks. Try again, or disconnect anyway to leave them on the locks.","disconnect_reservations_warning":"{count, plural, one {# reservation imported from this account will be permanently deleted. This cannot be undone.} other {# reservations imported from this account 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 imported from this account, 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":"Payments","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.","sync_connected_failed_reason":"Connected, but failed to sync devices: {reason}","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.","templates_sync_unconfirmed":"Could not confirm whether the template sync finished — refresh in a moment to see the result.","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":"Listings synced successfully","sync_listings_started":"Listing sync started","sync_listings_failed":"Failed to sync listings","sync_listings_failed_reason":"Failed to sync listings: {reason}","sync_listings_unconfirmed":"Could not confirm whether the listing sync finished — refresh in a moment to see the result.","sync_listings_joined":"A listing sync was already running, so yours joined it. It may take a few minutes to finish — refresh later to see every listing.","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_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.","webhooks_unconfigured":"{provider} can't be connected yet: this environment isn't set up to receive its updates. Contact support.","reconnect_target_not_found":"This account can't be reconnected. It may have been disconnected or removed.","reconnect_ambiguous":"This organization has more than one account for this integration. Open the account you want to reconnect and choose Reconnect there.","reconnect_unsupported":"This integration can't be reconnected this way. Connect it as a new account instead."},"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.","account_user_level_description":"This Oracode IHO account uses its own user level. Reservation codes on its locks must match that level’s 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","account_choose_user_level":"Account 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.","reviews_read_title":"Guest reviews not synced","reviews_read_description":"Guest reviews need the reviews:read permission, which this {provider} connection was not granted, so reviews are not imported. The permission comes from the {provider} app configuration, not from reconnecting.","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","scope_gap_feature_file_read":"files and images shared with the assistant","scope_gap_feature_message_send":"sending replies to guests","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}","channel_listings_count":"{count, plural, one {+# channel listing} other {+# channel listings}}","channel_listings_hint":"Copies of this listing on other channels. Their reservations sync to this listing.","quick_add":"Quick Add","quick_add_deactivated_hint":"Deactivated in your PMS. Reactivate the listing there to add it as a property.","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","create_refused":"Couldn't add this listing as a property. The list has been refreshed. If the listing was deactivated in your PMS, reactivate it there before adding it.","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.","webhooks_poll_only":"This integration does not use webhooks. SuiteOp checks it for new and changed reservations every 15 minutes, so there is 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.","op_upstream_only_help":"Only available for {upstream}. {pms} 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.","native_unsupported_help":"SuiteOp can't write access codes into the reservation's own door-code field in {pms}. If SuiteOp's access-code custom field is set up for this account, SuiteOp sends the code there instead; otherwise {pms} won't receive it.","portal_link_instead_help":"This account is set to give guests the portal link instead of the door code, so SuiteOp doesn't write the door code into the reservation's own door-code field in {pms}. If SuiteOp's access-code custom field is set up for this account, SuiteOp still sends the code there."},"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.","toggle_off_help":"Off for this account: “Push portal link to lock code variable in Uplisting” is not turned on, so SuiteOp won't send the link. It can't be changed here yet — ask SuiteOp support to turn it on.","v1_accounts_only_help":"Only for accounts moved from SuiteOp V1 that had the portal link set up there: on Uplisting with “Push portal link to lock code variable in Uplisting” turned on, or on Hostify, Hostfully, FantasticStay, OwnerRez or Smoobu. SuiteOp won't send the link for this account."},"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 JusPay 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.","integration_token":"Integration Token","integration_token_placeholder":"Paste your integration token here","integration_token_help":"In Guesty, open Integrations → Marketplace, choose SuiteOp and click Connect, then copy the token from the pop-up. It works once and expires 4 hours after Guesty creates it, so paste it here straight away.","integration_token_help_link":"How to find it in Guesty","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.","oauth_description":"Sign in with your SuiteOp account inside Zapier. There is no API key to copy, and Zaps run instantly on new tasks, reservations and reviews, and when a device goes offline or reconnects.","oauth_connect":"Connect with Zapier","oauth_connections_note":"Connections made with Connect with Zapier are managed in your Zapier account and don't appear in this list yet."},"juspay":{"merchant_id":"Merchant ID","profile_id":"Profile ID","connected_at":"Connected","dashboard":"JusPay Hyperswitch Dashboard","dashboard_description":"Manage members, routing rules, analytics, and other settings in the JusPay Hyperswitch dashboard.","open_dashboard":"Open Dashboard","register_team_member":"Register Team Member","profile_subtitle":"Profile: {profileId}","welcome_title":"Account Created!","welcome_description":"Your JusPay 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 JusPay 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","government_type_retired_hint":"{authority} can no longer be selected. Properties that already use it keep it until it is changed.","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)","authority_e_visitor":"e-Visitor (Croatia)","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","link_conflict":"This GuestAdmin property is already linked to another property in your organization.","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","open_portal":"Open Authenticate.com Portal","optional":"optional","dob_placeholder":"MM/DD/YYYY","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.","error_webhook_limit_title":"Webhook limit reached","error_webhook_limit_description":"Authenticate.com allows a maximum of 15 webhook subscriptions per company and none can be removed from SuiteOp. Remove an unused subscription in your Authenticate.com portal, then try again.","error_webhook_limit_link":"Open Authenticate.com credentials settings","webhook_limit_note":"Authenticate.com allows a maximum of 15 webhook subscriptions per company. Each connection adds one and none can be removed from SuiteOp — remove unused subscriptions in your Authenticate.com portal.","webhook_limit_note_link":"Manage webhooks in Authenticate.com","webhook_limit_note_title":"Webhook limit: 15 per company","reconnect_webhook":"Re-connect webhook","reconnect_hint":"Only re-connect if completed background checks have stopped arriving in SuiteOp.","reconnect_cooldown_hint":"Re-connected within the last 24 hours. Wait before re-connecting again.","reconnect_success":"Webhook re-registered with Authenticate.com","reconnect_error_title":"Could not re-connect the webhook","reconnect_error_description":"Authenticate.com could not be reached. Try again in a few minutes.","last_registered_at":"Last registered: {value}","last_registered_never":"never","reconnect_refused_title":"Authenticate.com refused the registration","reconnect_refused_description":"This is not temporary, so re-connecting again will not help. Check the account in your Authenticate.com portal or contact SuiteOp support.","reconnect_unconfirmed_title":"Registration not confirmed","reconnect_unconfirmed_description":"Authenticate.com took too long to answer, so the webhook may have been registered anyway. Check your Authenticate.com portal before re-connecting again — each attempt uses one of your 15 webhook slots."},"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 data","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 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_succeeded_skipped":"Review sync skipped","skip_reason_scope_missing":"This connection wasn't granted access to reviews, so none were imported.","skip_reason_no_listings":"No properties are mapped yet. Run a listing sync first.","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_webhook_properties_unreadable":"Webhooks skipped for unreadable properties","event_webhook_register_failed":"Webhook registration failed","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_takeover_kept_migrated_codes":"Takeover kept migrated codes","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."},"ecobee_smartbuildings":{"connect_title":"Connect ecobee SmartBuildings","connect_description":"Enter the API client ID and client secret for your ecobee SmartBuildings account. These are different from your SmartBuildings portal login — request them from smartbuildings@ecobee.com.","username_label":"Client ID","username_placeholder":"Your SmartBuildings API client ID","password_label":"Client secret","password_placeholder":"Your SmartBuildings API client secret","connect_account":"Connect Account","connect_success":"ecobee SmartBuildings account connected successfully","validating_title":"Validating Credentials","validating_description":"Checking your SmartBuildings API credentials…","validated_title":"Credentials Validated","error_invalid_credentials_title":"Invalid Credentials","error_invalid_credentials_description":"ecobee rejected this client ID and secret. Check that you entered the API credentials, not your portal login, and try again.","error_unreachable_title":"Service Unavailable","error_unreachable_description":"Unable to reach ecobee SmartBuildings. Please try again in a moment.","error_conflict_title":"Account Already Connected","error_conflict_description":"This SmartBuildings client ID is already connected to your organization."},"brivo_webhook":{"title":"Brivo event webhook","description":"Brivo sends lock events only through Rules you create in your Brivo account. Point those rules at this address.","address_label":"Webhook address","copy":"Copy address","copied":"Address copied","copy_failed":"Could not copy the address","private_note":"Keep this address private — anyone who has it can send events for this account.","steps_title":"Set up the rules in Brivo","step_open":"In Brivo, open {path}.","step_lock_rule":"Create a rule named “{ruleName}” that triggers when a lock is operated, with the action “{action}” sent to this address.","step_device_down_rule":"Create a second rule named “{ruleName}” that triggers when a device goes down or offline, with the same “{action}” action.","reconnect_note":"Reconnecting this account keeps the same address. Disconnecting retires it — after you reconnect, update both rules with the new address.","no_events_title":"No events received yet","no_events_description":"After you create the rules, the first lock event will appear here.","missing_description":"This account doesn’t have a webhook address yet. Generate one, then use it in your Brivo rules.","generate":"Generate address","generate_failed":"Could not generate the webhook address. Try again.","load_failed":"Could not load the webhook address.","retry":"Try again"},"tt_lock_direct":{"routing_unavailable":"Your TTLock connection is temporarily unavailable. Please try again in a few minutes.","connect_title":"Connect TT Lock","connect_description":"Enter the email or phone number and password for the TTLock app account that owns your locks. Your password is used once to link the account and is not stored by SuiteOp.","username_label":"TTLock account","username_placeholder":"Email or phone number","password_label":"Password","password_placeholder":"Enter your TTLock password","connect_account":"Connect Account","connect_success":"TT Lock account connected successfully","validating_title":"Validating Credentials","validating_description":"Checking your TTLock credentials…","validated_title":"Credentials Validated","error_invalid_credentials_title":"Invalid Credentials","error_invalid_credentials_description":"The TTLock email/phone or password you entered is incorrect. Please check your credentials and try again.","error_unreachable_title":"Service Unavailable","error_unreachable_description":"Unable to reach TTLock. Please check your connection and try again.","error_conflict_title":"Account Already Connected","error_conflict_description":"This TTLock 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 playbook-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","workspace_members_link_suggested":"Link all suggested","workspace_members_linked_count":"{count, plural, =0 {No suggestion has a confirmed Slack email. Link them one at a time.} one {Linked # member} other {Linked # members}}"},"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.","adopt_outside_production":"Adopting a legacy Airbnb customer only runs in production. SENTRY_ENVIRONMENT must be production wherever GATEWAY_MGMT_BASE_URL is set.","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","error_title":"Couldn't connect to 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_connect":{"ownerrez_direct_disabled":"Direct OwnerRez connections aren't enabled for this organization yet.","ownerrez_calry_connected":"This organization already connects OwnerRez through Calry. Keep using that connection, or disconnect it first.","ownerrez_direct_connected":"This organization already connects OwnerRez directly. Keep using that connection, or disconnect it first.","streamline_direct_connected":"This organization already connects Streamline directly. Keep using that connection, or disconnect it first.","linked_elsewhere":"This account is already connected to another SuiteOp organization. Disconnect it there before connecting it here.","ownerrez_linked_elsewhere":"This OwnerRez account is connected to another SuiteOp organization, and that connection has now stopped working. Disconnect it there before connecting it here.","resly_direct_disabled":"Direct Resly connections aren't enabled for this organization yet.","resly_calry_connected":"This organization already connects Resly through Calry. Disconnect that account before connecting Resly directly.","resly_foreign_webhook":"This Resly account already sends its updates to another app connected under SuiteOp's integration. Remove that connection in Resly, then try again.","resly_direct_connected":"This organization already connects Resly directly. Disconnect the direct Resly account before connecting Resly through Calry.","zeevou_direct_connected":"This organization already connects Zeevou directly. Disconnect the direct Zeevou account before connecting Zeevou through Calry.","ownerrez_use_oauth":"Connect OwnerRez from the integrations page.","zeevou_direct_disabled":"Direct Zeevou connections aren't available yet.","zeevou_calry_connected":"This organization already connects Zeevou through Calry. Disconnect that account before connecting Zeevou directly.","zeevou_use_oauth":"Connect Zeevou from the integrations page.","zeevou_busy":"Zeevou is busy right now. Try again in a minute.","hostfully_direct_disabled":"Direct Hostfully connections are not enabled yet.","hostfully_calry_connected":"This organization already connects Hostfully through Calry. Disconnect that account first.","hostfully_direct_connected":"This organization already connects Hostfully directly.","hostfully_busy":"Hostfully is busy. Try again in a minute.","hostfully_no_agency":"That Hostfully login or key does not reach any agency.","hostfully_choose_agency":"This key reaches more than one Hostfully agency. Choose one.","hostfully_key_rejected":"Hostfully rejected that API key.","hostfully_sandbox_staff_only":"Only SuiteOp staff can connect the Hostfully sandbox.","hostfully_agency_choice_expired":"That Hostfully sign-in expired. Start the connection again.","apaleo_disabled":"Apaleo connections aren't available yet.","apaleo_use_oauth":"Connect Apaleo from the integrations page.","apaleo_no_property":"This Apaleo authorization doesn't give access to any property. Grant SuiteOp at least one property in Apaleo, then try again."},"ownerrez":{"routing_unavailable":"Your OwnerRez connection is temporarily unavailable. Please try again in a few minutes."},"pms_oauth":{"callback":{"title":"Connecting {provider}","error_title":"Couldn't connect to {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.","ownerrez_calry_listener":"Connected. This OwnerRez account also sends updates to Calry, so another system may be acting on the same bookings."}},"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://","platform_address_not_mews_host":"The platform address must be a Mews-operated address, such as https://api.mews.com","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"}},"streamline":{"direct_connect_disabled":"Connecting Streamline directly is not turned on for this organization. Contact SuiteOp support to have it enabled.","calry_account_exists":"This organization already has a Streamline account connected through Calry. Disconnect that account before connecting Streamline directly.","other_company_connected":"This organization is already connected to a different Streamline company. SuiteOp connects one Streamline company per organization; disconnect the other one first.","pair_held_elsewhere":"This Streamline token is already connected to another SuiteOp organization. Ask Streamline support for a separate token for this organization.","connect":{"title":"Connect Streamline","description":"Enter the API token key and token secret Streamline issued for your company. We store them encrypted and use them to keep your properties and reservations in sync.","setup_help":"Before you connect, ask Streamline support for an API token for the partner SuiteOp. Streamline sends a token key and a token secret. They expire every 90 days, and SuiteOp renews them automatically.","token_key_label":"Token key","token_key_help":"The token key from Streamline, usually 32 characters.","token_secret_label":"Token secret","token_secret_help":"The token secret sent with the key, usually 40 characters.","connect_button":"Connect Account","connecting":"Connecting…"},"connect_error":{"ip_not_allowed":"Streamline refused the connection from SuiteOp's servers. This is a problem on our side, not with your token. Contact SuiteOp support.","method_not_granted":"This Streamline token isn't allowed to read the data SuiteOp needs. Ask Streamline support to grant the SuiteOp API permissions to this token, then try again."}},"rms":{"connect":{"title":"Connect RMS Cloud","description":"Enter the Client ID and web service password RMS issued for your property. We store the password encrypted and use it to keep your reservations in sync.","setup_help":"Before you connect, ask RMS to activate the Guest Services module for the partner SuiteOp, then request your Client ID and web service password from RMS Support.","client_id_label":"RMS Client ID","client_id_placeholder":"12345","client_id_help":"The numeric Client ID of your RMS database or property, provided by RMS Support.","client_password_label":"Web service password","client_password_help":"Provided by RMS Support. It is separate from the password you use to sign in to RMS.","connect_button":"Connect Account","connecting":"Connecting…"},"client_id_required":"RMS Client ID is required","client_id_invalid":"RMS Client ID must be numeric","client_password_required":"Web service password is required","rate_budget_exhausted":"Too many recent requests to RMS for this account. Wait a moment and try again.","custom_field_slots":{"title":"Custom field slots","description":"Choose which RMS reservation user-defined field each SuiteOp value is written to. RMS shares these fields with your own data, so SuiteOp writes only to the ones you pick here.","link_help":"RMS cuts off longer values without warning, so links can only go in the fields that hold 175 characters (5–7).","not_mapped":"Not mapped","slot_text":"User defined {number} · up to {maxLength} characters","slot_yes_no":"User defined {number} · yes/no","saved":"Custom field slots saved","save_failed":"The custom field slots couldn't be saved. Try again.","field":{"portal_completed":"Guest portal completed","checkout_survey_is_5_star":"Checkout survey rated 5 stars","checkout_survey_complete":"Checkout survey completed","portal_link":"Guest portal link","reservation_link":"SuiteOp reservation link"}}},"amenitiz":{"connect":{"title":"Connect Amenitiz","description":"Enter the API credential your hotel created in Amenitiz. We store the secret encrypted and use it to read your rooms and reservations.","setup_help":"In Amenitiz, the account owner opens Settings → API credentials, ticks the Inventory, Bookings and Settings scopes, and creates a credential. If that screen is missing, ask Amenitiz to enable API access for your account.","read_only_note":"Amenitiz only lets SuiteOp read data. Door codes, check-in status and messages are not sent back to Amenitiz.","client_id_label":"Client ID","client_id_help":"Shown next to the credential in Amenitiz under Settings → API credentials.","client_secret_label":"Client secret","client_secret_help":"Shown when the credential is created, and it can be revealed again from the same screen.","connect_button":"Connect Account","connecting":"Connecting…"},"client_id_required":"Amenitiz client ID is required","client_secret_required":"Amenitiz client secret is required","scope_missing":"This credential is missing a required scope. In Amenitiz, edit the credential and tick both Inventory and Bookings."},"hostfully_direct":{"api_key_required":"Hostfully API key is required","connect":{"api_key_setup_help":"In Hostfully, open your agency settings and copy the agency API key. Connecting with Hostfully's own sign-in is preferred when available.","api_key_label":"API key","api_key_help":"Paste the agency API key exactly as Hostfully shows it.","title":"Connect Hostfully","oauth_description":"Sign in to Hostfully and allow SuiteOp to access your agency.","oauth_button":"Connect with Hostfully","use_api_key":"Use an API key instead","back_to_oauth":"Back to Hostfully sign-in","sandbox_label":"Sandbox (staff only)","choose_agency_title":"Choose a Hostfully agency","choose_agency_description":"Your Hostfully login reaches more than one agency. Each agency is its own connection.","choose_agency_submit":"Connect this agency","back_to_provider":"Back to Hostfully"}},"resly_direct":{"account_id_required":"Resly account ID is required","account_id_invalid":"Resly account IDs contain only letters, numbers, hyphens and underscores.","api_key_required":"Resly API key is required","account_mismatch":"This API key belongs to a different Resly account than the account ID you entered.","connect":{"title":"Connect Resly","description":"Connect your Resly account with its account ID and an API key.","setup_help":"In Resly, open Integrations → SuiteOp, click Activate Integration, then Generate API Key.","setup_link":"Open SuiteOp in Resly","scopes_help":"Use a key generated from the SuiteOp integration. A key created elsewhere in Resly may lack the access SuiteOp needs, such as instant booking updates.","account_id_label":"Resly account ID","account_id_help":"Shown next to your API key in Resly, e.g. my-holiday-homes.","api_key_label":"API key","api_key_help":"Paste the key exactly as Resly shows it."}},"sync_runs":{"tab_label":"Sync activity","title":"Scheduled runs","description":"Every scheduled sync — when it ran, how much it moved, and what failed.","filter_label":"Show runs","filter_all":"All","filter_problems":"Problems","empty":"No scheduled run has been recorded yet.","empty_filtered":"No runs match this filter.","column_status":"Status","column_job":"Job","column_integration":"Integration","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_ecobee_smartbuildings_poll":"ecobee SmartBuildings device sync","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_pms_ical_sync":"Calendar feed sync (single feed)","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_unifi_poll":"UniFi device sync","kind_smartthings_pat_poll":"SmartThings device sync (token connections)","kind_pms_calry_poll":"Calry live poll (webhook-less PMSs)","kind_pms_poll":"PMS poll (webhook-less providers)","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.","loading_more":"Loading…","load_more_error":"Older runs couldn't be loaded. Try again."},"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"},"ring_link":{"title":"Link your Ring account","signed_in_as":"Signed in as {email}","switch_account":"Use a different account","pick_org":"Choose the organization to link","us_only":"Ring is available for US organizations only.","no_eligible_org":"None of your organizations can link Ring.","confirm":"Link Ring to {org}","confirm_hint":"You're linking the Ring account you just signed in to in the Ring app. Only continue if you started this from your own Ring app.","linking":"Linking your Ring account…","success":"Ring is linked. Your cameras will appear in a moment.","expired":"This link has expired. Start again from the Ring app.","already_used":"This link was already used. Start again from the Ring app if your cameras don't appear.","linked_elsewhere":"This Ring account is already linked to another SuiteOp organization.","error_hint":"Something went wrong while linking Ring. Try again from the Ring app.","invalid":"This link isn't valid anymore. Start again from the Ring app.","complete_failed":"Ring is linked, but Ring didn't confirm the connection yet. If your cameras don't appear in a few minutes, relink from the Ring app."},"ring_home":{"resolving":"Opening your Ring devices…"},"ring_connect":{"title":"Connect Ring","body":"Ring accounts are linked from the Ring app. Open SuiteOp in the Ring Appstore, choose Connect, then sign in to SuiteOp to finish.","requirements":"Requires a Ring Protect plan and Ring devices located in the US.","open_appstore":"Open the Ring Appstore"},"catalog":{"page_description":"Connect third-party services, devices and payment providers to your SuiteOp workspace.","your_connections":"Your connections","connections_summary":"{integrations, plural, one {# integration} other {# integrations}} · {accounts, plural, one {# account} other {# accounts}}","filter_label":"Filter connections","filter_all":"All","filter_needs_attention":"Needs attention","search_connections_placeholder":"Search connections or accounts","connections_no_results":"No connections match your search.","connections_empty":"No connections yet. Add one from the catalog below.","connections_all_healthy":"Nothing needs attention.","category_via_calry":"{category} · connected via Calry","add_provider_account":"Add {provider} account","sync_from_guesty":"Sync from Guesty","view_all_accounts":"View all accounts","open_account":"Open account","tag_legacy":"Legacy","tag_via_calry":"via Calry","add_an_integration":"Add an integration","available_count":"{count} available","categories_label":"Integration categories","tab_all":"All","payments_note":"Payment accounts take guest payments for deposits, upsells and folios. Previously in Settings → Payments.","n_connected":"{count} connected","add_account":"Add account","set_up":"Set up","hyperswitch_one_per_org":"One JusPay Hyperswitch account per organization","requires_guesty":"Requires Guesty","requires_guesty_hint":"You need a connected Guesty account to sync GuestyPay.","coming_soon":"Coming soon","attention_badge_label":"{count, plural, one {# integration needs attention} other {# integrations need attention}}"},"provider_page":{"column_account":"Account","column_status":"Status","column_listings":"Listings","column_devices":"Devices","column_last_synced":"Last synced","column_connected":"Connected","filter_all":"All","search_placeholder":"Search accounts","no_results":"No accounts match your search.","no_attention":"No accounts need attention.","via_calry":"via Calry","legacy_sibling":"You also have <strong>{count, plural, one {# {name} account} other {# {name} accounts}}</strong> connected through the legacy Seam integration.","legacy_sibling_calry":"You also have <strong>{count, plural, one {# {name} account} other {# {name} accounts}}</strong> connected through the legacy Calry integration.","direct_sibling":"You also have <strong>{count, plural, one {# {name} account} other {# {name} accounts}}</strong> connected directly.","view":"View"},"account_page":{"account_position":"Account {index} of {total}","switch_account":"Switch account","more_actions":"More actions","rename_account":"Rename account","sync_all":"Sync all","via_calry":"via Calry","tabs":{"overview":"Overview","listings":"Listings","listing_mapping":"Listing mapping","push_controls":"Push controls","devices":"Devices"},"facts":{"listings_mapped":"Listings mapped","listings_mapped_value":"{mapped} of {total}","devices":"Devices"},"sync_card_title":"Sync","sync_rows":{"listings":"Listings","reservations":"Reservations","reviews":"Reviews","conversations":"Conversations"},"sync":"Sync","syncing":"Syncing…","last_synced_meta":"Last synced {time}","details_title":"Details","reservations":"Reservations","connected_via":"Connected via","guestypay_name":"GuestyPay","guestypay_link_description":"{count, plural, one {# payment account} other {# payment accounts}} synced from this Guesty account","danger_zone_title":"Disconnect this account","danger_zone_other_accounts":"Other {provider} accounts stay connected.","disconnect_guestypay_warning":"{count, plural, one {# GuestyPay payment account} other {# GuestyPay payment accounts}} synced from this account will stop syncing."},"connection_link":{"not_eligible":"This provider can't be connected through a link.","not_usable":"This link can no longer be used.","not_revocable":"This link has already been connected or revoked.","not_replaceable":"This link can't be replaced any more.","unreachable":"We couldn't reach the provider. Try again in a few minutes.","identity_unavailable":"We couldn't finish connecting because the provider didn't return an account identity. Ask for a new link and try again."},"reconnect_after_move":{"title":"Reconnect after your move","description":"These integrations moved with your account, but you need to sign in to them again before they work here.","reconnect":"Reconnect","reconnect_aria":"Reconnect {provider}","zapier_instruction":"Zapier does not move automatically. In Zapier, reconnect the SuiteOp app in your Zaps, then turn them back on.","banner":"Some of your integrations need you to sign in again after your move.","banner_link":"Reconnect now","banner_dismiss":"Dismiss"},"unifi":{"title":"Connect UniFi","description":"Paste a UniFi API key to connect your UniFi consoles.","step_create":"Create an API key in UniFi","steps_sign_in":"Sign in to unifi.ui.com","steps_create":"Go to Settings → API Keys and create a key","steps_paste":"Copy the key and paste it here","create_key_button":"Create a key","api_key_label":"API key","api_key_placeholder":"Paste your UniFi API key","show_key":"Show key","hide_key":"Hide key","scope_warning":"This key gives SuiteOp access to the UniFi consoles you selected when you created it. You can revoke it at any time in UniFi.","preview":"Find my consoles","previewing":"Checking…","consoles_found":"{count, plural, one {# console found} other {# consoles found}}","protect":"Protect","network":"Network","connect":"Connect","connect_success":"UniFi connected","api_key_invalid":"That doesn't look like a UniFi API key. Copy the whole key from UniFi and paste it again.","api_key_rejected":"UniFi didn't accept this API key. Check it hasn't been revoked, or create a new one.","no_consoles":"This API key can't see any UniFi consoles. Make sure it was created on the account that owns your consoles.","linked_elsewhere":"One of these UniFi consoles is already connected to another SuiteOp organization.","console_on_other_account":"One of these UniFi consoles is already connected through another UniFi account in this organization. Reconnect that account instead.","done":"Done"},"unifi_webhook":{"title":"Camera events from UniFi Protect","description":"UniFi sends camera events only through an alarm you create in UniFi Protect. Point the alarm’s webhook at this address.","address_label":"Webhook address","copy":"Copy address","copied":"Address copied","copy_failed":"Could not copy the address","private_note":"Keep this address private — anyone who has it can send camera events for this account.","steps_title":"Set up the alarm in UniFi Protect","open_unifi":"Open UniFi","step_open":"Open UniFi, then go to {path}.","step_trigger":"Click “{create}”. For the trigger, choose {triggers}, then select the cameras to watch.","step_action":"For the action, choose “{webhook}” → “{custom}” and set the method to “{method}”.","step_paste":"Paste the address above as the URL, then click “{save}”. You don’t need “{thumbnails}”.","no_event":"No camera event received yet.","last_event":"Last camera event received: {time}","get_warning_title":"Deliveries arrive without an event","get_warning_description":"UniFi is calling this address without event details. Edit the alarm and set the webhook method to “{method}”.","rotated_title":"Your webhook address changed","rotated_description":"The previous address no longer works. Replace it in your UniFi Protect alarm.","reconnect_note":"Reconnecting this account creates a new address and the old one stops working — update the alarm after you reconnect.","missing_description":"This account doesn’t have a webhook address yet. Generate one, then use it in your UniFi Protect alarm.","generate":"Generate address","generate_failed":"Could not generate the webhook address. Try again.","load_failed":"Could not load the webhook address.","retry":"Try again"}},"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.","poll_only_label":"No webhooks: kept in sync by polling","poll_only_description":"This provider does not send webhooks. SuiteOp checks it for new and changed reservations every 15 minutes, with a full check every 6 hours.","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.","read_only":"Read-only connection — this PMS does not accept updates from SuiteOp, so nothing is pushed.","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.","remote_not_compared":"Not compared","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.","request_refused":"SuiteOp refused the request: the address is private or the provider answered with a redirect.","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":{"keyless":{"description":"Mobile keys for your guests, created from confirmed reservations","connect":{"title":"Connect Keyless","description":"In Keyless, open Integrations, create a Custom Integration and paste its Secret Key here.","api_key_label":"API key","api_key_help":"SuiteOp checks the key with Keyless and stores it encrypted.","connect_button":"Connect","connecting":"Connecting…","success":"Keyless account connected","error_invalid_key":"Keyless rejected this API key. Check it and try again.","error_unreachable":"Keyless could not be reached. Try again in a few minutes.","error_already_connected":"This Keyless account is already connected.","error_unknown":"The Keyless account could not be connected. Try again."},"mapping":{"title":"Property listings","help":"Enter the listing ID you gave each property’s lock in Keyless, exactly as it is there. Clear the ID and save to stop sending that property’s bookings.","property_column":"Property","listing_id_column":"Keyless listing ID","listing_id_placeholder":"Listing ID","listing_id_aria":"Keyless listing ID for {property}","empty":"No properties yet.","empty_description":"Add a property first, then come back to enter its Keyless listing ID.","empty_action":"Go to properties","save_failed":"The listing ID could not be saved. Try again."}},"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."},"reconnect_account_mismatch":{"title":"Connection failed","description":"Calry returned a different account than the one you are reconnecting. Sign in to the same PMS account and try again."},"permission_revoked":{"title":"Permission changed","description":"You no longer have permission to manage integrations in this workspace, so the connection was not completed. Ask an admin to connect it."},"partner_org":{"title":"Partner organization","description":"This is a partner organization, so it can't add properties, PMS connections or devices. Contact SuiteOp support to turn this on."},"generic":{"title":"Connection failed","description":"We couldn't finish connecting your account. Please try again from the integrations page."},"ownerrez_direct_connected":{"title":"Connection failed","description":"This organization already connects OwnerRez directly. Keep using that connection, or disconnect it first."},"resly_direct_connected":{"title":"Connection failed","description":"This organization already connects Resly directly. Disconnect the direct Resly account before connecting Resly through Calry."},"zeevou_direct_connected":{"title":"Connection failed","description":"This organization already connects Zeevou directly. Disconnect the direct Zeevou account before connecting Zeevou through Calry."},"streamline_direct_connected":{"title":"Connection failed","description":"This organization already connects Streamline directly. Keep using that connection, or disconnect it first."},"hostfully_direct_connected":{"title":"Connection failed","description":"This organization already connects Hostfully directly. Disconnect the direct Hostfully account before connecting Hostfully through Calry."}}},"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"},"resideo":{"description":"Thermostat Automation"},"first_alert":{"description":"Thermostat Automation"},"kwikset":{"description":"Smart lock automation with Kwikset"},"tt_lock":{"description":"Smart lock automation for TT Lock"},"tt_lock_direct":{"description":"Direct integration with TT Lock smart locks — lock/unlock, PIN management, and gateway connectivity"},"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"},"ecobee_smartbuildings":{"description":"Thermostats in ecobee SmartBuildings — remote control, limits and automations"},"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"},"rms":{"description":"Cloud property management system for hotels, resorts and holiday parks"},"amenitiz":{"description":"All-in-one property management system for independent hotels"},"resly_direct":{"description":"Property management system for holiday homes, apartments and resorts in Australia and New Zealand"},"zeevou_direct":{"description":"Property management system, channel manager and direct booking websites for serviced apartments and holiday lets"},"hostfully_direct":{"description":"Connect your Hostfully account to SuiteOp"},"apaleo":{"description":"Cloud property management system for hotels and serviced apartments"},"avantio_direct":{"description":"Connect your Avantio account to SuiteOp"},"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"}},"ring":{"description":"Link Ring cameras and doorbells to properties, open live view, and get motion and doorbell alerts."},"unifi":{"description":"UniFi Protect cameras and doorbells, plus UniFi access points, switches and gateways — status, alerts and remote restart."},"alexa":{"description":"Turn Amazon Echo devices into an in-unit guest concierge."}},"mcp_servers":{"page_title":"Tools","page_description":"Add new actions to your playbooks 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 playbooks.} other {# actions have been added to your playbooks.}}","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. Playbooks 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","import_csv":"Import CSV","page_title":"Members","page_description":"Everyone who can sign in to your organization, and what they can see.","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":{"inbox_access":"Inbox Access","inbox_access_all_label":"Access all inboxes","inbox_access_all_description":"This member can read conversations in every inbox.","inbox_access_owner_admin":"Owners and admins always have access to all inboxes.","inbox_access_kinds_hint":"Choose which inboxes this member can read. With none selected, they see no conversations.","inbox_access_kind_guest":"Guest","inbox_access_kind_owner":"Owner","inbox_access_kind_vendor":"Vendor","inbox_access_forbidden":"You can only grant access to inboxes you can access yourself.","inbox_access_save_failed":"Failed to update inbox access.","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","meta_joined":"Joined {date}","meta_last_seen":"Last seen {value}","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","reactivate_member":"Reactivate Member","reactivate_card_description":"Restore this suspended member to the organization. Their permissions and property access must be granted again.","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.","role_ungrantable_hint":"Some roles include permissions you don’t hold, so you can’t assign them.","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}","reactivate_title":"Reactivate {name}","properties_label":"Properties","tab":{"general":"General","pay":"Pay","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. Guest care, below, is a preference, never a requirement.","auto_assign_description_without_guest_care":"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","unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved 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.","reactivate_description":"{name} returns as a Viewer with no permissions, property access or access code. Re-grant their access from the Permissions and Access tabs.","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.","guest_care":{"title":"Guest care","description":"Match this person to guests with these labels — for example VIP for someone great with small details and extras, or Privacy-conscious for someone discreet.","soft_preference":"Preferred, not required: it never stops anyone else from being assigned. Playbooks that assign with Guest care match pick this person first for guests with these labels.","none":"No Guest care labels yet.","empty":"Your organization has no contact labels yet.","load_failed":"Couldn't load contact labels."}},"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}"},"step_label":"Step {step} of {total}: {label}","step_label_optional":"Step {step} of {total}: {label} (optional)","optional_hint":"You can leave this empty and set it later from the member's profile.","optional_hint_permissions":"The role's default permissions apply unless you change them here. You can adjust them later from the member's profile."},"toast":{"suspended":"Member suspended","imported":"{count, plural, one {# member imported} other {# members imported}}","role_updated":"Role updated","code_assigned":"Access code assigned","scopes_updated":"Assignments updated","compensation_updated":"Compensation updated","compensation_updated_shifts_released":"Compensation updated. Upcoming shifts unassigned: {count}","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}}","invited_named":"Invitation sent to {name}","resent_named":"Invitation resent to {name}"},"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","payouts":"Payouts","connections":"Connections"},"permission_label":{"view_dashboard":"View dashboard","private_code":"Personal access code","view_tasks":"View all tasks","modify_tasks":"Manage all tasks","delete_tasks":"Delete tasks","view_task_templates":"View task templates","manage_task_templates":"Manage task templates","delete_task_templates":"Delete task templates","manage_task_rates":"Manage task rates","view_devices":"View devices","control_device":"Control devices","modify_devices":"Manage devices","view_properties":"View properties","modify_properties":"Manage properties","delete_properties":"Delete properties","view_reservations":"View reservations","modify_reservations":"Manage reservations","view_guest_ids":"View guest IDs","view_guides":"View guides","modify_guides":"Manage guides","delete_guide":"Delete guides","view_integration":"View integrations","manage_integrations":"Manage integrations","account_admin":"Account administration","view_organization":"View organization","manage_organization":"Manage organization","manage_billing":"Manage billing","view_users":"View users","manage_users":"Manage users","delete_users":"Delete users","view_lock_code":"View lock codes","manage_lock_code":"Manage lock codes","view_staff_codes":"View team members' access codes","view_event":"View events","manage_event":"Manage events","view_analytics":"View analytics","view_logs":"View logs","view_workflows":"View agents","manage_workflows":"Manage agents","delete_workflows":"Delete agents","view_payments":"View payments","manage_payments":"Manage payments","view_inbox":"View inbox","manage_inbox":"Manage inbox","view_booking_engine":"View booking engine","manage_booking_engine":"Manage booking engine","view_shifts":"View shifts","manage_shifts":"Manage shifts","approve_time_entries":"Approve time entries","manage_message_templates":"Manage message templates","manage_inbox_assignees":"Manage inbox assignees","view_team_locations":"View team locations","manage_payouts":"Manage pay runs","view_payouts":"View pay runs","manage_connections":"Manage company connections","manage_contacts":"Manage contacts"},"permission_description":{"view_tasks":"See every task at their properties. Everyone can always see and work tasks assigned to them.","modify_tasks":"Create, edit, assign and work any task.","delete_tasks":"Delete and restore tasks.","view_payouts":"See pay runs and what each contractor and partner is owed.","manage_payouts":"Hold a line back and add adjustments on a draft pay run. See the status of the organization's own Stripe payout account; only owners can set it up or open it.","manage_connections":"Invite a company, choose the properties it works on, set prices and end the connection.","manage_contacts":"Create, edit, merge and archive contacts, and manage segments."},"permission_section_hint":{"tasks":"Assigned tasks are always visible to the assignee."},"deleted_user":"Deleted user"},"migration":{"verify":{"intro":"Confirms that the migrated account keeps working in V2 once V1 is switched off.","reasons_unknown":"SuiteOp could not explain this check result. Check again; if it stays, ask engineering what it means before you sign it off.","reasons":{"held_by_migration":"The migration still holds this account after the switch-over, so SuiteOp could not check it. Sign this line off, or finish the switch-over and check again.","held_by_migration_pre_lift":"This account is still held by the migration, which is expected until V1 is switched off. Nothing to do now; check again after the switch-over.","held_for_handover":"This account's credential handover from V1 is still running, so its connection cannot be checked yet. Re-run the check once the handover settles.","probe_budget_exhausted":"The check ran out of time before it reached this item. Check again to finish it.","not_testable_locally":"Not testable locally: no mock answers this check on the local test stack, so it was not run.","pms_status_pending":"This PMS connection has not finished connecting. Finish connecting it in Integrations, then check again.","pms_status_expired":"This PMS connection has expired. Reconnect it in Integrations, then check again.","pms_status_error":"This PMS connection is in an error state. Fix or reconnect it in Integrations, then check again.","pms_status_disconnected":"This PMS connection is disconnected. Reconnect it in Integrations, then check again.","pms_status_needs_reauth":"This PMS connection needs the client to sign in again. Have them reconnect it in Integrations, then check again.","pms_webhook_missing":"SuiteOp is not registered to receive updates from this PMS, so new bookings and changes will not arrive. Set up the PMS webhook, then check again.","pms_webhook_secret_missing":"The webhook for this PMS has no signing secret, so SuiteOp cannot trust its updates. Reconnect the PMS to set one up, then check again.","pms_foreign_webhook_stored":"SuiteOp's saved settings for this PMS list a webhook at an address that is not SuiteOp's, so SuiteOp cannot confirm it receives the PMS's updates. Do not change anything in the PMS; ask engineering to check that saved webhook, then check again.","pms_webhook_unverifiable":"SuiteOp could not confirm where this PMS sends its updates. Check again; if it keeps happening, confirm the webhook in the PMS by hand.","pms_calry_webhook_repointed":"This PMS is sending its updates to V1 instead of SuiteOp. Press Fix to point them back, then check again.","pms_auth_rejected":"This PMS refused SuiteOp's sign-in when reading listings. Reconnect the PMS, then check again.","pms_live_unverifiable":"SuiteOp could not read listings from this PMS just now. Check again in a few minutes.","hold_intent_missing":"An open deposit hold is missing its payment reference, so it cannot be captured or released. Fix the hold by hand before it lapses, then check again.","hold_expiry_missing":"These open holds came from V1 with no expiry date: V1 never recorded one, and SuiteOp cannot read or set it. SuiteOp will not capture or cancel them automatically. Sign off with a reason that says who settles them.","hold_account_unlinked":"These open holds came from V1 with no payment account linked, so SuiteOp cannot capture or release them, and it will not capture or cancel them automatically. Sign off with a reason that says who settles them.","hold_incomplete_more":"More open deposit holds have the same problem than this list can show. Fix the ones listed, then check again to see the rest.","stripe_account_unlinked":"This payment account is not linked to a Stripe account. Reconnect Stripe for this account, then check again.","stripe_unconfigured":"Stripe is not set up in this environment, so SuiteOp could not check this account. Ask engineering to configure Stripe, then check again.","stripe_account_missing":"Stripe could not find this payment account. Reconnect Stripe for this account, then check again.","stripe_charges_disabled":"Stripe has turned off charges on this account, so guests cannot be charged. Have the client finish their Stripe setup, then check again.","stripe_account_access_refused":"Stripe refused SuiteOp access to this account. Have the client reconnect Stripe, then check again.","stripe_account_unverifiable":"SuiteOp could not reach Stripe to check this account. Check again in a few minutes.","juspay_webhook_not_on_hookdeck":"Payment updates for this JusPay Hyperswitch account do not reach SuiteOp. Repoint the JusPay Hyperswitch webhook, then check again.","juspay_merchant_key_refused":"JusPay Hyperswitch refused this merchant's key. Get a working key from the client, update it, then check again.","juspay_takeover_unverified":"SuiteOp could not confirm that it took over this JusPay Hyperswitch account. Check again; if it keeps happening, confirm the setup in JusPay Hyperswitch by hand.","juspay_takeover_pending":"Taking over this JusPay Hyperswitch account has not finished yet. Check again later.","guestypay_link_missing":"This GuestyPay account is not linked to a Guesty connection. Link it, then check again.","guestypay_provider_id_missing":"This GuestyPay account is missing its provider ID. Reconnect it, then check again.","guestypay_link_invalid":"This GuestyPay account is linked to a Guesty connection that does not exist. Link it to the right connection, then check again.","guestypay_link_inactive":"This GuestyPay account is linked to a Guesty connection that is not active. Reconnect Guesty, then check again.","esign_status_pending":"This e-signature connection has not finished connecting. Finish connecting it, then check again.","esign_status_expired":"This e-signature connection has expired. Reconnect it, then check again.","esign_status_error":"This e-signature connection is in an error state. Fix or reconnect it, then check again.","esign_status_disconnected":"This e-signature connection is disconnected. Reconnect it, then check again.","esign_status_needs_reauth":"This e-signature connection needs the client to sign in again. Have them reconnect it, then check again.","esign_keepalive_uncovered":"Nothing keeps this e-signature connection signed in, so it will expire. Reconnect it so SuiteOp can renew it, then check again.","esign_account_id_missing":"This e-signature connection is missing its account ID, so signed documents cannot be downloaded. Reconnect it, then check again.","esign_base_url_missing":"This e-signature connection is missing its server address, so signed documents cannot be downloaded. Reconnect it, then check again.","esign_auth_rejected":"The e-signature provider refused SuiteOp's sign-in when downloading a signed document. Reconnect it, then check again.","esign_retrieval_unverifiable":"SuiteOp could not download a signed document just now. Check again in a few minutes.","authenticate_needs_sign_in":"This Authenticate.com account needs the client to sign in again. Have them reconnect it, then check again.","authenticate_webhook_after_cutover":"This Authenticate.com account's updates are set up only after the switch-over. Nothing to do now; check again after V1 is switched off.","authenticate_webhook_missing":"SuiteOp is not registered to receive updates from this Authenticate.com account. Reconnect it, then check again.","portal_link_redirect_only":"Calry cannot write a reservation field into this PMS, so SuiteOp cannot put the guest portal link there for new bookings; links V1 stored keep working only until V1 is switched off. Sign this line off once you have accepted that.","portal_link_field_v1_unknown":"SuiteOp cannot tell which field V1 used for the guest portal link in this PMS. Confirm the field by hand, then sign this line off.","portal_link_field_unresolved":"SuiteOp has not found the guest portal link field in this PMS. Check again after the switch-over, or sign this line off if the field no longer exists.","portal_link_field_mismatch":"SuiteOp writes the guest portal link into a different field than V1 did. Point SuiteOp back at V1's field with the fix on this line, then check again. If V1's field is gone from the PMS, sign this line off.","portal_link_domain_not_repointed":"This custom web address still points at V1, so guest portal links on it stop working when V1 is switched off. Point it at SuiteOp, or sign this line off.","portal_link_no_new_stay":"No new booking has arrived on this PMS since the switch-over, so the portal link push could not be checked. Check again after a new booking, or sign this line off.","portal_link_push_failed":"SuiteOp failed to write the guest portal link to this booking in the PMS. Retry the push from the booking, or sign this line off.","portal_link_push_skipped":"SuiteOp skipped writing the guest portal link to this booking in the PMS. Check the booking's sync settings, or sign this line off.","portal_link_push_missing":"SuiteOp has not yet written the guest portal link to this booking in the PMS. Check again later, or sign this line off.","messaging_activation_owed":"Guest messages have not been switched on for this migration yet. Check again after they are activated.","messaging_rule_inactive":"A guest message that was on in V1 is not live in SuiteOp, so guests will not receive it. Turn it on, or sign this line off with a reason.","email_platform_unconfigured":"Email sending is not set up in this environment, so no guest emails can go out. Ask engineering to configure it, then check again.","email_sender_missing":"A guest email in this message has no sender, so it cannot be sent. Choose a sender, or sign this line off with a reason.","email_sender_not_found":"A guest email in this message uses a sender that no longer exists, so it cannot be sent. Choose another sender, or sign this line off with a reason.","email_sender_domain_not_in_org":"A guest email in this message uses a sender domain that belongs to another account. Choose a sender from this account, or sign this line off with a reason.","email_sender_domain_unverified":"A guest email in this message uses a sender domain that has not been verified. Finish verifying the domain, or sign this line off with a reason.","email_sender_host_mismatch":"A guest email in this message uses a sender address that is not on its domain. Fix the sender, or sign this line off with a reason.","email_sender_sender_unverified":"A guest email in this message uses a sender address that has not been confirmed. Confirm the sender, or sign this line off with a reason.","email_recipient_unresolved":"A guest email in this message has no recipient SuiteOp can find. Fix the recipient, or sign this line off with a reason.","stay_activation_owed":"Upcoming stays have not been activated for this migration yet, so their scheduled messages could not be checked. Check again after activation.","advance_notice_missing":"An upcoming stay is missing a scheduled guest message, so the guest will not receive it. Re-schedule it for the stay, or sign this line off with a reason.","advance_notice_missing_more":"More upcoming stays are missing scheduled guest messages than this list can show. Fix the ones listed, then check again to see the rest.","guest_storage_not_cut_over":"Guest file storage has not been moved to this region yet, so ID scans and signatures could not be checked. Check again after the storage cutover.","compliance_bucket_wrong_region":"Guest files are stored outside this account's region. Ask engineering to fix the storage location, then check again.","compliance_file_external":"A guest ID scan, signature or signed agreement still points at V1 storage and will disappear when V1 is switched off. Copy it to SuiteOp, or sign this line off.","compliance_file_external_more":"More guest files still point at V1 storage than this list can show. Fix the ones listed, then check again to see the rest.","compliance_file_missing":"A guest ID scan, signature or signed agreement is missing from SuiteOp's storage. Copy it again, or sign this line off.","compliance_file_missing_more":"More guest files are missing than this list can show. Fix the ones listed, then check again to see the rest.","compliance_file_unreadable":"SuiteOp could not read a guest ID scan, signature or signed agreement just now. Check again, or sign this line off.","compliance_file_unreadable_more":"More guest files could not be read than this list can show. Check again to see the rest.","compliance_files_not_reached":"The check ran out of time before it read every guest file. Check again to finish it.","compliance_file_unsettled":"Some guest files have not finished copying, or failed to copy. Retry them from the failed items, then check again.","missing":"This guest file is missing from SuiteOp's storage. Copy it again, or sign this line off.","unreadable":"SuiteOp could not read this guest file just now. Check again, or sign this line off.","external":"This guest file still points at V1 storage and will disappear when V1 is switched off. Copy it to SuiteOp, or sign this line off.","not_rehosted":"This guest file was not copied to SuiteOp during the migration. Copy it by hand, or sign this line off with a reason.","device_probe_pending":"The device check is still running in the background. Check again in a few minutes.","code_capability_unknown":"SuiteOp does not know whether this lock can take door codes. Confirm it on the lock, then sign this line off.","lock_not_code_capable":"This lock cannot take door codes, so stays on it get no code from SuiteOp. Sign this line off with a reason saying how guests get in.","device_offline":"This device is offline. Bring it back online, then check again, or sign this line off.","hub_offline":"This hub is offline, so the devices behind it cannot be reached. Bring it back online, then check again, or sign this line off.","device_online_unreported":"This device does not report whether it is online. Confirm it on site, then sign this line off.","device_identity_incomplete":"This device is missing details SuiteOp needs to reach it. Reconnect its account, then check again.","device_provider_unregistered":"SuiteOp does not support this device's provider yet, so it could not be checked. Confirm it by hand, then sign this line off.","credentials_missing":"This device's account has no sign-in details in SuiteOp, so the device cannot be reached. Reconnect the account, then check again.","credential_not_refreshable_before_cutover":"This device's account sign-in has expired and can be renewed only after the switch-over. Check again after V1 is switched off, or sign this line off.","reconnect_required":"This device's account needs to be reconnected. Reconnect it, then check again.","provider_authorization_refused":"The device provider refused SuiteOp access to this device. Reconnect the account, then check again.","device_not_found_at_vendor":"The device provider no longer has this device. Remove it in SuiteOp or reconnect it, then check again.","provider_refused_permanently":"The device provider keeps refusing requests for this device. Reconnect the account, then check again.","device_unverifiable":"SuiteOp could not reach this device just now. Check again in a few minutes, or sign this line off.","absence_blind_provider":"This lock's provider cannot show which codes are on the lock, so the stay's code cannot be checked. Confirm it on the lock, then sign this line off.","partner_keyed_unlistable":"This lock cannot show whether the stay's code is on it. Confirm it on the lock, then sign this line off.","stay_codes_unverifiable":"SuiteOp could not read the codes on this lock just now. Check again, or sign this line off.","stay_code_duplicate":"A stay has more than one working code on this lock. Remove the extra code, then check again.","stay_code_mismatch":"The lock holds a different PIN for this stay than SuiteOp has. Retry the code from the stay, then check again.","stay_code_missing":"A stay starting soon has no working code on this lock. Retry the code from the stay, then check again.","v1_code_installs_at_start":"This stay's code from V1 is not on the lock yet: V1 saved it but never installed it, so SuiteOp installs it with V1's PIN at its own start time, as V1 would have. Confirm the guest does not need it sooner, then sign this line off.","revocation_owner_none":"Nothing will remove this door code from the lock when it ends. Remove it by hand when the stay ends, then sign this line off.","device_unresolved":"The lock this V1 code belongs on was not found in SuiteOp, so the stay has no code there. Issue a code by hand, then sign this line off.","pin_missing":"V1 recorded no PIN for this code, so the stay has no code on the lock. Issue a code by hand, then sign this line off.","pin_unopenable":"This code's V1 PIN could not be read, so the stay has no code on the lock. Issue a code by hand, then sign this line off.","pin_unavailable":"This code's V1 record is no longer kept, so its PIN cannot be read and the stay has no code on the lock. Issue a code by hand, then sign this line off.","lock_unreadable":"The lock could not be read, so this V1 code was not moved over. Issue a code by hand, then sign this line off.","partner_keyed_provider":"This lock cannot show whether the V1 code is already on it, so it was not moved over. Confirm it on the lock, then sign this line off.","provider_mints_pin":"This lock makes its own PINs, so the V1 code could not be moved over. Issue a new code and tell the guest, then sign this line off.","stay_slot_held":"Another access grant already holds this stay on the lock, so the V1 code was not moved over. Check the stay's codes, then sign this line off.","pin_held_by_another_code":"Another code on the lock already uses this PIN, so the V1 code was not moved over. Issue a different code, then sign this line off.","native_code_not_working":"The stay's SuiteOp code on this lock has failed or is being removed, so the guest may have no working code. Issue a code, then sign this line off.","grant_unidentified":"The lock lists this code, but V1 recorded no grant to take it over by. Confirm the code by hand, then sign this line off.","v1_code_not_on_lock":"V1's code is not on this lock, and the cutover does not put codes on locks, so the stay has no code here. Issue a code by hand, then sign this line off.","unit_unsettled":"Moving this V1 code onto the lock has not finished yet. Check again later.","webhook_receipt_pending":"SuiteOp is still waiting to receive its first update from this integration. Check again later.","webhook_receipt_no_lift_anchor":"SuiteOp cannot tell when this account was switched over, so it cannot check for updates since then. Check again, or sign this line off.","webhook_receipt_none_in_window":"SuiteOp has received no updates from this integration recently, so changes may not be arriving. Check the integration's webhook, or sign this line off.","juspay_webhook_repoint_failed":"SuiteOp could not point this JusPay Hyperswitch merchant's payment updates at itself, so it will not hear about payments. Sign this line off with a reason saying how payments are tracked.","door_codes_resolved_without_vendor":"This lock's door codes were resolved without the vendor. V1's existing codes stay on the lock, and nothing adds, changes or removes a code there until the lock reconnects and its door codes are re-queued."}},"disable_v1":{"intro":"The last step. V1 is turned off on V1's own migration page; here you check that it is off and record it. V2 never changes anything in V1.","what_happens_title":"What disabling V1 does, and what it does not do","what_happens_body":"V1 stays readable and editable afterwards: Bubble cannot lock an app. Anything anyone changes in V1 from now on goes nowhere. V2 no longer takes changes from V1, so those edits never reach V2. Tell the customer before you continue.","v1_page_title":"1. Turn V1 off on its migration page","v1_page_body":"On V1's migration page, stop V1's workers, disconnect its devices and turn on redirects to V2.","v1_page_link":"Open your V1 migration page","check_title":"2. Check V1's redirects","check_body":"Asks V1 for this account's redirect switch. The check only reads; it changes nothing in V1. Redirects on means the account has cut over and no longer works in V1.","check_button":"Check redirects","check_requested":"Check requested. The answer appears here once V1 replies.","redirect_state":"{status, select, active {Redirects to V2 are on: this account has cut over and no longer works in V1} inactive {Redirects to V2 are off: the account still works in V1} unconfigured {V2 cannot read V1's redirect setting yet, so it cannot count as on} column_missing {V1 does not have a redirect switch yet, so it cannot count as on} other {V1 has not been checked yet, so redirects cannot count as on}}","active_since":"On since {at}","checked_at":"Checked {at}","guest_url_body":"Your V2 guest URL, where guests now check in. Enter it in V1 so V1 redirects there.","guest_url_none":"This organization has no guest URL yet. Set one up in White Labeling.","guest_url_copy":"Copy URL","guest_url_copied":"Copied","guest_url_copy_failed":"Could not copy the URL. Select it and copy it by hand.","gate_title":"3. What must pass first","checks":{"cutover":"Account cut over to V2","parity":"Parity report passed and signed","verification":"Verification checks passed and attested","acceptance":"Customer acceptance recorded","redirects":"Redirects to V2 on in V1"},"blockers":{"cutover_not_done":"The migration is not cut over yet. Disable V1 comes after the cutover.","run_not_completed":"The migration run has not finished yet: a step still held, such as a lock's door codes on the Cutover step, keeps it open. Disable V1 opens once the run completes.","redirects_stale":"The last redirect check is more than 15 minutes old. Press Check redirects again.","parity_missing":"There is no parity report yet. Generate it on the Parity step.","parity_report_generating":"A new parity report is being generated. Wait for it to finish on the Parity step, then sign it.","parity_report_generate_failed":"The last parity report could not be generated, so the one on file is out of date. Generate it again on the Parity step and sign it.","parity_failed":"The parity report failed. Fix the rows it flags, then generate it again.","parity_stale_after_delta":"A delta ran after the parity report. Generate the report again.","parity_report_stale":"The parity report was made before the current checks. Generate it again and sign it.","parity_unsigned":"The parity report is not signed. Sign it on the Parity step.","probes_not_green":"Some verification checks have not passed. Run them on the Verify step.","probes_stale":"The last verification run is too old to count. Run the checks again on the Verify step.","attestation_incomplete":"Some verification lines are not attested yet.","acceptance_not_recorded":"The customer's acceptance is not recorded. Record it on the Accept step.","redirects_inactive":"V1's redirects to V2 are off. Turn them on on V1's migration page, then check again.","redirects_unconfigured":"V2 cannot read V1's redirect setting yet, so disabling V1 stays blocked until it can.","redirects_column_missing":"V1 does not have its redirect switch yet, so disabling V1 stays blocked until it does.","redirects_unchecked":"V1's redirects have not been checked yet. Press Check redirects."},"open_lines":"Required lines not attested yet:","acceptance_stale":"The customer accepted an earlier version of the parity report. The acceptance still counts, but tell the customer what changed.","press":"Disable V1","press_again":"Record again","press_blocked":"Blocked until verification and parity both pass and the customer's acceptance is recorded.","press_no_tier":"Only an engineering operator can disable V1.","confirm_title":"Disable V1 for this account?","confirm_body":"V1 stays readable and editable, and any edit made there from now on goes nowhere. This records that V1 is off; it does not change anything in V1.","confirm_label":"Type {word} to confirm","confirm_mismatch":"Type DISABLE exactly as shown.","confirm_button":"Disable V1","recorded_title":"V1 disabled","recorded_at":"Recorded {at}","reenable_title":"Turning V1 back on","reenable_body":"To turn V1 back on, go to V1's migration page and turn its redirects and workers back on there. Nothing in V2 is undone, and changes made in V2 in the meantime are not copied back to V1."},"scheduled_work":{"title":"Scheduled work","intro":"Checks that V2 has taken over the work V1 had already scheduled for future stays: lock code installs and removals, health checks, status changes, deposit re-authorizations and Netatmo polling. The check runs only when you press the button.","check":"Check scheduled work","recheck":"Check again","checking":"Checking scheduled work…","read_failed":"The scheduled-work check could not run. Press the button to try again.","dry_run":"There is no committed migration to check. A dry run writes nothing to V2, so it leaves no scheduled work to take over. Run this check after the live commit.","verdict_ok":"No scheduled work is missing","verdict_ok_hint":"V2 holds an equivalent for every pending V1 job this check could read.","verdict_waiting":"Waiting for stay activation","verdict_waiting_hint":"Nothing is missing, but some work starts only when stays are activated. Check again after activation.","verdict_attention":"Needs attention","verdict_attention_hint":"Some scheduled work is missing in V2 or could not be verified. See the checks and findings below.","cut_point":"Cut point: {at} ({source})","cut_point_hint":"Only V1 jobs due after the cut point count. Before it, V1 may already have run them.","cut_source":{"v1_muted":"V1 muted","cutover":"Cutover","probe_time":"Time of this check"},"future_stays":"Future stays in scope: {count}","inventory":"Archived V1 records read: {scanned} · Pending V1 jobs: {pending} · Unreadable records: {unreadable}","kinds_title":"Pending work by job type","kinds_empty":"No pending V1 jobs were found after the cut point.","col":{"kind":"Job type","pending":"Pending in V1","found":"Found in V2","missing":"Missing","unverifiable":"Could not verify","not_activated":"Not activated yet","attest":"Needs attestation"},"via":"Taken over by: {mechanisms}","kind":{"code_install":"Lock code install","code_delete":"Lock code removal","reservation_code_install":"Reservation code install","reservation_code_delete":"Reservation code removal","health_check":"Code health check","status_checkin":"Check-in status change","status_checkout":"Check-out status change","deposit_reauth":"Deposit re-authorization","netatmo_poll":"Netatmo polling"},"mechanism":{"door_code_push":"Door code push","code_activation_verification":"Code activation check","property_status_checkin":"Check-in status update","property_status_checkout":"Check-out status update","v2_revocation_sweep":"V2 code clean-up","vendor_code_window":"Lock's own end date","netatmo_device_sync":"Netatmo device sync"},"legs_title":"Checks","leg":{"inventory":{"title":"V1 job inventory","description":"Reads the job ids saved on the archived V1 records."},"activation":{"title":"Stay activation","description":"Future stays whose jobs start once the stay is activated."},"jobs":{"title":"V2 jobs","description":"Looks for each taken-over job in V2's queues."},"recurring_window":{"title":"Recurring tasks","description":"Every recurring schedule that is switched on needs a task due in the next 14 days."},"task_slots":{"title":"Stay tasks","description":"Each activated future stay needs one task for every scheduled task item that applies to it."}},"leg_state":{"ok":{"label":"In place","hint":"Everything this check looked at is in place."},"missing":{"label":"Missing","hint":"Work V1 had scheduled has no equivalent in V2. See the findings below."},"unverifiable":{"label":"Could not verify","hint":"Some data could not be read, so this part could not be confirmed either way."},"not_activated":{"label":"Not activated yet","hint":"This work starts once stays are activated. It has not started yet, which is expected and not a failure."},"not_applicable":{"label":"Not applicable","hint":"Nothing in this migration needed this check."}},"recurring_detail":"Recurring schedules switched on: {schedules} · With no task in the next 14 days: {empty}","task_slots_detail":"Activated future stays checked: {stays} · Tasks expected: {slots} · Missing: {missing} · Duplicated: {duplicate}","attest_title":"Needs your attestation","attest_intro":"V2 does not re-create these jobs. Confirm that each one is handled before you sign off.","attest_run_at":"Was due {at}","attest_no_run_at":"No due date","attest_reason":{"deposit_reauth":"V2 does not re-create a pending deposit re-authorization.","no_revocation_owner":"Nothing will remove this code when it ends: V2 does not revoke this provider's codes and the lock has no end date set.","subject_not_migrated":"This job removes a code that V2 does not hold.","cut_point_estimated":"V1's stop time was not recorded, so this check started from the moment you pressed it. Confirm that nothing V1 had scheduled between its real stop and now was missed.","cut_point_ambiguous":"V1's stop time was not recorded, and V1 was being switched off around the time this job was due, so it may or may not have run. Confirm whether it went out."},"unverifiable":{"cut_point_estimated":"V1's stop time was not recorded, so work V1 skipped before this check was not counted. The result cannot be green until that time is known.","budget":"The check ran out of time before reading every V1 record. The records it did not reach are unchecked, not clean."},"findings_title":"Findings","finding_subject":"Record {id}","finding":{"scheduled_job_missing":"The V2 job that replaces this V1 job is not there.","scheduled_job_unverifiable":"The V2 job could not be checked: its queue could not be read, or its time has passed and V2 may already have run it.","scheduled_subject_not_migrated":"This V1 record has a pending job but was not migrated to V2.","scheduled_owner_unknown":"It could not be decided who removes this code: its device has no provider, or the door codes have not finished migrating.","scheduled_v1_row_unreadable":"The archived V1 record could not be opened.","scheduled_v1_row_unavailable":"The archived V1 record is no longer available.","stay_activation_missing":"A future stay with pending work has not been activated.","recurring_window_empty":"A recurring schedule that is switched on has no task in the next 14 days.","held_native_stay_no_v1_code":"A booking made during the migration hold has no code: the lock lists no V1 code for it, so the cutover set none.","deferred_stay_code_not_active":"A booking made during the migration hold has a code on its lock that is not active (its status is shown), so it may not open the door. Check the code, and issue one if the guest needs it.","deferred_stay_offline_passcode_outgrown":"A booking whose dates changed during the migration hold has an offline passcode on its lock that no longer covers the new dates, and the cutover issued no new one. Issue a code for the new dates if the guest needs one.","task_slot_missing":"An activated future stay has no task for a scheduled task item that applies to it. A task someone deleted on purpose also shows here: confirm the deletion and attest it.","task_slot_duplicate":"An activated future stay has more than one task for the same scheduled task item."},"series_ending":{"failed":"Last code check: the lock reported the code failed to install","absent":"Last code check: the lock was read and the code is not on it","unconfirmed":"Last code check: the lock never answered, so the code is unconfirmed","cancelled":"Last code check: cancelled before it finished (the code was replaced, deleted or its window passed)"},"deferred_title":"Not checked in this version","deferred":{"scheduler_view":"Jobs in the V1 Scheduler view, which have no saved id","on_a_list_jobs":"Jobs V1 scheduled on a list, which have no saved id"},"fix":{"button":"Fix","previewing":"Preparing…","confirm_title":"Re-create the missing scheduled work?","confirm_body":"SuiteOp re-runs the V2 step that creates each missing item below, checked again at the moment you confirm. Running it twice creates nothing new, and lines that need your attestation are never changed.","leg":{"stay_activation":"Stays to activate (their turnover tasks and stay messages): {count}","recurring_generation":"Recurring schedules to fill for the next 14 days: {count}"},"leg_name":{"stay_activation":"Stay activation","recurring_generation":"Recurring tasks"},"not_fixable":"Missing lines with no Fix: {count}. Attest them or wait for V2.","truncated":"The check listed only part of what is missing. Press Fix again after this run.","nothing":"The latest check has nothing left to fix.","confirm":"Run Fix","running":"Fixing…","done_title":"Fix finished. The check has run again below.","done_leg":"{leg}: {queued} queued, {unchanged} already in place, {refused} refused, {failed} failed, {remaining} left for another press","refusal":{"activation_evidence_pruned":"Stays the Fix will not activate: {count}. The cutover is older than SuiteOp keeps activation records, so it cannot prove these stays were never activated. Attest them instead."}}},"page_title":"Account migration","throttled_notice":"Refreshing more slowly: this account reached its request limit for the minute. The figures shown are the last ones read, and they update again shortly on their own.","no_permission":"You do not have permission to view account migration.","stages_notice":"{count, plural, one {{stages} has no panel yet.} other {{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","state_rerun_due":"Re-run due","state_reaccept_due":"Needs re-accepting","reaccept_due_hint":"A catch-up ran after the client accepted; review parity and accept again before cutover.","cutover_reaccept_hint":"Refused until the acceptance is recorded again after the catch-up."},"stages":{"connect":"Connect","disposition":"Disposition","dry_run":"Dry run","commit":"Commit","parity":"Parity","accept":"Accept","delta":"Delta","cutover":"Cutover","bindings":"Integrations","verify":"Verify","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 reads no V1 data, but it pauses this account's outbound at once. Nothing is sent — messages, notifications, integrations and payments — until outbound is resumed.","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.","begin_blocked_live_run":"The previous migration run was live and wrote records into this account before it stopped, so a new run cannot be started over it. Resume it from the Recovery panel, or ask a SuiteOp engineer to roll it back.","begin_blocked_live_run_rollback":"The previous migration run was live and wrote records into this account, and it cannot be resumed, so a new run cannot be started over it. Ask a SuiteOp engineer to roll it back.","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 the binding is not confirmed on an open run, so the dry run is refused. On an open run, look up the bound V1 organization with its owner's email and confirm it again.","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"},"records_seen":"Records seen","no_run":"No migration run is open for this account yet.","completed_awaiting_cutover":"Migration completed on {date}. {owed, plural, one {# more step runs} other {# more steps run}} at the cutover. Outbound stays paused until it is turned back on after the cutover.","completed_cut_over":"Migration completed on {date} and has been cut over.","no_run_stalled":"The previous migration run went quiet and was closed. Start a new one from the Connect step.","no_run_stalled_cut_over":"This account is cut over, so its migration stands: do not start a new one. A step owed at the cutover stopped before it finished; press “Re-start the remaining steps” in Recovery to start it again.","no_run_stalled_cut_over_ask":"This account is cut over, so its migration stands: do not start a new one. A step owed at the cutover stopped before it finished, and your staff account is not cleared to re-start it: ask a migration operator to press “Re-start the remaining steps” in Recovery.","no_run_stalled_cut_over_settled":"This account is cut over, so its migration stands. Nothing needs to be restarted."},"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","delta":"Catch-up"},"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.","completed_body":"This migration completed on {date}. The census is taken before a migration runs, so there is nothing to count now.","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}. If V1 was busy, count again when it is quiet.","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","excluded_by_scope":"Outside the migration scope, not migrated: {count}","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"},"window":{"older_rows":"Older than {months} months (not migrated): {count, number}","older_not_counted":"Older than {months} months (not migrated): not counted"},"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).","template_rows_only":"DEC-14 / DEC-44 — only task templates migrate: a V1 task marked isTemplate or isAdminTemplate. Task instances are counted apart and do not migrate; V2 generates go-forward work from schedules.","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.","no_org_read_path":"DEC-70 — V1 keeps these logs with no link to an organization, so they cannot be read for one customer, and live V1 holds no lock events among them.","no_v2_reader":"No V2 feature uses these records, so they are not carried over.","v2_handles_guest_messaging":"DEC-91 — V2 handles guest messaging, so V1 chat conversations and messages are not carried over.","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.","linkage_only":"Linkage only — its rows carry no value of their own, and what they point at reaches V2 through the Reservation writer.","read_as_template_reference":"DEC-44 — template sections are not carried as their own rows; V2 has no section level. Each section is read only to recognise the task template it belongs to.","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 6 months before cutover. Rows older than that are excluded by policy, and the row accounting counts them per type.","verification_media_window":"DEC-12 — a guest verification migrates only when its latest date (its stay's check-out, or the latest activity on the record) falls within the 6 months before the migration runs. Older verifications are excluded by policy, and each one left out is reported.","v2_retention_purges":"V2 keeps only recent history of this kind and deletes older rows on a schedule, so migrated V1 history would be purged soon after cutover.","global_catalog":"A platform-wide catalog rather than customer data; V2 keeps its own.","rederived_by_sync":"V2 rebuilds this from the connected provider once the account is live, so the V1 rows are not copied.","forward_only_history":"V2 records this going forward only; imported V1 history would show up as new activity or be deleted by V2's own retention.","double_billing_risk":"Migrating these usage rows would make V2 bill them again while V1 is still billing.","empty_in_v1":"V1 holds no rows of this type.","empty_in_production_v1":"Production V1 holds no rows of this type (measured 2026-09-27).","absent_in_production_v1":"V1 staging only — production V1 has no such table (checked 2026-09-27).","carried_from_user":"V2 takes each person's name, phone and organization memberships from the V1 user record, so these profile rows are not carried separately.","expired_events":"Nearly all of these events are already past, and V2 shows only events that fall within a guest's stay.","guest_draft_past_stays":"GuestAdmin guest drafts are carried only for stays that have not ended; drafts for stays that ended before the migration are left out.","zapier_oauth_reconnect":"Excluded by decision: the migration never carries a V1 Zapier key or connection, so V1 Zapier connections and their triggers are not carried over. The customer reconnects Zapier on the SuiteOp Zapier app 2.1.0 and rebuilds their Zaps.","app_template_scaffolding":"Leftover setup from the Bubble app template V1 was built on (site settings, menus, pages, colours and sample records). SuiteOp owns it, and it holds no customer data.","demo_sample_data":"Sample rows typed in by hand for a V1 demo screen. They describe no real customer, property or device.","v1_interface_copy":"SuiteOp’s own V1 interface text and its translations, not customer data. V2 ships its own interface text.","v1_app_push_tokens":"Push-notification registrations for the V1 mobile app. The V2 app registers its own for each member when they sign in on it, so the V1 registrations are not copied.","pms_webhooks_reregistered":"PMS webhook registrations V1 made for its own address. V2 registers its own with the PMS when the connection is set up, so the V1 rows are not copied.","orphaned_in_v1":"Every row belongs to a record V1 has since deleted, so there is nothing for it to attach to in V2.","folded_into_product_purchase_payment":"Read only to learn whether each product purchase was paid; the result lands on that purchase’s charge, so it has no V2 row of its own.","bubble_system_table":"Bubble’s own system table, not customer data, so it is not migrated.","auth_session_state_not_migrated":"Sign-in and session state tied to V1; members sign in to V2 afresh, so it is not migrated."}},"errors":{"delta_after_v1_disabled":"V1 is recorded as disabled for this organization, so V1 changes can no longer be caught up. To catch up again, turn V1 back on from its migration page first.","disable_v1_run_not_completed":"The latest migration run has not completed, so V1 cannot be recorded as disabled.","disable_v1_blocked":"V1 cannot be disabled yet: verification and parity must both pass, and the customer's acceptance must be recorded.","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.","referential_integrity_past_retention":"This migration finished too long ago: the details the check reads have been cleared under the retention policy, so a new check could report broken links as clean. The last saved report still stands.","parity_after_payload_purge":"Field checks can no longer run on this migration: it finished too long ago, and the details they compare have been cleared under the retention policy, so a new check would flag correct values as mismatches.","referential_integrity_run_not_completed":"The referential-integrity check runs only after a live migration has finished finalizing. Wait for the run to complete, then check again.","door_code_pins_dry_run":"This account has only had dry runs, so no door codes have been written to check. Commit the migration, then check again.","door_code_pins_not_written":"The door-code PIN check runs once the migration's commit has finished writing. Wait for the write stage to finish, then check again.","parity_report_no_run":"This account has no migration run, so there is no parity report to generate.","parity_report_missing":"No parity report has been generated for this migration run yet. Generate it, read it, then sign it.","parity_report_not_pass":"Only a parity report that passes can be signed. Resolve what it lists as blocking, generate it again, then sign it.","parity_report_stale":"The parity report changed after you opened it, so it was not signed. Reload the page, read the current report, then sign it.","parity_report_generating":"A parity report is being generated. Wait for it to finish, then try again.","referential_integrity_generating":"The referential-integrity check is running. Wait for it to finish, then try again.","parity_report_digest_invalid":"The saved parity report no longer matches its own fingerprint, so it cannot be signed. Generate the report again, then sign the new one.","parity_report_already_signed":"This parity report has already been signed. Generate a new report if the migration has changed since.","parity_report_run_not_completed":"The parity report covers only a live migration that has finished finalizing and was not rolled back. Wait for the run to complete, or start a new run, then try again.","parity_report_run_not_completed_cut_over":"The parity report covers only a completed migration run. This account is cut over, so its migration stands: do not start a new run. If a cutover step stopped, re-start it from the recovery panel.","parity_fix_no_open_delta":"Fixing flagged rows re-reads them in a catch-up pass, and none is open. Open a catch-up pass on this step, then fix the rows again.","calry_reassert_muted":"Outbound is still paused for this organization, so SuiteOp cannot change its Calry webhook yet. Resume outbound after the cutover, then press Fix again.","portal_link_readopt_muted":"Outbound is still paused for this organization, so SuiteOp cannot read its PMS fields yet. Resume outbound after the cutover, then press Fix again.","parity_fix_nothing_flagged":"The parity report flags no unaccounted rows for this table, so there is nothing to fix. Generate the report again if you expect some.","parity_failure_accept_not_cut_over":"A failed report can be accepted only after the cutover. Before it, fix the flagged rows on the Parity stage.","parity_failure_accept_not_failed":"Only a failed report can be accepted this way.","parity_failure_accept_stale":"The parity report changed or went out of date after you opened it. Generate it again, then accept the report on screen.","parity_failure_accept_already_recorded":"This report’s failures are already accepted.","parity_failure_accept_blockers_left":"This report also fails on something a reason cannot accept: a check that did not run, rows not yet settled, or a door code still owed. Clear those first; the report’s blockers name them.","parity_failure_accept_reason_too_short":"Write a reason of at least 20 characters: say why these failures are acceptable.","attestation_unattributed":"A sign-off has to name the SuiteOp staff member who made it, and this session has none, so nothing was recorded. Open the account through the staff console, then try again.","attestation_line_required":"Choose the checklist line to sign off.","attestation_decision_required":"Choose whether you confirm this line or override it.","attestation_override_reason_required":"An override needs a written reason. Say why this line is acceptable as it stands, then save.","attestation_reason_too_long":"The reason is too long. Keep it under 2,000 characters.","attestation_line_unknown":"That line is not on the latest verification. Run the verification again, then sign off the lines it lists.","attestation_already_recorded":"This line is already signed off. Revoke the current sign-off first if it needs to change.","attestation_not_found":"This line has no active sign-off to revoke.","attestation_no_run":"This account has no live migration run, so there is nothing to sign off.","attestation_run_superseded":"The failed items you opened belong to an earlier migration run, so nothing was accepted. Reload the page and accept from the current list.","attestation_messaging_reason_required":"Signing off a messaging line needs a written reason: guests will not receive that message. Say why that is acceptable, then save.","attestation_lock_reason_required":"Signing off a lock that cannot take door codes needs a written reason: V2 will not set a code on it. Say how guests get in, then save.","attestation_webhook_reason_required":"Signing off a JusPay Hyperswitch webhook that could not be repointed needs a written reason: V2 will not receive that merchant's payment events. Say how payments are tracked instead, then save.","attestation_hold_reason_required":"Signing off these open holds needs a written reason: SuiteOp will not capture or cancel them automatically. Say who settles them and how, then save.","v1_mute_check_not_committed":"V1 can be checked for its mute only after the migration has been committed and has finished. Finish the migration run, then check again.","v1_restore_check_not_rolled_back":"V1 can be checked this way only after a migration was rolled back before cutover.","ownership_mismatch":"That email address is not an owner or admin of that V1 organization. Check both values and try again.","v1_org_has_no_owner":"This V1 organization has no owner or admin account, so it can't be bound. Add an admin in V1, then 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.","run_not_active_cut_over":"This migration run is no longer active. This account is cut over, so its migration stands: do not start a new run. If a cutover step stopped, re-start it from the recovery panel.","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.","fold_in_write_target":"That V1 entity folds into a V2 table another entity writes, and has no writer of its own yet, so its rows cannot be written. Ask a SuiteOp engineer.","write_target_has_no_writer":"This release of SuiteOp has no writer for that V1 entity's V2 table, so its write stopped on the first attempt instead of retrying. Nothing was written for it. Ask a SuiteOp engineer.","write_entity_not_migrating":"This V1 entity is not set to migrate on this run, so none of its rows were written.","write_delta_base_unavailable":"The copy of this record from the last migration is no longer stored, so its V1 changes were not applied and the SuiteOp version was kept.","write_delta_service_arm_pending":"Changes to this record have to go through its own workflow, which the catch-up does not apply yet, so it was held and left unchanged.","write_delta_service_arm_refused":"This record's V1 change was not applied: its own rules in SuiteOp refuse it here, so the SuiteOp version was kept. The details say why; review it in SuiteOp.","write_delta_v1_deletion_sync_owned":"This reservation was deleted in V1 after the migration, but in SuiteOp it is kept up to date by the connected PMS, so it was not cancelled.","write_delta_past_stay_not_cancelled":"This reservation was deleted in V1 after the migration, but its check-out had already passed, so it was left as it is in SuiteOp and not cancelled.","write_delta_mass_revoke_held":"V1 removed more door codes after the migration than the catch-up pass revokes at once, so none of them was revoked and this one was held. A SuiteOp engineer must release the hold before they are applied.","write_delta_new_row_needs_finalize":"This record was added in V1 after the migration. Records of this kind need the migration's finishing steps (such as lock adoption, account handover, stay activation or guest identities), which the catch-up does not run yet, so it was not created.","write_delta_target_gone":"This record was deleted in SuiteOp after the migration, so its V1 changes were not applied and it was not created again.","delta_requires_completed_migration":"A catch-up pass can only start once the migration has been committed and has completed. Finish the migration first.","delta_after_cutover":"This organization has already cut over to SuiteOp, so V1 changes can no longer be caught up.","delta_run_required":"This action needs an open catch-up pass. Open one on this step first.","delta_scope_invalid":"A targeted catch-up needs one V1 table and between 1 and 1000 V1 record ids.","delta_v1_not_muted":"The full catch-up needs V1 muted for this organization, confirmed within the last 15 minutes: {reason, select, missing {no mute check has been recorded yet} not_muted {V1 is not muted} unconfigured {no V1 mute flag is configured on this deployment} column_missing {V1 has no column {column}, so the mute flag could not be read} stale {the last check is older than 15 minutes} other {the mute could not be confirmed}}. Run the check again once V1 is muted.","delta_extract_in_flight":"V1 records are still being read for this catch-up pass. Wait for every read to finish, then try again.","delta_writes_in_flight":"Changes from this catch-up pass are still being written. Wait for the writes to finish, then try again.","delta_held_rows_writable":"This catch-up pass still holds records it can now write. Press Retry before closing it.","delta_nothing_to_apply":"This catch-up pass found no V1 changes, so there is nothing to apply. Close the pass instead.","delta_mass_revoke_unreleased":"This catch-up pass removes more door codes than it removes at once, and that hold has not been released. Before closing it, release the held revokes, or roll back this catch-up pass.","delta_run_press_refused":"A catch-up pass is open for this organization. Commit and dry run do not apply to it: use the catch-up pass's own steps, or close it first.","rollback_delta_first":"A catch-up pass has changed this migration's records since the commit. Roll back the catch-up pass first, then roll back the migration.","delta_table_already_read":"This catch-up pass has already read that part of V1. Apply and close it, then open a new catch-up pass to read it again.","write_reference_not_migrating":"This record points to a data type that is not being migrated, so it was not written. Migrate that data type as well, or exclude this one.","write_reference_pending_in_run":"This record points to another record the migration has not written yet, so it waits and is written on the next pass.","write_waiting_on_stranded_wave":"This data type waited for an earlier data type whose write stopped before finishing, for example because the server was busy. Press Restart stuck writes to resume both.","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.","dry_run_recheck_while_running":"A dry run is already running, so nothing was checked again. Press Check again with the current mapping after it finishes.","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.","region_paused":"Migrations are paused in this region by an operator. Nothing is lost — start again once they are resumed.","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.","resume_past_retention":"This run stalled too long ago: the data it needs to continue has been cleared under the retention policy. Start a fresh run instead. If it was a live run that wrote data, roll it back first.","resume_after_cutover":"This organization has already been cut over to SuiteOp, so its migration cannot be resumed: resuming would pause its outbound messages again. Ask a SuiteOp engineer to restart the cutover steps instead.","resume_rollback_started":"A rollback was started on this run before it stalled, so it cannot be resumed forward: that would leave the account with only part of its data. Ask a SuiteOp engineer.","retry_rollback_started":"A rollback was started on this run, so its failed records cannot be retried: nothing can write them on a run being undone, and re-queuing them would only change what the ledger says about them. Ask a SuiteOp engineer.","retry_writes_in_flight":"Rows are still being written for this migration run, so its failed rows were not re-queued and nothing was changed. Press Re-queue failed rows again once the writes settle.","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.","live_run_holds_org":"An earlier live migration run already wrote records into this account and has not been rolled back, so a new run cannot be started. The Recovery panel shows what can be done with that run.","completed_awaiting_cutover":"This account's migration has already completed and is waiting for the cutover, so a new run cannot be started.","run_after_cutover":"This account has already been cut over, so a new migration run cannot be started.","mute_lift_run_active":"A migration run is still in progress. Outbound can be resumed once it has finished.","mute_lift_rows_held":"A stopped migration run still holds the records it wrote. SuiteOp must resume or roll back that run before outbound can be resumed.","mute_lift_not_cut_over":"The migration must be cut over before outbound resumes.","mute_lift_lock_unadopted":"A migrated lock hasn't been adopted yet. Resuming outbound turns its pushes on, which would clear the codes the old app put on the door.","mute_lift_lock_unadopted_hint":"SuiteOp must adopt the lock first by finishing the migration on the migration page. Then outbound can be resumed.","mute_lift_handover_unsettled":"SuiteOp is still taking over your integration accounts from the old app. Until each one is handed over, SuiteOp may not hold a working connection to it.","mute_lift_handover_unsettled_hint":"SuiteOp finishes this handover on the migration page. Once every account is taken over or marked to be reconnected, outbound can be resumed.","mute_lift_staff_mute":"SuiteOp staff also paused outbound for this account before the migration started.","mute_lift_staff_mute_hint":"SuiteOp staff must resume their pause first. Then outbound can be resumed here, once the migration allows it.","mute_lift_unverified":"We couldn't confirm who is asking, so outbound was not resumed. Sign in again and retry.","mute_lift_admin_only":"Only the account's owner or an admin can resume outbound.","mute_lift_v1_not_muted":"The old app may still be sending messages for this account. Resuming outbound now would send everything twice.","mute_lift_v1_not_muted_hint":"SuiteOp must mute the old app for this account first. Then outbound can be resumed here.","mute_lift_v1_check_stale":"The last check that the old app is muted is more than 15 minutes old, so it may have changed since. Resuming outbound now could send everything twice.","mute_lift_v1_check_stale_hint":"Check the old app's mute again on the migration page, then resume outbound here.","cutover_run_not_completed":"Only a completed migration can be cut over. Finish the migration on this page first.","cutover_run_active":"A migration run is still in progress for this organization. Wait for it to finish, then cut over.","cutover_rollback_in_progress":"A rollback has started on a migration run of this organization. Finish that rollback before cutting over.","cutover_delta_pass_unresolved":"A catch-up pass did not finish. Re-run it or accept it on the recovery card before cutting over.","cutover_delta_after_mute_required":"No catch-up pass has run since V1 was muted, so changes V1 took before it went silent would be lost. Open a catch-up pass, run its full catch-up and close it, then cut over. If V1 cannot be read at all, a destructive-tier operator can record the cutover without one.","cutover_attestation_v1_readable":"V1 can still be read, so run a catch-up pass instead. The cutover can be recorded without one only while V1 cannot be read.","cutover_attestation_reason_required":"Write why no catch-up pass can run before recording the cutover.","cutover_delta_pass_unfinished":"A catch-up pass is still running or has stopped. Let it finish, or resume or force-fail it on the recovery card, before cutting over.","cutover_not_accepted":"The customer's acceptance is not recorded yet. Record it on the Accept stage before cutting over.","cutover_acceptance_predates_delta":"The customer accepted before the latest catch-up pass changed the data. Once the parity report is signed after that pass, record the acceptance again on the Accept stage before cutting over.","cutover_parity_not_signed":"No signed parity report covers the latest catch-up pass. Generate the report again and sign it on the Parity stage before cutting over.","cutover_door_code_revokes_unapplied":"{reason, select, failed {{count, plural, one {# change V1 made to a door code was} other {# changes V1 made to door codes were}} not applied in V2: the catch-up could not apply it} other {{count, plural, one {# door code V1 removed still works} other {# door codes V1 removed still work}} in V2: {reason, select, held {the catch-up held these removals over its limit. Release them on the recovery card} other {each belongs to an access grant, which the catch-up cannot remove on its own}}}}. Fix it, then run the catch-up again before cutting over.","delta_pass_not_failed":"Only a catch-up pass that failed, and was not rolled back, can be accepted.","delta_pass_acceptance_after_cutover":"This organization has been cut over, so the acceptance of a catch-up pass can no longer be withdrawn.","cutover_rollback_releases_owed":"A rolled-back migration run still has releases to finish. Press Roll back again to finish them, then cut over.","cutover_drain_rekick_idle":"There are no stopped cutover steps to restart for this organization right now. Nothing was changed.","cutover_writes_in_flight":"Migration writes are still landing, so the cutover could not start. Nothing was changed. Try again in a moment.","cutover_org_deleting":"This organization is being deleted, so it cannot be cut over. Nothing was changed.","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.","force_fail_after_cutover":"This organization has already been cut over to SuiteOp, so its migration run cannot be force-failed. If a cutover step stopped, press “Re-start the remaining steps” in Recovery instead. Nothing was changed.","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.","v1_archive_busy":"An archive export, deletion or erasure is already running for this migration run. Try again when it finishes.","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.","reconnect_reason_required":"Write a short reason — it is the only record of why this integration was deferred.","reconnect_reason_too_long":"This reason is too long. Keep it under 500 characters.","reconnect_not_deferred":"This integration is not deferred, so there is nothing to undo. Reload the page to see its current state.","reconnect_already_recorded":"This is already recorded for this integration. Reload the page to see its current state.","reconnect_stage_not_reached":"The Integrations step opens after the cutover. Reload the page to see this migration's current step.","reconnect_nothing_to_send":"There is nothing to send to the owner: no integration needs a sign-in. Reload the page to see the current list.","reconnect_no_owner":"No member of this organization can reconnect integrations. Give someone the Manage integrations permission, then send again.","reconnect_owner_migration_held":"The migration is still holding this organization's outbound messages, so the owner was not told. Send to the owner again once outbound is back on.","reconnect_owner_org_muted":"Outbound messages are paused for this organization, so the owner was not told. Ask SuiteOp support to lift the pause, then send again.","reconnect_not_pending":"Some of these integrations no longer need a sign-in here. Reload the page to see the current list.","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_direct_insert_no_target":"The write of this record came back without an identifier, 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_row_lock_contended":"This row waited too long on another write in progress, so it was not written this time. Nothing is wrong with the record itself; retry it.","write_custom_field_value_duplicate":"Another value for this custom field on the same listing was already migrated. V2 keeps one value per field per listing, so this one was not written; check which value the customer uses.","write_custom_url_hostname_taken":"Another custom URL in SuiteOp already uses this web address — in this organization or another — so this one was not migrated. A web address can belong to only one custom URL.","write_custom_url_directory_unavailable":"SuiteOp could not check whether this web address is free, so the custom URL was not migrated yet. Nothing was reserved; it will be tried again.","write_custom_url_cloudflare_hostname_taken":"Another custom URL in SuiteOp already uses this Cloudflare hostname, so this one was not migrated. Check which record should keep it.","write_custom_url_legacy_id_conflict":"This organization already has this web address in SuiteOp, linked to a different V1 custom URL, so this one was left alone.","write_credential_unpreparable":"This connection's credential from V1 is not in a usable shape, so neither the connection nor its credential was written. Reconnect it in SuiteOp.","write_smartthings_location_owned_elsewhere":"This SmartThings location is already connected to a different organization in SuiteOp, so it was not migrated here. Resolve which organization owns it before migrating it.","write_slack_workspace_owned_elsewhere":"This Slack workspace is already connected to a different organization in SuiteOp, so it was not migrated here. Resolve which organization owns it before migrating it.","write_fold_owner_missing":"No property in this migration points to these property details, so there was nothing to fill.","write_fold_step_unmatched":"There is no step of this type on this verification in SuiteOp for this V1 step to fill, so it will not be migrated.","write_fold_owner_ambiguous":"More than one property in this migration points to these property details, so they were not applied to any of them.","write_fold_owner_unwritten":"The property these details belong to has not been written yet, so there was nothing to fill. They can be filled once it is written.","write_fold_owner_refused":"The record these details belong to won't be written in this run, so there was nothing to fill.","write_fold_owner_preexisting":"These details belong to a property that already existed in SuiteOp before this migration, so its current values were kept.","write_sealed_value_unreadable":"A protected value on this record (such as a door code) could not be opened, so the record was not written. The rest of the page was unaffected.","write_access_grant_device_has_no_account":"This door-access grant's lock has no connected account in V2 yet, so the grant was not written. It can be re-run once the lock's provider details are migrated.","write_device_satellite_unavailable":"This device's vendor details (its provider and its own device ID) are missing in V1 or were not extracted in this run, so the device was not written. It can be re-run once they are extracted.","write_device_account_not_migrated":"This device's connected account has not been migrated to V2 yet, so the device was not written. It can be re-run once the account is migrated.","write_device_account_ambiguous":"Two or more migrated accounts carry this device's connected-account ID, so the device was not written rather than attached to the wrong one. Resolve the duplicate account, then re-run.","write_pms_vendor_unavailable":"This PMS account's provider details are missing in V1, were not extracted in this run, or belong to a different account, so the account was not written. It can be re-run once they are extracted.","write_pms_account_adopt_ambiguous":"The organization already has more than one connection for this PMS in SuiteOp, so the migration could not tell which one this account is. It was not written; resolve the duplicate connections and re-run.","write_verification_step_exists":"The guest already has this verification step in SuiteOp, so the V1 step was not written over it.","write_precheck_answer_step_underivable":"This check-in answer could not be placed on an additional-questions step of its guest's verification in SuiteOp, so it was not written.","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 V1 before the Delta step, which carries it over.","write_duplicate_merged":"Another record has the same identifying details, so this one was merged into it instead of being saved twice. Nothing needs doing.","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 press Re-queue failed rows in the Recovery panel while this run is open.","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 SuiteOp sign-in with no live account behind it — a deleted account, or a sign-in left without one — so no new account could be created for them. Nothing in SuiteOp restores or releases that address; ask a SuiteOp engineer.","write_identity_route_conflict":"This person's email address already belongs to a SuiteOp account that signs in in another region or has not verified the address, so no account was created or linked for them here. Set up their membership in this organization by hand; if the account's owner verifies the address later, migrating them again links them to it.","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":"This V1 user is already linked to a different SuiteOp account than the one with this email address, so neither was changed. This usually means the person's email address changed in V1 after an earlier migration run linked them.","search_too_broad":"That search would scan too much of this run. Narrow it with a filter or a longer search term.","search_too_long":"Search terms can be at most 100 characters.","write_membership_user_unresolved":"This person has no SuiteOp account, so their membership could not be created. It can be created once that person's own record is written.","write_membership_duplicate_in_page":"Two V1 users point at the same SuiteOp account in this organization, and a person can be a member only once. Only the first was migrated — merge or correct them in V1.","write_membership_legacy_id_conflict":"Another membership in this organization already carries this V1 record's id, so this one was left alone rather than re-pointed. Merge or correct the duplicate in V1 before the Delta step, which carries it over.","write_membership_route_conflict":"This person is now a member of this organization, but their email address already signs in to SuiteOp in another region, so they were not given access here. Their sign-in needs to be sorted out by hand before they can use this organization.","write_directory_sync_failed":"This person was added to this organization, but their sign-in has not been updated to include it yet. The item stays in the queue and the next write attempt will finish it.","write_directory_sync_rejected":"This person was added to this organization, but their sign-in could not be updated, and trying again the same way will not fix it. Check the error on this item, fix the cause, then retry it.","write_path_not_implemented":"The migration cannot write this kind of record yet, so nothing was written for it. This run can check the data but not move it.","id_map_table_unsupported":"The migration cannot match V1 records to this kind of SuiteOp record yet, so it stopped rather than guess. Nothing was written for that page.","rollback_no_run":"This account has no migration run to roll back. Reload the page to see its current state.","rollback_nothing_to_undo":"This migration run has nothing left to roll back: every record it created is already gone.","rollback_window_closed":"The rollback window for this migration run has closed, so it can no longer be rolled back.","rollback_after_cutover":"This organization has finished its cutover to V2, so this migration can no longer be rolled back.","rollback_after_unmute":"This organization's outbound mute was lifted after the migration was finalized, so door codes may already have been sent to locks. The migration can no longer be rolled back.","rollback_confirmation_mismatch":"Type ROLLBACK exactly to confirm.","rollback_not_in_progress":"This migration run is not being rolled back, so the rollback step was refused. Reload the page to see its current state.","rollback_no_deleter":"The migration does not yet know how to roll back this kind of record, so it stopped here. Nothing was deleted for this type, but record types already rolled back stay rolled back — this run is part-way undone. Ask a SuiteOp engineer.","rollback_not_chain_tip":"This migration run was resumed, and a later attempt continues it. Rolling back this one would undo the later attempt's records without closing it, so roll back the latest attempt instead. Ask a SuiteOp engineer.","rollback_superseded":"A later migration run has taken over this run's records, so rolling this one back would delete records the later run relies on. Roll back the later run first. Ask a SuiteOp engineer.","rollback_writes_in_flight":"Rows are still being written for this migration run, so the rollback could not start and nothing was changed. Press it again in a moment. If it keeps being refused, ask a SuiteOp engineer.","run_rolling_back":"This migration run is being rolled back, so nothing more can be written or read for it.","write_reference_unresolved":"A record this row points to could not be matched in this organization, so the migration stopped rather than write the row without it. Nothing was written for that row.","finalize_no_run":"This account has no migration run to finalize. Reload the page to see its current state.","finalize_run_stalled":"This migration run stalled, so it cannot be finalized directly. Resume it first, then finalize it.","finalize_run_not_finalizable":"This migration run is not at a stage that can be finalized. Reload the page to see its current state.","finalize_run_not_committed":"This run was never committed, so there is nothing to finalize. Commit it first.","finalize_delta_use_close":"A catch-up pass is finalized by closing it from its own step, not with Finalize.","finalize_writes_in_flight":"Rows are still being written for this migration run, so it cannot be finalized yet. Wait until the write shows as done, then finalize.","finalize_files_retryable":"Some V1 files could not be copied yet because their file host did not answer. Press Retry once it recovers, then finalize. After 6 hours a retry records them as not copied, and finalize can go ahead.","run_finalizing":"This migration run is finalizing, so nothing more can be written or read for it.","decision_run_busy":"Another action on this migration run is still in progress, so this decision was not saved and nothing was changed. Save it again in a moment.","finalize_not_in_progress":"This migration run is not finalizing, so the finalize step was refused. Reload the page to see its current state.","write_join_importer_not_implemented":"The migration cannot save this kind of link yet, so nothing was written for it. The records on both sides still migrate, and the links can be filled in once support ships.","write_reference_foreign_table":"A migrated record pointed at a field of a different record, so it was not written. Ask a SuiteOp engineer.","write_file_required":"A file this record cannot be saved without could not be copied from V1, so the record was not written.","write_file_retryable":"A file could not be copied from V1 just now, so this record was not written. It can be retried.","write_value_shape_invalid":"A value on this row does not have the shape SuiteOp expects, so the migration stopped rather than save something the app could not read. Nothing was written for that row.","write_row_deferred":"This row was held back rather than written, because writing it now would lose something it needs; the finding beside it says what. Nothing was written for that row.","commit_requires_dry_run":"This account cannot be committed yet: no dry run has finished on this migration run. Press Dry run, read the results, then commit. The dry run is what proves the plan before any of this customer's data is written.","coverage_undecided":"Not started: some V1 types this account holds rows in have no decision yet. Decide each type listed under “Decision coverage”, then press again.","coverage_census_pending":"Not started: the census on this run has not finished, so “Decision coverage” cannot list the types that still need a decision. Run the census, wait for it to finish, decide each type it lists, then press again.","commit_run_not_committable":"This migration run cannot be committed in its current state. Reload the page to see where it is — a stalled run is continued from the Recovery panel, and a run that is finalizing, rolling back or closed cannot start writing again.","commit_writes_in_flight":"Rows are still being written for this migration run, so its write is already under way and nothing was changed. There is no need to commit again.","commit_confirmation_mismatch":"That does not match the account’s name. Type it exactly as shown.","write_entity_not_writable":"That V1 entity has no way to be written into SuiteOp on this release, so the migration refused to start a write for it rather than queue work that could never finish. Its rows are still extracted and validated; nothing was written. Ask a SuiteOp engineer.","write_adopt_anchor_not_written":"This V1 record matches another one that was not migrated, so there was nothing to link it to. Once that record is written, press Re-queue failed rows in the Recovery panel while this run is open.","write_payment_awaits_migration_hold":"This payment is still live in V1 (a card hold or a payment in progress), so it is written only while the migration holds the account. It was not written; once the account is held for the commit, a retry writes it.","write_charge_currency_underivable":"V1 recorded no currency on this service fee, its organization has no default payment account, and none of its other V1 charges carries a valid currency, so it will not be migrated unless a currency is set on it in V1.","write_payment_account_already_connected":"This payment account was connected in V2 for this organization while the migration was writing it, so the migrated copy was not written. Writing this record again links V1's records to the connected account, unless it is a JusPay Hyperswitch account connected with a different profile.","write_review_duplicate":"A review with the same booking-platform review ID was already migrated. V2 keeps one copy of each platform review, so this duplicate was not written; check which V1 review the customer uses.","write_branding_no_custom_url":"This brand has no custom URL in V1 and your organization has no primary URL to serve it on, so it was not imported. Set a primary URL, then retry.","write_option_choice_default_unmatched":"The V2 default option set no longer has the choice this V1 choice maps to (Good, Average or Bad) — it was renamed — so this choice could not be matched and was not migrated. Running it again will not help until that choice's label is restored.","write_organization_not_bound":"The organization this V1 record belongs to is not the one this migration is bound to, so its settings were not applied. Check the account binding, then retry.","write_property_group_name_duplicate":"Another group with this name was already migrated for this organization, and SuiteOp keeps one group per name. Groups are not merged, because each has its own door code — rename one in V1 before the Delta step, which carries it over.","write_user_group_name_duplicate":"Another user group with this name was already migrated for this organization, and SuiteOp keeps one user group per name. User groups are not merged, because each grants its own access — rename one in V1 before the Delta step, which carries it over.","write_esign_document_duplicate":"A second V1 document with the same provider document ID on this e-sign account was found, and V2 keeps one row per provider document, so this one was not written. The first one migrated.","write_esign_signer_duplicate":"Another signer with the same email address on this e-sign document was already migrated, and V2 keeps one signer per address on a document, so this one was not written.","write_reservation_duplicate":"Another V1 reservation for the same booking-platform reservation was already migrated, and V2 keeps one reservation per platform booking, so this one was not written. Check which V1 reservation the customer uses.","write_reservation_twin_conflict":"Another V1 reservation is the same PMS booking with different stay details, so neither was written: SuiteOp keeps one reservation per PMS booking, and which one is right is for you to decide in V1.","write_reservation_twin_survivor_not_written":"This reservation was not written because the V1 reservation chosen to be migrated for the same PMS booking will not be written.","write_device_duplicate":"Another device already uses this lock or sensor on the same integration account: a second V1 device, or one already connected in V2. V2 keeps one device per provider device and account, so this one was not written. Check which V1 device the customer uses.","write_device_code_pin_conflict":"Another door code already holds this slot or stay on the same lock with a different PIN, so this one was not written: a lock keeps one code per slot or stay. The details name both V1 codes.","write_lock_code_vendor_id_duplicate":"Another door code on the same lock already carries this code's lock-provider code ID, so this one was not written: a lock keeps one code per provider code ID.","write_lock_code_vendor_id_superseded":"This door code has ended, and another V1 door code on the same lock carries the same lock-provider code ID, so its history was not migrated: a lock keeps one code per provider code ID.","write_access_grant_duplicate":"Another door-access grant with the same provider grant ID on this lock's integration account was already migrated, or is already in SuiteOp. V2 keeps one grant per provider grant, so this one was not written.","write_access_grant_stay_taken":"This lock already has a live door-access grant for this reservation: another V1 grant, or one already in SuiteOp. V2 keeps one live grant per reservation on a lock, so this one was not written.","write_lock_code_grant_duplicate":"Another door code for the same door-access grant on this lock was already migrated, or is already in SuiteOp. V2 keeps one code per grant on a lock, so this one was not written.","write_custom_url_booking_link_duplicate":"Another custom URL in this organization already uses this external booking link. V2 allows one custom URL per booking link, so this one was not written.","write_slack_channel_duplicate":"Another Slack channel with the same Slack channel ID on this workspace was already migrated, or is already in SuiteOp. V2 keeps one entry per channel on a workspace, so this one was not written.","write_upsell_visibility_rule_duplicate":"This upsell already has a visibility rule of this type. V2 keeps one rule of each type per upsell, so this rule was not written.","write_user_rewardful_affiliate_taken":"Another SuiteOp user already has this Rewardful affiliate ID. An affiliate ID belongs to one user, so this person was not migrated.","write_property_pms_listing_duplicate":"Another property already uses this PMS listing: a second V1 property mapped to the same listing, or a property already connected to it in V2. V2 keeps one property per PMS listing, so this one was not written. Check which V1 property the customer uses.","handover_before_cutover":"The account handover runs after the cutover, and this account has not been cut over yet.","handover_while_migration_held":"The account handover runs after the migration's outbound pause is lifted. Lift it from the banner at the top of the page first, then start the handover.","write_direct_insert_returned_no_target":"The write of this record came back without an identifier, so the migration treated it as not written rather than assume it succeeded. The next write pass tries it again; if it keeps failing, ask a SuiteOp engineer.","write_service_returned_no_target":"The record was sent to be saved but came back without an identifier, so the migration treated it as not written rather than assume it succeeded. The next write pass tries it again; if it keeps failing, ask a SuiteOp engineer.","write_element_category_unresolved":"The element category this record requires could not be matched to one in SuiteOp or created, so the record was not written. Check its category in V1; a fix made there is carried over by the Delta step.","write_file_fetch_unavailable":"V1 did not answer when this record's file was requested, so the file has not been copied yet. Nothing needs doing: the next pass asks again.","write_file_machine_failed":"Copying this record's files failed before anything was saved, so nothing was written. The next write pass tries it again; if it keeps failing, ask a SuiteOp engineer.","write_file_quarantined":"A file this record cannot be saved without could not be copied from V1 on any attempt, so the record was not written. Replace the file in V1 (the Delta step carries it over), or press Re-queue failed rows in the Recovery panel while this run is open to try again.","write_file_store_failed":"SuiteOp's file storage did not accept this record's file just now, so the file has not been copied yet. Nothing needs doing: the next pass tries again.","write_membership_missing":"This record belongs to a person who is not a member of this organization in SuiteOp, so it was not written. Once their membership is written, press Re-queue failed rows in the Recovery panel while this run is open.","write_notification_opt_out_not_written":"This notification preference was sent to be saved but was not found afterwards, so it was treated as not written. The next write pass tries it again; if it keeps failing, ask a SuiteOp engineer.","write_quarantined":"This row was set aside after earlier failed attempts, so this pass did not try it again and nothing was written. Once its cause is fixed, press Re-queue failed rows in the Recovery panel while this run is open.","write_translation_entry_rejected":"SuiteOp's translation service refused this text for a reason of its own, not the text's length, so it was not saved. Ask a SuiteOp engineer.","write_translation_not_minted":"The text this record needs could not be saved in SuiteOp, so the record was not written. The next write pass tries it again; if it keeps failing, ask a SuiteOp engineer.","write_fold_owner_pending":"The record these details belong to has not been written yet, so they are waiting for it. Nothing needs doing: a later pass writes them once it is.","write_translation_text_too_long":"This text is longer than SuiteOp allows for its field, so it was not saved. Shorten it in V1; the fix is carried over by the Delta step.","write_translation_offload_failed":"SuiteOp's storage did not accept this long text just now, so it was not saved yet. Nothing needs doing: the next pass tries again.","delta_preview_required":"Build a complete catch-up preview before applying the catch-up.","delta_preview_stale":"The catch-up preview is out of date — older than 15 minutes, the catch-up data changed, or the number of door codes it would revoke changed. Build it again before applying.","delta_preview_before_apply_only":"The catch-up preview can only be built before the catch-up is applied.","delta_catch_up_after_apply":"This catch-up is already being applied, so it can no longer read V1 changes. Close it and open a new catch-up pass to read more.","delta_resume_before_apply":"This catch-up stopped before it was applied, so it can't be resumed. Open a new catch-up pass instead.","delta_preview_escape":"The preview stopped because a write tried to leave the rehearsal; nothing was changed. Try again.","acceptance_parity_not_passed":"The acceptance was not recorded: parity has not passed, or the report is not signed or is out of date. Generate the parity report again if it is out of date, then sign a passing report on the Parity stage.","acceptance_already_recorded":"The customer's acceptance is already recorded for this migration, so it was not recorded again.","retry_changed_in_flight":"Retry changed is already checking V1. Wait for it to finish, then try again.","post_cutover_probe_not_cut_over":"The connection checks after cutover can run only once this organization is cut over and its outbound mute is lifted.","post_cutover_probe_stale":"These results were replaced by a newer check. Reload the panel and acknowledge the line on the latest results.","post_cutover_probe_nothing_to_acknowledge":"This line passed, so there is nothing to acknowledge.","parity_sign_superseded":"The report changed while an earlier sign check was still running. Wait for that check to finish, then sign again.","retry_changed_not_refused":"Retry changed is only for rows refused by their data. Use Retry all in group instead.","retry_after_cutover":"This migration has cut over, or its mute was lifted, so Retry cannot open a catch-up run: that would mute the live organization again. Use the post-cutover tools instead.","retry_child_nothing_readable":"None of these rows can be read from V1 again, so Retry opened no catch-up run.","retry_changed_not_running":"Retry changed can only re-queue rows while its own check is running.","scheduled_work_fix_muted":"Outbound is still paused for this organization, so SuiteOp cannot re-create scheduled work yet. Resume outbound after the cutover, then press Fix again.","commit_dry_run_stale":"This account cannot be committed yet: its dry run is out of date. Press Dry run again, read the results, then commit.","commit_dry_run_incomplete":"This account cannot be committed yet: its dry run stopped before it reached every data type. Open the Dry run stage, press Continue dry run, and commit once it finishes.","commit_dry_run_continuing":"This account cannot be committed yet: its dry run is still continuing on its own, pass by pass. Wait for it to finish, then commit.","commit_dry_run_no_progress":"This account cannot be committed yet: its dry run stopped continuing on its own because its last pass found nothing new to read or check. Open the Dry run stage and press Continue dry run to try once more; if it stops there again, ask a SuiteOp engineer.","commit_dry_run_pass_cap":"This account cannot be committed yet: its dry run continued on its own for its maximum number of passes without finishing. Open the Dry run stage, press Continue dry run, and commit once it finishes.","commit_dry_run_environment_fault":"This account cannot be committed yet: its dry run stopped continuing on its own because SuiteOp's database had a temporary problem while checking its last pass. Open the Dry run stage and press Continue dry run to try again; if it stops there again, ask a SuiteOp engineer.","commit_dry_run_unreadable":"This account cannot be committed yet: its dry run has an answer, but it could not be read, so nothing shows that it finished. Open the Dry run stage, run the dry run again, then commit.","dry_run_errors_not_acceptable":"There are no dry-run errors to accept. Only a finished dry run with errors can be accepted.","item_accept_not_current":"This item no longer is the latest attempt for its V1 record. Refresh and accept the current one.","item_accept_not_refused":"Only a failed or held item with a recorded reason can be accepted.","item_accept_self_healing":"This failure clears itself on the next pass, so it cannot be accepted. Retry it instead.","resend_invite_run_not_standing":"This migration run is no longer finalizing or completed, so its emails can't be resent. Reload the page to see where the migration is.","resend_invite_org_muted":"Outbound messages are paused for this organization, so no email was sent. Ask SuiteOp support to lift the pause, then resend.","resend_invite_migration_held":"The migration is still holding this organization's outbound messages, so no email was sent. Turn outbound back on once the migration is done, then resend.","vanity_takeover_muted":"Outbound is still paused for this organization, so SuiteOp cannot move its web address yet. Resume outbound after the cutover, then press Retry takeover again.","vanity_takeover_no_unit":"The cutover did not take over this web address, so there is nothing to retry. Ask a SuiteOp engineer.","door_codes_not_quarantined":"This lock's door-code step is not stopped, so there is nothing to resolve. Nothing was changed.","door_codes_resolve_not_finalizing":"The cutover is not running its steps right now, so this lock cannot be resolved. If its remaining steps stopped before the cutover finished them, press “Re-start the remaining steps” in Recovery, then try again. Nothing was changed.","door_codes_resolve_muted":"This organization's outbound messages are still paused. The organization's admin, or SuiteOp staff, lifts the pause from the outbound-paused banner. Nothing was changed.","door_codes_resolve_disabled":"Resolving a lock's door codes without its vendor isn't turned on in this region yet. Nothing was changed.","attestation_door_codes_reason_required":"Signing off a lock resolved without the vendor needs a written reason: V1's codes stay on it and nothing changes them until it reconnects. Say how guests get in meanwhile, then save.","door_codes_requeue_other_run_active":"Another migration pass is still running its steps. Wait for it to finish, then press Re-queue again. Nothing was changed.","door_code_revokes_apply_busy":"A migration run is still in progress, so no door code was changed. Wait for it to finish, then try again.","reference_backfill_after_cutover":"References can't be re-linked after the cutover, because an empty reference may now be a deliberate change. Fix any that remain by hand.","reference_backfill_run_changed":"The migration run changed while references were being re-linked, so the rest of this pass was not run. Press the button again to start over on the current run.","blocker_accept_subject_unknown":"This difference is not in the latest field check. Re-run the reconcile, then try again.","former_members_not_probed":"Find former members first, then bring them in.","former_members_after_cutover":"Former members can't be brought in after the cutover, because a record's empty link may now be a deliberate change.","former_members_probe_unverified":"The check for deleted staff was refused: V1 did not answer for people this migration already read, so its answer can't be trusted and no one is treated as deleted. Check the V1 connection, then run it again.","blocker_accept_holds_reason_too_short":"This account backs open holds, so the reason needs at least 20 characters.","blocker_accept_leg_unsupported":"This check can't be accepted here. Contact engineering.","blocker_accept_reason_too_short":"Accepting several differences at once needs a reason of at least 20 characters.","failed_run_accept_not_cut_over":"This migration is not cut over yet, so its run cannot be accepted here. Reload the page.","failed_run_accept_unavailable":"This run can no longer be accepted: it is not this migration's failed run any more. Reload the page.","failed_run_accept_uncovered":"Some unfinished steps are not accepted yet, or they changed since. Open Accept failed run again and accept them.","failed_run_accept_busy":"Another migration action is running. Wait a moment, then press again.","failed_run_accept_reason_too_short":"Write a reason of at least 20 characters.","attestation_not_revocable":"This sign-off cannot be withdrawn: the run it accepted is closed, and its locks stay held until their door codes are re-queued.","failed_run_accept_unit_in_flight":"A step of this run is still being worked on. Wait for it to finish or stall, then press again.","failed_run_accept_disabled":"Accepting a failed run is not switched on in this region yet. Ask engineering to turn it on.","failed_run_accepted":"Accepted as it is: the run failed after the cutover with this step unfinished, and the run was accepted without it. It will not run again.","failed_run_retry_not_cut_over":"This migration is not cut over yet, so its run cannot be retried here. Reload the page.","failed_run_retry_unavailable":"This run can no longer be retried: it is not this migration's failed run any more. Reload the page.","failed_run_retry_not_cleared":"The steps can't run yet: outbound is still paused for this organization, or the old app is not confirmed muted. Resume outbound once the migration allows it, then press again.","failed_run_retry_unit_in_flight":"A step of this run is still being worked on. Wait for it to finish or stall, then press again.","failed_run_retry_units_accepted":"Some unfinished steps are already accepted. Withdraw those accepts to run them again, or press Accept failed run.","failed_run_retry_lock_held":"A step of this run acts on a lock whose door codes were resolved without the vendor. Press Accept failed run instead, or ask a SuiteOp engineer.","failed_run_retry_busy":"Another migration action is running. Wait a moment, then press again.","failed_run_retry_disabled":"Retrying a failed run is not switched on in this region yet. Ask engineering to turn it on."},"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: no stage waits on it, and a type with no decision is simply not migrated.","blocks_presses":"Dry run and Commit are refused while a type with rows has no decision. A type with no decision and no count does not block them: the dry run still reads its rows, but only types decided to migrate are written.","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: no stage waits on it.","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}","counted_earlier":"Checked {at}, kept from an earlier run","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.","continuing":"Continuing on its own — pass {pass} of up to {maxPasses}. Settled so far: {settled} of {total}.","auto_continue_stopped_no_progress":"The automatic re-count stopped after pass {pass}: that pass settled nothing more, so it will not continue on its own. Still pending: {remaining}.","auto_continue_stopped_pass_cap":"The automatic re-count stopped at its limit of {maxPasses} passes. Still pending: {remaining}.","auto_continue_stopped_rerun":"Press “Re-run accounting” to count them again; if the number does not move, ask an engineer.","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 — this report accounts for rows, not amounts or files.","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_rolled_back":"Rolled back","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.","balanced_types":"{count, plural, one {# type balanced} other {# types balanced}}"},"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.","press":{"idle":"Nothing has been read from V1 for this run yet. The dry run reads every type into the migration ledger and checks it against the mapping — nothing is written to this account.","queued":"Dry run requested — waiting for a worker to start it.","running":"Dry run in progress: {count, plural, one {# V1 row} other {# V1 rows}} read into the ledger so far.","running_since":"Started {at}.","running_no_progress":"This pass has been going for {minutes} minutes, longer than one pass is allowed, and no worker has picked it up again. Press Continue dry run to pick it up where it stopped; if it stays stuck, ask a SuiteOp engineer.","interrupted":"This run stopped while the dry run was in progress, so the pass did not finish. Resuming the migration or starting a new one opens a new run, and the dry run starts over there — this pass's progress does not carry across.","finished":"Finished: the dry run read all {count, plural, one {# type} other {# types}}, and each matched its count in V1. Build the results below to see what would be written.","finished_gaps":"Finished, with gaps: the dry run reached every type, but {count, plural, one {# type was} other {# types were}} not confirmed complete against V1 — a table can be too large to count, a count can time out, or V1 may not have served the type at all. Build the results below to see which. Run the dry run again to re-ask the counts; a type V1 could not read is retried only by Check again with the current mapping.","stopped":"Stopped before the end, with {count, plural, one {# type} other {# types}} still to finish. Continue to pick up where it stopped. A type V1 could not read is not retried by Continue, so use Check again with the current mapping once the pass finishes.","stopped_budget":"Stopped before the end: this pass used its time allowance with {count, plural, one {# type} other {# types}} still to finish. That is normal for a large account — continue to pick up where it stopped. A type V1 could not read is not retried by Continue, so use Check again with the current mapping once the pass finishes.","stopped_drained":"Stopped before the end: the worker was restarting, with {count, plural, one {# type} other {# types}} still to finish. Continue to pick up where it stopped. A type V1 could not read is not retried by Continue, so use Check again with the current mapping once the pass finishes.","continuing":"The last pass used its time allowance, so the dry run is continuing on its own: pass {pass} of at most {max} is waiting for a worker.","continuing_pass":"Continuing on its own: pass {pass} of at most {max}.","continuing_after_drain":"The worker restarted mid-pass, so the dry run is picking up where it left off: pass {pass} of at most {max} is waiting for a worker.","stopped_pass_cap":"Stopped before the end: the dry run continued on its own for its maximum of {max} passes, with {count, plural, one {# type} other {# types}} still to finish. Continue to keep going. A type V1 could not read is not retried by Continue, so use Check again with the current mapping once the pass finishes.","stopped_no_progress":"Stopped before the end: the last pass used its time allowance without reading or checking anything new, so the dry run stopped continuing on its own, with {count, plural, one {# type} other {# types}} still to finish. Continue to try once more; if it stops here again, ask a SuiteOp engineer.","stopped_environment_fault":"Stopped before the end: SuiteOp's database had a temporary problem while checking this pass, so the dry run stopped instead of continuing on its own, with {count, plural, one {# type} other {# types}} still to finish. Continue to try again; if it stops here again, ask a SuiteOp engineer.","failed":"The dry run did not finish.","unreadable":"This run has a dry-run answer, but it could not be read. Run the dry run again.","start":"Start dry run","continue":"Continue dry run","recheck":"Check again with the current mapping","run_again":"Run the dry run again","refusal_no_active_run":"This migration run is no longer active. Start a new run before running the dry run.","view_only":"Your access can see the dry run but not start it."},"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}.","coverage":"Coverage: rows extracted from {extracted} of the {walked} V1 tables this dry run reads ({registered} in the read registry). Those tables feed {reached} of the {waves} tables in the V2 load plan.","future_check_ins":"Future check-ins in this run (after it started): {count}","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","continue_submit":"Continue building 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.","press_errors_notice":"{count, plural, one {# blocking finding was raised by the checks that ran when these results were built} other {# blocking findings were raised by the checks that ran when these results were built}}. A row the commit will refuse because a record it points to is missing, or a key it uses is already taken, is counted under Refused — needs action; any other is listed with the findings and stays counted in Would write. Open a type below to see them.","refused_notice":"{count, plural, one {# row would be refused — needs action: a record it points to is missing, or a key it uses is already taken.} other {# rows would be refused — needs action: a record they point to is missing, or a key they use is already taken.}} Open a type below to see which.","no_parent_notice":"{count, plural, one {# row will not be migrated: V1 has no parent record for it.} other {# rows will not be migrated: V1 has no parent record for them.}} No action is needed.","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, that the commit would write. A row the commit will refuse because a record it points to is missing, or a key it uses is already taken, is counted under Refused — needs action instead; a row merged into another V1 record with the same key, or left out with its parent, is counted under Not written. Any other finding from the checks at Build results, a warning included, is listed with the findings below and stays counted here, and a row nothing has checked is counted in its own column. The summary above still flags them.","column_planned_help_aria":"About the Would write column","planned_fills":"fills {count, number}","column_blocked":"Blocked","column_refused":"Refused — needs action","column_no_parent":"Not migrated — V1 has no parent","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","files_heading":"V1 files","file_outcomes":"Private files that need the Bubble API key: {needsKey, number} · key not set on the worker: {keyUnset, number} · private attachments fetched without the key: {notPlaced, number} · host refused: {refused, number} · not a usable link: {malformed, number}","column_file_field":"V1 field","column_file_source":"Where it lives","column_files":"Files","column_link":"Link","links_heading":"Links between records","links_not_previewed":"Not previewed: {links}. The migration does not read this V1 type, so the commit writes none of these links.","file_refusal_mark":"{count, plural, one {# row refused over a file} other {# rows refused over a file}}","file_source_bubble_cdn":"Bubble's CDN","file_source_bubble_s3":"Bubble's S3 storage (appforest_uf)","file_source_bubble_private_route":"V1 private file route","file_source_filestack":"Filestack storage","file_source_cloudflare_copy":"Cloudflare Images copy","file_source_external_link":"Kept as an outside link","file_source_refused_host":"Host the migration refuses","file_source_malformed":"Not a usable link","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.","db_checks_partial":"Database checks stopped part-way through this type. Press Continue building results to finish it.","db_checks_unavailable":"Database checks could not run for this type on the last rebuild. Rebuild the results to retry.","checks_deferred_notice":"Complete, with {count, plural, one {# type whose checks are deferred to the commit} other {# types whose checks are deferred to the commit}}: a check whose answer depends on a row this run will write can only run then.","checks_failed_notice":"{count, plural, one {# type had a check fail} other {# types had checks fail}}. They ran and errored — rebuild the results to try again.","checks_partial_notice":"{count, plural, one {# type's checks stopped part-way} other {# types' checks stopped part-way}}; press Continue building results to finish them.","checks_not_run_notice":"{count, plural, one {# type has a check that could not run} other {# types have checks that could not run}}: SuiteOp does not migrate that type yet, or its rows could not be checked in a dry run. Each type's row says why.","pending_references":"{count, plural, one {# reference not yet checked — its target is written by an earlier wave. Any reference that will not resolve is reported as a finding.} other {# references not yet checked — their targets are written by earlier waves. Any reference that will not resolve is reported as a finding.}}","parent_list_contested":"{count, plural, one {# record is listed by more than one parent in V1 and was kept under the first by V1 ID.} other {# records are listed by more than one parent in V1; each was kept under the first by V1 ID.}}","findings_toggle":"{errors, plural, one {# error} other {# errors}} · {warnings, plural, one {# warning} other {# warnings}}","severity_error":"Blocking","severity_warning":"Warning","severity_unchecked":"Not checked","finding_items":"{findings, plural, one {# finding} other {# findings}} across {items, plural, one {# row} other {# rows}}","finding_ids":"V1 rows: {ids}","finding_details":"Details:","finding_truncated":"(only {count} are listed)","export_submit":"Export results","deferred_checks":"Money and compliance-file reconciliation are not covered here — this preview checks rows, not amounts or files. They are not the only checks it leaves out.","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","limits_toggle":"What this preview cannot see","limits_intro":"This preview cannot see:","limits_files":"Whether V1's files still download — a file is fetched only when the import writes it.","limits_custom_url_region":"Whether a custom web address is already claimed in another region — that is checked at cutover.","limits_directory_sync":"Sign-in and team-membership sync with the global directory.","limits_payments_hold":"Payments that need the organization on hold, if it is unmuted during the import.","limits_dependent_rows":"Rows that depend on another row being written first: guest-verification answers, task items, and duplicates whose first copy fails.","limits_write_time":"One-off failures at write time, such as a sealed value that cannot be read or a category that cannot be resolved.","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_db_checks":"Database checks","csv_truncated":"Id list truncated","csv_window_excluded":"Older than window (not migrated)","csv_refused":"Refused — needs action","csv_no_parent":"Not migrated — V1 has no parent","completion":{"stale":"Re-run due: this dry run finished more than {hours} hours ago, so it no longer counts for commit. Press Dry run again.","errors":"This dry run finished with {count, plural, one {# error} other {# errors}}. Fix them and re-run, or accept them so the dry run counts as done.","accepted":"{count, plural, one {# error was accepted} other {# errors were accepted}}. The dry run counts as done.","accept":"Accept errors","accept_title":"Accept {count, plural, one {# dry-run error} other {# dry-run errors}}?","accept_body":"The dry run will count as done with these errors. Your name and reason are recorded. A re-run is a new pass and needs its own acceptance.","reason_label":"Reason","accept_done":"Errors accepted. The dry run counts as done."}},"commit":{"intro":"Write this account’s V1 data into its live V2 account. Every data type moves in wave order, and progress shows above the stages.","what_it_does":"Commit starts the write. Guest-facing effects stay off until finalize, and a rollback removes only the rows this run created.","button":"Commit this account","writing":"This run is writing. Progress for each wave is shown above; a stopped run is continued from Recovery below.","writes_stuck":"Some rows are still waiting to be written, but no write is running for them. Restart stuck writes queues the write for this run again; rows already written are not touched.","restart_stuck_button":"Restart stuck writes","written_title":"Written — ready to finalize","written":"Every row this commit could write has settled. Finalize is the next step: it turns on what the import held back for this account.","written_attention":"{count, plural, one {# row still needs} other {# rows still need}} attention. Recovery below can re-queue failed rows before you finalize.","finalize_button":"Finalize","finalize_tier":"Finalizing needs the destructive migration tier. Ask an engineer to press Finalize.","finalize_confirm_title":"Finalize this migration?","finalize_confirm_body":"This finishes the migration's setup for this account: it fills in the links the import deferred. It does not turn on the migrated integrations or workflow rules yet, and nothing reaches guests or team members: the organization stays muted until the migration is cut over and outbound is turned back on, and the integrations, workflow rules, deferred invites and recurring tasks wait until then.","finalize_confirm_action":"Finalize","finalize_cancel":"Cancel","finalizing":"This run is finalizing: what the import held back is being turned on.","finalizing_retrying":"{count, plural, one {# finalize step hit a temporary error and is retried automatically.} other {# finalize steps hit a temporary error and are retried automatically.}}","finalizing_stopped":"{count, plural, one {# finalize step stopped after repeated errors. Press Re-queue failed rows in the Recovery panel to finish finalizing.} other {# finalize steps stopped after repeated errors. Press Re-queue failed rows in the Recovery panel to finish finalizing.}}","open_dry_run":"Open the Dry run stage","blocked":{"run_ended":"No run here can start writing. Reload the page to see where this migration is — a stalled run is continued from Recovery below.","writing":"This run is already writing.","tier":"Committing needs the destructive migration tier. Ask an engineer to press Commit.","dry_run_running":"A dry run is still in progress on this run. Commit unlocks when it finishes.","dry_run_continuing":"The dry run is continuing on its own: pass {pass} of at most {max}. Commit unlocks when it finishes.","dry_run_missing":"No dry run has finished on this run. Run the dry run and read its results first — it is what proves the plan before any of this customer’s data is written.","dry_run_incomplete":"The dry run stopped before it reached every data type. Press Continue dry run on the Dry run stage; Commit unlocks once it finishes.","dry_run_no_progress":"The dry run stopped continuing on its own: its last pass found nothing new to read or check. Press Continue dry run on the Dry run stage to try once more; if it stops there again, ask a SuiteOp engineer.","dry_run_pass_cap":"The dry run reached its maximum number of passes without finishing. Press Continue dry run on the Dry run stage to keep going; Commit unlocks once it finishes.","dry_run_environment_fault":"The dry run stopped continuing on its own: SuiteOp's database had a temporary problem while checking its last pass. Press Continue dry run on the Dry run stage to try again; if it stops there again, ask a SuiteOp engineer.","dry_run_unreadable":"The dry run's answer could not be read, so nothing shows that it finished. Run the dry run again on the Dry run stage; Commit unlocks once it finishes.","dry_run_stale":"The dry run is out of date. Re-run it before you commit."},"dialog_title":"Write {account}’s data into its live V2 account?","dialog_body":"This moves the run from dry run to live and queues the write for every data type.","dry_run_finished_at":"Dry run finished {when}","dry_run_finished":"Dry run finished","dry_run_complete":"All {count, plural, one {# data type was} other {# data types were}} read, and each matched its count in V1.","dry_run_gaps":"{gaps, plural, one {# data type was} other {# data types were}} reached but not confirmed complete.","dry_run_stopped":"This dry run stopped before {count, plural, one {# data type was} other {# data types were}} validated. Those are written without a dry run behind them.","dialog_warning":"This writes the customer’s data into their live account. Only a rollback of this run can undo it.","confirmation_label":"Type {account} to confirm","confirmation_hint":"Type the name exactly as shown.","submit":"Commit and start writing"},"v1_source":{"live":"Reading V1 production (live)","test":"Reading V1 staging (test)","refused":"This deployment maps to no V1 environment, so nothing can be read from V1 here."},"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.","required_reference_empty":"This record's required link is empty in V1: V1 never linked it to a parent record, so it cannot be written.","unresolved_reference":"The linked record is not in SuiteOp, so this link cannot be filled in.","parent_list_orphan":"No parent record in V1 lists this record, so it cannot be linked to one.","parent_list_ambiguous":"Two parent records in V1 list this record, and it can belong to only one, so it will not be migrated.","parent_list_contested":"More than one parent record in V1 lists this record. It is migrated under the first of them by V1 ID, which is the same one on every run.","precheck_answer_step_underivable":"This check-in answer has no single additional-questions step to belong to in SuiteOp, so it cannot be linked.","creator_not_member":"The person who created this record in V1 is not a member of this organization, so they cannot be its owner here.","user_not_member":"V1 names a person here who is not a member of this organization, so they cannot be linked to this record.","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.","review_rating_rescaled":"This V1 rating is above 5, so it was read as a score out of 10 and halved to fit SuiteOp's 1–5 scale.","review_rating_out_of_band":"This V1 rating is outside SuiteOp's 1–5 scale even when read as a score out of 10, so it is left empty.","curated_field_not_written":"This V1 value is not migrated yet, so it must be set again in SuiteOp after the migration.","credential_absent_in_v1":"This connection has no sign-in details in V1, so it migrates without them and must be reconnected in SuiteOp.","seam_brand_lock_codes_unverified":"This account now connects through SuiteOp's Seam workspace, and creating lock codes through Seam is unverified for its brand. Verify on the live account that lock codes are created before relying on them.","seam_noise_sensor_alerts_not_connected":"Noise alerts for this Seam sensor aren't connected yet. The account and its devices migrate, but they won't raise noise alerts in SuiteOp.","pms_account_adopted":"This PMS account was already connected in SuiteOp, so the migration adopted that connection instead of creating a second one. It keeps its current sign-in.","adopted_by_provider_uniqueness":"This PMS account was matched to the organization's only existing connection for the same PMS, not by its account ID. Confirm in the reconnect step that it is the same account.","adopted_disconnected_account":"This connection was matched to one that is disconnected in SuiteOp, so its migrated data is attached to an inactive connection. Reconnect it in SuiteOp to bring it back.","pms_account_unlinked_in_v1":"V1 shows this PMS account as unlinked. It is migrated, but it stays inactive until it is reconnected in SuiteOp.","pms_account_migrated_disconnected":"This V1 PMS account has no provider account linked to it, so it is migrated as a disconnected connection without credentials, and its listings are kept. Reconnect it in SuiteOp to resume its webhooks and syncing.","pms_account_disconnected_beside_natives":"This organization already has a connection for this PMS in SuiteOp, but nothing in V1 ties this account to it, so this V1 account is migrated as its own disconnected connection instead of being guessed onto an existing one. Merge it into the right connection or reconnect it in SuiteOp.","pms_vendor_pointer_empty":"This V1 PMS account has no provider account linked to it, so there are no credentials to carry over and it will not be migrated. Connect this PMS in SuiteOp once the migration is done.","pms_vendor_ambiguous":"This V1 PMS account is linked to more than one provider account, so the migration cannot tell which PMS it is and will not migrate it unless only one stays linked. Unlink the extra provider account in V1, or connect this PMS in SuiteOp once the migration is done.","pms_vendor_not_archived":"This PMS account's provider account has not been extracted in this run, so its credentials cannot be read and the account will not be migrated until it is. Run it again once the provider account is extracted, or connect this PMS in SuiteOp once the migration is done.","pms_vendor_hub_mismatch":"This PMS account's provider account points back to a different PMS account in V1, so the migration cannot tell which one owns the credentials and will not migrate it unless the link is fixed. Fix the link in V1, or connect this PMS in SuiteOp once the migration is done.","pms_vendor_credential_unreadable":"This PMS account's stored credentials cannot be decrypted, so the account will not be migrated. Connect this PMS in SuiteOp once the migration is done to enter its credentials again.","branding_no_custom_url":"This brand has no custom URL in V1 and your organization has no primary URL to serve it on, so it was not imported. Set a primary URL, then retry.","smartthings_location_owned_elsewhere":"This SmartThings location is already connected to a different organization in SuiteOp, so it was not migrated here. Resolve which organization owns it before migrating it.","slack_workspace_owned_elsewhere":"This Slack workspace is already connected to a different organization in SuiteOp, so it was not migrated here. Resolve which organization owns it before migrating it.","pms_vendor_unavailable":"This PMS account's provider details are missing in V1, were not extracted in this run, or belong to a different account, so the account was not written. It can be re-run once they are extracted.","airbnb_connect_customer_not_read":"Airbnb account not read yet: run another pass, then press again","airbnb_connect_customer_archive_expired":"Airbnb account read earlier but its archived copy expired; run another pass","airbnb_connect_customer_absent":"No Airbnb account to carry over: V1 holds no Hospitable Connect customer for this organization, so this Airbnb connection was not migrated. Connect Airbnb again in SuiteOp.","airbnb_connect_customer_ambiguous":"More than one Airbnb account was found for this organization in V1, so none was carried over. Keep one Hospitable Connect customer in V1, or connect Airbnb again in SuiteOp.","airbnb_connect_customer_no_hub":"No Airbnb Direct listing hub in V1: the Connect customer was not adopted","airbnb_connect_adopt_refused":"Hospitable declined to hand over this Airbnb connection, so nothing was migrated for it. The detail says why; connect Airbnb again in SuiteOp if it cannot be fixed.","airbnb_connect_vendor_token_missing":"Hospitable Connect is not configured in this region yet: the Airbnb account will be adopted on a later press","airbnb_connect_routing_not_registered":"Webhook routing was not registered for this Airbnb account: no gateway configured, or not production. That is expected on staging and local runs.","airbnb_connect_hub_shares_account":"This V1 Airbnb hub uses the organization's Airbnb connection, which another hub already brought over. Both now share that one connection.","airbnb_connect_route_release_failed":"A rolled-back Airbnb account's webhooks still route to this organization because the release could not reach the gateway. It is retried on the next finish.","pms_client_id_mismatch":"This Hostaway account's client ID differs from its account ID. Check the connection in the reconnect step.","credential_unreadable":"This connection's sign-in details could not be read, so it stays inactive until it is reconnected in SuiteOp.","credential_readiness_left_to_handover":"This connection stays inactive until SuiteOp has taken over its sign-in from the old app. It turns on by itself once that finishes; if it stays stuck, run the account handover again on the migration page.","credential_handover_needs_reconnect":"V2 could not take this connection over from V1, so it must be reconnected in SuiteOp. The Account handover card on the migration page says why.","handover_provider_config_missing":"SuiteOp's sign-in setup for this provider is missing in this region, so this connection could not be taken over from V1. SuiteOp has to fix this on its side; the account's V1 sign-in was not used.","v1_token_clear_owed":"V2 refreshed this connection, but this provider doesn't invalidate V1's copy of the token when it does, so V1's token stays valid until the V1 cutover page clears it.","credential_recovered_at_handover":"V1 had marked this connection as needing sign-in, but V2 refreshed it successfully at the account handover, so it's working.","handover_read_failed":"V2 refreshed this connection, but a read-only check with the new token failed, so it isn't proven to work. Check the connection before relying on it.","handover_read_unverifiable":"V2 refreshed this connection, but there's no read-only check for this provider, so the new token isn't proven to work.","oauth_awaiting_cutover":"This connection stays inactive until the switch to SuiteOp is complete: refreshing its sign-in now could sign out the old app, which still uses it.","pms_identity_awaiting_post_connect":"This connection stays inactive until it is reconnected in SuiteOp: its account details (like the Mews enterprise or the Hospitable user) come only from the provider.","migrated_invite_not_sent":"This person was not sent the email that lets them set a password for their migrated account. The details say why.","migrated_invite_waiting_for_unmute":"This person's invite email is waiting: the organization is still muted during the migration. It is sent once the migration is cut over and outbound is turned back on.","finalize_unit_waiting_for_cutover":"This step is waiting for the cutover, not failed: outbound stays paused while the migration is in progress, so it has not run yet. It runs once the migration is cut over, and stays on this run's record until then.","finalize_unit_waiting_for_handover":"This step is waiting, not failed: SuiteOp is still taking over this connection's sign-in from the old app. It runs once that finishes; if it stays stuck, run the account handover again on the migration page.","seam_routing_ownership_conflict":"Another SuiteOp organization already owns this Seam account, so it was disconnected here. Confirm which organization owns it, then reconnect it in SuiteOp.","seam_routing_skipped":"Lock events for this Seam account could not be routed to SuiteOp. Reconnect it in SuiteOp so its events arrive.","device_webhook_deferred":"This lock account's webhook was not registered with its provider yet, because registering it would replace the subscription V1 still uses. Its lock events reach SuiteOp once V1 is turned off.","device_webhook_partial":"Only some of this lock account's locks accepted SuiteOp's webhook. Use Retry webhook setup on the account so every lock sends its events.","device_webhook_setup_failed":"This lock account's webhook could not be registered with its provider. Use Retry webhook setup on the account so its lock events reach SuiteOp.","device_webhook_replaced_v1":"This lock account's provider allows only one webhook, so SuiteOp's replaced V1's: V1 no longer receives this account's lock events. If the migration is rolled back, V1's webhook must be registered again when V1 is re-enabled.","device_webhook_schlage_takeover_planned":"At the cutover, SuiteOp will take over this Schlage account's webhook: Schlage allows only one per account, so from then on V1 no longer receives this account's lock events.","nest_enterprise_events_unsubscribed":"SuiteOp is not yet subscribed to events from this Nest account's Google Device Access project, so its thermostat events won't reach SuiteOp until it is. The account still migrates.","seam_routing_retrying":"Routing lock events for this Seam account is still being retried. Check that the connection is active once the migration finishes.","seam_v1_webhook_workspace_shared":"Seam sends this account's lock events to V1 as well as to SuiteOp, because both share one Seam workspace webhook. Nothing needs doing: V1 is muted, so its copy reaches nobody, and it stops once SuiteOp takes over Seam events entirely.","seam_route_claim_conflict":"Another SuiteOp organization already receives this Seam account's lock events, so they do not reach this organization. Confirm which organization owns the account before the migration's cutover.","netatmo_routing_not_claimed":"Webhook events for this Netatmo account were not routed to SuiteOp, because another organization already receives them or the webhook gateway was unreachable. Its readings still arrive through the regular device sync.","netatmo_route_key_differs":"This Netatmo account's webhook route is keyed by a user id that differs from the account id stored for it, so disconnecting it in SuiteOp may leave the route behind. Ask support to remove the route if you disconnect it.","migrated_route_held_natively":"This organization already has its own connection to this account, so its webhook route was left as it is. Webhook events keep reaching that existing connection.","pms_post_connect_failed":"SuiteOp could not register this PMS connection's webhooks, so changes arrive by the scheduled sync instead of in real time. The details say why.","pms_webhook_url_overridden":"Webhooks were not registered for this PMS connection because its webhook address is overridden in SuiteOp's settings. Remove the override, then register them again.","pms_foreign_webhook_stored":"Webhooks were not registered for this PMS connection because it already lists a webhook at an address that is not SuiteOp's. Check that webhook before registering again.","pms_bindings_after_cutover":"This PMS connection gets its SuiteOp webhooks at the switch to SuiteOp, after its sign-in is copied again from the old app.","pms_post_connect_token_rejected":"The PMS rejected the migrated sign-in for this connection, so it stays inactive. The sign-in is copied again from the old app at the switch to SuiteOp.","pms_mews_services_selected":"The old app did not record which Mews services to sync, so every service that takes stays is synced. The details list them; you can narrow them in the connection's settings.","pms_mews_no_stay_service":"This Mews enterprise has no service that takes stays, so there is nothing to sync and the connection stays inactive.","pms_identity_collides":"Another connection in this organization already uses this PMS account, so it was not linked here. Check which connection is the right one.","pms_adopted_identity_mismatch":"The existing SuiteOp connection this PMS account was matched to belongs to a different PMS account than the old app used, so the migrated data is attached to the wrong connection. Contact support before the switch to SuiteOp.","pms_calry_workspace_unconfirmed":"Webhooks were not registered for this Calry connection because this environment does not say which Calry workspace to use. Set it, then register them again.","pms_calry_webhook_restored":"V1's Renew Webhooks button had pointed SuiteOp's Calry webhook at V1. SuiteOp pointed it back and left V1's own webhook as it was. Don't press Renew Webhooks in V1 during the migration.","pms_calry_webhook_restore_failed":"SuiteOp's Calry webhook points at V1 (V1's Renew Webhooks button moved it) and pointing it back failed, so this connection's changes reach SuiteOp only through the scheduled sync. Ask a SuiteOp engineer to point it back.","pms_calry_webhook_readded":"V1's Renew Webhooks button had pointed SuiteOp's only Calry webhook at V1, so it became V1's only feed. SuiteOp left it to V1 and added a new webhook of its own beside it. Don't press Renew Webhooks in V1 during the migration.","pms_webhooks_unconfigured":"Webhooks were not registered for this connection because this environment is missing the secret that verifies this provider's webhooks, so the connection stays inactive. It stays inactive until the environment is configured and its webhooks are registered again.","pms_hospitable_routing_not_claimed":"This Hospitable connection is active, but SuiteOp could not route its webhooks to itself, because the webhook gateway refused the route or could not be reached. Changes still arrive with the regular sync, and real-time updates start once the first listing sync writes the route.","seam_route_release_failed":"A rolled-back Seam account's lock events still route to this organization because the release could not reach the gateway. Ask support to remove the route before another organization connects this Seam account.","netatmo_route_release_failed":"A rolled-back Netatmo account's webhook events still route to this organization because the release could not reach the gateway. Ask support to remove the route before another organization connects this Netatmo account.","rollback_held_rows_unmuted":"This rollback finished with some migrated records still in place, and outbound messaging was not paused for this organization — those records could have sent to guests alongside the old system. Outbound messaging has now been paused again automatically. If someone unpaused it on purpose, that change has been undone; check with support before unpausing it again.","v1_unmuted_after_mute":"V1 was muted for this organization, but a later check found it turned back on: the customer re-enabled V1 during the migration, so V1 may again be running work and messaging guests alongside SuiteOp. Ask the customer to mute V1 again, then run the check again.","rollback_left_in_place":"The rollback left this record in place: it already existed in SuiteOp before the migration, which only matched it, so rolling back does not delete it. It is no longer counted as a migrated record.","derived_superseded_by_resume":"A resumed attempt of this migration redid this item, so its result is the one that counts. This entry is from the earlier attempt and is kept for the record only; it needs no action.","smartthings_routing_ownership_conflict":"Another SuiteOp organization already receives this SmartThings location's device events, so they do not reach this organization. Confirm which organization owns the location, then reconnect it in SuiteOp.","smartthings_routing_skipped":"Device events for this SmartThings location were not routed to SuiteOp. This is expected in a local or preview environment; in staging or production, reconnect the location in SuiteOp so its events arrive.","smartthings_routing_unreachable":"Device events for this SmartThings location could not be routed yet because the gateway was unreachable. They start arriving the next time SmartThings updates the installation; reconnect the location in SuiteOp if they do not.","smartthings_route_release_failed":"A rolled-back SmartThings location's device events still route to this organization because the release could not reach the gateway. Ask support to remove the route before another organization connects this location.","pms_mews_route_release_failed":"A rolled-back Mews connection's events still route to this organization because the release could not reach the gateway. Ask support to remove the route before another organization connects this Mews account.","pms_calry_subscription_release_failed":"A rolled-back Calry connection still has a webhook subscription because Calry could not be reached to delete it. Ask a SuiteOp engineer.","pms_calry_subscription_left_to_v1":"The rollback did not delete this Calry webhook because V1's Renew Webhooks button had pointed it at V1, which may rely on it. It was left in place for V1.","pms_webhook_release_failed":"A rolled-back PMS connection still has a webhook the migration registered, because the provider could not be reached to delete it. The connection is kept so the next rollback can delete it.","device_webhook_release_failed":"A rolled-back lock account still has the webhook the migration registered, because the provider could not be reached to delete it. The account is kept so the next rollback can delete it.","pms_webhook_release_skipped":"A webhook the migration registered now points somewhere else at the provider, so it was left in place.","directory_release_failed":"A rolled-back person's sign-in routing could not be cleaned up. It is retried on the next rollback finish; if the details say their account is gone for another reason, check it by hand.","zapier_reconnect_required":"This Zapier connection or Zap trigger was not carried over: the migration never carries a V1 Zapier key or connection. Ask the customer to reconnect Zapier on the SuiteOp Zapier app 2.1.0 and rebuild their Zaps.","zapier_live_hook":"Recorded by an earlier migration run: this Zapier trigger had a live Zap. Zaps are no longer carried over, so ask the customer to reconnect Zapier on the SuiteOp Zapier app 2.1.0 and rebuild their Zaps.","chekin_authority_reporting_stops":"Police/authority reporting through Chekin stops at cutover. Chekin is retired, so this organization's authority-reporting step migrates switched off. Ask Customer Success to set up authority reporting on GuestAdmin before cutover.","workflow_left_inactive_missing_config":"This workflow was on in V1 but was left off at cutover: a step is missing required setup, such as an email template, sender, recipients or Slack channel, so it would fail when it runs. Complete it in SuiteOp and publish it.","workflow_left_inactive_unconvertible_condition":"This workflow was on in V1 but was left off at cutover: a step has a condition that could not be converted exactly from V1. Review the condition in SuiteOp and publish it.","workflow_node_reference_unresolved":"A step in this workflow pointed at something in V1 that did not migrate, such as an email template, sender, recipient, Slack channel, task template, group, department or service-fee upsell, so that setting is empty. Pick it again in SuiteOp before you publish the workflow.","workflow_node_condition_unresolved":"A condition in this workflow named a property, upsell or upsell option in V1 that did not migrate, so the condition still points at V1 and the workflow stays off. Edit the condition in SuiteOp, then publish the workflow.","workflow_left_inactive_unresolved_reference":"This workflow was on in V1 but was left off at cutover: a step still points at something in V1 that did not migrate, such as an email template, sender, recipient or Slack channel. Pick it in SuiteOp and publish the workflow.","workflow_left_inactive_covered_by_v2":"This workflow was on in V1 but was left off at cutover: a workflow already active in SuiteOp sends the same kind of message on the same trigger, so turning this one on could message people twice. Review both, and publish this one only if it is still needed.","workflow_activated_overlaps_v2":"This workflow was on in V1 and was switched on at cutover, but a workflow already active in SuiteOp sends the same kind of message on the same trigger at some of its properties (listed in the details), so guests there may get two messages. Review both and remove those properties from one of them.","workflow_cutover_activation_planned":"This workflow is on in V1 and will be switched on at cutover, as long as its settings carry over, it passes SuiteOp's publish checks and no active SuiteOp workflow already sends the same message. To keep it off, delete it in SuiteOp before cutover.","workflow_cutover_stays_off":"This workflow is on in V1 but will stay off at cutover: a step uses something SuiteOp cannot carry over, or a condition that could not be converted exactly. Review it in SuiteOp and publish it when it is ready.","workflow_rule_empty_in_v1":"This workflow has no steps in V1: none were ever added, or all of them were deleted. There is nothing to migrate, so it was skipped.","workflow_http_template_refused":"A header, query parameter, URL or body of this workflow's HTTP request was not migrated: V2 would fill a template variable there that V1 sent as plain text. Re-add it in SuiteOp if it is still needed.","workflow_template_token_resolves_differently":"A template variable in this workflow's HTTP request is filled with a different value in SuiteOp than in V1. Check the request before turning the workflow on.","workflow_template_token_stays_literal":"A template variable in this workflow's HTTP request does not exist in SuiteOp, so the receiver will get the variable's text instead of a value.","workflow_http_query_comma_split":"A query parameter in this workflow's HTTP request could contain commas. V1 split such values into several parameters; SuiteOp sends them as one.","workflow_http_params_on_non_http_node":"This workflow step carried HTTP request settings that V1 never used, because it is not an HTTP request. They were not migrated.","slack_channel_route_deferred":"This Slack notification route is placed when its channel is imported, and stays empty if that channel is excluded or fails to import.","slack_workspace_reconnect_required":"This Slack workspace needs to be reconnected after the switch to SuiteOp. Until then its messages and approvals don't reach SuiteOp; V1 keeps handling them.","slack_workspace_on_v1_slack_app":"Slack alerts keep working through the V1 Slack app. Reconnect to SuiteOp's Slack app for buttons and approvals, and before V1 is turned off (V1's app token stops working then).","slack_channel_workspace_from_only_workspace":"V1 left this Slack channel without a workspace. Its organization has exactly one Slack workspace, so the channel was migrated under it.","slack_channel_workspace_from_linked_twin":"V1 left this Slack channel without a workspace. Another channel of the organization with the same Slack channel ID is linked to one, so this channel was placed under that workspace.","slack_channel_folded_into_twin":"Another channel of this organization is the same Slack channel in the same workspace. SuiteOp keeps one row per channel, so that one was migrated and this one was not written separately.","guest_admin_credentials_not_migrated":"This property files guest registrations through an authority whose login V1 held. The credentials could not be migrated: re-enter them when you connect GuestAdmin.","guest_draft_match_ambiguous":"This GuestAdmin guest matches more than one traveller already on the reservation, or a traveller another GuestAdmin guest also matches, so it was migrated as its own traveller instead of being merged.","guest_draft_sex_unrecognised":"This GuestAdmin guest's sex in V1 is neither male nor female, so the traveller was migrated without it.","guest_draft_past_stay":"This GuestAdmin guest's stay had already ended when the migration ran, so it is not migrated. Guests of current and upcoming stays are migrated.","slack_workspace_disconnected":"Slack was disconnected in V1: this organization has no Slack workspace, so nothing links this channel to one and it cannot be written.","pms_hotel_account_attached":"V1 left this PMS hotel without a PMS account. Its organization has exactly one PMS account of the same PMS, so the hotel was migrated under it.","pms_hotel_account_absent":"V1 left this PMS hotel without a PMS account, and its organization has no PMS account of the same PMS, so there is nothing to migrate it under and it will not be migrated.","pms_hotel_account_ambiguous":"V1 left this PMS hotel without a PMS account, and its organization has more than one PMS account of the same PMS, so the migration cannot tell which one it belongs to and will not migrate it.","pms_hotel_ecosystem_blank":"V1 left this PMS hotel without a PMS account and without a PMS, so no account can be matched to it and it will not be migrated.","pms_hotel_enterprise_taken":"V1 left this PMS hotel without a PMS account, and another V1 hotel with the same hotel ID is already linked to its organization's only PMS account of the same PMS, so this one was not written. The details name that hotel.","documenso_document_account_from_only_account":"V1 left this Documenso document without an account. Its organization has exactly one Documenso account, so the document was migrated under it.","documenso_document_account_ambiguous":"V1 left this Documenso document without an account, and its organization has more than one Documenso account, so nothing says which one it belongs to and it cannot be written.","documenso_document_account_none":"V1 left this Documenso document without an account, and its organization has no Documenso account in V1, so there is nothing to attach it to and it cannot be written.","template_token_resolves_differently":"A template variable in this message is filled with a different value in SuiteOp than in V1 (for example another ID, link or date format). Check the text before turning it on.","template_token_no_equivalent":"A template variable in this message has no equivalent in SuiteOp, so it appears as text instead of a value.","template_token_rewritten":"A template variable in this message was renamed to SuiteOp's spelling of the same value.","template_token_escaped":"A template variable V1 showed as plain text would be filled in by SuiteOp, so it was kept as plain text in this email.","template_token_removed":"A template variable V1 showed as plain text would be filled in by SuiteOp (for example a door code or staff notes), so it was removed from this message.","door_code_absent_on_lock":"A guest's door code from V1 is not on the lock although their stay has started, so it was marked failed. Use Retry to send the same code to the lock.","door_code_not_yet_on_lock":"A code V1 installed for an upcoming stay is no longer on the lock. It is kept as scheduled but is not sent again automatically, so replace it before the stay begins.","door_code_pin_changed":"V1 saved this code but never sent it to the lock. SuiteOp installs it at its own start time, as V1 would have, but this lock generates its own PIN, so the guest's code will be the one the lock returns then, not the one V1 showed.","door_code_installs_at_v1_start":"V1 saved this door code but never sent it to the lock. The cutover does not install it: SuiteOp installs it with V1's PIN at the code's own start time, as V1 would have. Nothing to do unless the guest needs it sooner.","door_code_takeover_awaits_pin_check":"At cutover SuiteOp takes this stay's V1 door code over only if the lock lists it and confirms V1's PIN on it. Some locks list a code without its PIN; if this one does and the check does not confirm it, the code is held and nothing is changed on the lock, so a rep issues a code for the stay. The dry run cannot ask the lock, so each such stay is counted here.","door_code_unverifiable":"This lock's codes cannot be checked against the lock itself, so V1's code was kept as it was.","door_code_revocation_owner":"Who removes each migrated code from this lock when it ends: SuiteOp once code sync is turned on, the lock itself, or nobody.","door_code_unrevocable":"A migrated code on this lock has an end date, but neither the lock nor SuiteOp will remove it once V1 is disconnected. Remove it by hand or replace it with a SuiteOp code.","door_code_ended_address_cleared":"Some ended codes are no longer on this lock, so SuiteOp forgot their lock position and can never delete a newer code stored there.","door_code_only_on_history_grant":"This stay's door code was on a V1 access grant that ended or was revoked, so it was not carried over and the stay has no working code yet. At cutover V2 takes the code over and keeps the same code. If it can't, the stay is listed again with the reason.","door_code_reservation_unlinked":"This door code still works on the lock, but its V1 reservation was not carried over, so it is not linked to a stay and will not follow any change to the stay's dates. Check the code's dates, and update them by hand if the stay changes.","door_code_takeover_new_pin":"V2 took over this stay's door code from V1 at cutover, but could not keep the same code, so the stay has a new one. The new code shows in the guest's portal and is sent to the PMS. Let the guest know their code changed.","door_code_takeover_refused":"V2 could not take over this stay's door code from V1 at cutover, so the stay still has no working code. Issue a code for this stay manually.","door_code_history_still_on_lock":"This stay is over and its V1 door code ended, but the code is still on the lock. Nothing will remove it automatically. Remove it from the lock.","door_code_takeover_skipped":"V2 did not take over this stay's V1 door code at cutover: the stay is over, checked out or no longer active, or it already has a working code on that lock. No action is needed unless the guest still needs access.","native_twin_code_takeover_failed":"V2 could not put this stay's V1 door code onto the lock it was moved to at cutover (that lock was already connected in V2), and never creates a different code for it, so the stay has no working code on that lock. Issue a code for this stay manually.","door_code_retry_may_duplicate":"This door code came from V1 without a lock position, and this lock cannot show which codes it already holds, so Retry sent it again. The lock may now hold the same code twice. Check the lock and remove the extra copy.","door_code_rotation_held":"The lock refused this door code from V1. SuiteOp does not choose a new code for a V1 door code on its own, so the guest keeps the same code. Check the lock, then retry the code or change the stay to issue a new one.","door_code_second_live_code_held":"This stay already has a live door code on this lock, so the code V1 added after the commit is held and was not pushed; a team member decides which one stays.","access_grant_status_absent":"This door-access grant has no status in V1, so its state is unknown and it will not be migrated unless its status is set in V1.","access_grant_provider_id_absent":"This door-access grant was never created at the lock provider in V1 (it has no provider ID), so it will not be migrated unless it is created there from V1.","access_grant_active_and_deleted":"V1 marks this door-access grant both active and deleted; it was migrated as deleted.","stay_dates_inverted":"V1 has this stay's check-out on or before its check-in. It was migrated as it is in V1; correct the dates if they are wrong.","stay_night_count_mismatch":"V1's night count for this stay does not match its check-in and check-out dates. It was migrated as it is in V1.","access_grant_code_link_unreadable":"A V1 lock code that may belong to this door-access grant could not be read (its link to the grant is not a V1 reference, or its migration data is gone), so the grant's access method was not carried over. Its codes stay as they are on the lock until the method is known.","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_absent":"This value was empty in V1, and there is no rule for what empty means, so the field was left at V2's default (or blank).","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 field SuiteOp requires has no value to write, so this record cannot be written.","v1_required_value_empty":"A field SuiteOp requires is empty in V1. Unless it is filled in V1, this record will not be migrated, or will be migrated with a default where SuiteOp has one.","target_not_in_org_book":"This points to a record that is not in this organization's V1 data: it belongs to another V1 organization, is a V1 user who is not a member, or was deleted in V1. The link is left empty.","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 record's time zone in V1 is empty or isn't one SuiteOp can use (for a property: neither its own time zone, its linked PMS listing's, nor a time zone shared by at least 95% of its organization's properties), so the record will not be migrated unless a valid time zone is set in V1, on the property or on its PMS listing.","timezone_from_pms_listing":"This property has no time zone of its own in V1, so it will use the time zone of the PMS listing it is linked to.","timezone_derived":"This property has no valid time zone of its own or on its linked PMS listing in V1, so it will use the time zone shared by at least 95% of this organization's properties.","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. Correct it in V1 before the Delta step, which carries it over.","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_pricing_source_empty":"This fee product has no Price Configuration in V1, 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.","required_money_v1_sentinel":"This price in V1 is a placeholder of all 9s, not a real price, 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.","item_retired_by_policy":"Not carried: V2 handles guest messaging, so this V1 chat record is left out of the migration (DEC-91).","excluded_by_mover_scope":"This record is outside the part of its V1 data type that migrates — for tasks: it is not a template, or it is a deleted one — so it is not written.","excluded_by_row_rule":"A migration rule leaves this record out on purpose — the reason is listed beside it — so it is not written.","normalize_rejected":"The migration could not convert this record, so it is not written — the reason is listed beside it.","excluded_by_verification_window":"This guest verification's latest date — its stay's check-out, or the latest activity on the record — is more than 6 months before the migration ran, so it is not migrated.","image_property_duplicate":"Another image of the same property already carries this PMS photo, so this copy was migrated without being linked to the property. The image itself was written.","verification_not_current_for_reservation":"V1 marks a different verification as this reservation's current one, so this one was not migrated.","verification_reservation_may_be_taken":"This verification belongs to a V1 reservation that was merged into its twin. The reservation that was kept keeps only one verification, so if it already has its own, this one will not be migrated; the dry run cannot tell yet. The details name both reservations.","verification_reservation_taken":"The reservation this verification belongs to already has a verification in SuiteOp, and a reservation keeps only one, so this one was not migrated. This also happens when its V1 reservation was merged into a twin whose verification was kept. The details name the verification the reservation keeps.","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 part of this migration, so the link is filled once that record is written. Nothing to fix.","reference_target_blocked":"The linked record is in this migration but will not be written — it has an error, or it or its data type is left out — so this link cannot be filled.","reference_target_unverified":"The linked record was checked earlier in this preview, but that result was not carried forward, so it cannot be confirmed now. To be safe, this record is counted as not written, though the migration may still write it.","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.","duplicate_merged_into_existing":"Another V1 record with the same key was already migrated, so this one was merged into it. Links to this record point at that SuiteOp record, and only the first record's details were kept.","booking_source_case_merged":"Another V1 booking source has the same name in different capitalization, so the two were merged into one: the spelling most V1 reservations use was kept (on a tie, the one created first), and this record now points at it. Its reservations go to that booking source. The details list the merged spellings and the one kept.","pms_listing_v1_twin_aliased":"This V1 PMS listing has the same PMS account and listing ID as another V1 listing, so it was not migrated as a separate listing. Links to it point at the listing that was kept, and only that listing's details were kept.","pms_listing_twin_survivor_not_written":"Another V1 listing with the same PMS account and listing ID was chosen to be migrated in its place, but it was refused when written, so this listing was not migrated or linked either. Once the chosen listing is fixed and migrates, links to this one point at it.","pms_listing_v1_twin_property_conflict":"Another V1 listing has the same PMS account and listing ID, but a different V1 property is linked to each, so this listing was not migrated or merged: merging them would leave one of those properties without its listing. Link both properties to the same V1 listing, or remove the duplicate listing, before the Delta step, which carries the change over.","guest_pms_id_kept_on_first_record":"This guest has the same PMS guest ID as a guest migrated before it, so it was migrated as its own guest without that ID. Its reservations stay with it for now; when your PMS re-sends them or sends new bookings under that ID, they go to the first guest.","guest_pms_id_kept_by_existing_guest":"This guest has the same PMS guest ID as a guest already in SuiteOp, so it was migrated as its own guest without that ID. Its reservations stay with it for now; when your PMS re-sends them or sends new bookings under that ID, they go to the existing guest.","fill_unique_value_held":"Another record already in SuiteOp, or another row in this migration, already holds this value on a field that must be unique, so it cannot be filled in here. The record is still migrated without it. Fix the duplicate in V1 before the Delta step, which carries the change over.","property_pms_listing_kept_by_other_property":"Another V1 property is linked to the same PMS listing and was migrated first, so it keeps the listing and this property was migrated without that PMS link. Its own data migrates with it, but future PMS bookings for that listing go to the other property.","property_pms_listing_kept_by_existing_property":"A property already connected in SuiteOp uses this PMS listing, so it keeps the listing and this property was migrated without that PMS link. Its own data migrates with it, but future PMS bookings for that listing go to the other property.","property_pms_listing_left_unlinked":"The oldest V1 property linked to this PMS listing should keep it, but it failed to migrate, so this property was migrated without that PMS link and no property holds the listing. Until that property is fixed and re-queued, future PMS bookings for the listing reach no property.","guest_email_kept_by_other_guest":"Another guest with a different name already uses this email, so this guest was kept separate: it was written as its own record without the email, which stays on the first guest. If they are the same person, correct the name in V1 before the Delta step, which carries it over.","guest_email_kept_by_existing_guest":"A guest SuiteOp's own PMS sync created already uses this email under a different name, so this guest was kept separate: it was written as its own record without the email, which stays on that guest. If they are the same person, correct the name in V1 before the Delta step, which carries it over.","guest_email_shared_by_many_guests":"So many V1 guests share this email that they are not merged: this guest was written as its own record without the email, which stays on the first guest.","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.","workflow_conversion_loss":"Part of this automation could not be carried over from V1, so the imported rule may not behave exactly as it did. The detail names what changed — review the rule in the workflow editor before turning it on.","email_invalid":"The V1 email address is not a usable address, so this person would get an account nobody can sign in to.","email_invalid_nulled":"This V1 email address is not a valid address, so the field is left empty and the record still migrates.","join_importer_not_implemented":"The migration cannot save this kind of link yet, so this one was not created. The records on both sides still migrate; the links between them follow in a later release.","translation_language_unsupported":"SuiteOp has no content language for this text, so it is not migrated.","translation_reviewer_not_a_member":"The V1 reviewer of this text is not a member of this account, so the text was migrated without a reviewer.","rich_text_markup_dropped":"This text used V1 formatting that SuiteOp cannot show. The formatting was removed and all of the text was kept.","tms_task_not_a_template":"This V1 task is not marked as a template, so it is not migrated.","tms_template_by_reference_only":"This V1 task is migrated as a template only because a template section, group or requirement points to it; check it is really a template before committing.","tms_template_unassigned_department":"This V1 template has no department, so it was migrated under the “Unassigned (from V1)” department. Move it to the right department after the migration.","tms_requirement_ungrouped":"No V1 template group lists this requirement, so it was migrated into its template’s “Ungrouped (from V1)” group. Move it to the right group after the migration.","tms_requirement_detached":"No V1 template group lists this requirement and it names no template of its own, so there is nothing in SuiteOp to attach it to. It was not migrated; it is left-over V1 data.","tms_task_deleted_not_migrated":"This task template was deleted in V1, so it is not migrated.","file_fetch_unavailable_too_long":"V1 did not return this file after many hours of retries, so it was not copied.","file_unavailable":"This file is no longer available in V1, so it could not be copied.","file_gone":"This file no longer exists in V1 — V1's storage reports it deleted — so it cannot be copied.","file_access_denied":"V1's file storage refused to hand over this file, so it could not be copied. It may be private or may have been deleted; V1 does not say which.","file_private_key_refused":"This V1 file is private: V1 refused it to an anonymous request and would not hand it over to SuiteOp's Bubble API key either, so it could not be copied.","file_rehost_attempts_exhausted":"SuiteOp tried to copy this file several times and V1 gave a final refusal each time, so it was not copied.","file_not_accepted":"This V1 file is not a document or image that can be copied, so it was not migrated.","file_left_to_sync":"Your PMS replaces this image once it is connected, so it was not copied from V1.","file_needs_auth":"This V1 file is private: it exists, but V1 will not hand it over without signing in, so it could not be copied.","file_fetch_refused":"This V1 file could not be fetched: the connection to V1's storage was refused before it left SuiteOp, so it was not copied.","file_private_route_needs_key":"This V1 file is private: the migration fetches it with the Bubble API key, so it can be copied only while that key is set on the worker.","file_private_route_key_unset":"This V1 file is private, and the worker that ran the dry run has no Bubble API key, so it will not be copied unless the key is set before the commit.","file_private_route_not_placed":"This V1 message attachment is private, and private attachments are fetched without the Bubble API key, so V1 will refuse to hand it over.","file_host_refused":"This V1 file points at a host the migration does not copy from, and this field keeps no outside links, so it will not be migrated.","file_reference_malformed":"This V1 file value is not a usable file link, so there is nothing the migration can copy.","file_filestack_kept_uncopied":"This image could not be copied from Filestack, so its original Filestack link was kept. It may stop showing if Filestack removes it.","file_cloudflare_copy_checked_at_write":"V1 also keeps a copy of this Filestack image in Cloudflare Images. The migration links that copy if it still answers when the image is written; otherwise it copies the Filestack file or keeps its link.","file_linked_to_cloudflare_copy":"This Filestack image was linked to V1's copy in Cloudflare Images, which answered when the image was written. No file was copied into SuiteOp.","file_cloudflare_copy_only":"V1 holds no file for this image, only its copy in Cloudflare Images, so the image is linked to that copy when it is written, and left out if the copy is no longer served. No file is copied into SuiteOp.","file_cloudflare_copy_gone":"V1 holds no file for this image, and its copy in Cloudflare Images is no longer served, so there is no image to write and it was left out.","file_dead_source_linked_to_cloudflare_copy":"This image will be taken from its V1 Cloudflare copy because the original file is no longer reachable. The copy is linked; no file is copied into SuiteOp.","file_dead_cloudflare_copy_gone":"This image cannot be copied from V1, and its V1 Cloudflare copy is no longer served either, so there is nothing to fall back on. Re-upload it in V1 if it is still needed.","file_dead_no_cloudflare_copy":"This file cannot be copied from V1, and V1 holds no Cloudflare copy of it that SuiteOp may use, so there is nothing to fall back on. Re-upload it in V1 if it is still needed.","file_owner_not_landed":"No migrated record uses this copied file, so SuiteOp deleted its copy when the migration was finalized.","file_owner_refused":"The record this file belongs to was not migrated, so this file was not migrated either.","file_orphan_kept_uncertain":"SuiteOp could not confirm that no migrated record uses this copied file, so the copy was kept. The detail says why.","file_fold_fill_not_taken":"This file came from a V1 record that was merged into a row another record had already filled, so it was not used.","file_fold_fill_taken":"This file came from a V1 record merged into another row, and that row used it.","file_not_copied_row_created_after_check":"This record already existed in SuiteOp when the migration checked it, so its V1 image was not copied. It was removed before the write, so the migration created it again without the image. Add the image by hand.","file_orphan_kept_was_visible":"This copied file was shown on a migrated record before the record stopped using it, so SuiteOp kept the copy rather than break a link to it.","file_not_carried":"Earlier copies of this guest's ID photos were not copied from V1; only the latest ones were.","verification_step_without_evidence":"V1 marked this verification step complete but holds no data for it, so no step was created.","verification_step_fold_unmatched":"This V1 verification step or waiver has no matching step for its verification in V2, so it will not be carried over.","verification_step_waived_and_paid":"V1 recorded this mandatory fee as both paid and waived. The payment wins: the step is completed in V2, and the waiver was not applied.","verification_step_incomplete_in_v1":"V1 holds data for this verification step, but the guest never completed it, so no step was created.","verification_step_config_unresolved":"This verification step matches none or several of your check-in step settings, so it is not linked to one.","verification_step_status_unrecognised":"The screening result in V1 is not one V2 recognizes, so this step was not created.","verification_currency_unresolved":"The reservation's currency could not be determined, so this deposit amount has no currency.","verification_face_comparison_unproven":"V1's face-match result for this guest could not be confirmed from its records, so it was not carried over.","file_past_v2_retention":"This stay's ID photos were not copied from V1: the migration was set to skip ID photos from stays that ended more than 90 days before it ran.","adopted_existing_row":"SuiteOp already had a matching record, so this V1 record was linked to it and SuiteOp's version was kept as it is.","adopted_duplicate_v1_row":"Another V1 record matches this one, so both were linked to the same SuiteOp record instead of creating a duplicate. Only the first one's details were used.","pms_provider_deduced":"V1 left this booking's PMS Source empty, so its PMS was worked out from the property's PMS listing, the organization's only PMS, or the format of its reservation number, and the booking keeps its link to it.","pms_provider_unresolved":"V1 left this booking's PMS Source empty and its PMS could not be worked out, so it was migrated without one. A later sync from that PMS will link to it when exactly one booking matches.","device_temperature_limits_conflict":"This device's heat and cool temperature limits in V1 contradict each other, so the device was migrated without limits. Set them again on the device.","device_temperature_limit_unusable":"One of this device's temperature limits in V1 could not be used (incomplete or out of range), so that limit was not migrated. The other limit, if any, was.","device_temperature_limit_not_found":"One of this device's temperature limits points at a V1 limits record this migration did not find. V1 deletes that record when the limit is switched off, so the limit was migrated switched off. If it was on in V1, switch it on again on the device.","lock_code_schedule_unusable":"One of this door code's V1 schedules was incomplete (no identifier, start or end time, or unreadable days), so that schedule was not migrated. The code and its other schedules were.","lock_code_schedule_not_found":"One of this door code's schedules points at a V1 schedule record this migration did not find, so that schedule was not migrated. The code and its other schedules were.","option_set_default_adopted":"V1 default options adopted as the V2 default set: Sparkling→Good, Clean→Average, Dirty→Bad","email_single_sender_unverified":"This V1 sender was added without its verification. SendGrid must confirm the address again before it can send email.","service_fee_merged_into_charge":"This Service Fee is the same purchase as its Upsell Tracker, so the two were migrated as one charge.","service_fee_merge_contested":"More than one Service Fee points at this Upsell Tracker. The first was merged into its charge; each of the others was migrated as a charge of its own.","money_taken_on_denied_purchase":"V1 denied this purchase after its fee was paid, so the money was taken. It migrates as paid. Refund the guest or reclassify the charge.","product_purchase_fan_out_unsupported":"This purchase names several fee products, and splitting it into one charge per product is not supported yet, so it will not be migrated unless it is split into one purchase per product in V1.","charge_currency_derived":"V1 recorded no currency on this charge, so it will use the one SuiteOp's own checkout would use: the offer's, its payment account's, the organization's default payment account's, or USD. A service fee will instead use the organization's default payment account currency, or else the currency its other V1 charges use most.","charge_currency_underivable":"V1 recorded no currency on this service fee, its organization has no default payment account, and none of its other V1 charges carries a valid currency, so it will not be migrated unless a currency is set on it in V1.","payment_charge_link_currency_mismatch":"This payment is in a different currency from the charge it pays, which SuiteOp does not allow, so it was migrated without its link to that charge.","deferred_reference_unresolved":"Some migrated rows point at a record that never reached SuiteOp (for example a charge's payment), so that link was left empty.","product_purchase_payment_unmapped":"The V1 payment for this purchase ended in a status SuiteOp does not map to a charge stage, so the purchase was not migrated.","migrated_unpaid_v1_purchase":"V1 never took payment for this purchase and its stay is over (or it has no reservation), so it was migrated as declined rather than as still owed.","unpaid_v1_charge_owed":"V1 never took payment for this charge, so it migrates as still owed — unless its stay has already ended, in which case it is migrated as declined and the guest is not asked to pay.","product_purchase_hold_capture_pending":"The guest's card was authorized in V1 for this purchase, but the payment was never captured. It was migrated as authorized; capture it before the hold expires, as card holds lapse after 7 days.","payment_never_completed":"This V1 payment attempt never completed (V1 recorded neither a type nor a status), so it was not migrated.","lock_code_backup_shadow_expired":"This V1 backup door code's time window had already ended when the migration ran. SuiteOp discards expired backup codes, so it was not migrated.","lock_code_device_empty":"This V1 door code is not linked to any lock in V1: its device and both SmartThings device links are empty. SuiteOp keeps every door code on its lock, so it was not migrated.","lock_code_end_far_future":"This V1 door code ends more than 20 years from now. V1 used a date that far ahead to keep a code valid indefinitely, so it was migrated with that end date unchanged.","device_duplicate_repointed":"This record's V1 device was a duplicate of another device for the same lock, so it was attached to that device instead. The details name both V1 devices.","device_duplicate_native_code_kept":"This active V1 door code belongs to a duplicate V1 device whose lock is already connected directly in SuiteOp. SuiteOp does not change that lock's live codes, so the code was not migrated; check it on the lock.","device_duplicate_native_grant_kept":"This active V1 access grant belongs to a duplicate V1 device whose lock is already connected directly in SuiteOp. SuiteOp does not change that lock's live access, so the grant was not migrated; check it on the lock.","device_code_pin_conflict":"Another door code already holds this slot or stay on the same lock with a different PIN, so this one was not written: a lock keeps one code per slot or stay. The details name both V1 codes.","lock_code_vendor_id_duplicate":"Another V1 door code on the same lock carries the same lock-provider code ID. With the same PIN they are one code and only one is written; when both are live under different PINs, nothing in V1 says which is on the lock, so neither is written and the lock is left exactly as V1 left it.","lock_code_vendor_id_superseded":"An earlier V1 door code that reused this lock's slot: it has ended, and another V1 door code on the same lock carries the same lock-provider code ID, so its history was not migrated. The live code, if there is one, was migrated.","access_grant_duplicate":"Another door-access grant with the same provider grant ID on this lock's integration account was already migrated, or is already in SuiteOp. V2 keeps one grant per provider grant, so this one was not written.","access_grant_stay_taken":"This lock already has a live door-access grant for this reservation: another V1 grant, or one already in SuiteOp. V2 keeps one live grant per reservation on a lock, so this one was not written.","lock_code_grant_duplicate":"Another door code for the same door-access grant on this lock was already migrated, or is already in SuiteOp. V2 keeps one code per grant on a lock, so this one was not written.","custom_url_booking_link_duplicate":"Another custom URL in this organization already uses this external booking link. V2 allows one custom URL per booking link, so this one was not written.","slack_channel_duplicate":"Another Slack channel with the same Slack channel ID on this workspace was already migrated, or is already in SuiteOp. V2 keeps one entry per channel on a workspace, so this one was not written.","upsell_visibility_rule_duplicate":"This upsell already has a visibility rule of this type. V2 keeps one rule of each type per upsell, so this rule was not written.","user_rewardful_affiliate_taken":"Another SuiteOp user already has this Rewardful affiliate ID. An affiliate ID belongs to one user, so this person was not migrated.","lock_code_pin_empty_on_claimed_slot":"This V1 door code has no PIN, and another code on the same lock already holds its slot, so it was not migrated: a code with no PIN puts nothing on the lock. The code holding the slot is kept. The details name both V1 codes.","device_satellite_unavailable":"This device has no usable vendor details in V1 (its provider and its own device ID), so it cannot be written: SuiteOp finds every device by them.","device_satellite_not_read":"This device's vendor records were not fully read for this organization yet, so it waits: run another pass, then press again.","v1_device_vendor_record_missing":"This device's vendor record (its SmartThings or other provider device) no longer exists anywhere in V1, so V1 itself can no longer set, change or revoke its door codes, and SuiteOp has no provider device ID to take the lock over by. The device and its door codes were not migrated; the codes still on the lock keep opening it.","device_account_not_migrated":"The connected account this device belongs to is not in SuiteOp, so the device cannot be written.","device_account_ambiguous":"Two or more migrated accounts carry this device's connected-account ID, so the device cannot be attached to one without guessing.","access_grant_device_has_no_account":"The lock this door-access grant is for has no connected account in SuiteOp, so the grant cannot be written.","device_account_attached":"V1 does not link this device to any account. Its organization has exactly one migrated account of the device's provider, so the device was attached to that account.","device_account_none":"V1 does not link this device to any account, and its organization has no migrated account of the device's provider to attach it to, so the device cannot be written.","device_account_unlinked_ambiguous":"V1 does not link this device to any account, and its organization has several migrated accounts of the device's provider, so the device cannot be attached to one without guessing.","v1_org_not_in_environment":"This V1 organization ID does not exist in the V1 environment this deployment reads. Check the ID, and that the customer's organization lives in that V1 environment.","payment_type_defaulted_external":"V1 recorded no type for this succeeded payment and it pays no charge, so it was migrated as an external payment.","payment_currency_defaulted":"V1 recorded no currency for this payment, so it was migrated in the organization's currency.","payment_amount_missing_written_zero":"V1 recorded no amount for this payment, so it was migrated with an amount of 0. The real amount is unknown, and V2 will not settle this payment automatically.","payment_status_absent_derived":"V1 recorded no status for this payment, so its status was taken from its own money fields: whether a charge, a capture or a refund shows money moved.","payment_status_absent_ambiguous":"V1 recorded no status for this payment, and its money fields don't settle one: it may be an open card hold, or its amounts contradict each other. Check it in Stripe, then set its status in V1 before the Delta step, which carries it over.","payment_zero_decimal_amount_rescaled":"V1 stored this payment's amounts divided by 100 (it did not handle currencies without decimals, such as JPY), so they were multiplied by 100 to match the money held by the payment provider.","precheck_zero_decimal_amount_rescaled":"V1 held 100 times these deposit and damage-waiver amounts at the payment provider (it did not handle currencies without decimals, such as JPY), so they were multiplied by 100.","precheck_zero_decimal_rescale_at_write":"If this step's payment account is in a currency without decimals, such as JPY, the commit multiplies its deposit and damage-waiver amounts by 100 to match the money V1 held at the payment provider. The currency is read when the step is written, so the amounts shown here are not yet rescaled.","precheck_damage_waiver_cap_not_positive":"V1 capped this damage waiver at zero. V2 has no zero cap, so the waiver was migrated without a cap.","precheck_damage_waiver_description_foreign":"This damage waiver's description text belongs to another kind of record in V1, so V2 will refuse to save changes to the step's waiver until the description is replaced.","payment_guesty_id_conflict":"This payment's Upsell Tracker names a different GuestyPay payment ID from the payment's own charge ID. The payment's own ID was kept.","payment_guesty_id_contested":"This payment's Upsell Tracker names a GuestyPay payment ID, but more than one Service Fee points at that tracker, so the ID could not be tied to one payment and was left empty on all of them.","payment_duplicate_intent_superseded":"This payment shares its Stripe payment and payment account with another V1 payment record, which was migrated instead. It was not migrated.","payment_currency_underivable":"V1 recorded no currency for this payment, and none of the organization's V1 payments records one, so it was not migrated.","element_without_owner":"This V1 area is not attached to any property, and SuiteOp keeps an area only under a property, so it was not migrated.","recurring_series_not_recreated":"This V1 recurring task could not be set up as a recurring schedule in SuiteOp, so its future occurrences are not created. Recreate the schedule in the task scheduler.","recurring_series_start_day_uncertain":"This V1 recurring task was saved without a time, close to midnight in its property's time zone, so its schedule could start one day off. Check the start day in the task scheduler.","payment_account_nickname_defaulted":"V1 has no name for this payment account, so it was given V2's default name. Rename it in the payments settings.","payment_account_currency_defaulted":"V1 has no usable currency for this payment account, so it takes the organization's operational currency. Check it in the payments settings.","payment_account_currency_from_override":"V1 charged this payment account in its override currency, not its main currency, so the account takes the override currency. Check it in the payments settings.","payment_account_country_unusable":"V1's country for this payment account is not a two-letter country code, so it was left empty.","payment_account_guestypay_sync_required":"This GuestyPay account was migrated. Once the Guesty connection is live in V2, run Sync from Guesty so V2 completes its provider details.","payment_account_default_held":"SuiteOp already has a different default payment account, so this V1 default account was migrated as a non-default account. Confirm which account should receive payments.","payment_account_juspay_held":"This JusPay Hyperswitch account was not migrated: in V1 it is missing its merchant link or credentials, so it cannot be carried over. Connect JusPay Hyperswitch again in V2.","payment_account_juspay_second_profile":"This organization's second V1 JusPay Hyperswitch profile was not migrated: V2 holds one JusPay Hyperswitch account per organization.","payment_account_juspay_already_connected":"This organization already connected JusPay Hyperswitch in V2 with a different profile, so this V1 JusPay Hyperswitch account was not migrated over it.","payment_account_juspay_credentials_missing":"This JusPay Hyperswitch account was not migrated: the merchant ID or API key of its V1 JusPay Account could not be read. Connect JusPay Hyperswitch again in V2.","payments_routing_failed":"Payment events for this payment account could not be routed to this region, so they arrive by broadcast. Payments still work.","payments_route_release_failed":"A rolled-back payment account's payment events still route to this organization because the gateway could not be reached. The next rollback finish retries it.","juspay_merchant_key_refused":"JusPay Hyperswitch refused this account's merchant API key during the switch to SuiteOp, so the account was turned off and will not be charged. The customer needs to enter a working merchant API key in the Payments settings.","juspay_takeover_unverified":"JusPay Hyperswitch could not be reached to confirm this account during the switch to SuiteOp, so it was turned off and will not be charged. Check it and turn it back on from the Payments settings.","juspay_webhook_not_on_hookdeck":"This JusPay Hyperswitch account works, but its webhook does not point at SuiteOp's event source, so SuiteOp will not receive its payment updates. It stays on. Point the profile's webhook at the event source.","juspay_webhook_repointed_from_v1":"At the cutover, SuiteOp points this JusPay Hyperswitch merchant's webhook at SuiteOp, so the old system stops receiving its payment updates. The previous webhook address is kept so a rollback can restore it.","juspay_webhook_repoint_failed":"SuiteOp could not point this JusPay Hyperswitch merchant's webhook at SuiteOp, so its payment updates may not arrive. The account stays on, and an operator must confirm the webhook before the migration is verified.","juspay_webhook_restore_failed":"The rollback could not point this JusPay Hyperswitch merchant's webhook back at its previous address, so the account is kept until a later rollback restores it.","stripe_account_not_on_platform":"This Stripe account is no longer connected to SuiteOp's Stripe platform, so it was turned off and will not be charged. The customer needs to connect it again from the Payments settings.","stripe_charges_disabled":"This Stripe account is connected, but Stripe has charges turned off until its owner finishes Stripe's account requirements. It stays on and starts taking payments once Stripe turns charges back on.","stripe_account_unverified":"Stripe could not be reached to confirm this account during the switch to SuiteOp, so it was turned off and will not be charged. Check it and turn it back on from the Payments settings.","juspay_v2_merchant_open_money":"SuiteOp switched this organization to its V1 JusPay Hyperswitch account, replacing the one connected in V2, while the V2 account still had open payments. Those payments keep settling on the V2 account; keep an eye on them until they finish.","upsell_nickname_defaulted":"This upsell had no internal name in V1, so it was named after its V1 template, or \"Untitled upsell\". Rename it in SuiteOp if needed.","upsell_pte_ask_clamped":"V1 required permission to enter for this upsell without asking the guest for it. SuiteOp always asks when it requires permission, so this upsell now asks.","upsell_price_per_guest_imported_inactive":"V1 priced this upsell per guest, which SuiteOp does not offer. It was imported as a price per quantity at the same unit price, so a guest who chooses N pays N times the price, and it was switched off. Review the pricing, then turn it on.","branding_custom_url_defaulted":"This brand had no custom URL in V1, so it is served on your organization's primary URL.","adopted_row_v1_values_applied":"SuiteOp already had this default record from signup, so this V1 record was linked to it and V1's settings were applied to it wherever SuiteOp allows them to be changed. Any V1 value that could not be applied is listed separately.","adopted_row_v1_value_not_applied":"This V1 value was not applied to the SuiteOp record this V1 record was linked to, so SuiteOp's value was kept. Check this field in SuiteOp if V1's value matters to you.","organization_setting_kept":"SuiteOp already had this setting changed from its default, so that value was kept and the V1 value was not applied.","organization_setting_invalid":"The V1 value for this setting is outside what SuiteOp accepts, so SuiteOp kept its own value.","email_domain_proven_by_another_org":"Another organization in SuiteOp has already proven it owns this email domain, so it was added unverified. Verify the domain before sending email from it.","id_upload_past_retention":"Some companion ID uploads were not copied: at the time, the migration withheld uploads from stays that ended longer ago than this organization's ID-document retention period. The count is in the details; the companions themselves were migrated.","v1_source_column_absent":"This V1 column is missing from the V1 database being read, so it was left out and this record type was imported without it.","requirement_group_without_task":"This V1 task group belongs to no task, so no template can own it. It is left-over V1 data and was not migrated.","row_rejected":"The database refused this row, so it was not written. The details name the rule it broke; fix it in V1 before the Delta step, which carries it over.","row_lock_contended":"A write in progress held a lock this row needed, so it was not written this time. The details give the database code; nothing is wrong with the record itself, so retry it.","duplicate_arbiter_key":"Another V1 record already holds this row's key, so this one was not written. The details name the key; merge or correct the duplicate in V1 before the Delta step, which carries it over.","custom_field_value_duplicate":"Another value for this custom field on the same listing was already migrated. V2 keeps one value per field per listing, so this one was not written; check which value the customer uses.","custom_url_hostname_taken":"Another custom URL in SuiteOp already uses this web address — in this organization or another — so this one was not migrated. A web address can belong to only one custom URL.","custom_url_cloudflare_hostname_taken":"Another custom URL in SuiteOp already uses this Cloudflare hostname, so this one was not migrated. Check which record should keep it.","payment_account_already_connected":"This payment account was connected in V2 for this organization while the migration was writing it, so the migrated copy was not written. Writing this record again links V1's records to the connected account, unless it is a JusPay Hyperswitch account connected with a different profile.","review_duplicate":"A review with the same booking-platform review ID was already migrated. V2 keeps one copy of each platform review, so this duplicate was not written; check which V1 review the customer uses.","reservation_duplicate":"Another V1 reservation for the same booking-platform reservation was already migrated, and V2 keeps one reservation per platform booking, so this one was not written. Check which V1 reservation the customer uses.","reservation_twin_merged":"Another V1 reservation is the same PMS booking, and SuiteOp keeps one reservation per PMS booking, as V1 does, so this one was merged into it. The one kept is the one not cancelled, then the one with a working door code, then the one changed most recently in V1. The details name the reservation kept and which stay details differed, if any. This one's door codes, messages and other records go to that reservation, and so do its charges and payments unless another reservation of the booking has charges or payments of its own.","reservation_twin_conflict":"Another V1 reservation is the same PMS booking but its stay details differ, and SuiteOp keeps one reservation per PMS booking, so neither was migrated. The details name the other reservation and what differs.","reservation_twin_code_unlinked":"This door code belongs to a V1 reservation that was merged into its twin, and it still works on the lock, so it was migrated without a stay: the reservation that was kept keeps its own door code as the stay's only one. This code keeps its V1 dates and is removed from the lock when they end, but it will not follow any change to the stay's dates. Ended or deleted door codes are migrated as history. The details name the code's reservation and the reservation that was kept.","reservation_twin_code_share_dropped":"This link between a door code and a reservation was not migrated. The door code belongs to a V1 reservation that was merged into its twin and still works on the lock, so it was migrated without a stay; sharing it with the reservation that was kept would give that stay a second working door code, often another guest's. The kept reservation keeps its own door code as its only one, and the code's other shares are migrated. The details name the code, the shared reservation and the reservation that was kept.","reservation_twin_code_share_kept":"This link between a door code and a reservation was migrated. The door code belongs to a V1 reservation that was merged into its twin and still works on the lock, so it was migrated without a stay. The reservation that was kept has no door code of its own on that lock, so this link keeps the code visible on the kept stay; without it the code would still open the door while SuiteOp showed no code for the stay there. The details name the code, the shared reservation and the reservation that was kept.","reservation_twin_code_share_uncertain":"The dry run cannot tell what the migration will do with this link between a door code and a reservation. The door code belongs to a V1 reservation that was merged into its twin and still works on the lock, so it is migrated without a stay, and this link would give the kept reservation a second working door code. If only one V1 device uses the lock, the link is dropped when the kept reservation has its own door code on that lock, and migrated otherwise. If another V1 device shares the lock, the duplicate-lock check decides: the link is refused when another code on that lock already opens the kept reservation under a different PIN, and written otherwise. The details give why the dry run could not tell, the code and the reservation that was kept.","reservation_twin_money_withheld":"This charge or payment belongs to a V1 reservation that was merged into its twin, and another V1 reservation of the same booking has charges or payments too (or the twin was not migrated in this run), so it was not migrated: the two could be the same money twice. The details name the reservations.","reservation_twin_money_moved":"This charge or payment belongs to a V1 reservation that was merged into its twin. No other V1 reservation of the booking has charges or payments, so it was migrated onto the reservation that was kept. The details name both reservations.","reservation_twin_survivor_not_written":"Another V1 reservation is the same PMS booking and was chosen to be migrated in its place, but that one will not be written, so this one was not migrated either. The details name the reservation that was chosen.","device_duplicate":"Another device already uses this lock or sensor on the same integration account: a second V1 device, or one already connected in V2. V2 keeps one device per provider device and account, so this one was not written. Check which V1 device the customer uses.","property_pms_listing_duplicate":"Another property already uses this PMS listing: a second V1 property mapped to the same listing, or a property already connected to it in V2. V2 keeps one property per PMS listing, so this one was not written. Check which V1 property the customer uses.","property_group_name_duplicate":"Another group with this name was already migrated for this organization, and SuiteOp keeps one group per name. Groups are not merged, because each has its own door code — rename one in V1 before the Delta step, which carries it over.","user_group_name_duplicate":"Another user group with this name was already migrated for this organization, and SuiteOp keeps one user group per name. User groups are not merged, because each grants its own access — rename one in V1 before the Delta step, which carries it over.","esign_document_duplicate":"A second V1 document with the same provider document ID on this e-sign account was found, and V2 keeps one row per provider document, so this one was not written. The first one migrated.","esign_signer_duplicate":"Another signer with the same email address on this e-sign document was already migrated, and V2 keeps one signer per address on a document, so this one was not written.","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.","email_identity_taken":"This person's email address already belongs to a SuiteOp sign-in with no live account behind it — a deleted account, or a sign-in left without one — so no new account could be created for them. Nothing in SuiteOp restores or releases that address; ask a SuiteOp engineer.","identity_route_conflict":"This person's email address already belongs to a SuiteOp account that signs in in another region or has not verified the address, so no account was created or linked for them here. Set up their membership in this organization by hand; if the account's owner verifies the address later, migrating them again links them to it.","membership_legacy_id_conflict":"Another membership in this organization already carries this V1 record's id, so this one was left alone rather than re-pointed. Merge or correct the duplicate in V1 before the Delta step, which carries it over.","membership_duplicate_in_page":"Two V1 users point at the same SuiteOp account in this organization, and a person can be a member only once. Only the first was migrated — merge or correct them in V1.","verification_step_exists":"The guest already has this verification step in SuiteOp, so the V1 step was not written over it.","item_not_written":"This row was not written; the details carry the reason code. Once its cause is fixed in SuiteOp, press Re-queue failed rows in the Recovery panel while this run is open. A fix made in V1 is carried over by the Delta step.","absorbed_into_parent":"This V1 record has no row of its own in SuiteOp: it was carried into its parent record, which the details name. Nothing needs doing.","absorbed_parent_missing":"No V1 parent record names this record, so it was not carried into SuiteOp. The details name the parent type that would carry it. Nothing needs doing.","write_entity_not_migrating":"This V1 entity is not set to migrate on this run, so none of its rows were written.","write_fold_owner_preexisting":"These details belong to a property that already existed in SuiteOp before this migration, so its current values were kept.","write_fold_owner_missing":"No property in this migration points to these property details, so there was nothing to fill.","write_fold_owner_ambiguous":"More than one property in this migration points to these property details, so they were not applied to any of them.","write_fold_owner_unwritten":"The property these details belong to has not been written yet, so there was nothing to fill. They can be filled once it is written.","delta_v2_edit_kept":"This field was changed in V1 after the migration, but it has also been edited in SuiteOp since, so the SuiteOp value was kept and the V1 change was not applied.","delta_sync_owned_kept":"This field was changed in V1 after the migration, but on this record it is kept up to date by the connected PMS, so the V1 change was not applied.","delta_service_derived_kept":"This field was changed in V1 after the migration, but SuiteOp works out other data from it when it is saved, so the catch-up kept the SuiteOp value and did not apply the change. Update it in SuiteOp if the change is still needed.","delta_translation_not_refreshed":"This translated text was changed in V1 after the migration, but the catch-up could not safely update it, so SuiteOp keeps its current text. Update it in SuiteOp if the change is still needed.","delta_translation_sibling_stale":"The catch-up updated the English text, but its machine translation into this language still translates the old English. SuiteOp leaves it as it is; translate it again in SuiteOp if needed.","delta_file_not_refreshed":"This file was changed in V1 after the migration, but the catch-up could not carry it over, for example because it is one of a list of files, sits inside a stored record, was removed in V1, is outside the fields this merged record takes, belongs to a record deleted in SuiteOp, or could not be copied. SuiteOp still holds the earlier file. Upload the new file in SuiteOp if it is still needed.","delta_sealed_not_refreshed":"This protected value (such as a door or Wi-Fi code) was changed in V1 after the migration, but the catch-up could not update it: the value could not be read, or this kind of value is not carried. SuiteOp still holds the earlier value. Update it in SuiteOp if the change is still needed.","delta_fold_superseded":"Another V1 record merged into the same SuiteOp record also changed and takes precedence, as it came first in V1, so this record's V1 changes were not applied.","delta_junction_removal_not_applied":"Links were removed from this record in V1 after the migration. The catch-up removes only links the migration itself added, on records it updates directly, so these are still in SuiteOp. Remove them in SuiteOp if they should go.","delta_junction_link_removed":"This link was removed in V1 after the migration, and the migration had added it, so the catch-up removes it from SuiteOp. Links added in SuiteOp are never removed. A rollback puts it back.","rollback_delta_link_not_restored":"The rollback could not put back a link the catch-up removed: the record or the item it linked was deleted in SuiteOp since, or the stay a shared door code was linked to already has another working code on that lock. Link them again in SuiteOp if needed.","delta_link_removed_in_v2_kept":"This link was removed in SuiteOp after the migration, so the catch-up did not add it back, even though it is still in V1.","delta_service_arm_refused":"This V1 change was not applied because the record's own rules refuse it. The details name the reason. The SuiteOp value was kept; review it in SuiteOp.","delta_code_revoke_unconfirmable":"This door code was revoked because V1 removed it, but this lock's provider cannot confirm that a code is gone. Check on the lock that the PIN no longer works.","delta_v1_revoke_pending_verification":"V1 revoked this door code. It is off in SuiteOp and never sent to a guest, but the lock could not be checked while the migration held the account. SuiteOp checks the lock after the account handover and flags the code if the lock still has it.","delta_v1_revoked_code_on_lock":"V1 revoked this door code, but it may still work on the lock: the lock still lists it, or could not be read. Remove it on the lock, or confirm it is gone, then run the catch-up again before cutting over.","rollback_delta_hostname_kept":"Rolling back the catch-up pass kept this custom URL's new web address, because its previous address now belongs to another custom URL. Change the address in White Labeling settings if needed.","rollback_delta_sealed_unreadable":"Rolling back the catch-up pass did not restore this protected value (such as a door or Wi-Fi code), because its earlier value could not be read. SuiteOp keeps the value the catch-up set. Check it in SuiteOp.","rollback_delta_sealed_fills_purged":"Rolling back the catch-up pass did not restore protected values (such as door or Wi-Fi codes) on this record, because the record of their earlier values was deleted under the data retention period. Check them in SuiteOp.","rollback_adopt_fills_purged":"The rollback could not restore the fields the migration filled in on this existing record, because the record of their earlier values was deleted under the data retention period. They keep the migrated values. Check them in SuiteOp.","rollback_delta_door_code_kept":"Rolling back the catch-up pass did not undo this door code's PIN, schedule or removal, because the lock already holds the V1 value. The details list what was kept; tell the customer.","delta_cancel_effects_wait_for_cutover":"This stay was cancelled because it was deleted in V1, but its usual cancellation steps, such as removing its door codes and tasks, only run at the cutover.","delta_member_access_effects_wait_for_cutover":"This team member's access changed because it changed in V1, but the steps that usually follow, such as updating their staff door codes, only run at the cutover. The details say whether they were deactivated, reactivated, given a new role or given a new door PIN. A new door PIN reaches their locks only after the migration hold is lifted, when their staff door codes are updated to it.","delta_member_invites_revoked":"This team member lost a role or permissions in V1, so the invitations they sent that were not yet accepted are cancelled, as SuiteOp does when access is reduced. The details give how many.","delta_directory_sync_deferred":"The preview does not update this team member's sign-in routing; applying the catch-up does.","rollback_delta_member_deactivation_kept":"Rolling back the catch-up pass did not reactivate this team member: the deactivation, and the invitations it cancelled, are kept. Invite them again in SuiteOp if they should have access.","rollback_delta_member_invites_kept":"Rolling back the catch-up pass restored this team member's role, but the invitations the change cancelled stay cancelled. The details give how many; send them again if they are still needed.","rollback_delta_member_invites_revoked":"Rolling back the catch-up pass lowered this team member's role or permissions, so the invitations they sent and that were not yet accepted are cancelled, as SuiteOp does when access is reduced. The details give how many.","delta_identity_reinvite_owed":"This person's email changed in V1 after their SuiteOp invitation was already sent to the old address. The address is updated, but no new invitation is sent: invite them again in SuiteOp if they have not set up their account.","rollback_delta_identity_kept":"Rolling back the catch-up pass did not put back some or all of this person's previous details, because they have signed in, linked a login or verified their email since, or another person now uses their previous email or affiliate ID. The details say why.","rollback_delta_member_owner_kept":"Rolling back the catch-up pass did not change this team member, because they are now the organization's owner. Their role and access stay as they are.","rollback_delta_member_dormant_kept":"Rolling back the catch-up pass did not change this team member, because they have been deactivated since. Nothing was restored onto the inactive membership.","rollback_delta_guest_email_kept":"Rolling back the catch-up pass did not put back this guest's previous email, because another guest now uses it or it would clash with another guest's PMS ID. The guest keeps the email from V1; the other changes were undone. The details say why.","rollback_delta_charge_kept":"Rolling back the catch-up pass did not put back this charge's stage, amount, quantity or payment date, because a payment is now on record for it. The charge keeps its current values.","rollback_delta_payment_kept":"Rolling back the catch-up pass did not put back this payment's amount, because the payment now holds live or settled money. The payment keeps its current amount.","delta_cancel_waiting_for_revoke_release":"This stay's cancellation steps are on hold, not failed: the catch-up pass removes more door codes than it removes at once, so none was removed yet. They run once a SuiteOp engineer releases the hold.","delta_cancel_notifications_withheld":"This stay was cancelled at the cutover because it was deleted in V1. Its door codes and tasks are removed, but no guest message, staff notification or webhook was sent, because V1 already sent them.","stay_messages_held_v1_muted":"Some of this stay's guest messages were due while V1 was already muted, so V1 may not have sent them. SuiteOp did not send them either. The details say how many; check with the customer whether the guest still needs them.","stay_turnover_owed_after_v1_mute":"This stay checked out after V1 was muted and before the cutover, so neither V1 nor SuiteOp sent its clean. SuiteOp has scheduled the turnover now. It is already overdue, so dispatch it before the next guest arrives.","push_reconciliation_withheld":"At the cutover SuiteOp left this lock exactly as V1 left it: it set no code for stays V1 never coded, did not retry failed codes and did not send unsent ones. The detail lists what was left. A change made in SuiteOp after the cutover updates the lock as usual.","held_native_stay_no_v1_code":"This booking was made during the migration hold, and the lock lists no V1 code for it, so the cutover sets no code. Issue a code for it in SuiteOp if the guest needs one.","pms_catch_up_changed_door_code":"A PMS sync after the cutover changed a door code for this migrated stay, because the PMS no longer matched what V1 had. Check the stay's codes before the guest arrives.","deferred_stay_code_not_active":"This booking was made during the migration hold. It has a code on this lock, but the code is not active (the detail gives its status, such as failed or scheduled), so the cutover does not count it as adopted and sets nothing. Check the code, and issue one in SuiteOp if the guest needs it.","deferred_stay_offline_passcode_outgrown":"This booking's dates changed during the migration hold, and its offline passcode on this lock no longer covers the new dates. TT Lock cannot change or revoke that passcode, and the cutover sets no new one. Issue a code for the new dates in SuiteOp if the guest needs one.","delta_unchanged_since_refusal":"V1 still holds this row exactly as the run read it, so retrying would be refused again. Fix the record in V1, then press Retry changed.","vanity_host_takeover_planned":"At the cutover, this guest portal web address moves from V1 to SuiteOp. Guests keep the same link.","vanity_host_rebound":"This guest portal web address now runs on SuiteOp. Guests keep the same link.","vanity_host_env_refused":"This web address was not moved: addresses are moved only in production, or in a rehearsal when the address is on the approved list. Ask engineering.","vanity_host_no_route":"This web address had no active route in V1, so there was nothing to move. Guests could not reach the portal through it before either.","vanity_host_route_not_in_zone":"This web address was not moved: the route V1 recorded for it was not found. Ask engineering to check the domain before guests use it.","vanity_host_route_foreign_script":"This web address was not moved: something other than the V1 or SuiteOp guest portal serves it. Ask engineering to check it.","vanity_host_suiteop_subdomain_ignored":"This is a suiteop.com web address, so it stays as it is. Guests reach the portal through SuiteOp's own link.","vanity_host_booking_engine_kept_on_v1":"This booking site web address stays on V1 for now. Nothing changes for its visitors.","vanity_host_claimed_by_other_org":"This web address was not moved: another SuiteOp account already uses it. Ask engineering to check who owns the domain.","vanity_host_directory_unreadable":"This web address was not moved: SuiteOp could not check whether another account uses it. Ask engineering to retry the move.","guest_last_name_missing_for_checkin":"This upcoming stay has no guest last name. SuiteOp check-in asks for the confirmation code and the last name, so add the last name before the guest checks in.","member_access_carried_code_kept":"This member's access was changed in V1 after the commit, but some of their door codes came from V1 and SuiteOp has not taken them over, or their lock's code push is off. Those codes were left on their locks, and the member's staff access was re-synced on their other locks only. Review the member's door codes on those locks.","door_codes_resolved_without_vendor":"Resolved without the vendor: V1's codes on this lock stay as they are, and V2 issues no new code there until the lock is re-queued.","former_member_deleted_in_v1":"This names a staff member V1 deleted, who was brought in as a deleted user. Some records are never linked to a deleted user — door codes, a record's creator, and records the migration did not create — so those links stay empty. Any other empty link is filled by Re-link records."},"finding_hints":{"membership_user_unresolved":"This person's user account wasn't migrated, so their membership can't be created. Once that person is written, press Re-queue failed rows in the Recovery panel while this run is open; a fix made in V1 is carried over by the Delta step. If their email address is already taken in SuiteOp, ask a SuiteOp engineer.","parent_list_orphan":"No parent record in V1 lists this record. If it should migrate, add it to its parent's list in V1 before the Delta step, which carries it over.","parent_list_ambiguous":"Two parent records in V1 list this record, and in SuiteOp it can belong to only one, so it won't be migrated. Remove it from one of the two lists in V1 before the Delta step, which carries it over.","parent_list_contested":"Nothing needs doing if that parent is the right one. Otherwise, remove this record in V1 from the lists of the parents it does not belong to before the Delta step, which carries it over.","reference_missing_in_v2":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} won't be migrated because {reason}. To resolve it, migrate that record or re-link this one in V1 before the Delta step, which carries it over.","reference_target_blocked":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} won't be written because {reason}. It resolves once that record can be written, or once this record is re-linked in V1 before the Delta step, which carries it over.","unresolved_reference":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} wasn't migrated because {reason}. Once that record is written, press Re-queue failed rows in the Recovery panel while this run is open to write this one too. A change made in V1 to either record is carried over by the Delta step.","required_reference_empty":"{entity, select, unknown {This record has no parent record in V1} other {This record has no {entity} in V1}}, so there is nothing to migrate it under: V1 never linked it. There is nothing to do here. If it matters, link it in V1 before the Delta step, which carries it over.","slack_workspace_disconnected":"Slack was disconnected in V1: this organization has no Slack workspace, so there is nothing to migrate this channel under. There is nothing to do here.","pms_hotel_account_absent":"V1 never linked this PMS hotel to a PMS account, and the organization has no PMS account of the same PMS, so there is nothing to migrate it under. There is nothing to do here.","pms_hotel_account_ambiguous":"V1 never linked this PMS hotel to a PMS account, and the organization has several PMS accounts of the same PMS. Link the hotel to its account in V1 before the Delta step, which carries it over.","pms_hotel_ecosystem_blank":"V1 never linked this PMS hotel to a PMS account and names no PMS for it, so no account can be chosen. Link the hotel to its account in V1 before the Delta step, which carries it over.","pms_hotel_enterprise_taken":"Another V1 hotel with the same hotel ID is already linked to the only PMS account this hotel could belong to, so SuiteOp kept that one. Remove or correct the duplicate in V1 before the Delta step, which carries it over.","documenso_document_account_ambiguous":"This document has no Documenso account in V1 and the organization has more than one, so it won't be migrated, and neither will its signers. Link it to one of the organization's Documenso accounts in V1 before the Delta step, which carries it over.","documenso_document_account_none":"This organization has no Documenso account in V1, so there is nothing to migrate this document or its signers under. There is nothing to do here.","pms_vendor_ambiguous":"This PMS account is linked to more than one PMS provider account in V1, so SuiteOp can't tell which PMS it is and won't migrate it. Unlink the extra provider account in V1 before the Delta step, which carries it over.","pms_vendor_pointer_empty":"V1 never linked this PMS account to a provider account, so there are no credentials to migrate and nothing to do here during the migration. Connect this PMS in SuiteOp once the migration is done.","tms_requirement_detached":"No V1 template group lists this requirement and it names no template of its own, so there is nothing to migrate it under. There is nothing to do here. If it matters, add it to a template in V1 before the Delta step, which carries it over.","write_fold_owner_ambiguous":"Two properties in V1 point to these same property details, and in SuiteOp they can belong to only one, so they won't be migrated. Give one of the properties its own details in V1 before the Delta step, which carries it over.","write_fold_owner_missing":"No property in this migration points to these details. If they belong to a property, link them to it in V1 before the Delta step, which carries it over.","write_fold_owner_unwritten":"The property these details belong to hasn't been written yet. Once it is written, press Re-queue failed rows in the Recovery panel while this run is open to fill these details too. A fix made in V1 is carried over by the Delta step.","write_fold_owner_refused":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} wasn't migrated because {reason}. Once that record is written, press Re-queue failed rows in the Recovery panel while this run is open to write this one too. A change made in V1 to either record is carried over by the Delta step.","write_fold_step_unmatched":"There is no step of this type on this verification in SuiteOp for this V1 step to fill, so it won't be migrated; its finding says why. If it should migrate, correct the verification or this step in V1 before the Delta step, which carries it over.","write_reference_not_migrating":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} isn't being migrated because {reason}. To write this record, set that data type to Migrate on the Disposition step, then press Re-queue failed rows in the Recovery panel while this run is open. A record this run never read from V1, or a link corrected in V1, is carried over by the Delta step.","charge_currency_underivable":"This service fee has no currency in V1, and SuiteOp found none to use in its place, so it won't be migrated. Set the fee's currency in V1 before the Delta step, which carries it over.","creator_not_member":"The person who created this record in V1 isn't a member of this organization in SuiteOp, so it can't be written. If their membership is still to be written, press Re-queue failed rows in the Recovery panel while this run is open once it is; otherwise set a member of this organization as its creator in V1 before the Delta step, which carries it over.","custom_field_value_duplicate":"An existing value already fills this custom field on the same listing. Merge the two values or remove one in V1 before the Delta step, which carries it over.","custom_url_cloudflare_hostname_taken":"An existing custom URL already uses this Cloudflare hostname. If it's in this organization and shouldn't keep the hostname, delete it with Delete Custom URL in White Labeling settings, then press Re-queue failed rows in the Recovery panel while this run is open. If you can't delete it, ask a SuiteOp engineer.","custom_url_hostname_taken":"Another custom URL already uses this web address, in this organization or another. If it's in this organization and shouldn't keep the address, delete it with Delete Custom URL in White Labeling settings, then press Re-queue failed rows in the Recovery panel while this run is open. If you can't delete it, ask a SuiteOp engineer.","custom_url_legacy_id_conflict":"An existing custom URL in this organization already uses this web address, linked to a different V1 custom URL. If it shouldn't keep the address, delete it with Delete Custom URL in White Labeling settings, then press Re-queue failed rows in the Recovery panel while this run is open. If you can't delete it, ask a SuiteOp engineer.","duplicate_arbiter_key":"An existing record already uses this record's identifying key. Merge the two or correct one in V1 before the Delta step, which carries it over.","email_duplicate_in_page":"Another V1 user already uses this email address. Merge the two users or change one address in V1 before the Delta step, which carries it over.","email_identity_taken":"This email address is held by a SuiteOp sign-in with no live account behind it — a deleted account, or a sign-in left without one. Nothing in SuiteOp restores or releases it, so ask a SuiteOp engineer.","email_invalid":"The email address on this record in V1 isn't a valid address, so it won't be migrated. Correct the address in V1 before the Delta step, which carries it over.","esign_document_duplicate":"An existing e-sign document already uses this provider document ID. Merge the two or remove one in V1 before the Delta step, which carries it over.","esign_signer_duplicate":"An existing signer on this document already uses this email address. Merge the two signers or change one address in V1 before the Delta step, which carries it over.","identity_route_conflict":"Ask the owner of the SuiteOp account that holds this email address to verify it, then press Re-queue failed rows in the Recovery panel while this run is open. If the address is already verified, ask a SuiteOp engineer to resolve the account conflict. Until then, you can set up this person's membership in this organization by hand.","legacy_id_conflict":"SuiteOp never moves a V1 user from one account to another. If the email address in V1 is wrong, correct it there before the Delta step, which carries it over. If the person's address really changed, ask a SuiteOp engineer.","membership_duplicate_in_page":"Another V1 user already points at the same SuiteOp account in this organization. Merge the two users in V1 before the Delta step, which carries it over.","membership_legacy_id_conflict":"An existing membership in this organization already carries this V1 record's ID. Merge the duplicates in V1 before the Delta step, which carries it over.","payment_account_already_connected":"An existing connection already uses this payment account. Keep it and press Re-queue failed rows in the Recovery panel while this run is open: the next write links V1's records to it. For JusPay Hyperswitch, only the same merchant profile is linked; with a different one, the connected account stays and this V1 account isn't migrated.","property_group_name_duplicate":"An existing group already uses this name. Rename one in V1 before the Delta step, which carries it over — groups aren't merged, since each has its own door code.","reservation_duplicate":"An existing reservation already uses this booking-platform reservation. Merge the two or remove one in V1 before the Delta step, which carries it over.","reservation_twin_conflict":"Two V1 reservations point at the same PMS booking with different dates, guest, property, status, amount or code. Correct or remove the wrong one in V1 before the Delta step, which carries it over.","device_duplicate":"An existing device already uses this lock or sensor on the same integration account. Remove the duplicate V1 device before the Delta step, which carries it over, or ask a SuiteOp engineer if the device was connected in V2.","device_duplicate_repointed":"This record's V1 device duplicated another device on the same lock, so it now belongs to that device. There is nothing to do here unless V1 kept the wrong device; then remove the duplicate in V1 before the Delta step, which carries it over.","device_duplicate_native_code_kept":"This lock is already connected directly in SuiteOp, and SuiteOp does not change a directly connected lock's live codes. Check this code on the lock; if the guest still needs it, create it in SuiteOp.","lock_code_device_empty":"V1 never linked this door code to a lock, so there is nothing to migrate it under. There is nothing to do here. If it matters, link the code to its lock in V1 before the Delta step, which carries it over.","v1_device_vendor_record_missing":"Re-pair this lock in SuiteOp (for a SmartThings lock, through SmartThings Connect), then re-issue its door codes. Until then the codes V1 left on the lock keep opening it, and nobody can change or revoke them.","lock_code_end_far_future":"Nothing to do here. The door code keeps the end date it has in V1, so it stays valid just as it did there. If it should end sooner, change its end date in SuiteOp.","device_duplicate_native_grant_kept":"This lock is already connected directly in SuiteOp, and SuiteOp does not change a directly connected lock's live access. Check this grant on the lock; if the guest still needs access, give it in SuiteOp.","device_code_pin_conflict":"Two V1 door codes claim this slot or stay on one lock with different PINs, so SuiteOp kept the one already there and did not write this one. Check which PIN the lock holds, and remove the other code in V1 before the Delta step, which carries it over.","lock_code_vendor_id_duplicate":"Two live V1 door codes on this lock claim one lock-provider code ID. Confirm in V1 which code is live on the lock, and end or remove the other in V1 before the Delta step, which carries the live one over.","lock_code_vendor_id_superseded":"Nothing to do unless this code's history matters: it has ended, and only the live code with this lock-provider code ID is migrated.","access_grant_duplicate":"An existing door-access grant already uses this provider grant ID. Remove the duplicate grant in V1 before the Delta step, which carries it over.","access_grant_stay_taken":"An existing live grant already covers this reservation on this lock. Remove the extra grant in V1 before the Delta step, which carries it over.","lock_code_grant_duplicate":"An existing door code already belongs to this grant on this lock. Confirm in V1 which code is live on the lock, and remove the other in V1 before the Delta step, which carries the live one over.","custom_url_booking_link_duplicate":"An existing custom URL already uses this external booking link. Change or clear the link on one of them in V1 before the Delta step, which carries it over.","slack_channel_duplicate":"An existing Slack channel already uses this Slack channel ID on this workspace. Remove the duplicate channel in V1 before the Delta step, which carries it over.","upsell_visibility_rule_duplicate":"An existing visibility rule of this type is already on this upsell. Keep the rule the upsell should use and remove the other in V1 before the Delta step, which carries it over.","user_not_member":"This record names a person in V1 who isn't a member of this organization in SuiteOp, so it can't be written. If their membership is still to be written, press Re-queue failed rows in the Recovery panel while this run is open once it is; otherwise set a member of this organization in that field in V1 before the Delta step, which carries it over.","user_rewardful_affiliate_taken":"An existing user already has this Rewardful affiliate ID. Clear the duplicate affiliate ID on one of them in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer if the other user was created in SuiteOp.","pms_listing_v1_twin_property_conflict":"Another V1 listing with the same PMS account and listing ID is linked to a different V1 property, so SuiteOp kept that listing and did not merge this one into it. Link both properties to the same V1 listing, or remove the duplicate listing, in V1 before the Delta step, which carries it over.","lock_code_pin_empty_on_claimed_slot":"This V1 door code has no PIN and repeats a slot another code on the lock already holds, so SuiteOp kept that code and left this empty one out. There is nothing to do here unless the lock needs this code; then give it a PIN in V1 before the Delta step, which carries it over.","device_satellite_unavailable":"This device has no vendor details in V1, so there is nothing to connect it to. There is nothing to do here. If it matters, reconnect the device in V1 before the Delta step, which carries it over.","device_account_not_migrated":"This device's connected account wasn't migrated, so the device can't be written. Once that account is written, press Re-queue failed rows in the Recovery panel while this run is open; a fix made in V1 is carried over by the Delta step.","device_account_ambiguous":"Two or more migrated accounts carry this device's connected-account ID, so SuiteOp will not pick one. Remove the duplicate account in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer.","device_account_attached":"V1 never linked this device to an account, so it was attached to the organization's only account of its provider. If that is the wrong account, link the device to its own account in V1 before the Delta step, which carries it over.","device_account_none":"V1 never linked this device to an account, and the organization has no account of its provider to attach it to. If it matters, connect that provider's account or link the device in V1 before the Delta step, which carries it over.","device_account_unlinked_ambiguous":"V1 never linked this device to an account, and the organization has several accounts of its provider, so SuiteOp will not pick one. Link the device to its own account in V1 before the Delta step, which carries it over.","property_pms_listing_duplicate":"An existing property already uses this PMS listing: a second V1 property mapped to it, or a property already connected to it in V2. Remove the duplicate mapping in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer if the listing is connected to a property in V2.","review_duplicate":"An existing review already uses this booking-platform review ID. Remove the duplicate in V1 before the Delta step, which carries it over.","user_group_name_duplicate":"An existing user group already uses this name. Rename one in V1 before the Delta step, which carries it over — user groups aren't merged, since each grants its own access.","verification_step_exists":"The guest already has this verification step in SuiteOp, and it is kept rather than written over. No control removes a step, so if the V1 step must replace it, ask a SuiteOp engineer.","timezone_unresolvable":"This record's time zone in V1 is empty or isn't one SuiteOp can use, so it won't be migrated. Set a valid time zone on it in V1 before the Delta step, which carries it over.","timezone_derived":"Confirm the time zone this property will use, or set the property's own time zone in V1 before the Delta step, which carries it over.","access_grant_status_absent":"This door-access grant has no status in V1, so it won't be migrated. Set its status in V1 before the Delta step, which carries it over.","payment_currency_underivable":"This payment has no currency in V1, and none of the organization's V1 payments records one, so it won't be migrated. Set the payment's currency in V1 before the Delta step, which carries it over.","payment_status_absent_ambiguous":"This payment has no status in V1, and its money fields don't show one: it may be an open card hold with nothing captured yet, or its amounts contradict each other. It won't be migrated rather than guessed. Check it in Stripe, then set its status in V1 before the Delta step, which carries it over.","access_grant_provider_id_absent":"This door-access grant was never created at the lock provider in V1, so it won't be migrated. If the guest still needs this access, create it at the lock provider from V1 before the Delta step, which carries it over.","v1_required_value_empty":"A field SuiteOp requires is empty on this record in V1, so it won't be migrated. Fill it in V1 before the Delta step, which carries it over.","product_purchase_fan_out_unsupported":"This purchase names several fee products, and SuiteOp can't yet split one purchase into a charge per product, so it won't be migrated. Split it into one purchase per product in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer.","membership_missing":"This record belongs to a person who isn't a member of this organization in SuiteOp. Once their membership is written, press Re-queue failed rows in the Recovery panel while this run is open; a fix made in V1 is carried over by the Delta step.","viator_partner_id_absent":"This Viator account has no Partner ID in V1, so it won't be migrated. If the organization uses Viator, enter its Partner ID in V1 before the Delta step, which carries it over.","viator_partner_id_invalid":"The Viator Partner ID in V1 isn't a valid ID (one capital letter followed by 8 digits), so this account won't be migrated. Correct it in V1 before the Delta step, which carries it over.","viator_partner_slot_taken":"This organization already has a different Viator Partner ID connected in SuiteOp. To keep V1's instead, change the Partner ID in Integrations, then press Re-queue failed rows in the Recovery panel while this run is open.","adopt_anchor_not_written":"The V1 record this one duplicates was not migrated, so there was nothing to link it to. Once that record is written, press Re-queue failed rows in the Recovery panel while this run is open. A fix made in V1 to either record is carried over by the Delta step.","access_grant_device_has_no_account":"The lock this grant is for has no connected account in SuiteOp yet, so the grant was not written. Once the lock's provider account is migrated, press Re-queue failed rows in the Recovery panel while this run is open.","translation_text_too_long":"A text on this record in V1 is longer than SuiteOp allows for its field, so it won't be migrated. Shorten it in V1 before the Delta step, which carries it over.","fee_charge_type_unsupported":"This fee product's charge type in V1 can't be used to price a fee, so it won't be migrated. Change its Price Configuration's charge type in V1 to Fixed price, Price per night, Price per guest, or Price per guest per night before the Delta step, which carries it over.","fee_pricing_source_empty":"This fee product isn't linked to a Price Configuration in V1, so it has no price and won't be migrated. Link it to a Price Configuration in V1 before the Delta step, which carries it over.","required_money_v1_sentinel":"This record's price in V1 is a placeholder of all 9s rather than a real price, so it won't be migrated. Set a real price for it in V1 before the Delta step, which carries it over.","file_gone":"A file this record needs no longer exists in V1's storage, so the record won't be migrated. Upload the file to this record again in V1 before the Delta step, which carries it over."},"refusal_reasons":{"pending":"it hasn't been written yet","claimed":"it was still being written when this record was checked","written":"it was written only after this record was checked","skipped":"it was skipped on purpose","excluded":"it, or its data type, is excluded from this migration","quarantined":"it has a problem of its own that must be fixed first","failed":"its own write failed and is waiting to be retried","rolled_back":"it was rolled back","not_extracted":"it was never read from V1 — it may have been deleted there or belong to another account","unknown":"it could not be found in this migration"},"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}}.","opened_from":"Opened from run {run} · started {started}.","run_rolled_back":"Rolled back","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_effect_unavailable":"There is nothing to resume: Resume continues a stalled run that has gone quiet and was not rolled back, and this run is not one.","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, quarantined, or skipped for a data type now set to migrate, so there is nothing to re-queue.} one {Puts # row back in the queue (failed, quarantined, or skipped while its data type, or one it points to, was not set to migrate) and clears its retry delay, so it is attempted again.} other {Puts # rows back in the queue (failed, quarantined, or skipped while their data type, or one they point to, was not set to migrate) and clears their retry delay, so they are attempted again.}}","retry_effect_closed":"This run is closed, so nothing on it can be re-queued. Its rows that failed, were quarantined, or were skipped stay on its record as they are ({count, number}); export the ledger to see them.","retry_effect_rollback":"A rollback has started on this run, so nothing on it can be re-queued: the rollback removes what the run wrote. Its rows that failed, were quarantined, or were skipped stay on its record ({count, number}); export the ledger to see them.","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)","force_fail_title":"Force-fail this run","force_fail_effect":"Marks this run failed. {count, plural, =0 {The ledger is kept.} one {All # ledger row is kept.} other {All # ledger rows are kept.}} A new migration can then be started, unless this was a live run that wrote data: roll that back first.","force_fail_not_rollback":"This is not a rollback. Anything this run already wrote into SuiteOp stays written, and nothing is reversed.","v1_reenable_required":"This run was rolled back, and V1 has not been switched back on. The account owner must re-enable V1 from the migration page in V1 before their team can work there again. Ask the customer to redo in V1 anything they changed in SuiteOp after the commit; the rollback does not carry it back.","v1_restore":{"title":"Check that V1 is back on","body":"Once the customer has un-muted V1 and turned its redirects off on V1's migration page, check here that V1 came back. The check only reads V1; it changes nothing there.","button":"Check V1","in_flight":"Checking V1. The answer appears here once V1 replies.","check":{"migration_switch":"V1 un-muted (migration switch off)","integration_active_flags":"V1 integrations active again","polling_dates":"V1 provider polling scheduled ahead"},"status":"{status, select, ok {OK} not_ok {Not OK} other {Unknown}}","column":"Reads {table}.{column}","column_none":"No V1 field known","observed":"Read {at}","not_observed":"Not read","reason":{"not_checked":"Not checked since the rollback. Press Check V1.","check_failed":"V2 could not read V1. Press Check V1 again.","column_unconfigured":"No V1 field is set up for this check, so V2 cannot read it.","column_missing":"V1 has no field by this name, so V2 cannot read it.","column_unidentified":"V2 does not know which V1 field holds this, so it cannot check it. Check it in V1."},"switch_still_on":"V1 is still muted, so it still skips its own work. Ask the customer to un-mute V1 on V1's migration page, then check again."},"cutover_drain_stuck":"The cutover's remaining steps are not running. A run was re-opened to finish them but never handed on, so nothing will start them by itself.","cutover_drain_stuck_held":"{count, plural, one {# stopped step holds} other {# stopped steps hold}} the rest (listed below). Re-queue the rows that failed to retry {count, plural, one {it} other {them}}: that also starts the remaining steps again. Re-starting alone would not move them.","cutover_drain_rekick_ask":"Your staff account is not cleared to re-start them: ask a migration operator to press “Re-start the remaining steps”.","cutover_drain_rekick_button":"Re-start the remaining steps","cutover_drain_rekick_done":"The remaining cutover steps were re-started.","cutover_owed":"Finalized. {count, plural, one {# step is} other {# steps are}} still to run at cutover. Only some kinds of step wait for the cutover, and a run owes only the kinds it has. The steps still owed stay on the migration's record until cutover.","cutover_owed_run_base":"Base run{hasDate, select, yes {, finished {date}} other {}}: {count, plural, one {# step} other {# steps}}","cutover_held_by":"{count, plural, one {# step failed and is holding the rest of the cutover} other {# steps failed and are holding the rest of the cutover}}: the steps that wait on it stay owed until each is resolved.","cutover_held_by_line":"{subject}: {step}","cutover_held_by_account_named":"{provider} account “{name}”","cutover_held_by_account_unnamed":"{provider} account","cutover_held_by_unnamed_lock":"Unnamed lock","cutover_held_by_v1_code":"V1 code {id}, lock not yet mapped","cutover_held_by_more":"And {count} more","cutover_held_by_codes_waiting":"{count, plural, one {New guest codes on # lock wait for this step.} other {New guest codes on # locks wait for this step.}}","cutover_held_by_kind":{"vanity_host_takeover":"moving the guest portal's custom domain to V2","messaging_activation":"Turning on the workflow rules V1 had on","door_codes":"adopting its V1 door codes","door_code_takeover":"taking over a V1 guest code on the same PIN","native_twin_code_takeover":"taking over a V1 guest code on the lock already connected in V2","lock_adoption":"Adopting the migrated locks","push_reconciliation":"re-sending the codes owed while push was off","pms_post_connect":"connecting the PMS account","derivation":"Linking the migrated guests","credential_readiness":"switching the account over to V2","stay_activation":"Announcing a migrated stay","recurring_schedules":"Recreating the recurring task schedules","recurring_activation":"Turning on the recurring task schedules","node_reference_resolution":"Linking the migrated workflow rules to their email templates, senders and channels","payments_hash_key":"storing the payment provider's webhook key","deferred_fk":"Linking the migrated records the import left unlinked","property_stay_hours_default":"Setting default check-in and check-out times on the migrated properties","deferred_invites":"emailing the migrated people that their account has moved"},"cutover_owed_run_delta":"Catch-up pass {number}{hasDate, select, yes {, finished {date}} other {}}: {count, plural, one {# step} other {# steps}}","failed_pass_title":"Catch-up pass {number} did not finish{hasDate, select, yes { (ended {date})} other {}}","failed_pass_holds":"It holds the cutover until you re-run it or accept it. The rows it wrote stay in V2.","failed_pass_superseded":"A later full catch-up pass completed, so this one no longer holds the cutover.","failed_pass_accepted":"Accepted {date}: {reason}","failed_pass_failed_items":"{count, plural, one {# row failed} other {# rows failed}}, each listed with its reason among the failed rows.","failed_pass_waiting_units":"{count, plural, one {# step is} other {# steps are}} owed at cutover and waiting, because the pass did not finish.","failed_pass_unfinished_items":"{count, plural, one {# row was} other {# rows were}} never written: the pass stopped before reaching them.","failed_pass_rerun":"Re-run pass","failed_pass_accept":"Accept this failed pass and proceed","failed_pass_revoke":"Withdraw acceptance","failed_pass_accept_title":"Accept catch-up pass {number}?","failed_pass_accept_body":"The cutover goes ahead without re-running this pass. Steps owed for the rows it wrote run at cutover. Your name, the time and your reason are recorded.","failed_pass_reason_label":"Why are you accepting this pass?","failed_pass_accept_done":"Catch-up pass accepted.","failed_pass_revoke_done":"Acceptance withdrawn. The pass holds the cutover again.","rollback_incomplete":{"title":"This rollback did not finish","body":"The run is marked failed, but part of what it created is still in place:","table_row":"{table}: {count} remaining","objects":"Copied files still in storage: {count}","reasons_title":"Why it was kept:","reason":{"theirs":"Data created in SuiteOp after the migration still points at these records, and deleting them would change it.","ours":"Other records from this migration still point at these records.","unknown":"SuiteOp cannot tell who owns the records that point at these, so it kept them to be safe.","too_many":"So many records point at these that SuiteOp could not check them all, so it kept them to be safe.","refuse":"The database refuses to delete these records while other records depend on them.","table_refused":"The migration does not yet know how to roll back one of these record types, so it left that type untouched."},"next_step":"Ask a SuiteOp engineer.","holds_title":"Rows held, per reason (a row held for more than one reason counts under each):","holds_row":"{count, plural, one {# row} other {# rows}}: {reason}","holding_title":"Rows elsewhere that keep them in place:","holding_row":"{child}: holds {count, plural, one {# row} other {# rows}} of {table}","holding_row_capped":"{child}: holds {count, plural, one {# row} other {# rows}} of {table}; more than {cap, number} of its rows point at one of them, too many to check"},"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.}}","rollback_title":"Roll back this migration","rollback_effect":"Start over only: deletes what this migration created in SuiteOp. It cannot undo anything after cutover.","rollback_base_title":"Roll back the base migration","rollback_base_effect":"Start over only: deletes what the base migration created in SuiteOp. Roll back any catch-up pass that wrote records first. It cannot undo anything after cutover.","rollback_unavailable":"Only admin or developer staff can roll back a migration.","rollback_nothing_to_undo":"This migration is already rolled back. There is nothing left to undo.","rollback_button":"Roll back migration","rollback_resume_button":"Resume rollback","rollback_first_pass":"It is catch-up pass {number}.","rollback_first_run":"It is run {run}.","rollback_first_pass_button":"Roll back that pass first","rollback_first_run_button":"Roll back that run first","rollback_confirm_title":"Roll back this migration?","rollback_confirm_title_named":"Roll back the migration for {org}?","rollback_confirm_body":"Use this only to start over. It deletes the records this migration created in SuiteOp; records that other data now depends on are kept and reported. It cannot undo anything after cutover. Ask the customer to redo in V1 anything they changed in SuiteOp after the commit; the rollback does not carry it back.","rollback_confirm_action":"Roll back","rollback_dialog":{"intro":"Use this only to start over. Read what it deletes and what it keeps before you confirm.","checking":"Checking what the rollback would delete.","preview_failed":"Could not load what the rollback would delete, so it cannot run yet.","retry":"Try again","impact_title":"What it deletes","impact_row":"{table}: {count}","impact_objects":"Copied files: {count}","impact_none":"Nothing is left to delete. The rollback only closes the run.","impact_estimate":"These counts are the current estimate. The rollback reports the real count when it runs.","kept_title":"What it keeps","kept_body":"V1's data is not touched. Nothing created in SuiteOp after the migration is deleted, and records that such data depends on are kept and reported. Ask the customer to redo in V1 anything they changed in SuiteOp after the commit; the rollback does not carry it back.","v1_title":"What happens to V1","v1_body_muted":"The rollback does not change V1. V1 stays muted until the customer un-mutes it and turns its redirects off on V1's migration page; then press Check V1 on this card. Starting over needs no new V1 login: the customer's V1 organization stays connected.","v1_body_not_muted":"The rollback does not change V1. V2's last check did not find V1 muted, so V1 keeps running as it is now. Starting over needs no new V1 login: the customer's V1 organization stays connected.","register_title":"What a rollback cannot fully undo","register_performed":"Times done so far: {count}","confirmation_label":"Type {token} to confirm","confirmation_hint":"The button stays off until you type {token} exactly."},"rollback_started":"Rollback started. {count, plural, =0 {Nothing is left to delete; it will only close the run.} one {# record to delete.} other {# records to delete.}} Ask the customer to redo in V1 anything they changed in SuiteOp after the commit; the rollback does not carry it back.","rollback_started_capped":"Rollback started. At least {count, number} records to delete; the count stops there. Ask the customer to redo in V1 anything they changed in SuiteOp after the commit; the rollback does not carry it back.","archive_export_title":"Export the V1 archive","archive_export_effect":"Queues an encrypted copy of the V1 records this migration (all attempts) read into this account's private storage. It cannot be downloaded from here. An earlier attempt that is already exported is skipped.","archive_export_button":"Export V1 archive","archive_export_queued":"V1 archive export queued for this migration (all attempts).","archive_export_already_queued":"A V1 archive export is already running for this migration. This press joined it.","archive_export_unavailable":"Only support, admin or developer staff can export the V1 archive.","archive_export_status_never":"Not exported","archive_export_status_queued":"Queued","archive_export_status_running":"Running","archive_export_status_exported":"Exported","archive_export_status_failed":"Failed","archive_export_status_unavailable":"Unknown","archive_export_state_exported":"Last exported {time}.","archive_export_state_exported_partial":"Last exported {time}. That copy does not cover every attempt of this migration yet — export again to complete it.","archive_export_state_failed":"Last attempt ended {time}.","archive_export_state_unavailable":"The export status could not be read right now. Reload the page to try again.","archive_export_failure_would_shrink":"A new export would have held fewer records than the copy already exported, because older records have expired from the archive table. The existing copy was kept, so nothing was lost.","archive_export_failure_busy":"Another archive export, deletion or erasure was running for this migration. Export again once it finishes.","archive_export_failure_wrong_region":"This account's data lives in a different region from the server that ran the export. Ask a SuiteOp engineer.","archive_export_failure_org_mismatch":"The export job did not match this account. Ask a SuiteOp engineer.","archive_export_failure_interrupted":"The export was interrupted by restarts too many times. Export again.","archive_export_failure_unknown":"An unexpected error stopped the export. Export again, and if it fails again ask a SuiteOp engineer.","archive_rollback_title":"Delete the V1 archive","archive_rollback_effect":"Deletes every exported copy of this migration's V1 archive (all attempts). It does not undo the migration.","archive_rollback_button":"Delete V1 archive","archive_rollback_unavailable":"Only admin or developer staff can delete the V1 archive.","archive_rollback_confirm_title":"Delete this migration's V1 archive (all attempts)?","archive_rollback_confirm_body":"This deletes every exported copy of the V1 archive, for every attempt of this migration. Once the migration's own copy of the V1 records has expired, nothing can rebuild it. It does not undo the migration.","archive_rollback_confirm_action":"Delete archive","archive_rollback_done":"{count, plural, =0 {Nothing to delete: this migration has no exported V1 archive files.} one {Deleted # archive file.} other {Deleted # archive files.}}","accept_failed_run_title":"Accept this failed run","accept_failed_run_effect":"The cutover is done, so this run cannot be rolled back, resumed or force-failed. Accepting it marks it completed: {count, plural, =0 {it left no steps unfinished.} one {its # unfinished step will not run.} other {its # unfinished steps will not run.}}","accept_failed_run_button":"Accept failed run","accept_failed_run_dialog_title":"Accept this failed run?","accept_failed_run_dialog_body":"The steps below will not run. Your reason accepts them all and marks the run completed. Your name, the time and your reason are recorded. This cannot be undone.","accept_failed_run_unit":"{step}: {count, plural, one {# step} other {# steps}}","accept_failed_run_reason_label":"Why are you accepting this run?","accept_failed_run_reason_hint":"At least 20 characters.","accept_failed_run_submit":"Accept failed run","accept_failed_run_done":"{count, plural, =0 {Run accepted.} one {Run accepted. # unfinished step settled.} other {Run accepted. # unfinished steps settled.}}","retry_failed_run_title":"Retry what's left","retry_failed_run_effect":"{count, plural, =0 {Reopens this run; it left no steps unfinished.} one {Runs this run's # unfinished step again instead of accepting it.} other {Runs this run's # unfinished steps again instead of accepting them.}} Door codes are taken over from V1, never replaced.","retry_failed_run_button":"Retry what's left","retry_failed_run_confirm_title":"Retry what's left of this run?","retry_failed_run_confirm_body":"The run reopens and its unfinished steps run again, in order. Door codes are taken over from V1, never replaced. A step that fails again keeps the run open until it is resolved. The reopen cannot be undone.","retry_failed_run_confirm_action":"Retry what's left","retry_failed_run_done":"{count, plural, =0 {Run reopened.} one {Run reopened. # step will run again.} other {Run reopened. # steps will run again.}}"},"waves":{"title":"Commit progress","title_dry_run":"Dry run progress","title_run":"Run 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.","stalled_body_cut_over":"The server stopped hearing from this migration run and closed it out. This account is already cut over, so the run cannot be resumed: press “Re-start the remaining steps” in Recovery to start its remaining steps again.","stalled_body_cut_over_ask":"The server stopped hearing from this migration run and closed it out. This account is already cut over, so the run cannot be resumed, and your staff account is not cleared to re-start its remaining steps: ask a migration operator to press “Re-start the remaining steps” in Recovery.","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}}"},"events":{"title":"Run events","description":"Every row this run has processed, newest first. Open a row to see the data it carried.","filter_label":"Filter events","filter":{"deleted_in_v1":"Deleted in V1","all":"All","success":"Succeeded","error":"Errors","skipped":"Skipped","rolled_back":"Rolled back"},"search_label":"Search events","search_placeholder":"Search entity or V1 id","column":{"time":"Time","wave":"Wave","entity":"Entity","source_id":"V1 id","status":"Status","message":"Message"},"status":{"pending":"Pending","claimed":"In progress","written":"Written","skipped":"Skipped","excluded":"Excluded","quarantined":"Quarantined","failed":"Failed","rolled_back":"Rolled back"},"error_recorded":"Error recorded — open the row to see it","owed_at_cutover":"Owed at cutover","waiting_for_cutover":"Waiting for the cutover — open the row to see why","no_message":"No message","empty":"No events yet","empty_filtered":"No results for “{query}”","drawer_title":"{entity} · {id}","drawer_title_pending":"Event detail","drawer_description":"The row as this run's ledger holds it, and the copy kept in the raw-row archive. Opening a row is recorded in the audit log.","drawer_error":"We could not load this event. Close the drawer and try again.","ledger_title":"Ledger payload","raw_title":"Archived V1 row","sealed":"Sealed credential","not_retained":"No longer retained","findings_title":"Validation findings","refusal_title":"Refused — needs action","v1_parent_empty_title":"Not migrated — V1 has no parent","v1_value_title":"Refused — needs action in V1","refusal_referenced":"Referenced record","refusal_key_held_hint":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} wasn't migrated because another record already uses its identifying key. Fix the duplicate in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer if the other record was created in SuiteOp.","refusal_write_refused_hint":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} wasn't migrated because its own write was refused, for the reason shown below. Fix that cause in V1 before the Delta step, which carries it over, or ask a SuiteOp engineer if it can't be fixed there.","refusal_owner_verifies_hint":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} wasn't migrated because a SuiteOp account already holds its email address. Ask that account's owner to verify the address, then press Re-queue failed rows in the Recovery panel while this run is open, or ask a SuiteOp engineer if it's already verified.","blocked_by_title":"Waiting on another record","blocked_by_hint":"{entity, select, unknown {The referenced record} other {The referenced {entity}}} must be written before this record ({reason}).","handover":{"subject":"{provider} {account}","account_named":"“{name}”","account_unnamed":"(unnamed account)","queued":"{provider} {account}: queued — V1's current credential will be read next","reading_v1":"{provider} {account}: reading V1's current credential…","v1_unreachable_retrying":"{provider} {account}: V1 couldn't be reached — nothing was changed; retrying","v1_read":"{provider} {account}: V1's current credential read — V2 takes the account over next","taking_over":"{provider} {account}: taking over — writing V1's credential into V2, and refreshing it if it rotates","v1_rotated_retrying":"{provider} {account}: V1 changed the token while we took over — retrying ({attempt} of {max})","refresh_uncertain_waiting":"{provider} {account}: the refresh didn't confirm — waiting for V1's next token before trying again ({attempt} of {max})","taken_over_refreshed":"{provider} {account}: refreshed by V2 — V2 now owns this connection","taken_over_unverified":"{provider} {account}: refreshed by V2, but a check with the new token failed — V2 owns this connection, unproven","taken_over_copied":"{provider} {account}: V1's current credential copied into V2 — it doesn't rotate, so V2 can use it as it is","skipped_unchanged":"{provider} {account}: unchanged since the migration copied it — nothing to copy","skipped_adopted":"{provider} {account}: SuiteOp's own connection, which the migration adopted — kept as it is","skipped_reconnected":"{provider} {account}: reconnected in SuiteOp while it waited — the new connection is kept, V1's is not copied over it","needs_reconnect":"{provider} {account}: {reason, select, v1_token_rejected {V1's token no longer works} v1_credential_missing {V1 no longer holds a usable credential} refresh_uncertain {a refresh never confirmed and V1 never issued a new token} refresh_rejected {the provider refused V2's refresh of the token} other {V2 couldn't take the account over}} — the customer must reconnect"}},"handover":{"title":"Account handover","description":"After outbound is turned back on, V2 takes over each migrated integration account from V1: it re-reads V1's current credential, writes it into V2 and, where the provider rotates tokens, refreshes it so only V2 holds a working one. Each account stays paused until its own handover finishes. Each account's progress shows below as it happens.","live":"Updating live","summary":{"taken_over":"{takenOver} of {total} taken over","needs_reconnect":"{count, plural, one {# needs reconnect} other {# need reconnect}}","skipped":"{count} skipped","in_progress":"{count} in progress"},"status":{"taken_over":"Taken over","skipped":"Skipped","needs_reconnect":"Needs reconnect","in_progress":"In progress"},"reconnect_title":"{count, plural, one {# account must be reconnected by the customer} other {# accounts must be reconnected by the customer}}","reason":{"v1_token_rejected":"The provider refused V1's token on every attempt, so V2 never received a working one.","v1_credential_missing":"V1 no longer holds a usable credential for this account, or no longer has the account, so there was nothing to take over.","refresh_uncertain":"A refresh never confirmed whether it worked, and V1 never moved to a new token, so V2 could not safely try again.","refresh_rejected":"The provider refused V2's refresh of this connection on every attempt, so V2 could not prove it works. It must be reconnected in SuiteOp.","provider_config_missing":"SuiteOp's sign-in setup for this provider is missing in this region, so V2 could not take this connection over. This is on SuiteOp's side, not the customer's.","takeover_failed":"Taking this connection over from V1 kept failing before anything was sent, so V2 stopped retrying. Reconnect it in SuiteOp."},"next_step":"Next step: ask the customer to reconnect each of these accounts in SuiteOp, from the Integrations page. Until then, SuiteOp can't use them.","press":{"start":"Start account handover","resume":"Resume account handover","after_cutover":"The account handover runs after outbound is turned back on."},"waiting_on_outage":"Waiting on {provider} since {since}: its service is down. The handover retries on its own once it is back."},"redirect_token":{"title":"Redirect token for the old app","description":"Paste this into the migration page of the old SuiteOp app so its links open this organization in the new SuiteOp.","copy":"Copy","copied":"Copied","copy_failed":"Couldn't copy. Select the token and copy it manually."},"parity":{"item_accepts":{"title":"Rows accepted one by one","by":"{staff} · {at}","not_current":"No longer current: the row changed after it was accepted, so it counts as unsettled again.","stale":"Accepted rows changed after this report was generated. Regenerate it, then sign it again.","revoke":"Revoke","revoke_title":"Revoke this accept?","revoke_body":"The row counts as unsettled again. Regenerate the parity report afterwards.","revoke_confirm":"Revoke accept","review_unsettled":"Review unsettled rows"},"intro":"The parity report is what a rep signs to say the migration lost nothing: every V1 row accounted for, with its fields and references intact.","empty":"No parity report has been generated for this run yet.","last_run":"Last run {at} ({relative})","rerun":"Re-run parity","rerun_tier":"Your staff role can read this report but not generate it. Ask an engineer to press Re-run parity.","read_failed":"The parity report could not be loaded. Reload the page to try again.","sign":"Sign report","signing":"Checking the report against the current data and signing it. The page updates by itself.","sign_tier":"Signing needs the destructive migration tier. Ask an engineer to sign the report.","sign_confirm_title":"Sign this parity report?","sign_confirm_body":"Signing attests that every V1 row is in V2 or explained. The signature is recorded against this exact report and cannot be removed.","sign_confirm_action":"Sign report","sign_out_of_date":"The report is out of date. Regenerate it, then sign.","sign_already_signed":"This report is already signed.","sign_report_changed":"The report changed while you were confirming. Review it and sign again.","regenerate":"Regenerate","generating":"Generating the parity report. This takes up to a minute on a large migration; the page updates by itself.","generating_previous":"Generating a new parity report. The report below is the previous one until the new one lands; the page updates by itself.","generate_failed":"The parity report could not be generated. Try again.","generate_failed_previous":"The new parity report could not be generated. The report below is the previous one and is out of date. Try again.","check_integrity":"Check referential integrity","check_integrity_done":"Referential integrity checked. Press Re-run parity to add the result to this report.","check_integrity_failed":"The referential-integrity check didn't finish. Run it again.","check_integrity_running":"Checking referential integrity. On a large account this can take a minute.","fix_row":"Fix, re-extract","fix_all":"Fix all","fix_explainer":"These rows are missing from V2. Fix re-reads them from V1 into the open catch-up, and Apply creates them in V2 with V1's values. Nothing changes in V2 until Apply. A table fixed this way can't then be fully re-read in this catch-up.","fix_done":"Re-reading {count, plural, one {# flagged row} other {# flagged rows}} in the open catch-up. Nothing changes in V2 until you apply it.","fix_truncated":"Only the first {count, plural, one {# flagged id was} other {# flagged ids were}} re-read. Apply and close the catch-up, regenerate the report, then fix again.","export_csv":"Export CSV","export_pdf":"Export PDF","unaccounted_label":"Unaccounted","unaccounted_goal":"V1 rows with no ledger entry. The goal is 0.","totals":{"v1":"V1 rows","v2":"V2 rows","skipped":"Skipped","excluded":"Excluded by policy","re_derived":"Folded or rebuilt in V2","orphans":"Orphaned references","hard_mismatches":"Hard field mismatches"},"verdict_label":"Verdict","verdicts":{"pass":"Pass","fail":"Fail","incomplete":"Incomplete"},"blockers_title":"Why this run cannot pass yet","blockers":{"census_missing":"No count of V1 data types was produced for this run, so which types belong in V2 is unknown.","reconcile_missing":"No row accounting was produced for this run, so no row is known to be accounted for.","reconcile_incomplete":"Row accounting did not finish: at least one data type failed or was not reached.","referential_integrity_missing":"No reference check was produced for this run.","undecided_entities":"At least one data type has no decision, so whether its rows belong in V2 is unanswered.","unaccounted_rows":"Some V1 rows have no ledger entry.","hard_field_mismatches":"A field check found V2 values that disagree with V1 where they must match.","referential_orphans":"A migrated row points at a parent record that never arrived.","field_parity_missing":"Field checks were not run, so field parity is unknown, not passed.","door_code_revokes_owed":"A door code V1 removed or changed still works in V2, because the catch-up could not apply V1’s change. Fix it, then run the catch-up again before cutting over.","unsettled_rows":"Some migrated rows haven't settled yet — they are neither in V2 nor explained. Parity can't pass until they settle.","entities_not_extracted":"A data type marked to migrate has V1 rows, but none were extracted, so none reached V2.","written_targets_missing":"Some rows the ledger records as written are no longer in V2."},"census_banner_title":"Data type coverage is incomplete","census_banner_missing":"No count was taken for this run, so no data type's coverage is known.","census_banner_undecided":"These data types have no decision: {types}","resign_banner_title":"Parity was re-counted after the catch-up pass — sign again","resign_banner_body":"The catch-up pass changed data after the report signed {at}, so parity was counted again. Review this report and sign it again.","signed":"Signed {at} by staff user {staff}","unsigned":"Not signed. Only a passing report can be signed.","columns":{"v1":"In V1","v2":"In V2","skipped":"Skipped","excluded":"Excluded","unaccounted":"Unaccounted","fields":"Fields"},"not_counted":"Not counted","skipped_reason":"{count} × {reason}","skip_reason_unspecified":"No reason recorded","reconcile_not_reached":"Not reached by row accounting","unsettled_total":"Unsettled rows: {count, number} ({states})","accepted_refused_references":"{count, plural, one {# reference points at a row you accepted not to migrate, so it is not counted as orphaned} other {# references point at rows you accepted not to migrate, so they are not counted as orphaned}}. The integrity table still lists them.","reconcile_press":{"hint":"Parity needs a fresh accounting of V1's rows. Re-run it here; parity updates by itself when it finishes.","running":"Accounting is running. Parity updates by itself when it finishes.","continuing":"Pass {pass} of up to {maxPasses}. Still to settle: {remaining}."},"rep_acceptance_title":"Accepted at the dry run","rep_acceptance_count":"Rows accepted at the dry run and settled, not unsettled: {count}","rep_acceptance_by":"Accepted by {staff} on {at}, for the dry run that finished {pass}.","rep_acceptance_row":"{sourceId}: {codes}","no_field_comparison_title":"No field comparison possible — rows accounted only","no_field_comparison_row":"{label} ({table}) · rows: {count}","all_rows_erased_title":"Not compared — personal data erased on every row","all_rows_erased_row":"{label} ({table}) · erased rows: {count}","unsettled_line":"Unsettled: {states}","ledger_states":"Ledger: {states}","created_after_extract_line":"{count, plural, one {# row was created in V1 after this run read it. The catch-up (Delta) brings it over, so it does not block.} other {# rows were created in V1 after this run read them. The catch-up (Delta) brings them over, so they do not block.}}","created_after_final_delta_line":"{count, plural, one {# log row was created in V1 after this run read it. No further catch-up (Delta) runs, and log history does not block.} other {# log rows were created in V1 after this run read them. No further catch-up (Delta) runs, and log history does not block.}}","unaccounted_after_final_delta_line":"{count, plural, one {# of the unaccounted rows was created in V1 after this run read it, and the final catch-up (Delta), run after V1 was muted, did not bring it over. That can mean V1's mute leaked.} other {# of the unaccounted rows were created in V1 after this run read them, and the final catch-up (Delta), run after V1 was muted, did not bring them over. That can mean V1's mute leaked.}}","unaccounted_ids":"Unaccounted V1 ids: {ids}","references_title":"References to a parent that never arrived","reference_entry":"{field} → {target}: {count}","reference_target_unknown":"unknown table","reference_sample":"{sourceId} → {reference}","excluded_references_title":"References to a V1 row the migration left out (explained, not blocking)","orphans_recount_hint":"A fresh accounting would explain {count} of these references. Press “Re-run accounting” and let it finish, then press “Check referential integrity”.","excluded_reference_sample":"{sourceId} → {reference} ({reason})","field":{"not_run":"Field checks not run","failed":"Field checks could not run","hard":"Hard mismatches: {count}","changed_in_v1":"{count, plural, one {# row changed in V1 since the copy} other {# rows changed in V1 since the copy}}","changed_in_v1_hint":"{count, plural, one {V1 changed # row after the migration copied it. The catch-up before cutover carries the change, so this is not a migration error.} other {V1 changed # rows after the migration copied them. The catch-up before cutover carries the changes, so these are not migration errors.}}","changed_in_v1_link":"Open the catch-up pass","matched":"Matching: {matched} of {compared}","explained":"Matching: {matched} of {compared} · {explained} differ where the migration recorded why","no_comparable_fields":"Rows accounted only — no field comparison possible","all_rows_erased":"Not compared — personal data erased on every row","erased_envelopes":"{count, plural, one {# row not compared: personal data erased} other {# rows not compared: personal data erased}}","absent_columns":"Not compared: {columns}. These columns are absent from this organization’s V1 data."},"csv":{"entity":"Data type","table":"V1 table","disposition":"Decision","citation":"Reason","v1":"V1 rows","v2":"V2 rows","skipped":"Skipped","skipped_reasons":"Skipped by reason","excluded":"Excluded by policy","re_derived":"Folded or rebuilt in V2","unaccounted":"Unaccounted","field_parity":"Field checks","total":"Total"},"re_derived_line":"{count, plural, one {# row: folded into or rebuilt by V2, not left behind} other {# rows: folded into or rebuilt by V2, not left behind}}","never_extracted_line":"Marked to migrate, but none of its V1 rows were extracted.","written_targets_missing_line":"Recorded as written but missing from V2: {count}","written_targets_missing_accept_hint":"If V2 deleted one of these rows on purpose, accept it with a reason, then regenerate the report.","failure_accept":{"title":"Accept this failed report","body":"This account is cut over, so Fix can no longer re-read V1. If these failures are acceptable, record why. Disable V1 then treats this exact report as passed; a report generated later needs its own acceptance.","reason_label":"Reason","submit":"Accept the failed report","confirm_title":"Accept this failed report?","confirm_body":"This records, with your reason, that this exact report’s failures are accepted. It covers this report only; a report generated later needs its own acceptance.","recorded":"Failures accepted {at} by staff user {staff}. Reason: {reason}"},"backfill":{"hint":"{count, plural, one {# empty reference points at a record that is in V2 now.} other {# empty references point at records that are in V2 now.}} Preview the re-link to see what it would set.","preview":"Preview re-link","apply":"{count, plural, one {Re-link # reference} other {Re-link # references}}","confirm_title":"{count, plural, one {Re-link # reference?} other {Re-link # references?}}","confirm_description":"Each empty reference is set to the record its V1 link points at. References that already hold a value are left alone. This can't be undone from here.","field":"{field}: {resolvable} to re-link, {unresolvable} still pointing at nothing","nothing":"Nothing to re-link: no empty reference points at a record that is in V2.","done":"{count, plural, one {Re-linked # reference.} other {Re-linked # references.}} The integrity check is running again. Re-run parity once it finishes.","done_unqueued":"{count, plural, one {Re-linked # reference.} other {Re-linked # references.}} The integrity check could not be queued. Check referential integrity again, then re-run parity.","running":"Working through the migration ledger: {count, plural, one {# reference so far.} other {# references so far.}}"},"blocker_accept":{"title":"Field differences to accept","intro":"These values could not be migrated as they are. If a difference is expected, accept it with a reason so parity can pass. It counts as explained only while both values stay the same.","hard_rows":"{count, plural, one {# hard row} other {# hard rows}}","accept_all":"Accept all shown ({count})","accept":"Accept with reason","rerun_for_values":"This field check ran before values were recorded. Re-run the reconcile to list the rows you can accept.","capped":"Only some hard rows are shown. Accept these, then re-run the reconcile to see the rest.","source_id":"V1 ID","column":"Column","accepted_title":"Accepted differences","by":"{staff} · {at}","not_current":"No longer current: a value changed after it was accepted, so it counts as hard again.","revoke":"Revoke","revoke_title":"Revoke this accept?","revoke_body":"The difference counts as hard again. Regenerate the parity report afterwards.","revoke_confirm":"Revoke accept","form_title":"{count, plural, one {Accept this difference?} other {Accept # differences?}}","form_body":"Parity counts each difference as explained, with your reason. Nothing is written to V2. Regenerate the parity report afterwards.","reason_label":"Reason","submit":"Accept","done":"{count, plural, one {# difference accepted.} other {# differences accepted.}} Regenerate the parity report so it counts.","stale":"Accepted differences changed after this report was generated. Regenerate it, then sign it again.","warnings":{"hard_field_mismatch":"V2 keeps its own value for this field. The V1 value is not migrated.","owed_door_code_unit":"These locks keep V1's codes. V2 won't add codes to them until they are resolved.","owed_door_code_takeover_unit":"These locks keep V1's codes. V2 won't take those codes over for these stays, or add codes to the locks, until they are resolved.","owed_finalize_unit":"These steps will not run. Anything they would have switched on or handed over has to be done by hand.","owed_unplaced_twin_takeover_unit":"Lock unknown: a V1 code may remain on an unidentified lock."}},"former_members":{"hint":"Some records name staff V1 has deleted. Find them, then bring them in as deleted users so those records still say who it was.","find":"Find former members","running":"Checking V1 for deleted staff. On a large account this can take a minute.","failed":"The check for deleted staff didn't finish. Run it again.","found":"{deleted, plural, one {# staff member V1 deleted can be brought in.} other {# staff members V1 deleted can be brought in.}} Left out: {existsInV1, plural, one {# still exists in V1 in another organization} other {# still exist in V1 in another organization}}, {ambiguous, plural, one {# may be a guest account} other {# may be guest accounts}}, {heldInV2, plural, one {# is already a person in V2} other {# are already people in V2}}, and {unprovable, plural, one {# is not a V1 user ID} other {# are not V1 user IDs}}.","none":"No staff V1 deleted are left to bring in.","bring_in":"{count, plural, one {Bring in # former member} other {Bring in # former members}}","relink":"Re-link records","confirm_title":"{count, plural, one {Bring in # former member?} other {Bring in # former members?}}","confirm_description":"Each becomes a deleted user with no login, no email address and no access, and the records that name them are linked to it. Door codes stay unlinked. This can't be undone from here.","done":"{created, plural, one {# former member brought in} other {# former members brought in}}, and {linked, plural, one {# record} other {# records}} linked.","rechecking":"The integrity check is running again.","unqueued":"The integrity check could not be queued. Check referential integrity again, then re-run parity.","brought_in":"{count, plural, one {# former member already brought in.} other {# former members already brought in.}}"},"clean_entities":"{count, plural, one {# entity matches} other {# entities match}}"},"delta_panel":{"intro":"Bring this account up to date with the changes the customer made in V1 after the migration. Open a catch-up pass, confirm V1 is muted, read the changes, check what they would do, apply them, then close the pass.","read_failed":"The catch-up pass could not be loaded. Reload the page to try again.","ended":"This catch-up pass stopped before it was closed. Continue or roll it back from the Recovery panel.","closed":"The last catch-up pass is closed, and parity was counted again on the Parity stage.","open":"Open catch-up pass","open_another":"Open another catch-up pass","press_tier":"Your staff role cannot run this step.","mute_title":"1. Confirm V1 is muted","mute_press":"Check V1 mute","mute":{"unconfigured":"V1's mute cannot be read on this deployment, so V1 cannot be confirmed muted. Ask a SuiteOp engineer to check the V1 mute setup.","unchecked":"V1 has not been checked yet.","checking":"Checking V1…","muted":"V1 has been muted since {at}. Checked {relative}.","not_muted":"V1 is not muted. Ask the customer to mute V1, then check again.","stale":"The last check is more than 15 minutes old. Check again before reading changes."},"catch_up_title":"2. Read V1's changes","catch_up_blocked":"Available once V1 has been confirmed muted in the last 15 minutes.","catch_up_press":"Read changes","catch_up_started":"Reading V1's changes. Build the preview once the reads finish.","apply_title":"3. Preview and apply","apply_press":"Apply changes","apply_confirm_title":"Apply this catch-up pass?","apply_confirm_description":"The previewed V1 changes are written into this account. You can roll the pass back later, but door codes a lock already holds stay on the lock.","reapply_press":"Apply again","release_press":"Release held revokes","release_confirm_title":"Release the held door-code revokes?","release_confirm_description":"This pass removes more door codes at once than the safety limit allows, so those removals are on hold. Releasing lets the next write remove them. This cannot be undone.","released":"Held revokes released: {count}. Press Apply again to write them.","writing":"Writing the changes.","written":"Every change is written. Close the pass to finish.","see_progress":"See progress","close_press":"Close pass","close_confirm_title":"Close this catch-up pass?","close_confirm_description":"Closing finishes the pass and counts parity again. No more changes can be read or applied in it; open a new pass for later changes.","closing":"Closing the pass and counting parity again…","deletions":{"title":"Deleted in V1","description":"Records the customer deleted in V1 since the migration. SuiteOp does not delete them; review each one.","empty":"V1 deleted nothing in this pass.","col_record":"Record","col_outcome":"What SuiteOp did","more":"Show more","outcome":{"kept":"Kept. Review it with the customer.","sync_owned":"Kept. The PMS sync manages this stay.","past_stay":"Kept. The stay had already ended.","held":"On hold. Over the door-code safety limit.","applied":"Removed or cancelled.","waiting":"Waiting to be applied.","other":"Not applied."}}},"rollback_register":{"messages_sent":"Messages that the reactivated workflow rules sent after the cutover cannot be recalled. The rollback deletes the rules, not what they sent.","door_code_pushed":"Door codes V2 pushed to locks stay on the locks. The rollback deletes V2's records of them, not the codes themselves.","account_moved_email":"Every migrated person was emailed that their account has moved. That email cannot be taken back: tell them their account is back in V1.","schlage_webhook_replaced":"Schlage allows one webhook per account, and V2's replaced V1's. The rollback deletes V2's webhook but cannot restore V1's: V1 must register it again when V1 is re-enabled.","stay_announced":"Upcoming stays were announced at the cutover, so guests may have received messages from V2. Those messages cannot be recalled.","delta_cancellation_mirrored":"Stays deleted in V1 were cancelled in V2 as well, and their door codes revoked. V1 made the same cancellation, so this stays and changes nothing.","member_access_mirrored":"Team members whose access V1 changed after the commit had their door codes updated in V2 to match. V1 made the same change, so this stays and changes nothing.","token_rotated":"At the account handover after the lift, V2 rotates the token of each account whose provider rotates refresh tokens, so the token V1 holds stops working. No rollback is possible after the cutover: if the customer ever goes back to V1, they reconnect those providers in V1.","oauth_reconsent":"A customer who reconnected an account to V2 stays connected to V2's app. V1's own connection to that provider is untouched.","enum_value_added":"Values the migration added to the database's fixed lists stay after the rollback. They cannot be removed, and an unused value has no effect.","billing_adopted":"The customer's Stripe subscription keeps the metered items V2 attached when it took over billing. The rollback does not remove them; check the subscription with billing before V1 bills again.","vanity_host_moved":"At the cutover, each guest-portal vanity host is switched from V1 to V2, so guest links on the customer's own domain open V2. No rollback is possible after the cutover: if the customer ever goes back to V1, an engineer points each host back to V1 with the runbook's manual revert.","juspay_webhook_repointed":"At the cutover, each migrated JusPay Hyperswitch merchant's webhook is moved from V1 to V2, so V1 stops receiving that merchant's payment, refund and dispute events. No rollback is possible after the cutover: if the customer ever goes back to V1, the merchant's webhook must be pointed back to V1.","owner_reconnect_notice_sent":"At the cutover, members who can manage integrations are told, in the app and by email, which integrations need them to sign in again. Those notices cannot be recalled."},"delta_preview":{"title":"Catch-up preview","description":"What applying this catch-up pass would change in SuiteOp, rehearsed against the current data and then undone. Building it changes nothing.","press":"Build preview","pressing":"Building preview…","resume":"Continue preview","press_tier":"Your SuiteOp role can read this preview but not build it.","read_failed":"The catch-up preview could not be loaded. Reload the page to try again.","unreadable":"A preview was saved for this catch-up pass, but this version of the page cannot read it. Build it again.","empty":"No preview has been built for this catch-up pass yet. Build one before applying it.","computed_at":"Built {at} ({relative})","stale_age":"This preview is more than 15 minutes old. Build it again before applying the catch-up.","stale_basis":"The catch-up data has changed since this preview was built. Build it again before applying the catch-up.","partial":"This preview is incomplete: {rehearsed, plural, one {# record} other {# records}} rehearsed, {remaining, plural, one {# record} other {# records}} still to go. Continue it before applying the catch-up.","mass_revoke_title":"Door-code revokes held","mass_revoke_held":"{revokes} of {liveCodes} live door codes would be revoked, over the limit of {threshold}. All of them are held at apply until a SuiteOp engineer releases the hold.","mass_revoke_members":"Of the revokes, {memberCodes} belong to team members whose access V1 changed after the commit. SuiteOp removes or re-syncs them at the cutover, once the hold is released.","mass_revoke_unmeasured":"{count, plural, one {# catch-up record could not be measured because its committed V1 data was} other {# catch-up records could not be measured because their committed V1 data was}} cleared under the retention policy. The door-code revokes are held at apply until a SuiteOp engineer releases the hold.","rollback_door_codes":"Door-code changes are not undone by a rollback: once a lock holds a new PIN, schedule or removal, rolling back the catch-up keeps it.","totals_title":"All records","refused_title":"Refused, by reason","not_carried_title":"Not carried by the catch-up, by reason","links_removed_title":"Links the catch-up removes","member_effects_title":"Team member changes, by what follows","cutover_holds_title":"Left without a code at the cutover","translations_refreshed":"Would update {count, plural, one {# translation} other {# translations}}.","translations_added":"Would add {count, plural, one {# translation} other {# translations}} added in V1.","translations_cleared":"Would remove {count, plural, one {# translation} other {# translations}} removed in V1.","translations_minted":"Would create {count, plural, one {# translation} other {# translations}} for text added in V1.","translations_stale":"Would leave {count, plural, one {# machine translation} other {# machine translations}} out of date after an English update, by field and language:","sealed_refreshed":"Would update {count, plural, one {# protected value} other {# protected values}}, such as door or Wi-Fi codes, by field:","sealed_unreadable":"could not be read","kept_columns_title":"Kept because they were edited in SuiteOp, by field","not_rehearsed_title":"Not rehearsed","created_graded_note":"{count, plural, one {# new record} other {# new records}} would be created or adopt an existing record. New records are graded, not rehearsed: the write decides at apply.","links_not_rehearsed":"{joinKey}: links of {count, plural, one {# record} other {# records}} are counted, not rehearsed.","depends_on_new_row":"A changed record that points at a record this catch-up would create may show here as quarantined; at apply the new record is written first.","after_page_not_rehearsed":"Two steps apply runs after it writes each page are not rehearsed: filling in links to records written later in the same pass, and re-checking which listing is a property's main one.","links_title":"Links","col":{"entity":"Record type","link":"Link type","outcome":"Outcome","count":"Records","links":"Links","samples":"Example V1 ids"},"bucket":{"created":"Would create / adopt","updated":"Updated","revoked":"Door code revoked","cancelled":"Stay cancelled","unchanged":"Unchanged","kept_v2":"Kept: edited in SuiteOp","kept_sync":"Kept: kept up to date by the PMS","kept_derived":"Kept: SuiteOp works out other data from it","not_refreshed_translation":"Translated text not updated","not_refreshed_file":"File not updated","not_refreshed_sealed":"Protected value not updated","removal_not_applied":"Removed links kept","link_kept_deleted":"Kept deleted: removed in SuiteOp","superseded":"Not applied: another V1 record takes precedence","gone":"Deleted in SuiteOp","refused":"Refused","past_stay":"Past stay, not cancelled","deletion_sync_owned":"V1 deletion not applied: kept up to date by the PMS","held_finalize":"Held for the finishing steps","held_mass_revoke":"Held: too many door-code revokes","held_service_arm":"Held: needs its own service","waits_new_row":"Waits for a record this catch-up creates","deletions_recorded":"V1 deletions recorded","base_unavailable":"Earlier copy unavailable","quarantined":"Quarantined","excluded":"Excluded","failed":"Failed","other":"Other"},"refusal":{"parked":"The door code is parked","pin_conflict":"The PIN is already in use on this lock","shared_person_pin":"The PIN is a person's shared PIN","offline_code":"The door code is an offline code","grant_pin":"The PIN belongs to an access grant","shared_grant":"The door code belongs to a shared grant","v1_revoke_still_on_lock":"V1 revoked the door code, but the lock still lists it","v1_revoke_unverified":"V1 revoked the door code, but the lock could not be read to confirm it is gone","sealed_not_carried":"A protected value is not carried by the catch-up","not_live":"The stay is no longer active","default_held":"SuiteOp already has a different default payment account","default_not_vacated":"The default payment account can't be left empty","default_inactive":"The payment account is inactive in SuiteOp","hostname_taken":"Another custom URL already uses this web address","live_hostname":"The custom URL is live in SuiteOp, so its web address is kept","email_held_by_other_guest":"Another guest already uses the new email","email_pms_id_conflict":"Removing the email would clash with another guest's PMS ID","owner_role":"The change would affect the organization owner","email_held_by_other_user":"Another person already uses the new email","email_route_conflict":"The new email already signs in to another SuiteOp account","identity_adopted":"The person's account existed before the migration, so its email is theirs to change","identity_mirror":"The person's account is managed in another region","identity_claimed":"The person has already signed in or verified their email","identity_not_member":"The person is not an active member of this organization","not_run_organization":"The organization is not the one this migration is for","organization_column_not_carried":"This organization field is not carried by the catch-up","pin_cleared_in_v1_kept":"V1 removed the team member's door PIN, so their SuiteOp door PIN is kept"},"translation_detail":{"v2_edited":"Changed in SuiteOp since the migration, so SuiteOp's text is kept","parent_not_migrated":"The text belongs to a record the migration did not create","not_minted_at_commit":"The migration created no translation for this text","repointed_in_v2":"The record uses a different translation in SuiteOp now","translation_gone":"The translation was deleted in SuiteOp","translation_text_too_long":"The new text is too long for this field","entry_rejected":"SuiteOp did not accept the new text"}},"attestationLines":{"messaging_active":"Guests will not receive this message: the migrated rule is not live.","messaging_send_path":"Guests will not receive this message: its email cannot be sent as set up.","advance_notices":"Guests will not receive this message for these upcoming stays: it is not scheduled for them.","portal_link_redirect_only":"Calry cannot write a reservation field into this PMS, so SuiteOp cannot put the guest portal link there for new bookings. Links V1 already stored there keep working only through V1's reservation-page redirect, until V1 is switched off.","portal_link_domain_not_repointed":"This custom URL still points at V1. Guest portal links on it keep working only through V1's reservation-page redirect, until V1 is switched off or the web address is routed to SuiteOp.","file_v1_refused":"V1's file storage refused to hand over this file, so it was not copied, and no retry can fetch it now. Get it from the guest again if you still need it, then sign this line off.","file_v1_gone":"V1's storage reports this file deleted, so there was nothing to copy. Get it from the guest again if you still need it, then sign this line off.","file_not_accepted":"V1's file was too large, empty or not a document or image SuiteOp accepts, so it was not copied. Get a usable copy from the guest if you still need it, then sign this line off.","file_owner_not_migrated":"The record this file belongs to was not migrated, so SuiteOp has nowhere to keep the file. That record's own Parity line covers the loss. Sign this line off."},"failed_items":{"accept":{"button":"Accept","title":"Accept this row for parity?","body":"Parity counts the row as explained, with your reason. The row is not written. Regenerate the parity report afterwards.","reason_label":"Reason","submit":"Accept row","done":"Row accepted. Regenerate the parity report so it counts.","unmanaged_codes":"{count, plural, one {# code on this lock may still open it and stays unmanaged after you accept} other {# codes on this lock may still open it and stay unmanaged after you accept}}","unmanaged_codes_group":"{count, plural, one {# code on these locks may still open them and stays unmanaged after you accept} other {# codes on these locks may still open them and stay unmanaged after you accept}}","unmanaged_codes_unknown":"Couldn't count the codes on this lock. Any codes that may still open it will stay unmanaged after you accept.","unmanaged_codes_group_unknown":"Couldn't count the codes on these locks. Any codes that may still open them will stay unmanaged after you accept."},"accept_group":{"button":"Accept all {count, number}","title":"Accept all {count, plural, one {# row} other {# rows}} under this reason?","body":"Parity counts every row of this group that can be accepted as explained, with your reason. Rows already accepted, no longer current, or whose error heals on its own are skipped. No row is written. Regenerate the parity report afterwards.","submit":"Accept all","done":"{accepted, plural, one {# row accepted} other {# rows accepted}}, {skipped, plural, one {# skipped} other {# skipped}}. Regenerate the parity report so it counts.","so_far":"So far: {accepted, plural, one {# row accepted} other {# rows accepted}}, {skipped, plural, one {# skipped} other {# skipped}}."},"accept_all":{"button":"Accept all failed items","title":"Accept {count, plural, one {# failed row} other {all # failed rows}}?","summary":"{items, plural, one {# row} other {# rows}} across {groups, plural, one {# group} other {# groups}}.","body":"Parity counts every failed row that can be accepted as explained, with your reason. Rows already accepted, no longer current, or whose error heals on its own are skipped. No row is written. Regenerate the parity report afterwards.","submit":"Accept all"},"acceptance_status":{"accepted":"Accepted","all_accepted":"All accepted"},"accepted_progress":"{accepted, number} of {count, number} accepted","remaining_only":"Show remaining only","title":"Failed items","description":"Rows this run could not migrate, grouped by cause. Retrying puts rows back in the queue and resets their attempts. It never re-runs anything already written.","empty":"Nothing failed on this run.","class":{"retryable":"Retryable","refused":"Refused by the data","quarantined":"Quarantined"},"class_hint":{"retryable":"This error can clear on another attempt.","refused":"Every attempt so far was refused for this reason. A retry re-sends the V1 data read when the run started, so a fix made in V1 since then won't take.","quarantined":"Set aside after repeated failures or a failed check. Retrying resets their attempts.","quarantined_refused":"Refused on purpose: the migration would have had to guess, so it did not write these rows. Retrying will not change them unless the V1 data changes; accept them, or fix the data in V1.","quarantined_not_written":"Set aside without being written, and not because of anything in their data. Retry them; accept them only once you know why they were not written."},"payment_hold_hint":"These are payments. One may be an open card hold or an uncaptured charge, so check each one in Stripe before you accept it.","error_text":"Error recorded as text","no_code":"No error code","owner_only":"Retried with the record it belongs to","rows_count":"{count, plural, one {# row} other {# rows}}","attempts":"{count, plural, one {# attempt} other {# attempts}}","select_row":"Select {id}","load_more":"Load more","retry_selected":"Retry selected ({count})","retry_group":"Retry all in group","confirm_selected_title":"Retry {count, plural, one {# row} other {# rows}}?","confirm_group_title":"Retry all {count, plural, one {# row} other {# rows}} in this group?","confirm_body":"These rows go back in the queue and their attempts reset. Nothing already written is re-run.","confirm_refused_note":"These rows were refused by their data. A retry re-sends the V1 data read when the run started, so a fix made in V1 since then won't take.","confirm_action":"Retry","retry_done":"{count, plural, one {# row is} other {# rows are}} back in the queue.","selection_cap":"You can retry up to {count, plural, one {# row} other {# rows}} at a time.","retry_refused":"{count, plural, one {# row was} other {# rows were}} not retried.","refused":{"inFlight":"{count, plural, one {# is} other {# are}} already back in the queue.","settled":"{count, plural, one {# is} other {# are}} no longer failed.","notRetryable":"{count, plural, one {# cannot} other {# cannot}} be retried from here.","notFound":"{count, plural, one {# is} other {# are}} no longer part of this run."},"retry_nothing":"Nothing was retried. These rows are no longer failed.","retry_run_closed":"This migration run has already finished, so its failed rows cannot be retried.","retry_into_child_run":"This run has finished. Retry opens a catch-up run (Delta) from it that re-reads the selected rows from V1. Rows already written are not run again. Preview, apply and close the catch-up to write them.","retry_child_run":"Opened catch-up run {run} to re-read these rows from V1. Preview, apply and close it to write them.","retry_child_run_truncated":"There were more rows than one catch-up reads. Close this one, then retry the rest.","retry_changed":{"button":"Retry changed","confirm_title":"Retry the {count, plural, one {# row} other {# rows}} that changed in V1?","confirm_body":"Each row in this group is read from V1 again. Only rows that changed since the run read them are refreshed and put back in the queue. Rows V1 still holds as they were stay failed.","confirm_action":"Check V1 and retry","in_flight":"Checking V1 for changed rows…","done":"{count, plural, =0 {No changed rows went back in the queue.} one {# changed row is back in the queue.} other {# changed rows are back in the queue.}}","unchanged":"{count, plural, one {# row is} other {# rows are}} unchanged in V1 since the refusal and stayed failed.","gone":"{count, plural, one {# row is} other {# rows are}} no longer in V1.","not_rearmed":"{count, plural, one {# changed row} other {# changed rows}} could not go back in the queue.","failed":"Retry changed could not finish. Try again."},"retry_left":"{count, plural, one {# row was} other {# rows were}} left as they were: already queued, no longer failed, or retried with the record they belong to."},"accept":{"intro":"The customer accepts the signed parity report here. The recorded acceptance is what allows V1 to be turned off later.","read_failed":"The acceptance could not be loaded. Reload the page to try again.","not_ready":"Only a signed, passing parity report can be accepted. Sign the report on the Parity stage first.","press":"Record acceptance","tier":"Recording the acceptance needs the destructive migration tier. Ask an engineer to record it.","confirm_title":"Record the customer's acceptance?","confirm_body":"This records that the customer accepted this exact signed report. The record is permanent: it cannot be edited or replaced.","confirm_action":"Record acceptance","recorded":"Customer acceptance recorded {at} by staff user {staff}, for report version {digest}.","stale":"{pass, select, none {The data changed since the customer accepted.} other {The data changed since the customer accepted (catch-up pass {pass}).}} Sign the new parity report on the Parity stage, then record the acceptance again.","regenerate_first":"The signed report on file is the one the customer already accepted. Generate the parity report again on the Parity stage and sign it, then record the acceptance."},"verify_signoff":{"title":"Sign-offs","intro":"Everything the checks could not prove is listed here for a SuiteOp staff member to sign off. Run the checks, then sign, override or revoke each line. Every sign-off records your name.","probe":"Run the checks","reprobe":"Run the checks again","probed_at":"Last checked {at}.","never_probed":"The checks have not run on this migration yet.","refusals_title":"Why Verify cannot finish yet","refusals":{"verify_incomplete":"The checks have not run, or a check failed in a way no sign-off can answer. Fix it, then run the checks again.","verify_stale":"The last check is more than 15 minutes old. Run the checks again. Sign-offs carry over for lines that are still listed.","attestations_open":"A required line has no sign-off yet."},"gate_open":"Every required line is signed off and the checks are up to date.","unanswered_title":"Failed checks to fix","unanswered_hint":"These cannot be signed off. Fix each one, then run the checks again.","unanswered_no_outcome":"This check did not pass and named nothing to sign off.","blocker_accept":{"title":"Payment checks to accept","intro":"These JusPay Hyperswitch checks read what the cutover recorded, so running the checks again won't clear them. If one can't be fixed now, accept it with a reason so Verify can finish. Accepting never turns the account or its payments back on.","account":"Payment account","accepted_title":"Accepted payment checks","not_current":"No longer current: the account or its check changed after it was accepted, so it blocks Verify again.","revoke_body":"The check blocks Verify again.","form_title":"{count, plural, one {Accept this failed check?} other {Accept # failed checks?}}","form_body":"Verify counts each check as answered, with your reason. The payment account is not changed.","done":"{count, plural, one {# check accepted.} other {# checks accepted.}}","holds_warning_key":"{count, plural, one {This account backs # open hold. It can't be captured or released through V2 while the merchant key is dead.} other {These accounts back # open holds. None can be captured or released through V2 while the merchant key is dead.}}","holds_warning_webhook":"{count, plural, one {This account backs # open hold. V2 won't hear whether it is captured or released until the profile points at Hookdeck.} other {These accounts back # open holds. V2 won't hear whether any is captured or released until the profile points at Hookdeck.}}","hold_line":"Reservation {reservation} · {amount} · expires {expires}","hold_no_reservation":"none","hold_no_expiry":"no expiry date","warnings":{"juspay_payments_off":"JusPay Hyperswitch payments stay off until re-verified.","juspay_webhook_off_hookdeck":"V2 receives none of this merchant's payment events until the profile points at Hookdeck."}},"lines_title":"Lines to sign off","lines_empty":"Nothing needs a sign-off on the last check.","press_tier":"Your staff role can read these lines but not sign them off.","passed_title":"Passed checks","pending_hint":"Not confirmed yet. Each confirms on its own, for example when the first webhook arrives after the move. These don't block Verify.","pending_title":"Pending checks","stale_title":"Sign-offs no longer listed","stale_hint":"These lines left the last check, so their sign-offs no longer count.","required":"Required","optional":"Optional","show_all":"Show all {count}","hide_all":"Hide the list","subjects_failed":"The full list could not be loaded. Try again.","subjects_none":"The full list is not available. Run the checks again.","subjects_more":"Not shown: {count}","hold_split":{"count":"Open holds: {count}","type":"By type: external {external} · deposit {deposit} · upsell {upsell} · other {other}","age":"Age in V1: under 7 days {under7d} · 7–29 days {d7to29} · 30–89 days {d30to89} · 90+ days {d90plus}"},"ticked":{"attested":"Signed off by {staff}, {at}","overridden":"Overridden by {staff}, {at}"},"staff_missing":"an unknown staff user ({id})","device_missing":"Device not found ({id})","device_unnamed":"Unnamed device ({id})","tick_reason":"Reason: {reason}","sign":"Sign off","override":"Override","revoke":"Revoke","fix_calry":"Point the webhook back","fix_tier":"Your staff role cannot run this fix.","calry_result":{"ours":"The webhook already points at SuiteOp. Run the checks again.","restored":"SuiteOp pointed the webhook back. Run the checks again.","readded":"SuiteOp added a new webhook of its own. Run the checks again.","restore_failed":"Pointing the webhook back failed. Ask a SuiteOp engineer.","absent":"Calry no longer lists this webhook. Ask a SuiteOp engineer.","unverifiable":"Calry could not be checked. Try again later.","not_bound":"This account has no webhook on record. Ask a SuiteOp engineer."},"fix_portal_link":"Use V1's field again","portal_link_by_name":"This PMS names its fields instead of numbering them, so the fix cannot point SuiteOp back at V1's field. Check that the PMS templates read SuiteOp's portal link field, then sign this line off.","portal_link_result":{"readopted":"SuiteOp writes the portal link into V1's field again. The checks are running again.","already_adopted":"SuiteOp already writes the portal link into V1's field. Run the checks again.","gone":"This PMS no longer has V1's field. Point the PMS template at SuiteOp's field, then sign this line off.","unsupported":"SuiteOp cannot re-point this PMS's field from here. Check that the PMS templates read SuiteOp's portal link field, then sign this line off.","unverifiable":"The PMS could not be read. Try again later."},"sign_title":"Sign off this line?","sign_description":"{line}. Your name is recorded with the sign-off. You can revoke it later.","override_title":"Override this line?","override_description":"{line}. Override when the line is acceptable as it stands, and say why. Your name is recorded.","reason_label":"Reason","reason_required":"Required for this line.","reason_optional":"Optional.","revoke_title":"Revoke this sign-off?","revoke_description":"The line goes back to open and holds Verify until someone signs it off again. The revoke is recorded.","status":{"open":"Open","attested":"Signed off","overridden":"Overridden","auto_green":"Passed"},"kind":{"device_unreachable":"Device did not answer","code_unrevocable":"Door code cannot be removed","stay_code_unverifiable":"Stay door code could not be checked","lock_not_code_capable":"Lock cannot take door codes","native_twin_code_unadopted":"V1 door code was not taken over — no new code is set on that lock until this is signed off","file_unreachable":"File could not be reached","probe_outcome":"Check did not pass","door_codes_resolved_without_vendor":"Lock resolved without the vendor — V1's codes stay on it and nothing changes them until it reconnects and is re-queued"},"leg":{"pmsStatus":"PMS connection","pmsWebhook":"PMS webhook","pmsLiveRead":"PMS live read","paymentHolds":"Payment holds","paymentAccounts":"Payment accounts","esignKeepalive":"E-sign connection","esignRetrieval":"E-sign documents","authenticateWebhook":"Authenticate webhook","messagingActive":"Guest messages live","messagingSendPath":"Guest message sending","advanceNotices":"Upcoming guest messages","complianceFilesPlaced":"Guest files stored","complianceFilesRetrievable":"Guest files readable","complianceFilesSettled":"Guest files copied","devicePresent":"Devices answer","deviceOnline":"Devices online","codeCapable":"Locks take codes","stayCodes":"Stay door codes","scheduledWork":"Scheduled work","webhookReceipt":"Webhooks received"},"parity_accepted":"Accepted at Parity by {staff}, {at}","parity_accepted_hint":"Already answered at Parity, so there is nothing to sign here. To undo it, revoke the acceptance on the Parity step.","fix_vanity":"Retry takeover","vanity_result":{"moved":"The web address now points at SuiteOp. Run the checks again.","kept":"This web address is not moved at the cutover. Sign this line off.","env_refused":"This environment may not move web addresses, so nothing was changed.","claimed":"Another account holds this web address, so nothing was moved. Ask a SuiteOp engineer.","unreadable":"SuiteOp could not confirm who owns this web address just now, so nothing was moved. Try again later.","no_route":"Cloudflare has no route for this web address to move, so nothing was changed. Ask a SuiteOp engineer.","foreign_script":"This web address is served by something other than V1 or SuiteOp, so nothing was moved. Ask a SuiteOp engineer."},"signed_title":"{count, plural, one {# line signed off} other {# lines signed off}}","show_more":"Show {count, number} more"},"stage_refusal":{"unknown":"Refused for a reason this page cannot name yet: {code}","run":"Run {runId}","pass":"Catch-up pass {number}"},"cutover_panel":{"intro":"Hand this account from V1 to V2. The cutover makes V2 the account’s system of record; the lift of the outbound mute follows it, and the account handover follows the lift.","read_failed":"The cutover state could not be loaded. Reload the page to try again.","marker":"Cut over on {at}.","no_rollback":"This migration can no longer be rolled back.","what_it_does":"Cutover makes V2 this account’s system of record. It cannot be undone: a rollback is refused from then on.","button":"Cut over this account","tier":"Cutting over needs the destructive migration tier. Ask an engineer to press Cut over.","refused_title":"Cutover is not available yet:","delta_hint":"Failed or stalled catch-up passes are shown on the Delta stage.","open_delta":"Open Delta","dialog_title":"Cut {account} over to V2?","dialog_body":"V2 becomes this account’s system of record. The steps owed at cutover start once outbound is turned back on.","dialog_warning":"This cannot be undone. After the cutover, this migration can never be rolled back.","submit":"Cut over","owed":"{cutOver, select, yes {{count, plural, one {# step is} other {# steps are}} still running after the cutover.} other {{count, plural, one {# step waits} other {# steps wait}} for the cutover.}}","steps_title":"After the cutover","handover_none":"No integration account needs handing over.","handover_unverified_title":"{count, plural, one {# account's refreshed connection failed its check} other {# accounts' refreshed connections failed their check}}","handover_unverified_next":"V2 owns these connections, but a read with the new token failed. Check each connection, since nothing else re-checks it.","mute_title":"Outbound mute lift","mute_read_failed":"Whether the mute can be lifted could not be read.","mute_lifted":"Lifted. This account’s outbound messages are on.","mute_not_muted":"The migration’s outbound mute is not on for this account.","mute_waiting":"Waits for the cutover. The mute can be lifted only after it.","mute_ready":"Ready. The account’s admin, or a staff member impersonating the account, lifts it from the banner at the top of the page.","attest_explain":"V1 cannot be read, so no catch-up pass can run. An operator can record the cutover without one, with a reason.","attest_button":"Cut over without a catch-up pass","attest_title":"Record the cutover without a catch-up pass","attest_body":"Changes V1 took between the migration's read and its mute will not reach SuiteOp. Record why a catch-up pass cannot run.","attest_warning":"Use this only while V1 cannot be read. Changes made in V1 since the migration read it are lost for good.","attest_reason_label":"Why can no catch-up pass run?","attest_submit":"Record and allow the cutover","stay_messages_title":"Guest messages for activated stays","stay_messages_explain":"Counted from the email steps of the active workflows that reach each stay: a forecast, not a send log. A message planned before V1 stopped sending was V1’s to send, so SuiteOp skips it; one planned after, SuiteOp sends. A held message was planned while V1 was being muted, so it may not have gone out; SuiteOp has not sent it.","stay_messages_stays":"Activated stays","stay_messages_to_send":"SuiteOp sends","stay_messages_skipped":"Skipped as V1’s","stay_messages_held":"Held","stay_messages_unplannable":"No planned time","stay_messages_unplannable_note":"{count, plural, one {# message has no planned time: its step is timed from a date the stay does not have, so it cannot be placed before or after V1 stopped sending.} other {# messages have no planned time: their steps are timed from a date the stay does not have, so they cannot be placed before or after V1 stopped sending.}}","stay_messages_column_stay":"Stay","stay_messages_unnamed":"Stay with no guest name","stay_messages_more":"{count, plural, one {# more stay is not listed.} other {# more stays are not listed.}}","door_codes":{"resolve_button":"Resolve without the vendor","resolve_title":"Resolve {lock} without the vendor?","resolve_body_kept":"V1's codes on this lock stay exactly as they are, and nothing is written to the lock.","resolve_body_no_new_codes":"New stays on this lock will get NO door code until you press Re-queue after the lock reconnects.","resolve_body_disable_v1":"The cutover can then finish, so Disable V1 is allowed.","resolve_body_v1_off":"Once V1 is off, nothing removes V1's codes from this lock when they end.","resolve_confirm":"Resolve without the vendor","resolved_title":"{count, plural, one {# lock resolved without the vendor} other {# locks resolved without the vendor}}","resolved_line":"{lock}: door codes resolved without the vendor. New stays get no door code until you re-queue it.","resolved_line_reconnected":"{lock}: door codes resolved without the vendor, and its account is connected. Press Re-queue to put them back in the queue. New stays get no door code until then.","requeue_button":"Re-queue","requeue_title":"Re-queue {lock}?","requeue_body":"Do this once the lock is reconnected. Its door-code steps run again, and the cutover re-opens until they finish.","requeue_confirm":"Re-queue","apply_refused_button":"Remove V1's revoked codes","apply_refused_title":"Carry out V1's removal of {count, plural, one {# door code} other {# door codes}}?","apply_refused_body_off":"These codes leave SuiteOp and are never sent to a guest, as V1 asked. A lock that still holds one keeps opening with it.","apply_refused_body_grant":"Nothing is sent to the locks: each code belongs to an access grant, and the grant's other door codes keep working.","apply_refused_body_check":"After the account handover, SuiteOp checks each lock and flags any code the lock still has.","apply_refused_confirm":"Remove the codes"}},"post_cutover":{"title":"Connections after cutover","intro":"These checks re-ran once the cutover's bindings finished. They never block anything, but every line that did not pass needs a rep's acknowledgement.","checked_at":"Checked {at}.","rerun":"Re-run","none":"These checks run once the cutover's bindings finish.","queued":"A re-check is waiting to run. Its results appear here when it finishes.","tier":"Your staff role can read these checks but not re-run or acknowledge them.","passed_title":"Passed checks","pending_hint":"Not confirmed yet. Each confirms on its own, for example when the first webhook arrives after the move.","pending_title":"Pending checks","low_battery_title":"Batteries already low at cutover ({count})","low_battery_hint":"V2 won't alert on these devices until it reads a new battery level. Check them now.","low_battery_device":"{name}: {level}","low_battery_more":"And {count} more.","no_reasons":"This check did not pass and named no reason.","acknowledge":"Acknowledge","acknowledged_at":"Acknowledged {at}.","all_acknowledged":"All lines that did not pass are acknowledged.","verdict":{"pass":"Passed","fail":"Failed","unverified":"Unverified"}},"people":{"title":"Migrated people","intro":"Everyone this migration moved gets one email saying their account has moved, with a link to set a password. Resend it to someone who lost theirs.","counts":"{total, plural, one {# person} other {# people}} · {eligible, plural, one {# can be sent the email} other {# can be sent the email}}","tier":"Your staff account is not cleared to resend these emails.","empty":"This migration has no people to list.","column_name":"Name","column_email":"Email","column_status":"Status","column_last_requested":"Last requested","column_actions":"Actions","states":{"eligible":"Can resend","user_gone":"Account deleted","no_membership":"No longer a member","already_credentialed":"Password already set","no_password_login":"No password sign-in","no_org_name":"Organization has no name","cooldown":"Sent recently","invite_pending":"First email pending"},"skip_reasons":{"user_gone":"Account deleted","no_membership":"No longer a member","already_credentialed":"Password already set","no_password_login":"No password sign-in","no_org_name":"Organization has no name","cooldown":"Sent recently","invite_pending":"First email pending","not_migrated":"Not moved by this migration"},"resend_button":"Resend","resend_all_button":"Resend to all eligible ({count})","confirm_one_title":"Resend the email to {name}?","confirm_one_body":"{email} gets the \"your account has moved\" email again, with the link to set a password. An email can't be unsent.","confirm_all_title":"{count, plural, one {Resend the email to # person?} other {Resend the email to # people?}}","confirm_all_body":"{count, plural, one {# person gets} other {# people get}} the \"your account has moved\" email again, with the link to set a password. Anyone who can no longer receive it is skipped. An email can't be unsent.","confirm_action":"Send email","cancel":"Cancel","page":"Page {page} of {pages}","page_previous":"Previous page","page_next":"Next page","toast_result":"{sent, plural, one {# email sent} other {# emails sent}} · {skipped, plural, one {# skipped} other {# skipped}}","toast_skip_row":"{reason}: {count}"},"cohort_watch":{"title":"Post-migration watch","description":"Re-checks this organization on day 1, 7 and 30 after the lift against its own last 30 days. Watching since {at}.","state":{"watching":"Watching","regressed":"Regressed","cleared":"Cleared","cancelled":"Cancelled","awaiting_sign_off":"Awaiting sign-off"},"checkpoint":{"d1":"Day 1","d7":"Day 7","d30":"Day 30"},"checkpoint_status":{"pending":"Pending","running":"Checking","clean":"Clean","regressed":"Regressed","skipped":"Not run"},"due_at":"Due {at}","started_at":"Started {at}, waiting on the device check","settled_at":"Checked {at}","regression_class":{"webhook":"Webhooks","money":"Payments","lock":"Locks","account":"Accounts","messages":"Guest messages"},"notes":"Lines it could not judge: {count}","issue":"Issue {identifier}","retired":{"d30_clean":"Cleared on {at}: day 30 came back clean","sign_off":"Signed off on {at}","run_cancelled":"Cancelled on {at}: the migration run is no longer completed"},"retired_note":"Note: {note}","sign_off":{"note_label":"Sign-off note","description":"Ends the watch early. Say why it can stop.","submit":"Sign off","note_required":"Write a note before signing off.","note_too_long":"The note can be at most 2000 characters.","already_retired":"This watch has already ended. Refresh to see why."}},"reconnect":{"checklist":{"title":"Before V1 is turned off","description":"Steps done outside SuiteOp. Attest each one once it is done, or waive it with a reason. This is a to-do list: it never holds this stage or turning V1 off.","kind":{"brivo_dashboard_url":"Brivo: set the webhook URL in the Brivo dashboard to SuiteOp","brivo_webhook_token":"Brivo: the region's webhook URL token is set up","airbnb_connect_adopt":"Airbnb: adopt the Hospitable Connect customer in the admin console","email_domain_dns":"Email domain: the customer verifies its DNS records again","calry_renew_webhooks":"Calry: don't press Renew Webhooks in V1 (or the admin bulk renew) during the migration"},"attest":"Attest","waive":"Waive","waive_reason_label":"Why waive this?","waive_submit":"Confirm waive","attested":"Attested","waived":"Waived","attested_by":"Attested by {name} on {date}","waived_by":"Waived by {name} on {date}","platform_title":"Platform steps (staff, once per region)","platform_description":"Done once for every customer, not per account. Not recorded on this page: track them in the cutover runbook.","platform":{"zapier_app_republish":"Zapier: republish app 199312 to SuiteOp's endpoints, with region routing","partner_urls":"Partner consoles: update the partner URLs","igloohome_webhook_url":"Igloohome: move the app's webhook URL to SuiteOp","netatmo_webhook_url":"Netatmo: move the app's webhook URL to SuiteOp","stripe_platform_attestation":"Stripe: attest the platform settings","hookdeck_retire":"Hookdeck: re-point the JusPay Hyperswitch, SmartThings and GuestAdmin provider consoles to the V2 gateway, then delete Hookdeck when V1 is turned off"}},"intro":"Optional. Check what moved over from V1 and what the owner needs to sign in to again. You can continue at any time.","copy_owner_link":"Copy link for the owner","copy_owner_link_done":"Link copied. Send it to the owner or an admin.","copy_owner_link_hint":"The owner or an admin opens it signed in as themselves to sign in to these again.","copy_owner_link_failed":"Could not copy. Send this link: {url}","read_failed":"Could not load the integrations.","retry":"Try again","empty_title":"Nothing to reconnect","empty_description":"This account had no integrations in V1 that need checking. You can continue.","working_title":"Migrated and working","working_description":"V2 took these over from V1. Nothing to do.","sign_in_title":"Needs your sign-in","sign_in_description":"The owner signs in to these again from their own Integrations page.","send_to_owner":"Send to owner","sent_to_owner":"Sent to owner","send_after_cutover_hint":"You can ask the owner after the cutover.","separate_account":"Reconnected as a separate account. The migrated account is still not connected.","defer":"Defer","defer_reason_label":"Why defer this?","defer_submit":"Confirm defer","cancel":"Cancel","deferred":"Deferred","undo_defer":"Undo","continue":"Continue","continue_hint":"Anything not reconnected yet is recorded as skipped.","continue_reason_label":"Note (optional)","state":{"held":"On hold: V2 is checking this account before it takes over.","finishing_after_cutover":"Finishes after the cutover."}},"unmanaged_v1_codes":{"summary":"{count, plural, one {# live V1 code stays on a lock V2 does not manage} other {# live V1 codes stay on locks V2 does not manage}}","hint":"V2 can't change or revoke them. They keep opening the lock until someone removes them from it.","devices":"V1 devices: {ids}","devices_more":"V1 devices: {ids}, and more"}},"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","portal":"Portal","operations":"Operations","devices":"Devices"},"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."},"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."},"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."},"guest_surveys_collected":{"metric_name":"Guest Surveys Collected","fun_name":"Feedback Magnet","share_opener":"{value} guest surveys collected.","share_impact":"Across {total_properties_managed} properties, every one a guest telling us how the stay really went.","share_how":"Feedback does not arrive on its own. Asking while the stay is still fresh is most of it."},"survey_average_rating":{"metric_name":"Guest Survey Rating","fun_name":"Guest Whisperer","share_opener":"{value} average rating across our guest surveys.","share_impact":"Across {total_properties_managed} properties and {guest_surveys_collected} surveys.","share_how":"A rating this steady is not about peaks. It is about not having bad stays."},"survey_months_above_4_5":{"metric_name":"Survey Months Above 4.5★","fun_name":"Consistency Crown","share_opener":"{value} consecutive months above 4.5 stars from guest surveys.","share_impact":"Across {total_properties_managed} properties and {guest_surveys_collected} surveys.","share_how":"Consistency is harder than excellence. One bad month erases three good ones."},"total_properties_managed":{"metric_name":"Total Properties Managed","fun_name":"Portfolio King","share_opener":"{value} properties under management.","share_impact":"{total_users_on_platform} people and {total_tasks_completed} tasks 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."},"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_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","contacts":"Contacts","blacklist":"Blacklist","tasks":"Tasks","my_tasks":"My Tasks","dashboard":"Dashboard","all_tasks":"All Tasks","guest_issues":"Guest issues","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":"Catalog","portal_config":"Portal Config","payments":"Payments","brands":"Brands","verify":"Verify","upsells_nav":"Upsells","postcards":"Postcards","shifts":"Shifts","my_timesheet":"My Timesheet","time_off":"Time Off","shift_dashboard":"Shift Dashboard","folio":"Folio","email_templates":"Email templates","developer":"MCP & API","observability":"Observability","new":"New","qa_session":"QA Session","start_qa_session":"Start QA Session","qa":"QA","messages":"Messages","payouts":"Pay runs"},"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","time_off":"Time off"},"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}","step_eyebrow":"Step {current} of {total} · {stage}","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":{"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.","required_note":"This step can't be skipped, because grouping and check-in instructions both work on the properties it brings in. Not ready to connect yet? Use “{back}” at the top and come back any time.","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","continue":"Continue","skip":"Skip for now"},"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":"Integrations › 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":"A playbook 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 a playbook","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 playbook is published. Runs and failures then show up under Agents and on your dashboard.","why":"An unpublished playbook looks completely configured and is completely inert — the single most common reason this seems broken."}}}},"import":{"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 and description 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","inherits_routing":"Department and priority follow this issue","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"}},"org_connect":{"pay_template":{"title":"Crew pay","description":"The template whose rates pay your crew on tasks from this company. Crew paid by the hour get their own rate when the template has none.","label":"Pay template","placeholder":"Choose a template","not_set":"No pay template yet. Crew paid per task show “Pay not configured” on completed tasks until you choose one.","required":"Choose a pay template.","save_failed":"The pay template could not be saved. Try again.","save":"Save"},"cross_region":"This invite comes from an organization in another region. Organizations can only connect within the same region.","cannot_connect_to_own_org":"You can't accept this invite from the organization that sent it. Switch to the organization you want to connect.","duplicate_connection":"Your organization is already connected to this organization.","duplicate_invite":"An invite to this email address is already pending.","scope_cap_exceeded":"A partner can have at most 1,000 properties in scope across all of its connections. Remove some properties and try again.","property_not_found":"One or more of the selected properties could not be found.","property_group_not_found":"One or more of the selected property groups could not be found.","tag_not_found":"One or more of the selected tags could not be found.","live_source_needs_full_access":"Only someone with access to every property can share a group or tag live.","department_not_found":"The selected department could not be found.","template_not_found":"The selected template could not be found.","invite_rate_limited":"Too many invites were sent recently. Try again later.","cannot_invite_self":"You can't send an invite to your own email address.","email_not_verified":"Verify your email address before answering an invite.","connection_not_active":"This company connection is no longer active. Refresh and choose another assignee.","task_without_property":"Add a property to this task before assigning it to a company.","property_not_in_scope":"This task's property is not shared with that company.","task_already_shared":"This task was just assigned to another company. Refresh and try again.","page":{"title":"Partner companies","description":"Companies you share tasks with, and organizations that share tasks with you."},"list":{"invite":"Invite a company","empty_title":"No connections yet","empty_description":"Invite a company to assign it tasks at the properties you choose.","empty_description_partner":"When an organization invites you to work on its tasks, the invite shows up here.","tab_connected":"Connected","tab_sent":"Invites sent","sent_empty_title":"No open invites","col_company":"Company","col_role":"Relationship","role_host":"Works on your tasks","role_partner":"You work on their tasks","col_shared_properties":"Shared properties","col_accept_tasks":"Accept tasks","accept_auto":"Automatically","accept_review":"I review each","col_since":"Since","unnamed_org":"Unnamed organization","invited_email":"Invite sent to {email}","expires_on":"Invite expires {date}","expired_on":"Invite expired {date}","ended_on":"Ended {date}","reinvite":"Send a new invite"},"incoming":{"title":"Invites to answer","body":"{host} wants to share tasks at {count, plural, one {# property} other {# properties}} with you.","accept_note":"Accepting connects {org}, the organization you are signed in to now.","expires_in":"{count, plural, =0 {Expires today} one {Expires in # day} other {Expires in # days}}","accept_as":"Accept as {org}","decline":"Decline","accepted":"Connected to {host}","declined":"Invite declined","answer_failed":"The invite could not be answered. Refresh and try again.","scope_cap_exceeded":"Accepting this invite would take your organization past {limit} shared properties across all its connections. Ask {host} to share fewer properties, or end a connection you no longer need.","decline_title":"Decline the invite from {host}?","decline_description":"The invite can no longer be accepted. {host} has to send a new one to connect. This cannot be undone.","decline_confirm":"Decline invite"},"invite":{"description":"Enter the email of the company's SuiteOp admin. We email them the invite. They accept from Settings, Connections in their own organization. The invite is valid for {days} days.","reinvite_description":"The earlier invite expired. This sends a new one and withdraws the expired one.","email_label":"Admin email","submit":"Send invite","success":"Invite sent to {email}","error":"The invite could not be sent. Try again.","withdraw_expired_failed":"The new invite was sent, but the expired one could not be withdrawn. Open the expired invite and withdraw it."},"scope":{"title":"Shared properties","description":"The company can be assigned tasks at these properties only.","empty":"No properties are shared yet.","keep":"Keep","remove_note":"Removing a property takes back the tasks the company has open there. Completed tasks keep their record.","remove_confirm_title":"Remove these properties from the connection?","remove_confirm_description":"Open tasks at the removed properties come back to you unassigned, and the company's unfinished work on them is removed. This cannot be undone.","remove_confirm":"Remove and save","add_title":"Add properties","properties_label":"Properties","properties_placeholder":"Choose properties","groups_label":"Property groups","groups_placeholder":"Choose groups","tags_label":"Property tags","tags_placeholder":"Choose tags","live_hint":"Groups and tags are shared live: a property that joins one later is shared automatically, and a property that leaves stops being shared.","sources_title":"Shared groups and tags","live_badge":"Live","source_count":"{count, plural, one {# property} other {# properties}}","source_overflowing":"Partner limit reached: some properties are not shared yet","remove_source":"Stop sharing {name}","keep_source":"Keep sharing {name}","via_source":"via {names}","remove_confirm_tasks":"{count, plural, =0 {No open tasks come back to you.} one {# open task comes back to you.} other {# open tasks come back to you.}}","remove_property":"Remove {property}","keep_property":"Keep {property}"},"settings":{"title":"Settings","auto_accept_label":"Accept tasks automatically","auto_accept_hint":"Tasks you assign start as accepted. Turn this off to let the company accept or decline each one.","share_access_label":"Share access information","share_access_hint":"The fixed door codes of the property and its building, the Wi-Fi and the access notes. Shown to the company's managers and the person on a task, from the day it is due (at once if it has no due date) until it is done. Dynamic and imported codes are not shared. Each view is recorded."},"detail":{"back":"All connections","not_found_title":"Connection not found","not_found_description":"It may have ended, or the link is wrong.","fact_invited_email":"Invite sent to","fact_accepted_by":"Accepted by","fact_connected_since":"Connected since","fact_ended":"Ended","fact_properties":"Properties shared","ended_by":"{date}, by {org}","invite_waiting":"Waiting for {email} to accept. The invite expires {date}.","invite_expired":"This invite expired {date} and can no longer be accepted.","save":"Save changes","saved_toast":"Connection updated","end":"End connection","end_title":"End the connection with {org}?","end_description":"The company loses access now. Its open tasks return to the host unassigned and its unfinished work on them is removed. Completed tasks keep their record. This cannot be undone.","withdraw":"Withdraw invite","withdraw_title":"Withdraw this invite?","withdraw_description":"The invite can no longer be accepted. This cannot be undone, but you can send a new one.","ended_toast":"Connection ended","partner_terms_title":"How this connection works","partner_terms_description":"Set by {host}.","partner_auto_accept_on":"Tasks assigned to you are accepted automatically.","partner_auto_accept_off":"You accept or decline each task assigned to you.","partner_access_on":"The fixed door codes of the property and its building, the Wi-Fi and the access notes are shown to your managers and the person on each task, from the day it is due (at once if it has no due date) until it is done. Dynamic and imported codes are not shared. Each view is recorded.","partner_access_off":"Access information is not shared.","end_description_partner":"Your organization loses access to the tasks {host} shared now. Your open tasks return to {host} unassigned and your unfinished work on them is removed. Completed tasks keep their record. This cannot be undone.","fact_assigning":"Assigning","fact_assigning_auto":"{org} assigns its own people automatically","partner_entry_on":"The person assigned to each task can unlock the property’s doors from their phone while the task’s entry window is open."},"prices":{"title":"Prices","description":"What you pay this company for a task. The most specific price wins: a property price beats a template price, which beats a department price.","empty":"No prices yet. Tasks are shared without a price.","add":"Add price","add_title":"Add a price","edit_title":"Change price","col_amount":"Price","any":"Any","billing_label":"Billed","billing_per_task":"Per task","billing_hourly":"Per hour","amount_label":"Amount","amount_per_task":"{amount} per task","amount_hourly":"{amount} per hour","delete_title":"Delete this price?","delete_description":"Tasks you share after this use the next matching price, or no price. This cannot be undone.","delete_confirm":"Delete price"},"partner_dispatch":{"title":"Auto-assign incoming tasks","description":"Each task this company sends you goes to one of your people once it is accepted, picked by your auto-assign settings in your pay template's department. You can still change who does it.","label":"Auto-assign incoming tasks","needs_pay_template":"Choose a pay template first. Its department is where the person is picked from.","save":"Save"},"live_source_note":{"group":"Shared live with {companies} through Org Connect. Moving a property out of this group takes their open tasks there back, unless that property is still shared with them another way.","tags":"A tag here is shared live with {companies} through Org Connect. Removing it takes their open tasks at this property back, unless that property is still shared with them another way.","load_failed":"Couldn't check whether this is shared live with a partner company."},"entry":{"title":"Property entry","description":"Let the person assigned to a task you share open this property’s doors.","allow_label":"Allow entry","allow_hint":"They unlock the doors from their phone by swipe: every lock at the property or its building that can be unlocked remotely. From the day the task is due, or when the guest leaves if later, until the next guest arrives or 2 hours after that day ends. A window that starts when the guest leaves lasts at most 12 hours. No code is issued, and every unlock is recorded.","activity_title":"Entry activity","activity_description":"Every unlock requested through this connection, newest first. The device’s Activity shows whether the door opened.","activity_empty":"No unlock has been requested through this connection yet.","activity_line":"{member} requested an unlock of {door}","activity_someone":"Someone","activity_a_door":"a door"}},"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..."},"partner_cannot_manage_properties":"This is a partner organization, so it can't add properties, PMS connections or devices. Contact SuiteOp support to turn this on.","partner_mode_blocked_has_assets":"This organization already has properties, devices or a PMS or device connection, so it can't be made a partner organization. Remove them first."},"owner_report":{"page":{"title":"Owner reports"},"validation":{"categories_required":"Choose at least one task type to send owner reports","categories_unique":"Each task type can be chosen only once","date_invalid":"Enter a valid date"},"settings":{"card_title":"Scheduled owner reports","card_description":"Email each property owner a summary of the tasks completed on their properties, with a link to each task's report.","enabled_label":"Send owner reports","frequency_label":"How often","frequency":{"daily":"Daily — the previous day","weekly":"Weekly — the previous week, Monday to Sunday","monthly":"Monthly — the previous calendar month"},"timezone_note":"Periods follow your organization's time zone ({timeZone}). Reports go out at 8:00 the morning after a period ends.","timezone_note_utc":"Your organization has no time zone set, so periods follow UTC. Reports go out at 8:00 the morning after a period ends.","categories_label":"Task types","categories_description":"Completed tasks from departments of these types are included.","sections_label":"Report sections","sections_description":"The sections owners see when they open a task's report.","save":"Save","test_mode_title":"Test mode — owner reports are not sent yet.","test_mode_description":"You can set them up and preview them; no email reaches an owner until sending is switched on."},"preview":{"title":"Preview","description":"See the email one owner would receive with the saved settings. Previewing never sends anything.","owner_label":"Owner","owner_placeholder":"Choose an owner","date_label":"Date (optional)","date_placeholder":"Latest finished period","date_clear":"Clear","date_hint":"Shows the period that contains this date, or the most recent finished period when left empty.","save_first":"Save to preview","button":"Preview","error":"The preview could not be loaded. Try again.","owners_error":"The owner list could not be loaded. Reload the page to try again.","period":"Period","tasks":"Completed tasks","task_count":"{count, plural, one {# task} other {# tasks}}","owners_total":"Owners","owners_with_email":"With an email address","owners_skipped_no_email":"Skipped — no email address","owners_unsubscribed":"Unsubscribed","subject":"Subject","iframe_title":"Owner report email preview","no_email_note":"No completed tasks in this period, so this owner would not get an email."}},"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.","deposit_customer_idempotency_conflict":"This security deposit couldn't be set up because an earlier attempt used different guest details. Nothing was charged — try again later or contact support.","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 JusPay Hyperswitch.","juspay_already_connected":"JusPay Hyperswitch is already connected — one JusPay Hyperswitch account per organization.","juspay_error":{"already_connected":"JusPay Hyperswitch is already connected for this organization.","unavailable":"JusPay Hyperswitch is not available on this environment — contact support.","generic":"JusPay Hyperswitch 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 Hyperswitch"},"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 this account's page.","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":"JusPay 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 JusPay Hyperswitch.} other {Synced # processors from JusPay Hyperswitch.}}","processors_sync_failed":"Failed to sync processors from JusPay Hyperswitch.","hyperswitch_create_failed":"Failed to create the JusPay 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 JusPay 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 JusPay Hyperswitch","syncing":"Syncing…","load_error":"Failed to load synced processors.","empty_title":"No processors synced yet","empty_subtitle":"Sync from JusPay Hyperswitch to pull in the connectors configured below.","methods_label":"Methods","config_title":"Configure connectors","config_subtitle":"Add or edit connectors in the embedded JusPay Hyperswitch control center.","status":{"active":"Active","inactive":"Inactive","disabled":"Disabled"}},"juspay_dashboard_title":"JusPay Hyperswitch","juspay_dashboard_description":"Manage your JusPay Hyperswitch dashboard and payment processors.","open_hyperswitch_dashboard":"Open Dashboard","manage_processors_for":"Processors: {nickname}","welcome_title":"Your JusPay Hyperswitch account is ready","welcome_description":"We have created a JusPay Hyperswitch merchant account for your organization.","welcome_email_notice":"You will receive an activation email from JusPay 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 authorizations","extended_auth_ineligible":"7-day authorizations","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. Holds renew automatically either way — extended authorizations just need fewer renewals.","webhook_key_missing":"Webhook key missing","webhook_key_missing_hint":"This JusPay Hyperswitch account has no webhook signing key, so payment notifications are being rejected. SuiteOp retries the repair automatically about once an hour; reload this page to check. If it has not cleared within a few hours, contact support."},"open_dashboard":"Dashboards","open_stripe_dashboard":"Open Stripe Dashboard","open_juspay_dashboard":"Open JusPay Hyperswitch 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","save_stranded":"The save failed part-way, so some connected accounts may still hold the new Link choice. Wait a few minutes, then turn wallets off and on again to re-sync every account to the saved choice.","repair":"Repair","deactivate":"Turn off","on_badge":"On","off_badge":"Off","needs_repair_badge":"Needs attention","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.","held_by_migration":"A migration from the previous SuiteOp still holds your Stripe account, so wallet settings can't be changed until the move is complete.","needs_repair_help":"{count, plural, one {# connected account has no wallet settings, so its checkout shows card only.} other {# connected accounts have no wallet settings, so their checkouts show card only.}} Repair to apply them again.","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"},"integration_pages":{"enter_api_keys":"Enter API keys","guestypay_source_banner":"GuestyPay accounts are synced from your Guesty integration: <strong>{account}</strong>","column_account":"Account","column_holds":"Authorization","column_connected":"Connected","via_guesty_sync":"Guesty sync","via_platform":"Platform","holds_title":"Authorization length","holds_30_day":"30-day","holds_7_day":"7-day","holds_unknown":"Not learned yet","account_not_found":"This payment account could not be found. It may have been deleted.","back_to_provider":"Back to {provider}","more_actions":"More actions","mark_inactive":"Mark inactive","mark_active":"Mark active","tab_overview":"Overview","tab_processors":"Processors","account_info":"Account info","currency":"Currency","country":"Country","provider_id":"Provider ID","synced_from":"Synced from","merchant_id":"Merchant ID","profile_id":"Profile ID","default_help_other":"To make this the account guest payments fall back to, choose Make default.","default_help_inactive":"An inactive account can't be the default. Mark it active first.","wallets_link_hint":"Managed on the Stripe page","danger_title":"Disconnect this account","danger_title_delete":"Delete payment account","danger_body_stripe":"SuiteOp stops taking payments on this account. You can reconnect at any time.","danger_body_juspay":"Only one JusPay Hyperswitch account can exist per organization.","danger_body_guestypay":"Removes this GuestyPay account from SuiteOp. It comes back on the next sync while it exists in Guesty.","delete_default_warning":"This is your default payment account. Choose another default first, or guest payments that are not tied to a specific account will fail."},"merchant_key":{"label":"Merchant API key","description":"Enter this merchant's current API key from the JusPay Hyperswitch control center. It is checked with JusPay Hyperswitch before it is saved.","saved":"Merchant API key saved.","errors":{"refused":"JusPay Hyperswitch did not accept this API key. Copy the current key from the merchant's control center and try again.","migration_held":"The migration still holds this organization. Lift it on the migration page, then enter the key.","generic":"The key could not be saved. Try again, and contact support if it keeps failing.","hash_key_unavailable":"JusPay Hyperswitch accepted the key but did not return this merchant's webhook hash key. Check the business profile in the control center, then try again."}}},"payouts":{"title":"Pay runs","subtitle":"Review what each contractor and partner is owed for a pay period.","list":{"period":"Pay period","status":"Status","payees":"Payees","held":"Held back","total":"Total to pay","held_count":"{count, plural, one {# held} other {# held}}"},"empty":{"not_set_up_title":"Payouts are not set up yet","not_set_up_description":"Your organization has no payout start date, so no pay run is created. The date is set when payouts are set up for your organization.","no_runs_title":"No pay runs yet","no_runs_description":"A draft is created when a pay period ends. It includes approved costs from {date} onward.","property_scoped_title":"Pay runs aren't available to you","not_set_up_action":"Set up payouts"},"detail":{"time_zone":"Pay period days are in {timeZone} time.","refreshed":"Draft refreshed","refresh_failed":"This draft could not be refreshed, so it may not include costs approved recently.","total":"Total to be debited","total_hint":"Held lines are left out","fees":"Fees ({percent})","fees_hint":"Added on top of what payees receive","net":"Payees receive","held":"Held back","held_hint":"Not in the total to be debited","payees_heading":"Payees","payees_paid_through_hint":"People who are not paid through SuiteOp are left out. Change it on their profile, under Compensation.","no_lines_title":"Nothing to pay for this period","no_lines_description":"No approved costs or completed partner work fall in this pay period."},"line":{"gross":"Total debit","fee":"Fee","net":"Payee receives","removed_payee":"Removed payee","partner":"Partner","hold_reason":"Reason: {reason}","payee_not_ready_hint":"This payee has not finished setting up their payout account, so this line cannot be paid yet.","not_paid_through_suiteop_hint":"Not paid through SuiteOp, so this line is held. Remove the adjustment, or turn Paid through SuiteOp on for this person.","clamped":"Deductions are {amount} more than what is owed, so this line pays {zero}.","items":"{count, plural, one {# item} other {# items}}","hold":"Hold","release":"Release hold","add_adjustment":"Add adjustment","remove_adjustment":"Remove adjustment","carried":"Carried from an earlier pay run","carried_with_hint":"Carried from an earlier pay run. To cancel it, add an adjustment of the opposite amount.","refunded_amount":"{amount} refunded to you","refund_pending_amount":"{amount} refund on its way","refund_failed":"The refund did not go through. Contact SuiteOp support to try it again."},"item":{"source_cost":"Cost","source_task_share":"Partner work","source_adjustment":"Adjustment"},"hold_dialog":{"title":"Hold the line for {payee}","description":"A held line stays in this pay run but is not paid. You can release the hold while the run is a draft.","reason_label":"Reason","reason_placeholder":"Why is this line held?","confirm":"Hold line"},"adjustment_dialog":{"title":"Add adjustment for {payee}","description":"A bonus or tip adds to what this payee is owed. A deduction takes from it.","type_label":"Type","type_add":"Bonus or tip","type_deduct":"Deduction","amount_label":"Amount","description_label":"Description","description_placeholder":"What is this for?"},"remove_adjustment_dialog":{"title":"Remove this adjustment?","description":"{description} ({amount}) is removed from the line for {payee}. You can add it again while the run is a draft."},"review":{"title":"Needs manual review","description":"These were already paid more than is now approved. Nothing is taken back automatically: settle the difference with the payee directly.","overpaid":"Overpaid by {amount}"},"waiting":{"title":"Waiting to carry over","description":"These adjustments were on a line that was held or not paid. Their payees have no line in this run, so each one carries over to the first run that has a line for its payee."},"errors":{"run_not_draft":"This pay run is no longer a draft, so it can't be changed.","property_scoped_not_allowed":"Pay runs cover every property, so a member limited to certain properties can't open them.","adjustment_carried":"This adjustment came over from an earlier run whose payment did not go through, so it can't be removed. To cancel it, add an adjustment of the opposite amount.","adjustment_limit":"A line can have at most 50 adjustments. Remove one before adding another.","impersonation_blocked":"Payout accounts can't be set up or opened while staff are signed in as a customer.","org_account_owner_only":"Only an owner of this organization can set up or open its payout account.","funding_blocked_for_payee":"Payments to this payee can't be debited from your bank account while a returned or disputed payment is under review. Contact support.","funding_source_unavailable":"Link a bank account before paying, or contact support if your bank account is under review.","funding_suspended":"Your bank account is under review after a returned or disputed payment, so a new one can't be linked yet. Contact support.","funding_not_verified":"This bank account couldn't be verified instantly. Try again, or choose another bank.","start_date_locked":"The payouts start date can't change after a pay run has been approved.","start_date_before_current_period":"The payouts start date can't be before the start of the current pay period.","start_date_too_far_back":"The payouts start date can't be more than 30 days in the past.","region_not_supported":"Payouts aren't available in your organization's region yet.","mandate_version_mismatch":"The authorization text changed while you were linking your bank. Reload the page and link it again.","mandate_text_not_approved":"Bank linking for payouts isn't available yet. Contact support.","funding_revoke_while_charging":"This bank account can't be removed while a pay run is being paid. Try again once it has finished.","funding_replace_while_charging":"A new bank account can't be linked while a pay run is being paid. Try again once the run is paid; your bank is saved until then.","debit_limit_not_set":"Payouts aren't fully set up for your organization yet. Contact support to finish setting them up.","debit_limit_exceeded":"This pay run is more than your organization's payout limit. Hold some lines, or contact support to raise the limit.","first_run_not_reviewed":"SuiteOp reviews your first pay run before it can be paid. Contact support to ask for the review.","start_date_not_set":"Set a payouts start date before you pay a pay run.","nothing_to_pay":"Nothing in this pay run can be paid: every line is held or owes nothing.","run_before_start_date":"This pay run's period ends before your payouts start date, so its work is paid outside SuiteOp.","unpaid_line_has_adjustment":"A line this run will not pay (held, or brought to zero by a deduction) has an adjustment, which would be lost. Remove the adjustment, reduce the deduction or release the hold, then approve again.","org_disabled":"Payouts are paused for your organization. Contact support.","total_changed":"This pay run changed since you opened it. Review what it pays now, then approve again.","pay_schedule_name_taken":"Another pay schedule already has this name.","pay_schedule_has_members":"Move everyone off this pay schedule before you archive it.","pay_schedule_archived":"This pay schedule is archived.","pay_schedule_move_keeps_hold":"Someone you are moving has a held line or a deduction in a draft pay run. Release the hold or remove the deduction there, then move them.","pay_schedules_disabled":"Pay schedules are not turned on for your organization."},"account":{"me":{"title":"Payment profile","page_title":"Payment profile","page_subtitle":"The account your pay is sent to, set up with Stripe.","entry_title":"Payment profile","entry_description":"Set up or manage the account your pay is sent to.","entry_action":"Open payment profile"},"org":{"title":"Payout account","page_title":"Get paid","page_subtitle":"The account that receives what other organizations owe your company, set up with Stripe.","owner_only_note":"An owner of this organization sets up and manages the payout account."},"state":{"not_started":"Not set up","incomplete":"Setup incomplete","restricted":"Action needed","pending":"Verifying","ready":"Ready","disconnected":"Disconnected"},"state_hint":{"not_started":"Set up your account with Stripe to start getting paid.","incomplete":"Finish setting up your account with Stripe to start getting paid.","restricted":"Stripe needs more information before you can be paid.","pending":"Stripe is verifying your account. Nothing more is needed from you right now.","ready":"Your account is ready to be paid.","disconnected":"This account was disconnected. Contact support to have it reset."},"return_notice":"Welcome back. If Stripe is still reviewing your details, the status above updates once it finishes.","set_up":"Set up payouts","continue_setup":"Continue setup","manage":"Manage in Stripe","manage_unavailable":"Stripe has no account page to open yet. Finish setting up first.","more_info_needed":"Stripe needs more information. Continue setup to provide it."},"funding":{"page_title":"Payouts","bank_title":"Bank account","bank_description":"The account your pay runs are debited from.","none":"No bank account is linked yet.","status_active":"Active","status_on_hold":"On hold","linked_on":"Linked {date}","suspended_title":"Bank account on hold","suspended_description":"Debits are paused while our team reviews a returned or disputed payment. You can't replace or remove the account until the review ends. Contact support.","link":"Link bank account","replace":"Replace bank account","mandate_version":"Authorization text version {version}","link_failed":"The bank account wasn't linked. Choose your bank from the instant sign-in list and try again.","version_stale":"The authorization text changed. Reload the page and try again.","view_only":"Only members who can manage payouts can change the bank account or the start date.","remove_title":"Remove this bank account?","remove_description":"Pay runs can't be debited from {bank} until you link another account. Debits for pay runs you already approved aren't affected.","remove_confirm":"Remove account","start_title":"Pay work from","start_description":"Work from this date on is included in pay runs. It can't be earlier than the start of the current pay period.","start_required":"Choose the date payouts begin. No pay run is created until you do.","start_placeholder":"Pick a date","start_saved":"Payouts start on {date}","start_locked":"The start date is locked because a pay run has been approved.","link_error":"We couldn't connect to your bank right now. Try again, and contact support if it keeps happening.","region_title":"Payouts aren't available in your region","currency_not_supported_title":"Pay runs are paid in US dollars","currency_not_supported_description":"Your organization's operational currency is {currency}, so no pay runs are created. You can still link a bank account and set a start date; pay runs start once the operational currency is USD.","mandate_missing":"The authorization text isn't available right now. Contact support.","impersonation_blocked":"Bank accounts can't be linked while staff are signed in as a customer."},"statements":{"page_title":"Payments received","me_subtitle":"What the organizations you work for have paid you.","org_subtitle":"What other organizations have paid your company.","entry_action":"View payments received","col_payer":"From","col_amount":"Amount","received_total":"Received in total: {amount}","empty_title":"No payments yet","empty_description":"A payment shows here once an organization approves a pay run that pays you.","detail_label":"Payment from {payer}","amount_label":"Amount received","hint_dispute_open":"The paying organization's bank disputed this payment. Stripe contacts you if anything is needed.","hint_dispute_lost":"This payment was disputed and taken back from your Stripe balance.","hint_failed":"This payment did not go through. The organization that pays you can include it in a later pay run.","hint_held":"The organization held this payment back from this pay run. Ask them when it will be paid.","hint_held_payee_account":"Finish your payment profile to receive this.","finish_profile_action":"Finish setup","scope_refused_title":"Payments received aren't available to you","scope_refused_description":"They cover every property, so a member limited to certain properties can't open them.","refunded_amount":"{amount} refund (on a full refund: payment plus Stripe fee)","refund_pending_amount":"{amount} refund on its way (on a full refund: payment plus Stripe fee)"},"approve":{"button":"Approve and pay {total}","button_no_debit":"Approve with no debit","title":"Approve and pay this pay run?","title_no_debit":"Approve this pay run with no debit?","description":"Payees receive {net} and the fee is {fee}, so {total} is debited from your bank account.{held, select, yes { Held lines move to the next pay run.} other {}} You can't undo this.","description_no_debit":"Nothing is debited from your bank account and no payee is paid in this run. Its work and deductions move to the next pay run. You can't undo this.","confirm":"Approve and pay","blocked_title":"This pay run can't be paid yet","refused_title":"This pay run wasn't paid","open_settings":"Open payout settings","contact_support":"Email support"},"paid_through":{"title":"Paid through SuiteOp","description":"When on, their approved pay goes into pay runs. When off, you still approve their work for your records and exports, but pay runs leave them out.","label":"Paid through SuiteOp","option_auto":"Automatic: on once they connect a payout account","option_on":"On","option_off":"Off","status_on":"Pay runs include them now.","status_on_since":"Pay runs include their work from {date}.","status_off":"Pay runs leave them out now.","status_off_awaiting":"Pay runs leave them out: they have no payout account. Work they do before they set one up is not paid through SuiteOp, even once they connect. To include it, choose On and tick “Also pay their earlier approved, unpaid work”.","turn_on_cutoff":"Only work from now on goes into pay runs. Their earlier approved work counts as paid outside SuiteOp.","include_earlier":"Also pay their earlier approved, unpaid work","turn_on_warning":"Their approved work since payouts started that has not been paid yet will go into the next pay run. Tick this only if you have not paid them for it another way.","save":"Save","saved":"Setting saved","save_failed":"Could not save this setting. Try again."},"schedules":{"title":"Pay schedules","description":"Each person is paid on one pay schedule, with its own pay periods and pay runs. Anyone not on a named schedule is on the default one.","default_title":"Default schedule","default_hint":"Everyone not on a named schedule. It cannot be daily.","empty":"No named schedules yet. Everyone is paid on the default schedule.","member_count":"{count, plural, one {# person} other {# people}}","new":"New schedule","new_title":"New pay schedule","edit":"Edit","edit_title":"Edit pay schedule","add_members":"Add people","add_members_title":"Add people to {name}","add_members_hint":"Their approved work that is not paid yet moves to this schedule's next pay run.","add_selected":"{count, plural, =0 {Add people} one {Add # person} other {Add # people}}","moved":"{count, plural, =0 {No one moved} one {# person moved} other {# people moved}}","filter_compensation":"Compensation type","filter_all":"All types","search":"Search people","no_members":"No one to add.","archive":"Archive","archive_title":"Archive this pay schedule?","archive_body":"It stops making pay runs. Pay runs it already made stay as they are. You cannot undo this.","name":"Name","period_type":"Pay period","period":{"weekly":"Weekly","biweekly":"Every two weeks","semimonthly":"Twice a month","monthly":"Monthly","daily":"Daily"},"start_day":"Starts on","anchor_date":"First period starts on","first_day":"First half starts on day","summary_day":"from day {day}","daily_warning":"A daily schedule makes a pay run every day. Each one is approved and paid on its own, by someone who signed in within the last 15 minutes. The fee stays 1.5% of each payment.","saved":"Pay schedule saved","save_failed":"Could not save the pay schedule. Try again."},"schedule_member":{"title":"Pay schedule","description":"Their approved pay goes into this schedule's pay runs.","label":"Pay schedule","default_option":"Default schedule","move_warning":"Their approved work that is not paid yet moves to the new schedule's next pay run.","saved":"Pay schedule saved","save_failed":"Could not save the pay schedule. Try again."}},"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","portals_add":"New Portal","portals_search_placeholder":"Search portals…","portals_search_no_results":"No portals match your search.","portals_action_preview_as_guest":"Preview as guest","portals_preview_description":"What a guest of this portal sees, in its brand. The property and stay are examples.","portals_preview_no_brand":"This portal has no brand, so guests see the default colours. The property and stay are examples.","verify_preview_description":"The guest portal this step runs on, in the brand its guests see. The property and stay are examples.","verify_preview_default_brand":"This step is not limited to one portal, so this shows your default brand. The property and stay are examples.","verify_preview_no_brand":"There is no brand for this step's guests, so they see the default colours. The property and stay are examples.","verify_preview_no_default_brand":"This step is not limited to one portal and you have no default brand, so this shows the default colours. The property and stay are examples.","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_branding":"Brand","portals_col_email":"Support Email","portals_col_properties":"Properties","portals_col_verification":"Verification","portals_col_upsells":"Upsells","portals_col_guides":"Guides","portals_cell_verification_active":"Active {active} of {total}","portals_cell_verification_disabled":"Off","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_default":"Default 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_wallet_pass":"Wallet pass","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_section_assigned_properties":"Assigned Properties","portal_tab_general":"General","portal_tab_precheckin":"Pre-Checkin","portal_tab_steps_count":"{count, plural, one {# step} other {# steps}}","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_wallet_pass":"Guests can add their stay to Apple Wallet or Google Wallet. It updates itself, and shows the door code only once the portal would.","portal_warning_wallet_pass_off":"Guests' wallet passes will stop updating and any door code on them will be removed.","wallet_preview_button":"Preview","wallet_preview_title":"Wallet pass preview","wallet_preview_description":"How a guest's pass looks for this portal, using {property}. The guest, dates and door code are samples; the brand, photo, address and Wi-Fi are real.","wallet_preview_description_no_property":"How a guest's pass looks for this portal. The guest, dates and door code are samples. Add a property to see its photo, address and Wi-Fi here.","wallet_preview_apple":"Apple Wallet (iPhone)","wallet_preview_google":"Google Wallet (Android)","wallet_preview_apple_back":"Back of the pass","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_scheduling":"Delivery","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 Verification steps.","portal_precheckin_steps_manage":"Manage in Verification steps","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_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>Domains & email</link>.","brands_empty_title":"No brands yet","brands_empty_description":"Create a brand profile to customize the portal appearance.","brands_col_logo":"Logo","brands_company_name":"Company name: {name}","brands_col_palette":"Colour palette","brands_col_used_by":"Used by","brands_cell_used_by":"{count, plural, =0 {Not used} one {1 portal} other {# portals}}","brands_col_default":"Default","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":"Domains & email","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_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_color_reset_to_default":"Reset to default","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 <ltr>{color}</ltr> as the background?","brand_background_suggestion_title":"Built for a dark background?","brand_text_suggestion_body":"Your text colour is hard to read on the page background or its cards. Apply <ltr>{color}</ltr> as the text colour?","brand_text_suggestion_title":"Text may be hard to read","portal_name_taken":"A portal with this name already exists.","brand_contrast_aa_warning":"Low contrast between the text colour and the page background or its cards ({ratio}:1). WCAG AA recommends at least 4.5:1.","brand_contrast_tooltip_pass":"Contrast: {ratio}:1 — meets the recommended minimum.","brand_contrast_tooltip_fail":"Contrast: {ratio}:1 — below the recommended minimum.","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_contrast_issue_text":"Text on the page or its cards is {ratio}:1, below the {min}:1 guests need to read it. Use darker text on a light page, or lighter text on a dark one.","brand_contrast_issue_primary_fill":"Buttons stand out from the page at only {ratio}:1, below {min}:1. Pick a colour further from the background.","brand_contrast_issue_primary_label":"Button labels on this colour are {ratio}:1, below {min}:1. Pick a darker or lighter shade.","brand_contrast_issue_secondary_fill":"The selected tab stands out from the page at only {ratio}:1, below {min}:1. Pick a colour further from the background.","brand_contrast_issue_secondary_label":"Labels on this colour are {ratio}:1, below {min}:1. Pick a darker or lighter shade.","brand_contrast_issue_footer_text":"Footer text on this colour is {ratio}:1, below {min}:1. Pick a darker or lighter footer colour.","brand_contrast_confirm_title":"Save hard-to-read colours?","brand_contrast_confirm_description":"{count, plural, one {# colour pairing is} other {# colour pairings are}} below the contrast guests need to read them. You can still save, but some guests may struggle to use the portal.","brand_contrast_confirm_save":"Save anyway","brand_contrast_confirm_cancel":"Keep editing","brand_section_preview":"Guest preview","brand_preview_description":"How guests see this brand. It updates as you edit, before you save.","brand_preview_frame_title":"Guest portal preview","brand_preview_sample_property":"Sample property","brand_logo_light_background_warning":"The page background is light. If this logo is white, guests will barely see it on the welcome card before sign-in and the desktop top bar. Add a dark logo below to show there instead.","brand_field_logo_dark":"Dark logo","brand_logo_dark_hint":"Optional. A dark version on a transparent background, 4:2 ratio. Guests see it instead of the white logo where the portal sits on a light page: the welcome card before sign-in and the desktop top bar.","brand_theme_scope_note":"These colours style the guest portal, including pre-check-in, pop-ups and notifications. The card payment form is only partly themed: it takes your primary colour and font, but its fields stay light.","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 > Domains & email</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.","verify_add":"New Step","verify_start_from_template":"Start from template","verify_template_picker_title":"Start from a template","verify_template_picker_description":"Creates an inactive copy of the step. Review it and choose where it applies before turning it on.","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_status_needs_setup":"Needs setup","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_copy_readonly_hint":"Guest-facing text needs the “Manage all tasks” permission — ask an admin to change it.","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_duplicate_option_label":"Two answer options in one question have the same text. Give each option its own text in every language — guests, and workflow rules, cannot tell them apart.","precheck_error_los_inverted":"The maximum must be at least the minimum — an inverted range would hide this step from every guest.","precheck_error_minimum_guest_age_required":"Enter a minimum age, or set the age check to Disabled.","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_waivers_title":"Damage waivers","damage_waivers_count":"{count, plural, =0 {No waivers} one {# waiver} other {# waivers}}","damage_waiver_card_title":"Waiver {index}","damage_waiver_add":"Add waiver","damage_waiver_remove_for":"Remove waiver {index}","damage_waiver_recommended":"Recommended","damage_waiver_recommended_for":"Recommended, waiver {index}","damage_waiver_recommended_hint":"Shows the \"Most Popular\" badge on this option. One per step.","damage_waiver_name":"Name","damage_waiver_name_hint":"Shown as the card title. Leave empty to show \"Damage Waiver\".","damage_waiver_tagline":"Tagline","damage_waiver_tagline_hint":"One short line under the name — for example the coverage amount. Up to 80 characters.","damage_protection_limit_hint":"A step can offer up to 3 protection options — a security deposit counts as one.","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_shared_settings_title":"Settings for all waivers","damage_waiver_guest_description":"Terms & conditions","damage_waiver_guest_description_hint":"Optional. Guests see this only when they tap \"View terms and conditions\" on this option. The card itself shows just the name and tagline.","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_limit_hint":"Remove a waiver to offer a security deposit — a step can offer up to 3 protection options.","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_description_guesty_pay":"A security deposit is a refundable hold placed with GuestyPay to cover potential damages during a stay. Guesty and the card set how long the hold lasts, and Guesty releases it on its own date unless you capture it first.","security_deposit_amount_label":"Amount","security_deposit_payment_account":"Payment account","security_deposit_guest_description":"Terms & conditions","security_deposit_guest_description_hint":"Optional. Guests see this only when they tap \"View terms and conditions\" on the deposit. The card's short line is written for you from the amount and hold settings.","security_deposit_delay":"Delay deposit until X days before check-in","security_deposit_delay_days":"Days before check-in","security_deposit_hold_schedule":"Place hold X days before check-in","security_deposit_hold_schedule_hint":"Guests can complete this step any time. If they complete it after this point, the hold is placed immediately.","security_deposit_hold_schedule_long_stay_hint":"Stays charged instead of held can pay the deposit only from this point.","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_release_days_guesty_pay_hint":"With GuestyPay, Guesty releases the hold on its own date, so this setting doesn't apply to GuestyPay holds yet. Stripe holds this step already placed keep their current release date until it's recalculated, for example on renewal, a change of stay dates or a cancellation.","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_no_access":"Ask an admin with access to Integrations to choose the Authenticate.com account for background checks.","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_bgc_connect_action":"Connect","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_col_shown_on":"Shown on","manuals_assignment_properties":"{count, plural, =0 {No properties} one {1 property} other {# properties}}","manuals_assignment_groups":"{count, plural, =0 {0 groups} one {1 group} other {# groups}}","manuals_assignment_tags":"{count, plural, =0 {0 tags} one {1 tag} other {# tags}}","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_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_col_portals":"Portals","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":{"verify_template_created":"Step created from template","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","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_scheduled_check_in":"Scheduled at check-in","upsell_feature_scheduled_check_out":"Scheduled at check-out","upsell_feature_scheduled_guest_selects":"Guest-scheduled","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_advertisement_link":"External links","upsell_field_advertisement_link_helper":"Where guests go when they open this advertisement. Each address must start with http:// or https://. Each button shows its link's label; a single link with no label uses the offer's button label.","upsell_field_advertisement_link_label_aria":"Button label for link {index}","upsell_field_advertisement_link_label_placeholder":"Button label","upsell_field_advertisement_link_url_aria":"Web address for link {index}","upsell_field_advertisement_link_url_placeholder":"Web address","upsell_field_advertisement_link_add":"Add link","upsell_field_advertisement_link_remove":"Remove link {index}","upsell_field_advertisement_price":"Price","upsell_field_advertisement_price_helper":"The partner's price, shown to guests. Leave blank to show no price.","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_scheduling":"Scheduling","upsell_schedule_basis_none":"Not scheduled","upsell_schedule_basis_none_help":"The guest gets this upsell right after purchase — no date or time to arrange.","upsell_schedule_basis_check_in":"On the check-in date","upsell_schedule_basis_check_in_help":"Delivered automatically on the reservation's check-in date — the guest doesn't pick anything.","upsell_schedule_basis_check_out":"On the check-out date","upsell_schedule_basis_check_out_help":"Delivered automatically on the reservation's check-out date — the guest doesn't pick anything.","upsell_schedule_basis_guest_selects":"Guest picks a date","upsell_schedule_basis_guest_selects_help":"The guest picks a date — and a time slot too, once you add availability windows below.","upsell_schedule_windows_label":"Availability windows","upsell_schedule_windows_add":"Add window","upsell_schedule_windows_add_time":"Add time range","upsell_schedule_windows_empty_hint":"No windows — guests pick a date only.","upsell_schedule_min_notice_toggle":"Require minimum notice","upsell_schedule_min_notice_label":"Minimum notice (hours)","upsell_schedule_min_notice_help":"Guests must book at least this many hours before the slot.","upsell_section_behavior":"Behavior","upsell_section_notifications":"Notifications","upsell_field_requires_notes":"Requires guest notes","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_price_per_guest":"Price Per Guest","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_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_choice_quantity":"Let guests choose a quantity of each option","upsell_dynamic_field_choice_quantity_helper":"Guests set how many of each option they want, like 2 × White and 1 × Red. Each option's price is multiplied by its count.","upsell_dynamic_choice_quantity_max_note":"Guests don't pick an overall quantity for this offer. The maximum quantity caps how many of each option a guest can choose.","upsell_dynamic_sole_field_required_note":"Always required — guests must pick an option from the only field.","upsell_dynamic_all_optional_note":"Guests must pick at least one option to continue. Mark a field Required to make that specific field mandatory.","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_time_row_aria":"{caption} #{field}, row {index}, 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_field_show_on_booking_sites":"Show on booking sites","guide_list_field_show_on_booking_sites_hint":"List these places on your booking sites' Things to do page.","guide_list_field_show_on_booking_sites_group_restricted":"Lists limited to a user group stay private, so they never show on booking sites.","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_guest_labels_required":"Select at least one contact label to use this rule.","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_guest_tag_placeholder":"Select contact labels","visibility_guest_tag_booker_note":"Checked against the guest who made the booking. Companions on the same stay see the same offers.","visibility_guest_tag_retired_some":"Deleted labels match no guest. Remove them to keep this rule clear.","visibility_guest_tag_retired_all":"Every selected label was deleted, so no guest sees this upsell. Choose a current label or turn this rule off.","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_card_guest_tag_title":"Contact label","visibility_card_guest_tag_description":"Show only to guests who have at least one of the selected contact labels.","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_name":"Name (optional)","google_places_name_placeholder":"Find a specific place by name","google_places_type_name_hint":"Name searches include every type. Clear the name to filter by type again.","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 Integrations > 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_col_portals":"Portals","upsells_price_free":"Free","upsells_price_from":"From {price}","upsells_price_per_night":"{price} / night","upsells_price_per_guest":"{price} / guest","upsells_price_per_guest_per_night":"{price} / guest / night","upsells_price_per_unit":"{price} / unit","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_selfie_required":"Ask for a selfie","verify_identity_selfie_required_note":"Off: guests verify with their ID only. Nothing checks that the person holding the ID is the guest, so anyone with the ID or a photo of it can pass.","verify_identity_policy_selfie_off_hint":"Off because \"Ask for a selfie\" is off.","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 that wouldn't decode","verify_identity_policy_row_barcode_invalid":"The barcode on the back doesn't read or doesn't match the ID","verify_identity_policy_row_barcode_invalid_covers":"Only for IDs with a barcode on the back (US and Canadian licences and state ID cards). Checks that it reads and, on US IDs, that the ID number, date of birth and expiry show no clear mismatch with the front. Off unless you turn it on.","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_guest_underage":"The guest is under the minimum age","verify_identity_policy_row_guest_underage_covers":"The date of birth on the ID is below the age you set, or couldn't be read","verify_identity_policy_row_guest_underage_no_retry_hint":"A retake can't change the guest's age, so Allow one retry isn't offered — Stop and review hands it to your team without a retry.","verify_identity_minimum_age":"Minimum guest age","verify_identity_minimum_age_placeholder":"e.g. 21","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_fee_product_charge_type_percentage_of_base":"Percentage of the booking","verify_fee_product_rate_label":"Rate (%)","verify_fee_product_rate_hint":"The percentage to charge, e.g. 7.5 for Berlin's city tax.","verify_fee_product_rate_invalid":"Enter the rate as a number, e.g. {example}.","verify_fee_product_base_components_label":"Charge a percentage of","verify_fee_product_base_components_hint":"Which parts of the booking the percentage applies to. Most city taxes apply to the accommodation only.","verify_fee_product_base_component_accommodation_fare":"Accommodation fare","verify_fee_product_base_component_cleaning_fee":"Cleaning fee","verify_fee_product_base_component_other_fees":"Other fees","verify_fee_product_base_valuation_label":"Apply to","verify_fee_product_base_valuation_hint":"Most percentage city taxes are charged on the price excluding VAT.","verify_fee_product_base_valuation_net":"Price excluding VAT","verify_fee_product_base_valuation_gross":"Price including VAT","verify_fee_product_included_vat_label":"VAT included in PMS prices (%)","verify_fee_product_included_vat_hint":"The VAT your PMS's prices include, e.g. 7 for accommodation in Germany. Used to take the VAT out when a booking states only a total including it. Enter 0 if your prices include no VAT.","verify_fee_product_included_vat_required":"Enter the VAT your PMS's prices include, or 0 if they include none.","verify_fee_product_included_vat_invalid":"Enter a VAT rate between 0 and 50, e.g. {example}.","verify_fee_calc_sample_base":"Example booking ($)","verify_fee_calc_gross_only":"If the PMS states only a total including VAT","verify_fee_product_percentage_unsupported_title":"{providers} can't break out the accommodation fare yet","verify_fee_product_percentage_unsupported_body":"A percentage needs the room rate on its own, and {providers} sends one combined booking total — so there's nothing to take a percentage of. Rather than guess at a tax you'd be liable for, reservations from {providers} will skip this fee. A flat amount works on every connection.","verify_fee_product_percentage_rule_unsupported_title":"This fee can't be priced for {providers} as set up","verify_fee_product_percentage_rule_unsupported_body":"It's charged on a part of the booking, or at a VAT setting, that reservations from {providers} don't report separately — so those reservations will skip this fee rather than guess at a tax you'd be liable for. The accommodation fare excluding VAT works for {providers}.","verify_fee_product_scope_label":"Where this fee is charged","verify_fee_product_scope_hint":"Only on reservations at the properties chosen here. The step's own assignment still decides which guests see it.","verify_fee_product_scope_empty_required":"Choose at least one property. Until then this fee isn't charged anywhere.","verify_fee_product_scope_empty_everywhere":"No properties chosen, so this fee is charged wherever this step applies.","verify_fee_product_scope_empty_orphaned":"This fee was limited to properties, groups or tags that have since been deleted, so it isn't charged anywhere. Choose where to charge it.","verify_fee_product_pms_handling_title":"How your connected PMSes are handled","verify_fee_product_pms_handling_unnamed":"Connected PMS","verify_fee_product_pms_handling_net_fare":"Sends a net fare — the fee is calculated on it as-is.","verify_fee_product_pms_handling_net_fare_blended_fees":"Sends a net fare — the fee is calculated on it as-is. Its fees and taxes arrive combined, so \"other fees\" can't be part of the base.","verify_fee_product_pms_handling_gross_only":"Sends one price including VAT — we remove the VAT rate you enter.","verify_fee_product_pms_handling_split":"Sends fare, fees and taxes separately — the fee is calculated on the net fare.","verify_fee_product_pms_handling_split_booking_com_only":"Sends fare, fees and taxes separately on Booking.com bookings — the fee is calculated on the net fare. Other bookings are computed per stay.","verify_fee_product_pms_handling_split_outside_us":"Sends fare, fees and taxes separately outside the US — the fee is calculated on the net fare. US bookings are computed per stay.","verify_fee_product_pms_handling_varies":"Figures vary per booking — we compute each stay and alert you when we had to adjust.","verify_fee_scope_report_title":"What this fee needs","verify_fee_scope_report_strictest":"Strictest: {name}","verify_fee_scope_report_ready":"Every selected property can be priced — nothing to do.","verify_fee_scope_report_status_ready":"Ready","verify_fee_scope_report_status_attention":"Check","verify_fee_scope_report_status_blocked":"Action needed","verify_fee_scope_report_kind_property":"Property","verify_fee_scope_report_kind_property_group":"Group","verify_fee_scope_report_kind_tag":"Tag","verify_fee_scope_report_items_label":"Status per selection","verify_fee_scope_report_property_count":"{count, plural, one {# property} other {# properties}}","verify_fee_scope_report_unlinked":"{count, plural, one {# property has no PMS listing, so this fee can't be priced there.} other {# properties have no PMS listing, so this fee can't be priced there.}}","verify_fee_scope_report_hidden":"{count, plural, one {# more selection is outside your access and not shown here.} other {# more selections are outside your access and not shown here.}}","verify_fee_scope_report_action_no_pms":"Some selected properties have no PMS listing, so this fee can't be priced there. Link each one to its listing.","verify_fee_scope_report_action_base_unsupported":"{name} doesn't report {components} for this setup, so its stays skip this fee. Change what the percentage is charged on, or the VAT setting.","verify_fee_scope_report_action_gross_only":"{name} sends one price including VAT. Check the VAT rate above — it's taken out of that price to find the fare.","verify_fee_scope_report_action_varies":"{name}'s figures vary per booking. Each stay is computed on its own, and you'll get an alert when the base had to be adjusted.","verify_fee_scope_report_action_split_booking_com_only":"{name} separates the fare only on Booking.com bookings. Other stays are computed on their own, with an alert when adjusted.","verify_fee_scope_report_action_split_outside_us":"{name} separates the fare only outside the US. US stays are computed on their own, with an alert when adjusted.","verify_fee_scope_report_action_no_properties":"A selection covers no active properties, so it adds nothing.","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_guest_emails_title":"Guest emails from GuestAdmin","verify_authority_property_info_email":"Let GuestAdmin email the guest property information","verify_authority_property_info_email_description":"GuestAdmin's own email to the guest with property details. SuiteOp cannot see or edit it. Off by default.","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","portal_field_precheck_order_automatic":"Order steps automatically","portal_helper_precheck_order_automatic":"Guests see steps in the order that saves them the most typing, for example scanning their ID first so their details fill in by themselves. Turn off to use the order you set.","verify_guests_scan_id":"Let guests scan their ID to fill in their details","verify_guests_scan_id_description":"Works when the ID check step is on. The scan also counts as the guest's photo ID.","repeat_weekly":"Repeat weekly","repeat_weekly_save_first":"Save your changes before repeating","repeat_weekly_title":"Repeat this event weekly","repeat_weekly_description":"Creates one copy of this event every week, on the same weekday, up to the end date you pick. A series can hold at most {max} events.","repeat_weekly_until":"Repeat until","repeat_weekly_submit":"Create series","repeat_weekly_created":"{count, plural, one {# weekly copy created} other {# weekly copies created}}","repeat_weekly_conflict":"This event changed while the copies were being made, so none were created. Check the event and repeat it again.","delete_series_description":"This event is part of a weekly series. What do you want to delete?","delete_series_this":"This event","delete_series_following":"This and following events","verify_identity_policy_row_selfie_liveness":"The selfie movement check","verify_identity_policy_row_selfie_liveness_covers":"The guest is asked to blink and turn their head; the frames are checked against the selfie","verify_identity_policy_row_selfie_liveness_manual_upload_warning":"Manual upload is on, so a guest who can't do the movement check can upload a selfie instead. They'll go to your team for review.","verify_identity_policy_row_selfie_liveness_manual_upload_unchecked":"Manual upload is on, so guests can upload a selfie instead of taking one. Without the movement check, an uploaded photo is accepted if it matches the ID."},"portal_settings":{"update_conflict":"This portal was changed elsewhere. Reload it and try again.","qr_print":{"action":"Print dynamic portal QR code","title":"Dynamic portal QR codes","description":"Print one code per property and leave it in the unit. Guests who scan it during their stay sign in with just their last name; outside a stay they sign in with their booking code instead.","origin_note":"Codes point to this portal's current web address. If you change the address, print new codes.","empty":"No properties use this portal yet.","load_error":"Couldn't load the QR codes. Try again.","create":"Create QR code","download_png":"Download PNG","print":"Print","print_all":"Print all","rotate":"Rotate code","rotate_confirm_title":"Rotate this QR code?","rotate_confirm_description":"Printed copies of the current code for {property} will stop working. Guests who scan them will see the regular sign-in.","rotate_confirm_action":"Rotate code","rotated":"QR code rotated. Print the new code.","action_error":"Couldn't update the QR code. Try again.","scan_prompt":"Scan for your guest portal","no_url":"No QR code yet","qr_alt":"QR code for {property}"}},"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, except as noted below.","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 five things are kept separately on their own rules: reports already filed with an authority, signed agreements, payment records, a guest's refusal of marketing consent, and check-in records brought over from SuiteOp V1, which are not deleted automatically.","save_success":"Retention periods saved"},"precheck_step":{"agreement_template_unavailable":"This agreement template belongs to a disconnected account. Choose another template.","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","security_2fa_on":"2FA on"},"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."},"task_short_window":{"label":"Short window","description":"A turnover's crew is not expected to finish before the window closes."},"guest_issue_aging":{"label":"Guest issue open an hour","description":"A current guest issue has been open for an hour and is still not closed."},"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."},"fee_pricing_alert":{"label":"Fee pricing needs review","description":"A mandatory fee, such as city tax, was estimated or could not be priced from the PMS's figures."},"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."},"workflow_notification":{"label":"Playbook notification","description":"A playbook's “Send a notification” step notifies you."},"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."},"camera_motion":{"label":"Camera motion","description":"Motion detected by a camera at a property."},"doorbell_press":{"label":"Doorbell press","description":"Someone pressed a doorbell at a property."},"time_off_requested":{"label":"Time off request","description":"Someone on your team asks for time off."},"time_off_reviewed":{"label":"Time off decision","description":"Your time-off request is approved or declined, or leave is recorded for you."},"time_off_cancelled":{"label":"Time off cancelled","description":"Approved time off is cancelled."},"integration_link_replacement_requested":{"label":"Connection link: new link requested","description":"An owner asked for a new connection link."},"integration_reconnect_after_move":{"label":"Reconnect after your move","description":"Integrations from your old SuiteOp account that you need to sign in to again."},"support_reply":{"label":"Support reply","description":"The SuiteOp team replied to your support request."}},"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. 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 greys out its column in 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.","modal_consent":"By sending the code, you agree to receive text messages from SuiteOp: verification codes and the notifications you turn on. Message frequency varies. Message and data rates may apply. Reply STOP to opt out or HELP for help.","modal_consent_privacy_link":"Privacy Policy","modal_consent_terms_link":"Terms of Service","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","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."},"email":{"title":"Email","current_email_label":"Current email","new_email_label":"New email","password_label":"Current password","submit":"Change email","submitting":"Changing email…","no_password":"Changing your email needs a password. Set one on the Security tab first.","load_error":"We couldn't load your sign-in details. Try again.","email_taken":"This email is already in use.","email_unchanged":"Enter an email different from your current one.","password_incorrect":"Incorrect password.","wrong_region":"We couldn't reach your account's home region. Refresh the page and try again.","change_failed":"Couldn't change your email. Try again.","check_inbox_title":"Check your inbox","check_inbox_description":"Your email is now {email}. Check that inbox for a verification link."},"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"},"oauth_connections":{"title":"Connected apps","subtitle":"Apps you've allowed to access SuiteOp on your behalf","this_org_hint":"Apps connected to this organization are listed on MCP & API, where you can also revoke them.","open_mcp":"Open MCP & API","other_orgs_title":"In your other organizations","organization":"Organization: {name}","connected_on":"Connected {date}","last_active":"Token last issued {date}","never_active":"No token issuance recorded yet","revoke":"Revoke","revoke_confirm_title":"Revoke access for {app}?","revoke_confirm_body":"This connection of {app} to {organization} stops working immediately. Any other connection of {app} keeps working, even to the same organization.","revoke_confirm_action":"Revoke access","revoke_error":"Couldn't revoke access. Please try again.","load_error":"Couldn't load your connected apps.","retry":"Retry"},"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_rate_limited":"Too many attempts in a short time. Please wait a minute and try again.","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, then finish deleting your account from the page you land on. If you get stuck, contact SuiteOp support.","session_check_failed":"We couldn't confirm how recently you signed in. Please try again."},"two_factor_required":{"title":"Two-factor authentication required","description":"Your organization requires two-factor authentication. Set it up below to continue.","continue":"Continue"}},"property":{"page_title":"Properties","add_property":"Add Property","add_group":"Add Group","search_placeholder":"Search properties…","filter":{"properties":"Properties","tags":"Tags","archived":"Archived","needs_attention":"Needs attention","disabled_only":"Disabled only","turnover_today":"Turnover today"},"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":{"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","group":"Group","property":"Property","blocker":"Blocker","source":"Source","tasks_today":"Tasks today"},"access_type":{"dynamic":"Dynamic","fixed":"Static","import":"PMS Import","none":"No access"},"grouped":{"unassigned":"Unassigned","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"},"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","address_incomplete":"Pick the address from the suggestions so we can set the property's time zone.","timezone_required":"We couldn't find this property's time zone. Check its address and try again.","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","settings_tab":"Settings","devices_tab":"Devices","last_cleaned":"Last cleaned {time} by {name}","last_cleaned_photos":"{count, plural, one {# photo} other {# photos}}","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. Its PMS listing is unmapped, so map it again after restoring.","delete_permanent":"Archives the property. Its history is kept and you can restore it later. Its PMS listing is unmapped, so map it again after restoring.","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","open_for_booking":"Open for booking","open_for_booking_hint":"When off, guests can't book this property on your booking sites or through Google.","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","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","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.","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","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_instructions":"Access & check-in","settings_tab_guest_portal":"Guest experience","disable_unit_code_label":"Disable unit code","code_display_label":"Code Type","code_display_dynamic":"Dynamic Code","code_display_fixed":"Static Code","code_display_import":"Import from 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 group override uses a static code, but no entry code is configured. Reservations will not show a group access code until one is added.","inherited_group_fixed_code_missing":"This property inherits a static group code, but the group has no entry code. Add one in the group's Access settings.","open_group_access_action":"Open group access settings","code_validation_key_label":"Confirmation Key","code_validation_key_placeholder":"e.g. #","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 group code is independent and keeps working.","internal_notes_placeholder":"e.g. Alarm code: 1234, key under doormat, gate requires buzzer…","review_request_title":"Review Request","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_hours_label":"Hours before check-in","checkin_summary_placeholder":"e.g. Enter this code at the front door — welcome!","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","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","authority_reporting_title":"Authority reporting","authority_reporting_description":"Register this property's guests with the police. Add or fix its registration code on the registration sheet.","authority_reporting_open":"Open registration sheet","assignment_portal_saved":"Portal assignment updated.","assignment_portal_cleared":"Portal assignment removed.","assignment_portal_none":"No portal assigned","assignment_col_status":"Status","assignment_status_active":"Active","assignment_status_disabled":"Disabled","assignment_level_property":"Property","assignment_level_portal":"Portal","assignment_level_tag":"Tag","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_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_success":"Field synced from PMS successfully.","pms_refresh_success":"PMS listing refresh started. This may take a moment.","pms_listing_more_actions":"More PMS listing actions","pms_disconnect":"Disconnect listing","pms_disconnect_title":"Disconnect this PMS listing?","pms_disconnect_description":"New reservations from this listing will stop syncing to this property. Reservations already on it stay and keep updating. You can map it again later from the integration's Listing mapping tab.","pms_disconnect_confirm":"Disconnect","pms_disconnect_failed":"Could not disconnect this listing. Check the listing shown on this card and try again.","address_hidden_label":"Hide address until verified","elements_tab":"Elements","knowledge_tab":"Knowledge","elements_add_area":"Add Area","elements_add_item":"Add 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_create_catalog_entry":"Create catalog entry \"{name}\"","elements_creating_catalog_entry":"Creating entry...","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_description_with_supplies":"This will also delete all child elements. This also removes {count, plural, one {# supply} other {# supplies}} and their count history. 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_create_catalog":"Create new catalog entry","elements_child_count":"{count, plural, one {# item} other {# items}}","elements_quantity":"×{count}","elements_no_children":"No items yet","elements_col_name":"Name","elements_col_condition":"Condition","elements_col_supplies":"Supplies","elements_col_items":"Items","elements_search_placeholder":"Search spaces and items","elements_expand_all":"Expand all","elements_collapse_all":"Collapse all","elements_search_empty":"No spaces or items match \"{query}\"","elements_condition_none":"Not checked yet","elements_condition_all_good":"All good","elements_condition_pass":"Pass","elements_condition_flag":"Flag","elements_condition_fail":"Fail","elements_condition_na":"N/A","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_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","readiness_title":"Readiness","readiness_subtitle":"Ready when all three pass. Occupied while a guest is checked in.","readiness_step_status":"Status is {status}","readiness_inspection_desc":"Status is {status}. When not required, it counts as waived.","readiness_ready_desc":"Shown on the property page and the properties list","readiness_required":"Required","readiness_footnote":"When inspection isn't required, it's skipped and readiness waits only for cleaning and maintenance.","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","assignment_level_tag_named":"Tag: {name}","custom_address_label":"Display address","custom_address_placeholder":"e.g. Reception, 123 Main St","maps_link_label":"Google Maps link","images_primary":"Primary","images_make_primary":"Make primary","images_move_earlier":"Move earlier","images_move_later":"Move later","recommended":"Recommended","images_primary_hint":"The Primary photo is the hero image guests see in the portal.","guest_address_title":"Guest-facing address","guest_address_real_label":"Real address","guest_address_override_toggle":"Override for guests","house_manuals_reorder_hint":"Drag to set the order guests see in the portal.","manual_drag_handle":"Drag to reorder","manual_preview_open":"Preview {name}","manual_preview_title":"Manual preview","manual_unlink":"Unlink from property","manual_preview_variable":"This manual shows a PMS value that is filled in for each stay, so there is no text to preview here.","manual_preview_empty":"This manual has no content yet.","manual_preview_error":"Couldn't load this manual's text.","restore_action":"Restore","supplies_tab":"Supplies","capacity_bedrooms":"{count, plural, one {# bedroom} other {# bedrooms}}","capacity_baths":"{count, plural, one {# bath} other {# baths}}","capacity_beds":"{count, plural, one {# bed} other {# beds}}","capacity_max_guests":"{count, plural, one {# max guest} other {# max guests}}","capacity_sleeps":"Sleeps {count}","header_group":"Group · {name}","header_local_time":"{time} local","new_task_button":"New task","attention_pill":"{count, plural, one {# needs attention} other {# need attention}}","attention_title":"Needs attention · {count}","attention_description":"Each row jumps to where you fix it.","attention_maintenance_attention_needed":"Maintenance: attention needed","attention_maintenance_blocked":"Maintenance: blocked","attention_supplies":"{count, plural, one {# supply below target} other {# supplies below target}}","attention_supply_line":"{name} {counted} of {par}","attention_more":"+{count} more","attention_opal":"{count, plural, one {Opal suggested # fact} other {Opal suggested # facts}}","attention_devices_offline":"{count, plural, one {# device is offline} other {# devices are offline}}","guest_access_title":"Guest access","guest_access_edit":"Edit","wifi_copy_value":"Copy {label}","wifi_copied":"Copied","wifi_copy_failed":"Couldn't copy. Select the text and copy it by hand.","smart_devices_title":"Smart devices · {count}","device_open_controls":"Open controls","manual_scope_property":"Property","manual_scope_group":"Group: {name}","elements_open_issue":"Open issue: {name}","elements_being_fixed":"Being fixed","elements_assigned_to":"assigned to {name}","elements_view_issue":"View issue","elements_photos":"Photos","elements_photos_all":"All","elements_photos_uploaded":"Uploaded","elements_photos_from_tasks":"From tasks","elements_photo_source_task":"Task","elements_photos_add":"Add","elements_photos_empty":"No photos yet","elements_photo_alt":"Photo of {name}","elements_catalog_linked_hint":"Linked — the fields below come from the catalog","elements_edit_in_catalog":"Edit in catalog","elements_unlink_to_edit":"Unlink to edit these on this element only.","elements_differs_from_catalog":"Differs from catalog","elements_manual":"Manual","elements_set_by_catalog":"Set by the catalog","elements_details":"Details","elements_staff_only":"Staff only","elements_supplies_here":"Supplies here","elements_edit_supplies":"Edit supplies","elements_no_linked_devices":"No devices linked","identity_title":"Identity","location_title":"Location","capacity_times_title":"Capacity & times","wifi_house_rules_title":"Wi-Fi & house rules","wifi_network":"Wi-Fi network","timezone_shift_hint":"Also shifts default check-in/out.","capacity_elements_hint":"Elements say it sleeps {count}.","check_in_out_title":"Check-in & check-out","pms_sync_cover_action":"Sync cover from PMS","pms_sync_wifi_action":"Sync Wi-Fi from PMS","pms_sync_nickname_action":"Sync nickname from PMS","custom_fields_more":"{count, plural, one {# more field} other {# more fields}}","custom_fields_show_all":"Show all","owner_new_short":"New","timezone_tasks_hint":"Open tasks with time windows move to the new time zone.","assignment_portal_row_label":"Guest portal","assignment_portal_change":"Change","assignment_via_portal":"Portal: {name}","assignment_col_assigned_via":"Assigned via","assignment_col_name":"Name","assignment_col_manual":"Manual","assignment_precheck_card_title":"Pre-check-in","assignment_upsells_card_title":"Upsells","review_request_flow_rate":"Guests rate stays at check-out","review_request_flow_stars":"5 stars only","review_request_flow_redirect":"Redirected to the link","review_request_explainer":"Only 5-star ratings are redirected. With no link, ratings stay internal — except Airbnb, which goes to Airbnb's review page.","review_request_url_hint":"Used unless a booking site has its own link below.","property_info":"Property Info","check_in_wifi":"Check-in & WiFi","timezone_unset":"Not set — uses the organization's timezone, or UTC if none","timezone_change_hint":"Changing the timezone updates this property's default check-in and check-out times. Open tasks with time windows move to the new timezone.","address":"Address","unit":"Unit","network_details":"Network Details","house_manuals_group_section":"Inherited from Group","settings_tab_details":"Details","code_management_title":"Property Access","code_management_description":"Configure how access codes are generated and displayed to guests.","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_placeholder":"Select code type","code_display_dynamic_hint":"Unique codes generated per reservation.","code_display_fixed_hint":"A pre-set code on the lock, shown to all guests — not generated or synced.","code_display_import_hint":"Codes are pulled from your PMS.","fixed_code_missing_action":"Add static code","code_validation_key_description":"Key to confirm personal code entry. Max 8 characters.","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.","review_request_description":"Where guests are redirected to leave a review after checkout.","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_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.","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.","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_col_nickname":"Nickname","assignment_col_assignment":"Assignment","assignment_precheck_title":"Pre-Check-in Steps","assignment_precheck_count":"Pre-Check-in Steps ({count})","assignment_upsells_title":"Active Upsells","assignment_upsells_count":"Active Upsells ({count})","pms_sync_from":"Sync from PMS","pms_sync_cover":"Cover Photo","pms_sync_wifi":"WiFi Credentials","pms_sync_nickname":"Nickname","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_view_catalog":"View in Catalog","operations_title":"Operations","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.","custom_address_hint":"Shown to guests instead of the real address.","maps_link_hint":"Opens instead of the automatically generated map link.","not_recommended":"Not recommended","guest_address_description":"Control the address guests see and where map links point.","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","task_order_title":"Task order","task_order_subtitle":"How the checklists on this property's tasks are ordered.","task_order_by_elements":"Order tasks by this property's element order","task_order_by_elements_desc":"New tasks follow the walk through the house: each area, then the items inside it. Steps not tied to an element keep their place at the start or end. Tasks that haven't started are updated too."},"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","tab_knowledge":"Knowledge","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."},"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":"No lock is selected for this step. Choose one and save so guests 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}"},"bulk_move":{"action":"Move to group","title":"{count, plural, one {Move # property to a group} other {Move # properties to a group}}","description":"Choose the group these properties belong to.","group_label":"Group","group_placeholder":"Choose a group","no_group":"No group","toast_success":"{count, plural, one {# property moved} other {# properties moved}}","toast_error":"Couldn't move the properties. Try again."},"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"}},"stock":{"title":"Supplies","description":"What this property keeps, where, and how it stands against par.","view_by_supply":"By supply","view_by_location":"By location","search_placeholder":"Search supplies","filter_remove":"Remove filter: {status}","filtered_empty_title":"No supplies match","filtered_empty_description":"Try a different search or clear the filters.","property_wide":"Property-wide","group_total":"{total} of {par}","add":"Add supply","load_failed":"Couldn't load this property's stock.","below_target":"Below target","no_target":"No target","target":"Target: {count} {unit}","target_default":"Target: {count} {unit} (default)","last_count_by":"{when} · {name}","never_counted":"Not counted yet","actions":"Actions for {name}","record_count":"Record count","history":"Count history","edit_target":"Edit target","remove":"Remove from property","empty_title":"Nothing stocked yet","empty_description":"Add the supplies this property keeps. A turnover whose count step is linked to one will then save its count here.","added":"Supply added","removed":"Supply removed","remove_title":"Remove from this property?","remove_description":"“{name}” and its count history will be removed from this property. Count steps for it will record a number only here.","add_title":"Add supply","add_description":"Choose a supply this property keeps.","add_no_catalog":"You haven't created any supplies yet.","add_all_stocked":"This property already stocks every supply.","add_location_all_stocked":"This location already stocks every supply.","manage_consumables":"Manage supplies","consumable":"Supply","consumable_placeholder":"Choose a supply","consumable_required":"Choose a supply.","target_label":"Target","target_hint":"Leave empty to use the supply's default target.","add_location_label":"Location","quantity":"Quantity","quantity_with_unit":"Quantity ({unit})","quantity_invalid":"Enter a whole number, 0 or more.","record_count_title":"Record count: {name}","record_count_description":"Saves a stock-take for this property. Future counts are compared with it.","count_recorded":"Count recorded","edit_target_title":"Target for {name}","edit_target_description":"How many this property should have. Leave empty for no target.","edit_target_description_default":"How many this property should have. Leave empty to use the default ({count}).","target_saved":"Target saved","history_title":"{name}: count history","history_description":"The last {count} counts, newest first.","history_empty":"No counts yet.","source_task":"From a task","source_manual":"Manual stock-take","was":"was {count}"},"bulk_xray":{"action":"Run X-Ray","confirm_title":"Run X-Ray on {count, plural, one {# property} other {# properties}}?","confirm_description":"Properties not connected to a PMS, with fewer than {min} listing photos, or X-Rayed in the last {days} days are skipped.","started":"X-Ray started for {count, plural, one {# property} other {# properties}}","none_started":"No X-Ray was started","where_to_find":"Reports appear on each property's Elements tab","skipped_not_eligible":"{count} skipped: no PMS connection or too few photos","skipped_in_progress":"{count} already running","skipped_recent":"{count} X-Rayed in the last {days} days"},"supplies":{"pill_count":"{count, plural, one {# supply} other {# supplies}}","status_below":"Below target","status_uncounted":"Needs a count","status_above":"Above target","status_at":"At target","never_counted":"Not counted yet","kind_consumable":"Consumable","kind_reusable":"Reusable","section_title":"Supplies","add_supply":"Add supply","par_level":"Par level","remove":"Remove {name}","unsaved":"Unsaved","create_supply":"Create supply","type_label":"Type","type_reusable_hint":"Reusable stock (OS&E): linens, towels, cutlery","notes_label":"Notes","undo_remove":"Undo","summary_below":"{count, plural, other {# below target}}","summary_at":"{count, plural, other {# at target}}","summary_above":"{count, plural, other {# above target}}","summary_uncounted":"{count, plural, one {# needs a count} other {# need a count}}","summary_showing":"Below-target first · showing {shown} of {total}","summary_view_all":"View all in Supplies","summary_empty":"No supplies here yet"},"settings_card":{"unsaved_label":"Unsaved changes","strip_count":"{count, plural, one {# card has} other {# cards have}} unsaved changes","discard_all":"Discard all","save_all":"Save all","save_failed":"Couldn't save: {cards}"},"access_settings":{"access_codes_title":"Access codes","property_access":"Property access","disable_unit_code_description":"Hide the unit's own code from guests and don't provision it.","code_type_label":"Code type","code_type_dynamic":"Dynamic code","code_type_dynamic_hint":"Unique code per reservation.","code_type_fixed":"Static code","code_type_fixed_hint":"One pre-set code for all guests.","code_type_import":"Import from PMS","code_type_import_hint":"Codes pulled from your PMS.","entry_code_label":"Entry code","confirmation_key_label":"Confirmation key","confirmation_key_hint":"Max 8 characters.","unit_summary_label":"Unit check-in summary","unit_summary_hint":"Shown next to this unit's code.","group_access":"Group access","inherited_from_group":"Inherited from Group · {name}","inherited_from_your_group":"Inherited from your group","override_for_property":"Override for this property","group_code_label":"Group code","group_code_help":"Override to set this property's own code type and code.","group_default":"Group default","group_summary_label":"Group check-in summary","group_summary_hint":"Shown to guests while this property follows the group.","group_summary_override_hint":"Leave empty to show the group's summary. Saving it empty returns every language to the group's summary.","edit_in_group":"Edit in group","timer_label":"Check-in instruction timer","timer_not_recommended":"Not recommended with dynamic codes","timer_hours_unit":"hrs","timer_before_check_in":"before check-in","hide_address_hint":"Your team always sees it.","hide_wifi_label":"Hide Wi‑Fi until check-in unlocks","hide_wifi_hint":"Unlocks with the door code: verification + any required payment.","backup_swap_label":"Backup code swap","backup_swap_badge":"Turning off not recommended","backup_swap_hint":"If a guest's code fails, they're given a backup code already working on the lock. It expires at check-out.","guest_address_override_hint":"Show guests a different address and/or maps link.","internal_notes_title":"Internal access notes","internal_notes_hint":"Staff only","steps_title":"Arrival & departure steps","steps_type_label":"Step list","steps_check_in":"Check-in","steps_check_out":"Check-out"},"views":{"all_properties":"All properties","needs_attention":"Needs attention","not_ready":"Not ready","turnover_today":"Turnover today","disabled":"Disabled"},"header":{"not_ready_count":"{count, plural, one {# Not ready} other {# Not ready}}","device_issues_count":"{count, plural, one {# Device issue} other {# Device issues}}","hide_disabled":"Hide disabled","hidden_count":"{count, plural, one {# hidden} other {# hidden}}"},"group_by":{"label":"Group by","group":"Group","city":"City","readiness":"Readiness","access":"Access","turn":"Turn status","none":"No grouping","turn_hint":"Today's check-ins, check-outs and turnovers"},"toolbar":{"collapse_all":"Collapse all","expand_all":"Expand all"},"turn_date_required":"Choose the day to read turn status for.","bands":{"no_city":"No city set","turn":{"turnover":"Turnover","check_in":"Check-in","check_out":"Check-out","in_stay":"In stay","vacant":"Vacant"}},"blocker":{"dirty":"Dirty","cleaning_unknown":"No cleaning status","failed_inspection":"Failed inspection","maintenance":"Maintenance","not_inspected":"Not inspected"},"tasks_today":{"progress_label":"{done} of {total} tasks done"}},"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","door_code_blocked_by_migrated_history":"Blocked by migrated grant","door_code_deferred_by_migration_hold":"Deferred (migration hold)","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":"Playbook Action"},"filter":{"status":"Reservation status","occupancy":"Occupancy","access":"Access","verification":"Verification","blacklisted_only":"Blacklisted only","needs_attention":"Needs attention","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"},"views":{"arriving_today":"Arriving today","departing_today":"Departing today","in_house":"In-house","needs_attention":"Needs attention","all":"All reservations"},"hide_unlinked":{"label":"Hide unlinked listings","description":"Reservations whose listing isn't linked to a property","hidden_count":"{count, plural, one {# hidden} other {# hidden}}","hidden_count_capped":"{cap, number}+ hidden"},"grouping":{"access":"Access","booking_source":"Source","combined_date_type":"Grouping isn't available while check-ins and check-outs are shown together.","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","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":{"keyless":{"label":"Keyless mobile key","reason_missing_guest_email":"The guest has no email address.","reason_missing_guest_phone":"The guest has no phone number.","reason_invalid_guest_phone":"The guest’s phone number needs the international format (+ country code).","reason_missing_guest_name":"The guest has no name.","reason_guest_not_eligible":"The guest is not eligible for access codes.","reason_invalid_key":"Keyless rejected the API key. Reconnect the account.","reason_listing_not_found":"Keyless does not recognize this property’s listing ID. Make sure it matches the listing ID on the lock in Keyless.","reason_vendor_rejected":"Keyless rejected the booking.","reason_unknown":"Something went wrong. Check the booking in your Keyless dashboard.","reason_cancel_refused":"Keyless did not cancel this booking, so the guest's key may still work. Cancel it in your Keyless dashboard."},"title":"Reservation details","crumb":"Reservation","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","mark_owner_stay":"Mark as owner stay","unmark_owner_stay":"Remove owner-stay mark","open_in_pms":"Open in {pms}","edit":"Change","more_actions":"More actions","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_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","quick_nav_overview":"Overview","previous_reservation":"Previous reservation","next_reservation":"Next reservation","portal_pill_opened":"Portal · {count}×","portal_pill_not_opened":"Portal · not opened","portal_pill_none":"No portal","portal_link_short":"Link","stay_day_today":"Today · {day}","access_tile_missing_code":"No fixed code","access_tile_deferred_migration_hold":"Deferred (migration hold)","migration_deferred_title":"Door code deferred by the migration","migration_deferred_reason":{"lock":"{lock}: this lock’s V1 door codes have not been taken over yet. The code is issued once they are.","unplaced_native_twin_takeover":"{lock}: a V1 code that may land on this lock has not been placed yet. The code is issued once it is.","redrive_pending":"{lock}: the migration hold has cleared. The code is issued at the lock’s next code push."},"compact_back":"Back to {name}","compact_message":"Message","access_summary_none":"No codes","payments_summary_none":"No charges","tasks_summary_count":"{count, plural, one {# task} other {# tasks}}","tasks_summary_none":"No tasks","workflow_summary_count":"{count, plural, one {# action} other {# actions}}","workflow_summary_none":"No actions","messages_summary_none":"No conversation yet","messages_summary_open":"Open conversation","pay_awaiting":"{amount} awaiting","pay_awaiting_count":"{count} awaiting","pay_settled":"Settled","steps_meta":"{done} of {total} steps","verification_approve":"Approve","verification_decline":"Decline","verification_reopen":"Reopen","waive":"Waive","document_checks":"Document checks","document_selfie_checks":"Document & selfie checks","codes_count":"{count, plural, one {# code} other {# codes}}","codes_failed_count":"{count} failed","access_group_band":"{scope} · {count}","copy_code":"Copy code","open_lock":"Open lock","devices_count":"{count, plural, one {# device} other {# devices}}","task_unassigned":"Unassigned","hold_awaiting_capture":"The card is authorized. Capture it to charge the guest, or release the hold.","payment_view_details":"View details","beds_short":"{count} bd","baths_short":"{count} ba","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.","portal_loads_label":"Portal Loads","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_disabled":"Disabled","auto_schedule_disabled_by":"Disabled by {name}","held_second_code_note":"A second door code for this stay is held and was not sent to the lock; a team member decides which one stays.","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.","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}%","upsell_fees":"Upsell & Fees","subtotal_label":"Subtotal","accommodation_fare_label":"Accommodation","cleaning_fee_label":"Cleaning fee","other_fees_label":"Other fees","fees_and_taxes_label":"Fees & taxes","fees_may_include_cleaning_label":"Fees (may include cleaning)","taxes_label":"Taxes","discount_label":"Discount","total_charged_label":"Total reported by PMS","total_charged_hint":"The PMS's own total for this booking. It is not the sum of the lines above — providers differ in what they itemise, and some already fold fees or tax into other figures.","fare_not_itemized":"This PMS doesn't break out the accommodation fare, so only the totals it sends are shown.","charge_paid":"Paid","charge_quantity":"Qty: {quantity}","charge_scheduled_for":"Scheduled for {date}","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":"Playbook Actions","workflow_show_filtered":"Show filtered","workflow_hide_filtered":"Hide filtered","workflow_show_more":"Show more","workflow_show_less":"Show less","status_history":"Status history","status_changed_by":"by {name}","status_changed_system":"System","reviews_label":"Reviews","booking_site_answers":"Booking site answers","verification_step_completed":"Completed","verification_step_pending":"Pending","verification_step_in_progress":"In progress","verification_step_awaiting_payment":"Awaiting payment confirmation","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","waive_step":"Waive requirement","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","portal_open_blocked":"Your browser blocked the new tab. Allow pop-ups for this site and try again.","portal_open_failed":"Couldn't open the guest portal. Please try again.","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","earlier_guest_records":"Earlier guest records","earlier_guest_records_hint":"Kept on record for staff only. May be a guest no longer on this stay, or an earlier copy of a current guest's record, kept when they confirmed or changed their details or ID photo.","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_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.","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","signed_contract_summary":"Contract as signed","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 when the check-in retention period ended.","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_check_barcode_label":"PDF417 barcode","identity_check_barcode_pass":"The barcode on the back of the ID was read and no clear mismatch with the front was found.","identity_check_barcode_not_compared":"The barcode on the back of the ID was read. Canadian IDs are not compared with the front yet.","identity_check_barcode_read":"The barcode on the back of the ID was read.","identity_check_barcode_unreadable":"The barcode on the back couldn't be read.","identity_check_barcode_mismatch":"The barcode doesn't match the front: {fields}.","identity_barcode_field_document_number":"ID number","identity_barcode_field_date_of_birth":"date of birth","identity_barcode_field_expiration_date":"expiry date","identity_extracted_from_barcode":"From barcode","identity_barcode_value":"Barcode: {value}","identity_risk_factor_barcode_mismatch":"The barcode on the ID doesn't match the printed details","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.","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.","identity_check_movement_label":"Movement check","identity_check_movement_pass":"Followed the instructions; same face as the selfie","identity_check_movement_fail":"Did not match the instructions","identity_check_movement_face":"The moving face was not the selfie's","identity_check_movement_replay":"The face was shown on a screen or a photo","identity_check_movement_not_captured":"Nothing was recorded","identity_check_movement_declined":"The guest skipped the movement check — decide on the ID and selfie.","identity_movement_asked_seen":"Asked: {asked} · Seen: {seen}","identity_check_movement_not_started":"The movement check didn't start on the guest's phone — the camera or the check couldn't load, or the guest skipped it before the photo — decide on the ID and selfie.","identity_gesture_blink":"blink","identity_gesture_turn_left":"turn left","identity_gesture_turn_right":"turn right","identity_gesture_neutral":"no movement","identity_gesture_unclear":"unclear","identity_risk_factor_movement_failed":"Movement check not passed","identity_risk_factor_movement_declined":"The guest chose to skip the movement check","identity_risk_factor_movement_not_started":"The movement check didn't run on the guest's device","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_back_not_captured":"This ID has a back that wasn't photographed — the guest chose a one-page document type","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_guest_underage":"The guest is under this step's minimum age at check-in","identity_risk_factor_guest_underage_unreadable":"The date of birth on the ID couldn't be read, and this step requires a minimum age","identity_risk_factor_guest_underage_detail":"The guest was {age} at check-in; this step requires {minimumAge}","identity_risk_factor_guest_underage_unreadable_detail":"The date of birth on the ID couldn't be read, and this step requires a minimum age of {minimumAge}","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.","agreement_document_open":"Open signed agreement","agreement_document_unavailable":"The stored agreement document could not be loaded.","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.","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}}","view_signed_agreement":"View signed agreement","fee_pricing":{"title":"Check the fees on this reservation","base":"Base used: {amount}.","reason":{"connector_states_net":"{fee} was priced on the net fare the PMS stated.","lines_reconcile":"{fee} was priced on the net fare the PMS stated.","tax_inside_fare":"{fee} computed by removing the tax the PMS lists inside the fare.","nothing_itemised":"{fee} computed by removing {vat} VAT from the PMS price.","no_tax_stated":"{fee} computed by removing {vat} VAT from the PMS price (no tax stated).","no_fare_stated":"{fee} computed by removing {vat} VAT from the booking total (no fare stated).","lines_do_not_reconcile":"{fee} computed from the booking total — the PMS figures didn't add up.","no_breakdown":"{fee} not charged: the PMS doesn't itemise the amounts the percentage applies to.","no_net_breakdown":"{fee} not charged: the PMS sent no net figures for its base.","no_gross_breakdown":"{fee} not charged: the PMS sent no gross figures for its base.","no_rate":"{fee} not charged: the fee rule has no rate.","currency_mismatch":"{fee} not charged: its currency differs from the booking's.","currency_unknown":"{fee} not charged: the booking has no currency.","check_in_unknown":"{fee} not charged: the booking has no check-in date.","no_total":"{fee} not charged: the PMS sent no total.","connector_withheld_fare":"{fee} not charged: the PMS sent no accommodation fare.","no_vat_rate":"{fee} not charged: the fee rule doesn't state the VAT included in PMS prices.","negative_base":"{fee} not charged: the PMS figures contradict each other.","payment_account_not_found":"{fee} not charged: the step's payment account is missing or inactive.","no_default_payment_account":"{fee} not charged: no payment account.","missing_currency":"{fee} not charged: the fee has no currency.","mixed_currencies":"{fee} not charged: the step's fees are in more than one currency.","unsupported_charge_type":"{fee} not charged: its charge type can't be collected.","unsupported_currency":"{fee} not charged: GuestyPay can't charge a currency without decimals.","below_minimum_charge":"{fee} not charged: the total is under the payment processor's minimum charge.","feature_disabled":"{fee} not charged: percentage fees are turned off for this organization.","scope_orphaned":"{fee} not charged: the properties, groups or tags it was limited to were deleted."}}},"verification_sheet":{"label_id_front":"ID Front","label_id_back":"ID Back","label_selfie":"Selfie","label_liveness_strip":"Movement check"},"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","identity_images_purged":"ID images were deleted under the retention policy.","identity_declared_id_type":"ID type declared by the guest","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":{"risk":{"badge":"Risk","title":"Stripe risk checks","cvc":"CVC","postal":"ZIP / postal code","address":"Street address","hint":"Flagged when Stripe rates the payment elevated or high risk, or the CVC or ZIP check fails. A flag never blocks the payment.","reason_risk_level":"Stripe rating: {level}","reason_cvc_check":"CVC check failed","reason_postal_check":"ZIP check failed","levels":{"normal":"Normal risk","elevated":"Elevated risk","highest":"High risk","not_assessed":"Not assessed","unknown":"Unknown"},"checks":{"pass":"Passed","fail":"Failed","unavailable":"Not available","unchecked":"Not checked"}},"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","stage_migration_held":"This charge can't change status yet: the account is still being migrated from the previous SuiteOp, which handles it until the move is complete.","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}.","amount_out_of_range":"Enter an amount between {min} 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","payment_created":"Payment created","paid":"Payment captured","delivered":"Delivered","denied":"Denied","refunded":"Refunded","hold_placed":"Hold placed","hold_renewed":"Hold renewed","hold_released":"Hold released","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":"Playbook","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_live_key_refused":"This test environment holds a live postcard-provider key, so nothing was sent and no mail was billed. Ask an administrator to install a test key.","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","permission_to_enter_terms":"Terms shown to the guest","permission_to_enter_standard_wording":"Standard wording"},"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","add_action_short":"Add to 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","email_invalid_excluded":"This email address is invalid and will not be used for blacklist matching.","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","deposit_hold_scheduled":"Deposit hold scheduled","checks":{"column":"Checks","portal_short":"PRTL","access_short":"ACC","verify_short":"VER","occupancy_short":"OCC","title":"{axis} · {state}","hint":"Click to open"},"needs_doing":{"also":"Also: {problem}","retrying":"Retrying…","retry_partial":"Retry started for {started} of {total} codes","action":{"review":"Review","retry_code":"Retry code","issue_code":"Issue code","configure":"Configure","link_listing":"Link listing","open":"Open"},"not_linked":{"headline":"Listing not linked to a property","detail":"No portal, cleaning task or access code"},"blacklisted":{"headline":"Guest is blacklisted","detail":"Flagged across all reservations"},"verification_review":{"headline":"ID check needs review","detail":"Approve or decline in SuiteVerify"},"verification_declined":{"headline":"Verification declined","detail":"Guest can’t see check-in instructions"},"deposit_failed":{"headline":"Deposit hold refused by the bank","detail":"Check-in instructions hidden until the guest adds a card"},"access_failed":{"headline":"Access code failed","detail":"The lock did not accept the code"},"door_code_blocked_by_migrated_history":{"headline":"Door code blocked by a migrated access grant","detail":"The migrated code has ended and can’t be re-sent — issue a code manually"},"door_code_deferred_by_migration_hold":{"headline":"Door code deferred by a migration hold","detail":"A migrated lock still owes its V1 door codes — the code is issued once they are taken over"},"missing_fixed_code":{"headline":"No fixed code configured","detail":"Guest has no way in"},"canceled":{"headline":"Canceled"},"inquiry":{"headline":"Enquiry, not booked"},"checked_out":{"headline":"Checked out"},"departs_today":{"headline":"Departs today · {time}"},"in_house":{"headline":"In-house","detail":"Departs {date}"},"verifying":{"headline":"Guest is completing verification"},"portal_not_opened":{"headline":"Guest hasn’t opened the portal","detail":"Check-in instructions not seen yet"},"pre_check_in_not_started":{"headline":"Pre-check-in not started"},"ready":{"headline":"Ready for arrival","no_locks":"No locks at this property"}},"list_cells":{"guest_property":"Guest · Property","today":"Today","day":"{weekday}, {date}","checked_in_on":"Checked in · {day}","checked_out_on":"Checked out · {day}"},"stay_requirements":{"title":"Reservation labels","detail_label":"Note for {name}","detail_placeholder":"Add a note, e.g. 2 dogs"},"code_actions":{"reinstall":"Re-install access","change":"Change code","revoke":"Revoke access","retry":"Retry eligible doors","reinstall_title":"Re-install reservation access?","change_title":"Change this reservation’s code?","revoke_title":"Revoke reservation access?","reinstall_description":"Check and restore eligible access on these doors, preserving the current PIN and access windows. Each door is checked separately.","change_description":"Request a new reservation PIN and retire the previous managed credentials on these doors. Device and PMS updates may take time.","change_mode_label":"New code","change_mode_generate":"Generate a code","change_mode_enter":"Enter a code","requested_code_label":"New PIN","requested_code_hint":"Digits only, at your organization's code length. Every door on this stay gets this PIN.","revoke_description":"Stop automatic scheduling and request removal of this reservation’s existing managed access on these doors. This does not rotate the reservation PIN.","affected_doors":"Affected doors","missing_code":"No code row yet — eligibility will be checked","requested":"Request accepted. Check the results and current code status below.","query_error":"Access details could not be refreshed. Refresh before requesting a change.","request_error":"The request could not be accepted. Refresh the access details and try again.","auto_schedule_disabled":"Automatic scheduling is disabled. Enable it before re-installing access or changing the code.","latest_attempt":"Latest re-install attempt by door","results_note":"These are the latest attempt results. A finished attempt may include failures or deferred work. Current code status appears below.","attempt_finished":"Attempt finished","attempt_running":"Attempt in progress","refresh":"Refresh access details","status":{"queued":"Requested","in_progress":"Checking access","confirmed":"Provider confirmed","unchanged":"Verified unchanged","scheduled":"Scheduled for supported delivery time","pending":"Provider processing","deferred":"Deferred","skipped":"Skipped","failed":"Failed"},"recovery":{"requested":"Code change requested","staged":"Preparing replacement credentials","completed":"Replacement credentials handed off for device processing. Check current code status for confirmation.","failed":"Code change failed. Review the current access before trying again.","superseded_chosen":"The PIN you chose wasn't installed. Check the current code, then try Change code again.","superseded":"This code change no longer applies."},"deletion_pending":"Removal requested — waiting for device confirmation","deletion_failed":"Removal failed. Access may remain active on this lock.","reason":{"temporary":"The provider is temporarily unavailable.","cooldown":"The provider requires a wait before another attempt.","offline":"The lock is offline.","window":"The provider cannot accept this access window yet.","changed":"Access changed during the attempt. Refresh before retrying.","busy":"Another repair is in progress.","failed":"The provider could not complete this attempt.","excluded":"This door is outside the current access scope.","credential_conflict":"The existing credential conflicts with the intended reservation access.","credential_unavailable":"The intended reservation credential is not available.","unknown":"Review the current code status for details."}}},"settings":{"page_title":"Settings","group_operations":"Operations","group_operations_description":"Configure the reusable building blocks your team uses to run daily operations.","group_organization":"Organization","group_organization_description":"Your company, people and plan","group_guest_experience":"Guest experience","group_guest_experience_description":"What guests see before and during the stay","group_messaging":"Messaging","group_messaging_description":"Emails and the inbox","group_connections":"Connections","group_connections_description":"Outside systems","card_members_title":"Members","card_members_description":"Everyone who can sign in, and what they can see","card_billing_title":"Billing","card_billing_description":"Your plan, invoices and add-ons","card_integrations_title":"Integrations","card_integrations_description":"Connected systems, channels and payment providers","shell_title":"Settings","shell_search_label":"Search settings","shell_search_placeholder":"Search settings","shell_search_results_count":"{count, plural, one {# setting} other {# settings}}","shell_search_no_results":"Nothing matches “{query}”","shell_open_menu":"Open the settings menu","shell_skip_to_content":"Skip to content","shell_profile_row_subtitle":"Your profile & notifications","shell_profile_eyebrow":"Your account","home_all_settings":"All settings","home_profile_card_title":"Your profile","home_profile_card_description":"Name, language, notifications, password and two-factor","home_profile_card_action":"Open profile","home_overview_error":"Couldn't load the latest status","home_attention_title":"Needs attention","home_attention_integration_reconnect":"{provider} needs to be reconnected","home_attention_integration_health":"{provider}: {status}","home_attention_syncs":"{count, plural, one {# sync failed or stalled} other {# syncs failed or stalled}} in the last 24 hours","home_attention_webhooks":"{count, plural, one {# webhook failed} other {# webhooks failed}} in the last 24 hours","home_attention_dns":"{hostname} is waiting on DNS","home_attention_dns_more":"{count, plural, one {# more address is} other {# more addresses are}} waiting on DNS","home_attention_booking_sources":"{count, plural, one {# booking source isn't} other {# booking sources aren't}} matched to a channel","home_attention_translation":"{language} is {percent}% translated: {count, plural, one {# text still shows} other {# texts still show}} in English","home_attention_action_review":"Review","home_attention_action_open_log":"Open log","home_attention_action_show_records":"Show records","home_attention_action_match":"Match sources","home_attention_action_translate":"Translate","home_summary_members":"{active} active · {invited} invited","home_summary_members_active_only":"{active} active","home_summary_partner_companies":"{count} connected","home_summary_billing":"{status, select, active {Active} trialing {Trial} past_due {Payment overdue} unpaid {Unpaid} canceled {Canceled} paused {Paused} incomplete {Incomplete} incomplete_expired {Expired} other {No subscription}}","home_summary_security_required":"Two-factor required","home_summary_security_off":"Two-factor not required","home_summary_languages":"{count, plural, one {# language} other {# languages}} on","home_summary_setup_guide":"{done} of {total} done","home_summary_portals":"{count, plural, one {# portal} other {# portals}}","home_summary_brands":"{count, plural, one {# brand} other {# brands}}","home_summary_verification_steps":"{count} active","home_summary_check_in":"{set} of {total} properties","home_summary_manuals":"{count, plural, one {# manual} other {# manuals}}","home_summary_events":"{count, plural, one {# event} other {# events}}","home_summary_guides":"{count, plural, one {# guide} other {# guides}}","home_summary_upsells":"{count, plural, one {# upsell} other {# upsells}}","home_summary_domains_pending":"{count} pending verification","home_summary_domains_clear":"Nothing pending","home_summary_booking_sites":"{count} live","home_summary_departments":"{count, plural, one {# department} other {# departments}}","home_summary_task_templates":"{count, plural, one {# template} other {# templates}}","home_summary_scheduler":"{count} active","home_summary_catalog":"{count, plural, one {# element} other {# elements}}","home_summary_supplies":"{count, plural, one {# supply} other {# supplies}}","home_summary_email_templates":"{count, plural, one {# template} other {# templates}}","home_summary_inbox_labels":"{count, plural, one {# label} other {# labels}}","home_summary_inbox_routing":"{count, plural, one {# inbox} other {# inboxes}}","home_summary_ai_agents":"{count, plural, one {# agent} other {# agents}}","home_summary_knowledge":"Facts to review: {count}","home_summary_knowledge_capped":"Facts to review: {count}+","home_summary_booking_sources_unmapped":"{count} unmatched","home_summary_booking_sources_clear":"All matched","home_summary_api_keys":"{count, plural, one {# API key} other {# API keys}}","home_summary_observability_failed":"Problems in 24 hours: {syncs, plural, one {# sync} other {# syncs}}, {webhooks, plural, one {# webhook} other {# webhooks}}","home_summary_observability_clear":"No sync or webhook problems in 24 hours","home_summary_integrations":"{count, plural, one {# connection} other {# connections}}","home_summary_integrations_issues":"{count, plural, one {# connection} other {# connections}} · {issues} need attention","card_verify_title":"Verification steps","card_white_labeling_title":"Domains & email","card_connections_title":"Partner companies","card_inbox_routing_title":"Inbox routing","card_inbox_agents_title":"AI agents","card_translations_title":"Languages","card_setup_guide_title":"Setup guide","card_inbox_routing_description":"Which inbox a conversation lands in, and who gets assigned to it.","card_inbox_agents_description":"The AI agents that draft or send replies, and how much they may do unattended.","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_description":"Pre-check-in verification steps","card_guest_content_title":"Guest content","card_guest_content_description":"Manuals, local events and guides for guests","guest_content_description":"House manuals, local events and guides that guests browse in the portal.","portals_description":"Each portal is a version of the guest app: what guests can do, how to reach you, and which properties use it.","brands_description":"Logo, colors and cover image guests see in the portal.","verification_steps_description":"Pre-check-in: what guests complete before they arrive — their details, ID, the agreement, deposit and fees.","verification_tab_steps":"Steps","verification_tab_retention":"Data retention","upsells_description":"Add-ons guests buy or request in the portal. Postcards are a type here too.","guest_content_manage_categories":"Manage categories","card_upsells_title":"Upsells","card_upsells_description":"Add-on services and products","card_check_in_instructions_title":"Bulk check-in/out instructions","card_check_in_instructions_description":"Arrival steps for one property or many at once","card_get_paid_title":"Get paid","card_get_paid_description":"Your organization's payout account","card_payments_received_title":"Payments received","card_payments_received_description":"What other organizations have paid you","card_email_templates_title":"Email Templates","card_email_templates_description":"Reusable emails for playbooks and guest communication","card_catalog_title":"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_description":"Languages and AI translations for your content — guest portal, task templates, and more","card_setup_guide_description":"Your setup checklist — come back any time to finish what you skipped","card_white_labeling_description":"Custom domains, email senders, DNS, and SEO","catalog_title":"Catalog","catalog_description":"The shared list of things in your properties, how they're grouped, and the supplies you restock.","catalog_tab_elements":"Elements","catalog_tab_categories":"Categories","catalog_add_entry":"New element","catalog_search_placeholder":"Search elements","catalog_filter_all_categories":"All categories","catalog_no_matches":"No elements match your search or category.","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_duplicate_name_of":"“{name}” already uses this name in this category. Choose another name.","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_duplicate_name_of":"The type “{name}” already uses this name at this level. Choose another name.","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","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_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_description":"How temperatures are displayed across the dashboard and guest portals.","appearance_currency_label":"Default currency","appearance_currency_description":"Used for payment accounts you connect from now on, unless the payment provider sets its own currency. Existing payment accounts keep their currency.","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":"MCP & API","card_api_keys_description":"Connect Claude, ChatGPT and other AI apps, or build with the API","api_keys_title":"MCP & API","mcp":{"tabs_label":"MCP and API","tab_mcp":"MCP (AI)","tab_api":"API","hero_title":"Connect SuiteOp to your AI apps","hero_description":"Ask about reservations, tasks and upsells, or have your AI app create and update them, straight from Claude, ChatGPT, Cursor or any MCP app. Each connection only gets the access you approve.","server_url_label":"Your SuiteOp MCP server URL","copy":"Copy","copied_toast":"Copied to clipboard","copy_failed":"Couldn't copy. Select the text and copy it manually.","setup_title":"Set up your app","client_claude":"Claude","client_claude_hint":"Web, desktop and mobile","client_chatgpt":"ChatGPT","client_chatgpt_hint":"Web","client_developer":"Developer tools","client_developer_hint":"Cursor, VS Code, Claude Code","client_other":"Other apps","client_other_hint":"Any MCP client","app_name_developer":"Your editor","flow_step1_title":"Add SuiteOp to {app}","flow_step1_title_developer":"Add SuiteOp to your editor","flow_step1_title_other":"Add SuiteOp to your AI app","flow_step2_title":"Sign in to SuiteOp","flow_step2_body":"A browser window opens on the SuiteOp sign-in page. Use your usual SuiteOp login.","flow_step3_title":"Approve access","flow_step3_body":"Review what the app is asking for, choose your organization and click Authorize.","flow_step4_title":"Start asking","mock_add_connector":"Add custom connector","mock_new_app":"New app","mock_name":"Name","mock_server_url":"Remote MCP server URL","mock_authentication":"Authentication","mock_oauth":"OAuth","mock_add":"Add","mock_create":"Create","mock_your_app":"Your AI app","mock_email":"you@company.com","mock_sign_in":"Sign in","mock_consent_title":"Authorize access","mock_permissions":"Requested permissions","mock_authorize":"Authorize","mock_organization":"Your organization","mock_used_suiteop":"Used SuiteOp","mock_question":"Which cleanings tomorrow have nobody assigned?","mock_answer":"3 cleanings tomorrow have no cleaner yet: Riva 12, Beach House and Unit 4B. Want me to assign them?","claude_subtitle":"Connect through Claude's custom connectors","claude_step_1":"In Claude, open Customize, then Connectors, click + and choose Add custom connector. Name it SuiteOp, paste the server URL, leave Advanced settings empty and click Add.","claude_step_4":"In a chat, click + at the bottom left, open Connectors and switch SuiteOp on. Claude only works within what your role allows.","chatgpt_subtitle":"Add SuiteOp as an app in Developer mode","chatgpt_step_1":"In ChatGPT, open Settings and turn on Developer mode. Create a new app, name it SuiteOp, paste the server URL as its connection and choose OAuth.","chatgpt_step_4":"In a new chat, open the + menu, choose Developer mode and select SuiteOp. ChatGPT only works within what your role allows.","developer_subtitle":"Install in one click, or add the server by hand","cursor_title":"Cursor","cursor_body":"Click the button, confirm the install in Cursor, then sign in to SuiteOp when Cursor asks.","cursor_button":"Add to Cursor","cursor_manual":"Or add it to ~/.cursor/mcp.json:","vscode_title":"VS Code (GitHub Copilot)","vscode_body":"Click the button, confirm that you trust the server, then sign in to SuiteOp in the browser window that opens.","vscode_button":"Add to VS Code","vscode_manual":"Or run MCP: Open User Configuration and add:","claude_code_title":"Claude Code","claude_code_body":"Run this command, then type /mcp in a session and choose SuiteOp to sign in.","other_subtitle":"SuiteOp works with any app that supports remote MCP servers","other_step_1":"In your app's MCP, connectors or integrations settings, paste the server URL. Choose Streamable HTTP if asked, and OAuth to sign in; no client ID is needed.","other_step_4":"Ask your AI app about your SuiteOp data. It only works within what your role allows.","try_title":"Try asking","try_description":"Copy a prompt into your AI app. It can look things up, create and change them, always within your permissions.","try_kind_read":"Look up","try_kind_write":"Change","try_kind_multi":"Multi-step","try_copy":"Copy prompt","try_tasks":"Tasks and cleaning","try_tasks_1":"Which cleanings tomorrow have nobody assigned?","try_tasks_2":"Assign tomorrow's unassigned cleanings at Riva Tower to Maria and mark them high priority.","try_tasks_3":"Find every unit with 5 or more stays this month and create a deep-clean task for each one next Tuesday.","try_reservations":"Reservations and access","try_reservations_1":"Who is checking in this weekend, and which guests haven't finished pre-check-in?","try_reservations_2":"Create a door code for the guest arriving at Unit 4B tomorrow, valid for their whole stay.","try_reservations_3":"For every arrival tomorrow, check that the door code is active and list any stay that still needs one.","try_upsells":"Upsells","try_upsells_1":"List my upsells, their prices, and which properties each one shows on.","try_upsells_2":"Add a $40 late checkout upsell to all my properties tagged Beachfront.","try_upsells_3":"Review all my upsells, rewrite the 3 weakest titles and descriptions so they sell better, and update them.","try_guide":"Guest guide and portal","try_guide_1":"Which languages is my guest guide translated into?","try_guide_2":"Write a house manual for the espresso machine at Unit 4B.","try_guide_3":"Add Spanish and French to my guest guide, then check that every manual is translated.","try_automations":"Automations and templates","try_automations_1":"What task templates do I have for turnovers?","try_automations_2":"Create a turnover checklist template with kitchen, bathroom and bedroom sections.","try_automations_3":"Create and publish an automation that emails guests their check-in instructions one day before arrival.","try_team":"Team and labor","try_team_1":"Who is clocked in right now?","try_team_2":"Invite jane@company.com to the team as a housekeeper.","try_team_3":"How much did we spend on cleaning labor last month, by property, and which properties cost the most?","control_title":"You stay in control","control_role_title":"Never more than you","control_role_body":"An AI app acts as you. It sees and changes only what your role allows, and follows your role if it changes.","control_approve_title":"You approve every connection","control_approve_body":"SuiteOp shows what the app asks for and which organization it gets. Nothing is shared until you click Authorize.","control_revoke_title":"Disconnect anytime","control_revoke_body":"Every app shows up in Connected apps. Revoke it and it stops working immediately.","control_confirm_title":"Changes need your OK","control_confirm_body":"Claude and ChatGPT ask before they create or change anything, unless you choose to always allow it.","hero_badge":"Model Context Protocol","hero_connected_badge":"MCP server live","hero_connected_title":"{count, plural, one {# AI app is working with SuiteOp} other {# AI apps are working with SuiteOp}}","hero_connected_description":"{names} can look up and update your SuiteOp data, never beyond what your role allows. Check each connection and revoke access below.","copy_url":"Copy URL","works_with":"Works with","any_client":"+ any MCP client","connected_label":"Connected","add_another_app":"Add another app","hero_card_title":"Connected apps","hero_none_yet":"None yet","hero_empty_title":"No apps connected yet","hero_empty_body":"Set one up below. Once you click Authorize, the app appears here and you can revoke its access at any time.","hero_setup_first":"Set up your first app","hero_active_idle":"{active} active · {idle} idle","hero_count_label":"{count, plural, one {app connected to {org}} other {apps connected to {org}}}","manage_apps":"Manage apps","last_used_ago":"Last used {ago}","not_used_yet":"Not used yet","control_subtitle":"How SuiteOp keeps every AI connection safe.","setup_subtitle":"Pick the app you use. It takes about two minutes, and you only do it once.","add_title":"Add another app","add_subtitle":"Connect a new app, or pick a connected one to see its setup again.","picker_connected":"Connected · {date}","picker_connected_count":"{connected} of {total} connected","guide_title_claude":"Set up Claude","guide_title_chatgpt":"Set up ChatGPT","guide_title_developer":"Set up your developer tools","guide_title_other":"Set up another app","works_on":"Works on","platform_web":"Web","platform_desktop":"Desktop","platform_mobile":"Mobile","claude_callout_title":"On a Team or Enterprise plan? An owner has to go first.","claude_callout_body":"An owner adds SuiteOp under Organization settings, then Connectors, and each member then clicks Connect. Every plan works; the Free plan allows one custom connector.","chatgpt_callout_title":"Needs a paid ChatGPT plan with Developer mode","chatgpt_callout_body":"Developer mode is available on the Plus, Pro, Business, Enterprise and Edu plans, on the web. The Free plan doesn't support custom apps, and on Business an admin has to allow Developer mode first.","flow_step4_title_turn_on":"Turn it on and ask","developer_step_1":"Use Add to Cursor or Add to VS Code below, or run the Claude Code command, and confirm the install in your editor.","developer_step_4":"Ask your editor's AI agent about your SuiteOp data. It only works within what your role allows.","guide_connected_badge":"Connected","guide_connected_title":"{count, plural, one {{app} is connected and working} other {{app} are connected and working}}","guide_connected_body":"Connected on {date} · last active {ago}","guide_connected_body_unused":"Connected on {date} · not used yet","guide_manage":"Manage in Connected apps","show_setup_steps":"Show setup steps","show_setup_hint":"Connecting another account or a new device? Follow the same 4 steps.","table_title":"Connected apps","table_subtitle":"Apps you've allowed to act as you in {org}. Revoking one stops it immediately.","revoke_all":"Revoke all","revoke_all_title":"Revoke all {count} apps?","revoke_all_body":"Every app you connected to {org} stops working immediately. You can connect any of them again later.","col_app":"App","col_access":"Access","col_connected":"Connected","col_last_used":"Last used","col_actions":"Actions","access_more":"+{count} more","show_details":"Show details","hide_details":"Hide details","idle_warning":"Not used in over 30 days, so it's signed out. If you don't need it anymore, revoke it to keep access tight.","role_drift":"Your role no longer includes {scopes}, so {app} can't use that access.","details_org":"Organization","details_connected":"Connected","details_access":"Access","details_access_value":"Stays connected while in use; signs out after 30 days without use","details_permissions":"Permissions","usage_summary":"{requests, plural, one {# request} other {# requests}} · {changes, plural, one {# change} other {# changes}}","usage_chart_label":"Requests per day, last 7 days ({today} today)","details_activity":"Recent activity","activity_read":"Look-up","activity_write":"Change","activity_empty":"No activity in the last 7 days","try_any_app":"Any connected app"},"api":{"hero_badge":"REST API · v1","hero_title":"Build on the SuiteOp API","hero_description":"Read and write reservations, tasks, properties and more from your own code. Authenticate server-to-server with an API key, or use OAuth when your app acts on behalf of a SuiteOp user.","base_url_label":"REST API base URL","copy_url":"Copy URL","copy":"Copy","copy_failed":"Couldn't copy. Select the key and copy it manually.","resources":"Resources","resource_reference":"API reference","resource_auth":"Authentication","resource_rate_limits":"Rate limits","resource_webhooks":"Webhooks","keys_card_title":"Your API keys","keys_active":"{count} active","stat_active":"Active","stat_expiring":"Expiring in 30d","stat_revoked":"Revoked","latest_key":"Latest: {name}","keys_card_empty":"No API keys yet. Create one for each integration, with only the permissions it needs.","create_key":"Create API key","permission_count":"{count, plural, one {# permission} other {# permissions}}","last_used_ago":"used {ago}","never_used":"Never used","keys_title":"API keys","keys_subtitle":"Keys act as your organization, not as a person. Give each integration its own key with only the permissions it needs.","search_keys":"Search keys","show_revoked":"Show revoked ({count})","col_name":"Name","col_key":"Key","col_permissions":"Permissions","col_created":"Created","col_last_used":"Last used","col_expires":"Expires","badge_new":"New","created_by":"Created by {name}","no_expiry":"No expiry","expires_in":"{count, plural, =0 {today} one {in # day} other {in # days}}","status_expired":"Expired","status_revoked":"Revoked","no_match":"No keys match your search.","empty_title":"No API keys yet","empty_description":"Create a key for each integration that needs to reach SuiteOp, with only the permissions it needs.","action_rename":"Rename","action_rotate":"Rotate key","action_revoke":"Revoke key","revoked_toast":"API key revoked","preset_read_only":"Read-only","preset_read_only_hint":"View everything, change nothing","preset_operations":"Operations","preset_operations_hint":"Tasks, reservations, inbox","preset_full_access":"Full access","preset_full_access_hint":"Everything except Account admin","preset_custom":"Custom","preset_custom_count":"{count, plural, one {# permission picked} other {# permissions picked}}","preset_admin":"Account admin","preset_hint":"Start from a preset, then fine-tune below","create_title":"Create API key","create_description":"The key acts as your organization. Give it only what this integration needs; to change its permissions later, rotate it into a new key.","field_name":"Name","field_name_placeholder":"Zapier – reservations sync","field_name_hint":"Shown in the key list.","field_expiry":"Expires","expiry_30d":"30d","expiry_90d":"90d","expiry_1y":"1 year","expiry_never":"Never","expiry_hint":"Expires {date}","expiry_never_hint":"Never expires. Revoke it when you no longer need it.","field_permissions":"Permissions","matrix_search":"Search permissions, e.g. \"lock code\"","matrix_all":"All {count}","matrix_selected":"Selected {count}","matrix_clear":"Clear all","matrix_resource":"Resource","matrix_view":"View","matrix_manage":"Manage","matrix_delete":"Delete","matrix_more":"More","matrix_group_count":"{on} of {total}","matrix_select_all":"Select all","matrix_admin_badge":"Grants everything","matrix_admin_hint":"Turns on every permission above that you can grant, plus account administration.","group_operations":"Operations","group_guests":"Guests and communication","group_team":"Team","group_finance":"Finance and data","group_organization":"Organization","summary_view":"{count} view","summary_manage":"{count} manage","summary_delete":"{count} delete","create_submit":"Create key","reveal_title":"“{name}” is ready","reveal_description":"Copy the key into your integration now. For your security we only show it once.","reveal_secret_label":"Secret key","reveal_hide":"Hide","reveal_show":"Show","reveal_copy":"Copy key","reveal_copied":"Copied to clipboard","reveal_copy_env":"Copy as .env","reveal_warning":"Store it in a password manager or secret store. If it's lost, rotate the key; SuiteOp can't recover it.","reveal_permissions":"{total} · view {view}, manage {manage}","reveal_created_by":"Created by","reveal_stored":"I've stored this key somewhere safe","reveal_done":"Done","reveal_done_rotate":"Done, revoke the old key","reveal_rotate_note":"“{name}” keeps working until you click Done. Swap the new key in first.","rename_title":"Rename key","rename_description":"The name only helps you recognize the key. It doesn't change what the key can do.","rotate_title":"Rotate “{name}”","rotate_description":"We'll issue a new secret with the same name, permissions and expiry. Swap it in, then the old one stops working.","rotate_keep_old":"Keep the old key working","rotate_after_confirm":"Until I confirm the swap","rotate_after_confirm_hint":"Recommended. Both keys work until you click Done.","rotate_now":"Revoke immediately","rotate_now_hint":"Use if the key leaked","rotate_step_new":"New key now","rotate_step_both":"Both work","rotate_step_old_off_done":"Old key off when you click Done","rotate_step_old_off_now":"Old key off right away","rotate_submit":"Rotate key","revoke_title":"Revoke “{name}”?","revoke_description":"Anything using this key stops working immediately and gets 401 errors. This can't be undone.","revoke_last_used":"Last used {ago}","revoke_never_used":"Never used, so nothing should break","revoke_requests_7d":"{count, plural, one {# request} other {# requests}} in the last 7 days","revoke_last_call":"Last call {ago} from {ip} · {method} {path}","revoke_last_call_no_ip":"Last call {ago} · {method} {path}","revoke_rotate_instead":"Replacing a leaked key? Rotate instead to keep the integration running.","leave_busy_title":"Still working","leave_busy_body":"Wait for this to finish. If you leave now, the new key may never be shown to you.","leave_old_key_title":"“{name}” is still active","leave_old_key_body":"Leave now and the new key won't be shown again, and the old key keeps working until you revoke it.","leave_anyway":"Leave anyway","revoke_type_to_confirm":"Type <strong>{name}</strong> to confirm","revoke_submit":"Revoke key","first_request_title":"Make your first request","first_request_subtitle":"Pick how your app authenticates, then call any endpoint from the API reference.","auth_key_title":"API key","auth_key_tag":"Server-to-server","auth_key_body":"For your own scripts, back-office jobs and integrations. The key acts as your organization with the permissions you choose.","auth_oauth_title":"OAuth 2.1","auth_oauth_tag":"On behalf of a user","auth_oauth_body":"For apps other SuiteOp users sign in to. Each user approves access, and the app can never do more than their role allows.","auth_oauth_link":"Read the OAuth guide","rate_limit_note":"{limit} requests per minute per key, with X-RateLimit headers on every response.","response":"Response"},"webhooks_title":"Webhooks","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 syncs and incoming webhooks — for when you need to check what ran.","observability_title":"Observability","observability_description":"What ran on your behalf: scheduled syncs with your systems, and every webhook they sent us.","observability_tab_syncs":"Syncs","observability_tab_problems":"{count, plural, one {# problem} other {# problems}}","observability_listing_mapping_hint":"Looking for listing mapping? It lives on each PMS account in <link>Integrations</link>.","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 or webhooks. 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":"Your PMS sends a source name with each reservation. Match each name to a booking channel so reports and filters group them correctly.","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 matched","booking_sources_unmatched_banner":"{count, plural, one {# source name isn't matched yet} other {# source names aren't matched yet}}","booking_sources_empty":"No booking sources yet","booking_sources_load_failed":"Booking sources could not be loaded.","booking_sources_save_success":"Booking sources saved.","booking_sources_unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","booking_sources_channel_aria":"Channel for {name}","card_security_title":"Security","card_owner_reports_title":"Owner reports","card_owner_reports_description":"Email owners the tasks completed on their properties on a schedule","card_shifts_time_off_title":"Shifts & time off","card_shifts_time_off_description":"Clock-in rules, breaks, leave types and review scores","card_smart_locks_title":"Smart locks","card_smart_locks_description":"Code length, access timing and PMS sync","security_require_two_factor_label":"Require two-factor authentication","security_require_two_factor_warning":"Members without two-factor authentication are sent to set it up the next time they open the web app. The mobile app cannot set it up, so those members must enroll on the web first. API keys are not affected.","card_guest_labels_title":"Labels","card_guest_labels_description":"One list of labels for conversations, contacts, reservations and tasks.","consumables":{"title":"Supplies","new":"New supply","load_failed":"Couldn't load supplies.","default_target_value":"Default target: {count} {unit}","no_default_target":"No default target","empty_title":"No supplies yet","empty_description":"Add the supplies you want counted. Each property then chooses which ones it stocks.","create_title":"New supply","edit_title":"Edit supply","editor_description":"The target is how many a property should have. Counts below it are flagged for restocking.","name":"Name","name_placeholder":"e.g. Forks","unit":"Unit","unit_placeholder":"e.g. pieces","default_target":"Default target","default_target_hint":"Used by every property that doesn't set its own target. Leave empty for none.","target_invalid":"Enter a whole number, 0 or more.","description_label":"Description","created":"Supply created","updated":"Supply updated","deleted":"Supply deleted","duplicate_name":"A supply with this name already exists.","delete_still_stocked":"This supply is still stocked at one or more properties. Remove it from their Supplies tab first.","delete_title":"Delete supply?","delete_description":"“{name}” will be removed. Template count steps linked to it will go back to recording a number only."},"guest_labels":{"title":"Labels","subtitle":"One list for conversations, contacts, reservations and tasks. On a contact a label follows the person across stays; on a reservation or a task it stays with that one.","subtitle_conversations":"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","edit_label":"Edit label","editor_hint":"Anyone with access to the inbox, reservations or tasks sees labels, so keep health details out.","name":"Name","color":"Color","description_placeholder":"e.g. Pet welcome kit; extra check of soft furnishings","description_hint":"Shown when someone picks this label. On a reservation it is also the follow-up instruction added to its tasks.","applies_when_label":"When should the AI tag a conversation with this?","applies_when_hint":"Leave it empty to apply this label only by hand or through a playbook.","escalates_label":"Escalate the conversation when this label is added","empty":"No labels yet.","duplicate_name":"A label with this name already exists.","delete_title":"Delete this label?","delete_description":"\"{name}\" comes off every conversation, contact, reservation and task. Playbooks, templates and upsell rules that use it stop matching. This cannot be undone."},"card_booking_sites_title":"Booking sites","card_booking_sites_description":"Direct-booking websites, themes, domains and keys","card_connections_description":"Companies you share tasks with","card_payouts_title":"Payouts","card_payouts_description":"Bank account and start date for payouts","card_general_title":"General","card_general_description":"Timezone, currency, temperature, mobile brand color and sign-in security","general_description":"Regional defaults, how the mobile app looks, and sign-in rules for everyone in your organization.","general_read_only":"Only people who can manage the organization can change these.","read_only_ask_admin":"Ask an admin in Members","general_section_regional_title":"Regional","general_section_regional_description":"Defaults for org-wide schedules, reports, prices and device readings.","general_timezone_label":"Timezone","general_timezone_hint":"Each property uses the timezone of its own address. This one applies to anything org-wide.","general_temperature_label":"Temperature","general_section_mobile_title":"Mobile app","general_section_mobile_description":"How SuiteOp looks for your team on iOS and Android.","general_brand_color_label":"Brand color","general_brand_color_preset":"Use {color}","general_preview_title":"{count, plural, one {Today · # task} other {Today · # tasks}}","general_preview_caption":"Preview of the app header","general_section_security_title":"Sign-in security","general_section_security_description":"Rules for everyone in the organization. Your own password and two-factor live in your profile.","general_save_success":"General settings saved.","general_unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","languages_description":"Turn a language on to offer it to guests and your team. Your content is translated into it automatically.","languages_translate_all":"Translate everything missing","languages_tab_languages":"Languages","languages_tab_translations":"Translated content","languages_tab_count_on":"{count} on","languages_read_only":"Only people who can manage the organization can change languages.","languages_translating_note":"Translation in progress: {count} texts still running.","languages_col_language":"Language","languages_col_offered":"Offered","languages_col_translated":"Translated","languages_col_actions":"Actions","languages_always":"Always","languages_on":"On","languages_off":"Off","languages_guest_default":"Guest default","languages_guest_default_hint":"Guest default: used when a guest's browser language isn't one SuiteOp supports, and for content not yet translated into theirs.","languages_turning_on":"Turning on","languages_starts_after_save":"Starts after you save","languages_toggle_label":"Offer {language}","languages_translate_missing":"Translate {count}","languages_add":"Add a language","languages_add_hint":"{count} more available. Arabic and Hebrew read right to left.","languages_summary_on":"{languages} on · translation starts after you save","languages_summary_off":"{languages} off","languages_summary_default":"Guest default becomes {language}","languages_affects_heading":"What turning a language on affects","languages_affects_portal_title":"Guest portal","languages_affects_portal_body":"Guests can pick any language that's on. The guest default is marked below.","languages_affects_apps_title":"Your team's apps","languages_affects_apps_body":"The mobile app's language list and the content-language switchers on the web offer these.","languages_affects_ai_title":"AI translation","languages_affects_ai_body":"Manuals, upsells, check-in steps and task templates are translated into every language that's on.","languages_affects_email_title":"Emails","languages_affects_email_body":"Not affected. Each email template keeps its own language versions."},"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.","cannot_uncancel":"This shift is cancelled, and a cancelled shift can't be reopened.","assignee_clock_in_disabled":"This member doesn't clock in, so shifts can't be assigned to them.","clock_in_not_enabled":"Clock-in is turned off for your account.","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","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_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_generic":"Time off","quick_create_on_time_off":"{name} is on approved time off this day"},"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 & time off.","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","cancel_started_refused":"This time off has already started. Ask your manager to cancel it.","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","mode_full_days":"Full days","mode_part_day":"Part of a day","date_label":"Date","start_time_label":"From","end_time_label":"Until","uses_duration":"Uses {duration}","notes":"Notes","notes_placeholder":"Optional notes for your manager...","submit":"Submit Request","submitting":"Submitting...","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.","member_label":"Who is this for","member_self":"Myself"},"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":{"description":"Clock-in rules, breaks and leave for everyone. A member's Pay tab can override clock-in rules for them.","tab_clock_in":"Clock-in & location","tab_breaks":"Breaks","tab_leave_types":"Leave types","tab_review_scores":"Review scores","unsaved_count":"{count, plural, one {# unsaved change} other {# unsaved changes}}","break_mandatory":"Mandatory","break_mandatory_help":"Break is required by policy — violations are flagged on the timesheet","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":{"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","col_leave_type":"Leave type","col_how_earned":"How it's earned","col_needs_approval":"Needs approval","col_applies_to":"Applies to","earned_fixed":"Fixed · {hours, number} h per year","earned_hourly":"Earn {amount, number} h per {per, number} h worked","notice_subline":"Needs {days, plural, one {# day’s} other {# days’}} notice","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","org_wide":"Organization-wide","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.","saving":"Saving...","save_success":"Clock-in settings updated","save_error":"Could not save clock-in settings"},"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_success":"Location tracking settings saved","save_error":"Could not save location tracking settings"},"review_score_visibility":{"title":"Review scores","description":"Whether team members can see the guest-review scores credited to their own jobs.","allow_self_view":"Let members see their own review scores","allow_self_view_description":"Each member sees only their own numbers — never a colleague's, a ranking, or their position in one.","privacy_note":"Where these scores inform pay, scheduling or termination decisions, local law may give a member the right to see and contest them regardless of this setting.","save_success":"Review score visibility saved","save_error":"Could not save review score visibility"},"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 & time off.","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 playbook","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":"Bulk check-in/out instructions","aliases":["check-in instructions","guest instructions","arrival instructions","access instructions"]},"guest_content_manuals":{"label":"Manuals","aliases":["house manuals","guidebook","guest manual"]},"guest_content_events":{"label":"Events","aliases":["local events","activities","portal events"]},"guest_content_guides":{"label":"Guides","aliases":["recommendations","places","local guide"]},"catalog_supplies":{"label":"Supplies","aliases":["consumables","stock","inventory"]},"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":"Playbook 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"]},"scheduler_vacancy_occupancy":{"label":"Vacancy and occupancy schedules","aliases":["empty night tasks","mid-stay cleaning"]},"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"},"stay":{"owner_stay":"Owner stay","guest_stay":"Guest stay","in_stay":"In stay"},"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","voice_assistant":"Voice assistant","valve":"Valve","network":"Network device"},"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","deposit_failed":"Deposit failed","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"},"pay_run":{"draft":"Draft","approved":"Approved","charging":"Paying","paid":"Paid","partially_paid":"Partly paid","failed":"Failed"},"pay_run_line":{"pending":"Waiting","charging":"Paying","paid":"Paid","failed":"Failed","held":"Held","payee_not_ready":"Payee not ready"},"org_connection":{"invite_sent":"Invite sent","invite_expired":"Invite expired","active":"Connected","ended":"Ended"},"payee_statement":{"pending":"Scheduled","held":"On hold","charging":"In progress","paid":"Paid","failed":"Failed"},"payee_statement_dispute":{"open":"Disputed","resolved":"Dispute resolved","lost":"Dispute lost"},"pay_run_line_refund":{"pending":"Refund pending","refunded":"Refunded","partially_refunded":"Partially refunded","failed":"Refund failed"},"keyless_booking":{"pending":"Sending","active":"Mobile key booking sent","failed":"Failed","blocked":"Not sent","cancelled":"Cancelled","uncertain":"Unconfirmed"},"payee_account":{"not_started":"Not set up","incomplete":"Setup incomplete","restricted":"Action needed","pending":"Verifying","ready":"Ready","disconnected":"Disconnected"}},"storefront":{"google_oauth":{"exchange_failed":"Google didn't accept the sign-in. Connect the account again.","invalid_state":"This Google sign-in has expired or was started by another account. Start the connection again.","not_configured":"Connecting a Google account isn't available yet. Contact support.","edit_unsupported":"Only Google Analytics can ask for edit access. Reload the page and try again."},"google_vr":{"address_parts":{"city":"city","country":"country","street":"street address"},"description":"Publish this site's eligible listings to Google Vacation Rentals. Google's Book link opens the listing page on this site.","enabled_label":"List on Google Vacation Rentals","excluded_title":"Not published","fix":"Fix","last_ari_label":"Last availability push","last_feed_label":"Last feed","missing_address_parts":"Missing {parts}","never":"Never","no_hostname":"This site has no active domain yet, so no listing can be published.","published_count":"{count, plural, one {# listing} other {# listings}}","published_label":"Published","reasons":{"missing_address":"Incomplete address","missing_capacity":"Missing guest capacity","missing_fee_data":"Missing cleaning fee","missing_geo":"Missing map location","missing_images":"Fewer than 5 photos","not_bookable":"Not bookable"},"save":"Save","save_error":"Couldn't save Google Vacation Rentals settings","save_success":"Google Vacation Rentals settings saved","saving":"Saving…","title":"Google Vacation Rentals"},"integration":{"duplicate_kind":"This site already has this connection. Edit the existing one.","kind_mismatch":"This connection is a different type. Reload the page and try again.","ga4_no_hostname":"This site has no web address yet. Add a domain to the site, then create the stream.","ga4_stream_not_found":"The saved measurement ID isn't on a website stream in this property. Choose the stream again and save.","ga4_measurement_changed":"The measurement ID changed while the secret was being created. Reload the page and try again."},"bookings_open":{"title":"Bookings","label":"Accept bookings","description":"When off, guests can browse and see prices, but can't book or pay. Useful while you set things up.","read_only":"You can view this setting. Ask someone who manages the booking engine to change it.","save":"Save","saved":"Booking setting saved","save_error":"Couldn't save the booking setting. Try again."}},"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_template":"Template","filter_label":"Label","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","filter_source":"Source","filter_source_mine":"Our tasks","filter_source_shared":"Shared with us","filter_source_page_note":"Source narrows the tasks loaded on this page. The count below still covers every task.","select_all_own_matching":"Select all our matching tasks"},"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","start_from_template":"Start from template","requirement_template_picker_title":"Add a requirement from a template","requirement_template_picker_description":"Adds the requirement to the General section. Save the template to keep it.","requirement_template_use":"Add","requirement_template_added":"Requirement added. Save to keep it.","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":"Element","level_sub_item":"Sub-item","level_general":"General","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":"Use Add section to add a room, an element rule or a General section.","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_any":"Any parent (no filter)","add_group":"Add Requirement","add_item_to":"Add item to {area}","add_requirement":"Add requirement","add_item_short":"Element","collapse_all":"Collapse all","expand_all":"Expand all","find_requirement":"Find a requirement…","every_tag":"Every","list_summary_requirements":"{requirements, plural, one {# requirement} other {# requirements}}","list_summary_rooms":"{rooms, plural, one {# room} other {# rooms}}","list_summary_rules":"{rules, plural, one {# element rule} other {# element rules}}","section_requirement_count":"{count, plural, one {# requirement} other {# requirements}}","element_rule_caption":"Requirements for each {element}, whatever the room","summary_number_only":"Number only","summary_updates_stock":"Updates stock · {supply}","summary_reference_photo":"Reference photo","summary_must_match":"AI photo check","summary_photo_or_video":"Photo or video","summary_photo_required":"Photo required","summary_photo_optional":"Photo optional","flag_photo":"Asks for a photo","flag_must_match":"AI photo check","flag_issue":"Some answers open an issue","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_title":"Quick-find","quick_find_description":"Jump to any room, element or requirement in this template.","quick_find_placeholder":"Go to…","quick_find_empty":"No matches.","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 requirements 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_item_count":"{count, plural, one {# requirement for this property} other {# requirements for this property}}","preview_over_cap":"over the limit of {max} per task","preview_general_section":"General","delete_item":"Remove","delete_item_confirm":"Are you sure you want to remove this item?","photo_disabled":"Disabled","photo_camera_only":"Camera Only","photo_camera_and_file":"Camera & File","photo_source":"Source","photo_optional":"Optional","photo_required":"Required","preview_count_type":"Count","preview_number_type":"Measurement","preview_text":"Text","preview_yes_no":"Yes / No","preview_photo":"Photo or video","preview_checklist":"Checklist","preview_enter_count":"Enter count…","preview_enter_text":"Enter text…","preview_select_option":"Select an option…","preview_take_photo":"Take photo or upload","select_option_set":"Select an answer list…","no_option_set":"{name} (default)","no_option_sets":"No answer lists yet","manage_option_sets":"Manage answer lists","default_options_hint":"Default answers (no answer list selected)","option_sets_dialog_title":"Answer lists","option_sets_dialog_description":"The answers people choose from on single choice requirements.","create_option_set":"New list","option_set_name_placeholder":"List name…","choice_placeholder":"New answer…","add_choice":"Add answer","no_choices":"No answers yet","delete_option_set":"Delete list","delete_option_set_confirm":"This deletes the list and its answers. It can't be undone.","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.","save_conflict":"This template was changed since you opened it. Reload to see the latest version — your unsaved edits will be lost.","save_conflict_reload":"Reload","refresh_confirm_title":"{count, plural, one {Update # task?} other {Update # tasks?}}","refresh_confirm_description":"{count, plural, one {Saving will update # task that hasn't been started yet.} other {Saving will update # tasks that haven't been started yet.}} Tasks that are in progress, completed, or have any recorded work (a ticked line, an answer, a photo) keep their current requirements.","refresh_confirm_title_unknown":"Update existing tasks?","refresh_confirm_description_unknown":"Saving will update this template's tasks that haven't been started yet. Tasks that are in progress, completed, or have any recorded work (a ticked line, an answer, a photo) keep their current requirements.","refresh_confirm_save":"Save and update","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","preset_option_set_hint":"Provided by SuiteOp. Only its points can be changed. Duplicate it to make your own version.","archive_option_set":"Archive list","restore_option_set":"Restore","archived_option_sets":"Archived ({count})","archived_option_set_badge":"Archived","archived_option_sets_hint":"Not offered for new requirements. Requirements already using these lists keep working.","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}","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.","count_number_only_title":"Records a number only","count_number_only_hint":"The count stays on the task. It isn't saved to any property's stock.","count_lines_number_only_hint":"Each line gets its own number on the task. None of them is saved to stock.","count_stock_title":"Updates property stock","count_stock_hint":"Each linked line saves its count to the property's supplies and flags low or mismatched counts.","count_line_consumable_label":"Supply counted","count_line_number_only":"{label} (number only)","count_option_number_only":"Number only, not saved to stock","count_badge_stock":"Tracks stock","count_badge_number":"Number only","count_line_remove":"Remove line","count_no_consumables":"To track stock, create supplies first.","count_manage_consumables":"Manage supplies","count_link_consumable":"Link a supply","preview_single_choice":"Single choice","single_choice":{"list_defaults_hint":"New requirements using this list start with these rules. Requirements already using it keep their own.","include_na":"Include N/A","problem_answer":"Which answer is a problem?","use_list_instead":"Use a list instead","problem_none":"Neither answer","problem_yes":"“Yes” is a problem","problem_no":"“No” is a problem","graded":"Pass / Flag / Fail","map_every_choice":"Give every answer a result to save.","result_pass":"Pass","result_flag":"Flag","result_fail":"Fail","result_na":"N/A","result_label":"Result","ungrade_confirm_title":"Turn off Pass / Flag / Fail for this list?","ungrade_confirm_description":"Every answer loses its result, and requirements using this list stop requiring photos or issues.","scored_info_label":"What does Pass / Flag / Fail mean?","scored_info":"Pass / Flag / Fail gives every answer a result, so a problem answer can require a photo or an issue.","preset_use_hint_label":"Suggested use","preset_use_hint_condition":"Suggested for housekeepers: check the condition of furniture, fixtures and equipment in the home.","preset_use_hint_cleanliness":"Suggested for inspectors: confirm each space is clean and guest-ready.","preset_use_hint_working":"Suggested for appliances and electronics: confirm they're in working order.","when_answer_is":"When the answer is","defaults_from_named_list":"Defaults from the {name} list — you can change them for this requirement.","defaults_from_yes_no":"Defaults from the Yes / No settings — you can change them for this requirement.","points":"Points","points_info_label":"What are points?","points_info":"Points per answer make up the task score: points earned ÷ points possible. N/A answers don't count.","points_parked":"Points are turned off for your organization. This list keeps its points: you can switch them off, but not change them or turn them back on.","points_label":"Points for {answer}","points_ladder_warning":"“{better}” ({betterResult}) is worth fewer points than “{worse}” ({worseResult}). Scores may be misleading — you can still save.","log_condition":"Log to element history","log_condition_needs_results":"Turn on Pass / Flag / Fail first","preset_use_hint_star_rating":"Suggested for an overall impression: rate a space or a job from 1 to 5 stars."},"suiteop_lists":"SuiteOp lists","your_lists":"Your lists","no_custom_lists":"Lists you create or duplicate appear here.","answer_count":"{count, plural, one {# answer} other {# answers}}","list_name_label":"Name","answers_heading":"Answers","default_rules_heading":"Default rules","count_supply_per_room_hint":"Counted separately for each {category}","preview_star_rating":"Star rating","preview_stay_title":"Preview a stay","preview_stay_hint":"This template has conditions. Pick what each stay has to see which rows are added. Property tags come from the property you chose.","preview_stay_this":"This stay has","preview_stay_adjacent":"Previous or next stay has","preview_stay_none":"Nothing selected","preview_omitted":"{count, plural, one {# conditional row is left out for these stays.} other {# conditional rows are left out for these stays.}}","preview_injected":"Added to the task description: {titles}","condition":{"add":"Add a condition","chip_this_stay":"Only when this stay has {tags}","chip_adjacent_stay":"Only when the previous or next stay has {tags}","chip_count":"{count, plural, one {# tag or label} other {# tags or labels}}","title":"Only add this when…","scope_label":"Which stay to check","scope_this_stay":"This stay","scope_adjacent_stay":"Previous or next stay","scope_hint_this_stay":"The reservation the task is for.","scope_hint_adjacent_stay":"The stay before it for check-in tasks, the stay after it for check-out tasks.","match_hint":"Added when the stay has any of the selected. Property tags count for either stay.","search_placeholder":"Search tags and labels","section_property":"Property tags","section_label":"Labels","section_empty":"None yet.","section_no_matches":"No matches.","section_no_access":"You don't have access to this list.","load_failed":"Couldn't load this list.","retired_warning":"{count, plural, one {# selected tag or label was deleted and never matches.} other {# selected tags or labels were deleted and never match.}}","retired_remove":"Remove","hidden":"{count, plural, one {# more that you can't view} other {# more that you can't view}}","limit":"You can select up to {max}.","clear":"Remove condition"},"star_label":"{count, plural, one {# star} other {# stars}}","tunable_option_set_hint":"Provided by SuiteOp. You can change its results, rules, points and logging, but not its answers. Duplicate it to make your own version.","allow_video":"Allow video","allow_video_ai_disabled":"AI verification only checks photos, so it's off while video is allowed.","number":{"unit":"Unit","unit_none":"None","unit_hint":"Shown beside the reading. Choose None for a plain number.","pass_range":"Pass range","pass_min":"Pass from","pass_max":"Pass to","flag_min":"Flag from","flag_max":"Flag to","ungraded":"Add a Pass range to grade readings. Without one, readings are only recorded.","range_hint":"Drag the handles or type exact values. Leave a box empty for no limit on that side.","flag_toggle":"Add a Flag range","flag_toggle_info":"Adds a Flag range on each side of Pass. A reading there is flagged; anything further out fails. When this is off, every reading outside Pass fails.","flag_toggle_info_label":"What does Flag do?","open_ended":"Any","allow_na":"Allow N/A","allow_na_info":"Lets the person answering say the reading doesn't apply — a pool that's closed, a meter they can't reach. N/A is never graded.","allow_na_info_label":"What does N/A do?","log_condition":"Log element condition","log_condition_info":"Saves every reading to the element's history: the value, when it was taken and by whom. Works with or without a Pass range.","log_condition_info_label":"What does logging do?"},"open_details":"Details","languages_button":"Content language: {language}, {count, plural, one {# language} other {# languages}}","languages_count":"{count, plural, one {# language} other {# languages}}","languages_title":"Languages","languages_hint":"Each team member sees this template in their own language. Pick one to view or edit it.","languages_original":"Original","languages_complete":"Complete","languages_not_started":"Not started","languages_progress":"{count} of {total}","languages_translate_missing":"{count, plural, =0 {Nothing left to translate} one {Translate the # missing text} other {Translate the # missing texts}}","languages_auto_note":"New and edited text is translated automatically when you save.","languages_add":"Add a language","languages_add_hint":"Applies to all templates.","location_area":"{name} · once per {name}","location_item":"{name} · once per {name}","location_element_rule":"Every {name} · asked once per {name}","location_general":"General · once per task","only_inside":"Only inside","only_inside_any":"Any room","items_hint":"{count, plural, one {# item} other {# items}} — edit or drag to reorder right in the list.","section_answers":"Answers","edit_list":"Edit list","answer_label_done":"Done","answer_label_language":"Language","problem_short_none":"Neither","problem_short_yes":"Yes","problem_short_no":"No","rules_when_result":"When the result is","rules_photo":"Photo","rules_issue":"Issue","rules_hint":"Team member must add a photo / open an issue when they pick these answers.","shared_list_header":"Shared by every question using {list}","log_history":"Log to element history","log_history_hint":"Saves who checked the {element}, when, and the result","log_history_element_fallback":"element","log_needs_grading":"Turn on Pass / Flag / Fail first","points_switch":"Points","points_hint":"Each answer earns points","points_needs_results":"Give every answer a result in the list first","section_what_counted":"What is counted","section_answer":"Answer","text_hint":"The team member types a free-text answer. Nothing else to set.","section_photo":"Photo","ask_for_photo":"Ask for a photo","ask_for_photo_always":"Always ask for a photo","photo_off_hint":"Off — no photo asked","photo_off_rules_hint":"Only when an answer above asks for one","photo_always_on":"Always on","photo_is":"Photo is","photo_must_match":"AI photo check","photo_must_match_hint":"The photo must match what you describe — SuiteOp's AI flags it if it doesn't","photo_must_match_placeholder":"What should the photo show?","photo_must_match_video_off":"Off while video is allowed — the AI only checks photos for now","reference_photo":"Reference photo","reference_photo_hint":"Shown to the team beside this requirement so they know what done looks like","reference_photo_add":"Add photo","reference_photo_replace":"Replace","reference_photo_remove":"Remove","reference_too_large":"That photo is too large","reference_invalid_type":"Pick a JPG, PNG, WebP or GIF image","reference_upload_failed":"The photo couldn't be uploaded. Try again.","inspector_close":"Close","inspector_empty":"Select a requirement to see its settings.","requirement_title_placeholder":"Name this requirement","requirement_title_required":"Name this requirement before saving","save_blocked_untitled":"Name every new requirement before saving","requirement_menu":"Requirement actions","move_to":"Move to","move_to_ellipsis":"Move to…","move_group_rooms":"Rooms","move_target_element_in_room":"{element} in {room}","move_group_element_rules":"Element rules","requirement_delete":"Delete","add_requirement_short":"Requirement","add_requirement_to":"Add requirement to {name}","add_section":"Add section","add_section_room":"Room","add_section_room_description":"A space with its own requirements and elements","add_section_element_rule":"Element rule","add_section_element_rule_description":"Requirements for each element (bed, sofa, appliance), regardless of the room it's in","add_section_general":"General section","add_section_general_description":"Requirements for the whole property, not tied to a room","rules_ask_for":"Ask for","rules_nothing":"Nothing","search_lists":"Search lists","no_lists_found":"No lists match your search","list_lock_points":"Points can be changed","list_lock_tunable":"Results, rules, points and logging can be changed","list_lock_fixed":"Can't be changed — duplicate it to make your own","list_not_used":"Not used yet","list_used_hint":"In use — changes apply to every requirement using this list","list_editor_empty":"Pick a list to see and change its answers.","show_archived":"Show archived lists ({count})","setting_on":"On","setting_off":"Off","graded_hint":"Each answer gets a result","log_hint":"Who checked it, when, and the result","answers_col_answer":"Answer","save_list":"Save list"},"warnings":{"count":"{count, plural, one {# warning} other {# warnings}}","empty_checklist":"Checklist requirement has no items","parent_mismatch":"Requirement's parent doesn't match the element catalog","untitled_requirement":"New requirement has no name"},"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":"Reusable checklists with photo rules, rates and capacity. The one place to find and open every template.","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_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}}","items_over_cap":"This template would create more than {max} requirements for one task. Trim the template or the property's elements first."},"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)","property_placeholder_required":"Select a property","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","stay_label":"Stay","stay_none":"No stay","stay_needed_note":"This template is timed around the stay — start after check-out, finish before check-in. Without a stay the task carries only a due date.","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.","reservation_label":"Linked reservation","reservation_fallback":"The guest's stay","reservation_hint":"The task will appear on this reservation.","reservation_unlink":"Unlink reservation"},"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_window":"Time window","tab_window_needs_decision":"Needs a decision","tab_comments":"Comments","tab_history":"History","tab_execute":"Execute","tab_issues":"Issues","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","window_end_label":"Next guest","window_finish_label":"Finish before","est_finish_label":"Est. finish","est_finish_value":"{time} · {count, plural, one {# person} other {# people}} · ~{estimate}","buffer_label":"Buffer","group_people":"People","group_schedule":"Schedule","group_flags":"Flags","labels_label":"Labels","group_state":"Overview","work_label":"Work","work_not_started":"Not started yet","buffer_to_spare":"{duration} to spare","buffer_short":"Short by {duration}","buffer_short_title":"{anchor, select, fixed_time {The team is expected to finish after the finish time} other {The team is expected to finish after the next guest arrives}}","buffer_to_spare_title":"{anchor, select, fixed_time {The team is expected to finish {duration} before the finish time} other {The team is expected to finish {duration} before the next guest arrives}}","buffer_none_short":"No buffer","buffer_until_next_guest":"{duration} until the next guest","buffer_none":"{anchor, select, fixed_time {No buffer — the team is expected to finish right at the finish time} other {No buffer — the team is expected to finish just as the next guest arrives}}","buffer_days":"{count, plural, one {# day} other {# days}}","recommendations_title":"Recommendations","recommend_add_people":"{anchor, select, fixed_time {{fit, select, exact {With <b>{count, plural, one {one more person} other {# more people}}</b> the team would finish at {finishesAt}, exactly at the finish time. No time to spare.} other {With <b>{count, plural, one {one more person} other {# more people}}</b> the team would finish by {finishesAt}, before the finish time.}}} other {{fit, select, exact {With <b>{count, plural, one {one more person} other {# more people}}</b> the team would finish at {finishesAt}, exactly when the next guest arrives. No time to spare.} other {With <b>{count, plural, one {one more person} other {# more people}}</b> the team would finish by {finishesAt}, before the next guest arrives.}}}}","recommend_no_crew_fits":"{anchor, select, fixed_time {No team size fits this window. Consider an earlier start or a later finish time.} other {No team size fits this window. Consider 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.","companies":"Companies","partner_company":"Partner company","reshare_title":"Share this task again?","reshare_warning":"This task was already completed by {partner}. Sharing it again creates a second job with its own amount owed.","reshare_amount":"The earlier job was {amount}.","reshare_confirm":"Share again","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","planned_start_label":"Planned start","planned_start_day_label":"Day","planned_start_missed":"not done","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":"\"{name}\" will be removed from all task lists and the schedule.","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_issue_opened":"Issue opened","requirements_enter_text_placeholder":"Enter text...","requirements_save":"Save","requirements_reading_label":"Reading","requirements_add_photo":"Add photo","requirements_take_photo":"Take 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","date_change_to":"Due date changed to {date}","date_cleared":"Due date cleared","start_change_to":"Planned the start for {time}","start_cleared":"Removed the planned start","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}","assigned_to_your_company":"Assigned to your company","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","comment_video_label":"Comment video","entry_unlocked":"Partner entry: unlock requested for {door}","entry_unlocked_a_door":"Partner entry: unlock requested","entry_unlock_failed":"Partner entry: {door} did not unlock","entry_unlock_failed_a_door":"Partner entry: a door did not unlock"},"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","task_report":"Task report","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_collaborator":"Add a collaborator","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","adjacent_stay":{"previous":"Previous stay","next":"Next stay"},"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 entry permission","hero_blocks_check_in":"Blocks {name}'s check-in","permission_revoke":"Revoke","understaffed":"{count, plural, one {Needs # more person} other {Needs # more people}}","flagged_issues":"{count, plural, one {# requirement flagged} other {# requirements flagged}}","issue_label":"Issue","issues_load_more":"Load more","save_before_language_switch":"Save your changes before switching languages.","window_inverted":"Window inverted — the finish falls before the start","requirements_missing_issues":"{issues, plural, one {# issue} other {# issues}} still to open","requirements_answer_photo_required":"Photo required","requirements_answer_issue_required":"Issue required","requirements_open_issue":"Open issue","requirements_open_issue_title":"Open an issue","requirements_open_issue_description":"Describe what is wrong. The issue is filed for this property and linked to the answer.","requirements_open_issue_label":"What is wrong?","requirements_open_issue_placeholder":"e.g. Crack along the shower glass","requirements_missing_answer_photo":"Add a photo for “{requirement}”","requirements_missing_answer_issue":"Open an issue for “{requirement}”","timeline_title":"Turnover window","recommend_add_collaborator_hint":"Add them under Collaborators.","timeline_done_at":"done {time}","timeline_started_at":"started {time}","timeline_can_start":"Can start {time}","timeline_people_of":"{count} of {required}","timeline_time_window":"Time window","timeline_task_day":"Task day","timeline_guests":"Guests","timeline_in_residence":"{name} is in the unit · {permission, select, granted {entry allowed} other {no permission to enter}}","timeline_guest_until":"{name} · checks out {time}","timeline_vacant":"Vacant","timeline_guest_checks_in":"{name} · checks in {time}","timeline_busy_until":"{who, select, empty {busy until {time} · {where}} other {{who} is on {where} until {time}}}","timeline_crew_joins":"{who} joins at {time}, after {where}","timeline_joins_short":"{who} joins {time}","timeline_next_guest_at":"{time} next guest","timeline_manual_due_at":"{time} due, set by hand","timeline_crew_bar_named":"{names} · {start}–{finish}","timeline_checkout":"Checkout","timeline_done_on_the_minute":"{state, select, done {{anchor, select, due {Finished right on the due date} fixed_time {Finished right at the finish time} other {Finished just as the guest arrived}}} other {{anchor, select, due {Expected done right on the due date} fixed_time {Expected done right at the finish time} other {Expected done just as the guest arrives}}}}","timeline_short_on_buffer":"{state, select, done {{anchor, select, due {Finished {duration} past the due date} fixed_time {Finished {duration} after the finish time} other {Finished {duration} after the guest}}} other {{anchor, select, due {Expected done {duration} past the due date} fixed_time {Expected done {duration} after the finish time} other {Expected done {duration} after the guest}}}}","timeline_to_spare":"{state, select, done {{anchor, select, due {Finished {duration} before the due date} fixed_time {Finished {duration} before the finish time} other {Finished {duration} before the guest}}} other {{anchor, select, due {Expected done {duration} before the due date} fixed_time {Expected done {duration} before the finish time} other {Expected done {duration} before the guest}}}}","timeline_no_buffer":"no time to spare","timeline_now":"NOW {time}","timeline_reservation":"Reservation","timeline_vacant_checkout":"Vacant · checkout {time}","timeline_start_after_time":"Start after {time}","timeline_next_guest_checks_in":"Next guest checks in","timeline_finish_before_time":"Finish before {time}","timeline_cleaning_crew":"Team","timeline_assigned":"{count, plural, one {# assigned} other {# assigned}}","timeline_crew_bar":"{start} – {finish}","timeline_late_by":"{duration} late","timeline_hover_worked":"Worked {duration}","timeline_hover_if_resumed":"If resumed now: done ~{time}","timeline_hover_no_start":"No start was recorded, so the duration is unknown","timeline_hover_late":"{duration} after {anchor, select, check_in {the next guest checks in} fixed_time {the finish time} other {the due time}} ({time})","timeline_hover_deadline":"Deadline {time}","timeline_proposed":"Proposed","timeline_proposed_replace":"instead of {who}","timeline_people":"{count, plural, one {# person} other {# people}}","timeline_finishes":"Finishes {time}","timeline_finishes_earlier":"Finishes {time} · {saved} earlier","timeline_on_time":"on time","timeline_start_after":"Earliest start","timeline_guest_arrives":"Next guest","timeline_due":"Finish by","timeline_manual_due":"Manual due","recommend_staff_missing":"Set up for {required, plural, one {# person} other {# people}}, {assigned} assigned — consider adding <b>{missing, plural, one {# more person} other {# more people}}</b>.","recommend_move_tomorrow":"Nobody arrives after this, so the unit stays empty. Moving the due date to tomorrow costs nothing.","recommend_reassign":"This team is held on an earlier job until {busyUntil}. The Assignee picker suggests who has room today.","timeline_started_early":"{anchor, select, check_out {guest still in · started {duration} early} other {started {duration} before the window opened}}","role_assignee":"assignee","role_collaborator":"collaborator","add_collaborators":"Add collaborators","role_collaborators":"collaborators","timeline_nobody_assigned":"Nobody assigned","est_time_unit":"min","score_badge":"Score {percent}%","score_fails":"{count, plural, one {# Fail} other {# Fails}}","comment_attach":"Attach photos or videos","comment_attachment_remove":"Remove attachment {n}","comment_attachment_upload_failed":"Couldn't upload the attachment. Try again.","comment_attachments_too_many":"A comment can have up to {max} attachments.","comment_guest_reply_needs_text":"A reply to the guest needs text. Attachments are only visible to your team.","comment_uploading":"Uploading…","video_invalid_type":"Videos must be MP4 or MOV files.","video_too_large":"Videos can be up to 80 MB.","video_unsupported":"This video can't play in your browser.","completed_by_via":"Completed by {org}, via {user}"},"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","access_notes_title":"Access notes","group_access_notes_title":"Group access notes","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":{"title":"Schedule","group_by_label":"Group by","calendar_range_label":"Calendar range","by_property":"Property planning","by_user":"User planning","day":"Day","three_day":"3 Day","week":"Week","month":"Month","today":"Today","hide_empty":"Hide empty properties","display":"Display","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","reservation_count":"{count, plural, one {# Reservation} other {# Reservations}}","reservation_occupied":"Occupied","reservation_checkin":"Check-in","reservation_checkout":"Check-out","stay_nights":"{count, plural, one {# night} other {# nights}}","reservation_turn":"Turn","reservation_vacant":"Vacant","action_reassign":"Reassign","action_reschedule":"Reschedule","error_load_failed":"Couldn't load the schedule","truncated_notice":"This week has more tasks or stays than the calendar can show at once. Narrow the filters to see all of them.","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","with_partner":"With {name}","with_partner_unnamed":"With a connected company","unscheduled":"Unscheduled","unscheduled_empty":"No unscheduled tasks","unscheduled_no_match_filters":"No unscheduled tasks match these filters","unscheduled_no_match_search":"No unscheduled tasks match “{query}”","unscheduled_clear_search_hint":"Clear the search to see more","unscheduled_failed":"Couldn't load","unscheduled_failed_hint":"Retry above reloads this list too","unscheduled_completed_note":"Completed tasks are not listed here","day_row_empty":"No tasks · drop one here","previous":"Previous","next":"Next","over_cap_subline":"Over daily cap · {count}d","over_cap_over":"More {department} work is planned than the daily limit allows.","over_cap_full":"{department} work fills the whole daily limit.","over_capacity_count":"{count, plural, one {# over capacity} other {# over capacity}}","bucket_no_time":"No time set","bucket_before":"Before {time}","bucket_after":"After {time}","bucket_range":"{from} – {to}","bucket_all_day":"All tasks","day_layout_label":"Day layout","week_start_pick":"Choose the first day of the week","date_pick":"Choose a date","day_layout_list":"All day","day_layout_bands":"By time","not_available":"Not available","off_reason_time_off":"On approved time off","off_reason_day_off":"Not a working day for this department","collapse_all_rows":"Collapse all","expand_all_rows":"Expand all","collapse_row":"Collapse","expand_row":"Expand","move_confirm_title":"Move this task?","move_confirm_action":"Move anyway","move_reason_department":"{person} isn't in {department}, and this is a {department} task.","move_reason_started":"{person} has already started this task.","move_reason_started_nobody":"This task is already in progress.","move_reason_past":"That day is in the past, so the task will be overdue right away.","off_part_day":"Off {from}–{until}","working_hours":"Works {from}–{until}","move_reason_before_checkout":"The guest is still in until {time}.","move_reason_past_deadline":"It would finish after the deadline ({time}).","move_reason_after_arrival":"The next guest arrives {time} — this would clean after they arrive.","planned_start":"Planned start","card_est_finish":"Expected finish — when the work is likely done, after this person’s earlier jobs and the drive between them.","card_done":"Done","card_reschedule":"Reschedule","card_due":"Due {due}","card_reschedule_due":"Reschedule – due {due}","card_reschedule_hint":"Was planned for {plan} and not done.","card_reschedule_hint_none":"No time picked for today yet.","card_state_done":"Completed","card_state_late":"Late","card_state_attention":"Needs attention","band_move_title":"Plan the start for {time}?","band_move_body":"Sets {person}'s planned start for this task.","band_move_body_unassigned":"Sets this task's planned start.","band_move_keeps_checkout":"Check-out stays {time}.","band_move_keeps_due":"The deadline stays {time}.","band_move_moves_due":"The deadline moves to {time}.","band_move_clear_title":"Remove the planned start?","band_move_clear_body":"The task goes back to the time the stay sets.","band_move_clear_action":"Remove","band_move_action":"Move","select":"Select","select_hint":"Or <kbd>{key}</kbd> + click a task","week_empty_people":"Nothing scheduled for {range}","week_empty_people_hint":"Drag a task from Unscheduled onto a person, or add one.","week_empty_properties":"No stays or tasks for {range}","week_empty_properties_hint":"Drag a task from Unscheduled onto a property, or add one.","week_no_match_people":"No tasks match these filters","week_no_match_properties":"No properties match these filters","week_no_match_hint":"There is work on {range} that the filters hide.","week_error_hint":"Check your connection and try again. Your filters are kept.","card_due_guest":"Due {due} · {guest} arrives","hover_assignee":"Assignee","hover_can_start":"Can start","hover_checks_out":"{name} checks out","hover_planned_start":"Planned start","hover_expected_done":"Expected done","hover_due":"Due","hover_arrives":"{name} arrives","hover_estimate":"Estimate","hover_completed_by":"Completed {time} by {name}","hover_completed":"Completed {time}","hover_completed_locked":"Completed tasks can't be moved","hover_reported_by":"Reported by {name} at {time} · needs review","hover_reported":"Reported at {time} · needs review","hover_overdue":"Overdue · due {due}","hover_blocks_check_in":"Blocks check-in · {name} arrives {time}","hover_finishes_late_guest":"Expected done {finish} — after {name} arrives {due}","hover_finishes_late":"Expected done {finish} — after the deadline {due}","hover_plan_missed":"Plan missed ({plan}) · Reschedule — due {due}","hover_paused_since":"Paused since {time} · {duration}","hover_started":"Started {time} · {duration} so far","legend_link":"How to read the calendar","legend_tasks":"Tasks","legend_todo":"To do","legend_done":"Done","legend_late":"Late","legend_attention":"Needs attention","legend_unassigned":"No one assigned","overdue_count":"{count} overdue","overdue_button":"Overdue","overdue_title":"Overdue tasks","overdue_oldest_first":"Oldest first","overdue_due":"due {date}","overdue_reschedule":"Reschedule","overdue_assign":"Assign","overdue_more":"Showing the oldest {count}.","overdue_open_list":"Open the list","overdue_save_failed":"Couldn't save the change. Try again.","month_cell_title":"{day} · {person}","month_cell_count":"{count, plural, one {# task} other {# tasks}}","month_cell_all":"All","month_cell_select":"Select {person}'s tasks on {day}","month_cell_truncated":"Showing the first {count}. Narrow the filters to pick the rest."},"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","photo":"Photo","count":"Count","text":"Text","single_choice":"Single choice","number":"Measurement"},"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","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}","play_video":"Play video {n}"},"all_tasks":{"title":"All Tasks","for_date_prefix":"for","pick_date_aria":"Pick a date","filtering_by":"Filtering by","clear_filter":"Clear","mode_tasks":"Tasks","mode_properties":"Properties","tab_list":"List","tab_schedule":"Schedule","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.","paused_for_partner":"The guest link is paused while a partner company holds this task. It works again when you take the task back or the share ends.","paused_by_partner":"The guest link is paused while {partner} holds this task. It works again when you take the task back or the share ends.","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.","sending_held":"Email sending is paused for review, so this link was not sent. Contact SuiteOp support to resume it."},"my_tasks":{"title":"My Tasks","scope_personal":"Personal","scope_shared":"All Shared","view_list":"List","view_board":"Board","view_calendar":"Calendar","view_timesheet_and_time_off":"Timesheet & Time off","view_timesheet":"Timesheet","view_time_off":"Time off","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_truncated":"More tasks match than the calendar can show. Narrow the filters or use the list view to see them all.","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","reported_by_me":"Reported by you","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)","page_load_failed":"The next page didn't load.","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"},"guest_issues":{"title":"Guest issues","description":"Open guest tickets, and issues reported while a guest is staying. Oldest first.","open_for":"Open for","issue":"Issue","stay":"Stay","guest_ticket":"Guest ticket","untitled":"Untitled issue","empty_title":"No open guest issues","empty_description":"An issue shows here while its guest is staying, and a guest ticket until it’s closed.","truncated":"Only the {limit} oldest open issues were checked. Filter by property to see the rest.","age_m":"{minutes}m","age_h":"{hours}h","age_hm":"{hours}h {minutes}m","age_d":"{days}d","age_dh":"{days}d {hours}h","marker":"Current guest issue","shortcut":"Current guest issues ({count})"},"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","tab_vacancy_occupancy":"Vacancy & occupancy","trigger_event":"Trigger Event","trigger_check_in":"Check-in","trigger_check_out":"Check-out","trigger_confirmation":"Confirmation","offset_label":"Offset","offset_hours":"hours","offset_locked_by_window":"The due date comes from the template's Capacity window — the next guest's arrival. The offset below does not move it.","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_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 check-in, check-out and confirmation 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","tags_inclusion":"Tags","tags_description":"Include all properties with selected tags","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_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","save_draft":"Save as Draft","validation_blocked":"Please fix the highlighted fields before saving.","create_success":"Schedule created","description_empty":"No description","assignment":"Assignment","assignment_mode":{"unassigned":"Unassigned","specific":"Specific person","specific_or_company":"Person or company","auto":"Auto-assign","property_default":"Preferred assignee","property_default_legacy":"Property's preferred person (retired)"},"assignment_specific_placeholder":"Choose a person","assignment_specific_company_placeholder":"Choose a person or company","company_partial_coverage":"{count, plural, one {# property is} other {# properties are}} not shared with this company. Tasks there will be created unassigned.","company_assignee_ended":"{name} (no longer connected)","company_assignee_refused":"This company could not be assigned. Choose a person or another company.","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_specific_company_required":"Choose a person or a company, 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","workflows_label":"Workflows","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. For a Housekeeping task it skips owners, admins and managers on the list — if only they are listed, the task is created unassigned.","type_vacancy":"Vacancy","vacancy_desc":"Schedule tasks on days a property sits fully vacant","type_occupancy":"Occupancy","occupancy_desc":"Schedule tasks on days a guest is in-house","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.","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_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":"Days to look ahead","reschedule_move_lead":"Move the task to the next","reschedule_within":"within the next","reschedule_days":"{count, plural, one {day} other {days}}","reschedule_if_none":"{target, select, fully_vacant {If no fully vacant day matches:} check_out_only {If no check-out only day matches:} check_in_only {If no check-in only day matches:} turn {If no same-day turn matches:} other {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.","occupancy_chip":"{condition} · {action}","reschedule_chip":"If occupied: {target} within {window, plural, one {# day} other {# days}}, else {fallback}","new_title_vacancy":"New Vacancy Schedule","new_title_occupancy":"New Occupancy Schedule","new_title_recurring":"New Recurring Schedule","blocker_season_dates":"{workflow} repeats its season every year — set both a season start and end.","vacancy_chip":"{condition} · {action}","vacancy_chip_cond_eq":"Vacant exactly {days, plural, one {# day} other {# days}}","vacancy_chip_cond_gt":"Vacant over {days, plural, one {# day} other {# days}}","vacancy_chip_cond_gte":"Vacant {days}+ days","vacancy_chip_cond_lt":"Vacant under {days, plural, one {# day} other {# days}}","vacancy_chip_cond_lte":"Vacant up to {days, plural, one {# day} other {# days}}","vacancy_chip_cond_between":"Vacant {days}–{max} days","vacancy_chip_once":"day {day}","vacancy_chip_repeat":"every {day, plural, one {day} other {# days}}","vacancy_chip_final":"once before arrival","condition_title":"Condition","condition_vacancies_q":"Which vacancies do you want to target?","condition_reservations_q":"Which reservations do you want to target?","condition_properties_q":"Which properties do you want to target?","condition_season_q":"When should this run?","season_ended_warning":"This season ended on {end}, so this schedule will not run again. Turn on “Repeat this season every year”, or move the dates.","all_vacancies":"All vacancies","all_reservations":"All confirmed reservations","add_filter":"Add filter","remove_filter":"Remove filter","filter_stay_length":"Length of stay","filter_booking_channel":"Booking channel","stay_nights_from":"Stays from","stay_nights_to":"to","stay_nights_unit":"nights","stay_nights_min_label":"Fewest nights","stay_nights_max_label":"Most nights","stay_nights_hint":"Leave a box empty for no limit.","source_mode_only":"Only these channels","source_mode_except":"All channels except these","summary_nights_min":"Nights: {min} or more","summary_nights_max":"Nights: up to {max}","summary_nights_between":"Nights: {min}–{max}","summary_recurrence_daily":"{interval, plural, one {Every day} other {Every # days}} at {time}","summary_recurrence_weekly":"{interval, plural, one {Every week} other {Every # weeks}} on {days} at {time}","summary_recurrence_monthly":"{interval, plural, one {Every month} other {Every # months}} on day {day} at {time}","summary_recurrence_timezone":"Time zone: {zone}","recurrence_error_frequency":"Choose how often it repeats.","recurrence_error_interval":"Enter a whole number from 1 to {max}.","recurrence_error_time":"Set a time of day.","recurrence_error_timezone":"Choose a time zone.","recurrence_error_start_date":"Choose a start date.","recurrence_error_days":"Choose at least one day.","recurrence_error_day_of_month":"Enter a day of the month from 1 to 31.","recurrence_error_season_dates":"A season that repeats every year needs both a start and an end date.","recurrence_error_end_before_start":"The end date can't be before the start date.","recurrence_error_season_too_long":"A season that repeats every year can't be longer than a year.","recurrence_error_reschedule_incomplete":"Choose where to move the task, how many days to look ahead and what to do if no day fits.","recurrence_error_reschedule_window":"The look-ahead must be at least 1 day and no longer than the time between repeats.","blocker_recurrence":"{workflow}: {problem}","recurrence_position":"Recurrence {position}","recurrence_needs_fix_short":"Needs fixing","blocker_recurrence_overlap":"{workflow} creates the same task as recurrence {position} on the same day at the same time, first on {date}, so that task would be created twice. Change the time, or remove the task from one of them.","recurrence_needs_fix":"This recurrence won't run as intended. Edit it to fix:","summary_recurrence_monthly_last":"{interval, plural, one {Every month} other {Every # months}} on day {day} at {time}, or on the last day of shorter months","summary_channels_only":"Only {channels}","summary_channels_except":"All except {channels}","when_a_vacancy":"When a vacancy","gap_operator_eq":"is equal to","gap_operator_gt":"is greater than","gap_operator_gte":"is greater than or equal to","gap_operator_lt":"is less than","gap_operator_lte":"is less than or equal to","gap_operator_between":"is between","gap_days_label":"Number of fully vacant days","gap_max_days_label":"Longest number of fully vacant days","gap_between_and":"and","filter_group":"Group","filter_tag":"Tag","filter_property":"Property","filter_is":"is","filter_type_label":"What to filter properties by","target_count":"This will target {count, plural, one {<b># active property</b>} other {<b># active properties</b>}}","target_count_none":"Pick at least one group, tag or property","schedule_tasks_title":"Schedule these tasks","vacancy_day_label":"Day of the vacancy","vacancy_definition_tooltip":"A fully vacant day is a day at a property with no check-in, no check-out and no guest staying. Days are counted in the property's timezone.","repeats":"Repeats","repeats_every_days":"Repeats {day, plural, one {every day} other {every # days}}","set_fixed_due_time":"Set a fixed due time","no_fixed_due_time_hint":"Without a time, tasks are due that day.","select_template":"Select a template","add_template":"Add template","remove_template":"Remove template","add_schedule_card":"Add another set of tasks","remove_schedule_card":"Remove these tasks","select_templates_to_continue":"Select templates to continue","legacy_final_before_arrival":"{days, plural, =0 {Also once, on the day the guest arrives} one {Also once, # day before check-in} other {Also once, # days before check-in}}","legacy_final_remove":"Remove the pre-arrival visit","on_day_prefix":"On","full_days_of_vacancy":"fully vacant days","blocker_vacancy_trigger":"{workflow} is missing values — set the vacancies it targets, at least one set of tasks, and a template for each.","summary_all_vacancies":"Any gap between guests","summary_gap_eq":"Gaps of exactly {days, plural, one {# fully vacant day} other {# fully vacant days}}","summary_gap_gt":"Gaps of more than {days, plural, one {# fully vacant day} other {# fully vacant days}}","summary_gap_gte":"Gaps of {days, plural, one {# fully vacant day} other {# fully vacant days}} or more","summary_gap_lt":"Gaps of fewer than {days, plural, one {# fully vacant day} other {# fully vacant days}}","summary_gap_lte":"Gaps of up to {days, plural, one {# fully vacant day} other {# fully vacant days}}","summary_gap_between":"Gaps of {days} to {max} fully vacant days","summary_all_properties":"All properties","summary_properties":"{count, plural, one {# property} other {# properties}}","summary_season_all_year":"All year","summary_season_from":"From {start} onwards","summary_season_until":"Until {end}","summary_season_window":"{start} to {end}","summary_season_window_annual":"{start} to {end}, every year","summary_day_once":"On day {day} of the gap","summary_day_repeat":"On day {day} of the gap, then every {day, plural, one {day} other {# days}}","summary_final_only":"Once before the next arrival","summary_final_also":"{days, plural, =0 {Also once, on the day the guest arrives} one {Also once, # day before check-in} other {Also once, # days before check-in}}","summary_due_at":"Due at {time}","summary_due_that_day":"Due that day","summary_no_templates":"No tasks chosen yet","vacant_days_unit":"fully vacant days","occupancy_chip_cond_eq":"Stays of exactly {days, plural, one {# day} other {# days}}","occupancy_chip_cond_gt":"Stays over {days, plural, one {# day} other {# days}}","occupancy_chip_cond_gte":"Stays of {days}+ days","occupancy_chip_cond_lt":"Stays under {days, plural, one {# day} other {# days}}","occupancy_chip_cond_lte":"Stays up to {days, plural, one {# day} other {# days}}","occupancy_chip_cond_between":"Stays of {days}–{max} days","condition_occupancies_q":"Which occupancies do you want to target?","all_occupancies":"All occupancies","when_an_occupancy":"When an occupancy","occupied_days_unit":"fully occupied days","stay_days_label":"Number of fully occupied days","stay_max_days_label":"Longest number of fully occupied days","occupancy_day_label":"Day of the stay","full_days_of_occupancy":"fully occupied days","occupancy_definition_tooltip":"A fully occupied day is a day during a stay with no check-in and no check-out — the guest is staying all day. Days are counted in the property's timezone.","blocker_occupancy_trigger":"{workflow} is missing values — set the stays it targets, the day, and a template for each set of tasks.","summary_all_occupancies":"Any stay with at least one fully occupied day","summary_stay_eq":"Stays of exactly {days, plural, one {# fully occupied day} other {# fully occupied days}}","summary_stay_gt":"Stays of more than {days, plural, one {# fully occupied day} other {# fully occupied days}}","summary_stay_gte":"Stays of {days, plural, one {# fully occupied day} other {# fully occupied days}} or more","summary_stay_lt":"Stays of fewer than {days, plural, one {# fully occupied day} other {# fully occupied days}}","summary_stay_lte":"Stays of up to {days, plural, one {# fully occupied day} other {# fully occupied days}}","summary_stay_between":"Stays of {days} to {max} fully occupied days","summary_stay_day_once":"On day {day} of the stay","summary_stay_day_repeat":"On day {day} of the stay, then every {day, plural, one {day} other {# days}}","summary_permission_to_enter":"Tasks are created with permission to enter","condition_cards_differ":"The task sets on this schedule were saved with different conditions. This is the first one — saving applies it to all of them."},"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_created_catch_up":"caught up — the day the rule asked for had already passed","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_skipped_missing_stay_dates":"Skipped (reservation is missing a check-in or check-out date)","runs_action_skipped_missing_confirmation_date":"Skipped (reservation has no confirmation date)","runs_action_skipped_due_uncomputable":"Skipped (due date could not be calculated)","runs_action_skipped_check_in_elapsed":"Skipped (guest already checked in or check-in time passed)","runs_action_skipped_day_no_longer_qualifies":"Skipped (day no longer qualifies — task is already in progress, paused or completed)","runs_action_skipped_stay_length":"Skipped (length of stay outside the schedule's condition)","runs_action_skipped_source":"Skipped (booking channel outside the schedule's condition)","runs_action_cancelled_stay_length":"Cancelled (new stay dates are outside the schedule's condition)","runs_action_cancelled_source":"Cancelled (new booking channel is outside the schedule's condition)","runs_action_cancelled_condition":"Cancelled (schedule condition changed)","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","department_more":"{name} +{count}","template_items":"{count, plural, one {# checklist line} other {# checklist lines}}","page_title":"Scheduler","page_description":"Create tasks automatically: on reservation events, on a calendar, or when a property is empty or occupied.","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_message_upper_bound":"Resuming this schedule will create tasks for up to {count, plural, one {# upcoming reservation} other {# upcoming reservations}}. Some steps only run on certain check-outs, so it may be fewer.","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","create_title":"Create Schedule","create_confirm":"Create Schedule","checking":"Checking…","resume_message":"This schedule will start creating tasks again.","resume_message_season_ended":"Every season of this schedule has ended, so resuming it will not create any tasks. Move its dates, or turn on “Repeat this season every year”, first.","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_upper_bound":"{count, plural, one {Up to # task will be created} other {Up to # tasks will be created}}","impact_created_why":"One per upcoming booking, assigned automatically.","impact_created_why_span":"One per qualifying day, over the next {days} days.","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_cancelled_scope_why":"Not started yet, and their property is leaving this schedule.","impact_cancelled_condition_why":"Not started yet, and their reservation no longer matches the condition.","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_partial":"Counted on a sample of the properties — the real number is higher.","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_count_invalid":"Enter a whole number of 1 or more.","trigger_count_too_long":"The most is one year: 365 days, 8,760 hours or 525,600 minutes.","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","link_next_stay_lead":"Only link the next stay when it checks in within","link_next_stay_nights":"{count, plural, one {night} other {nights}}","link_next_stay_label":"Maximum nights until the next stay","link_next_stay_hint":"Leave empty to always link the next stay. 0 means same-day turns only.","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":"Its task rows go too. When you save, tasks it already created that nobody has started or edited are cancelled. Edited tasks, and overdue ones from a recurrence, stay.","empty_event":"No workflows yet","reservation_banner":"Runs for every confirmed reservation, and updates on its own if a booking changes or cancels.","reservation_banner_filtered":"Runs for every confirmed reservation that matches the condition, and updates on its own if a booking changes or cancels.","event_checkout_help":"Choose what runs when a guest departs. A template with a Capacity window sets its own clock.","event_checkin_help":"Choose what runs when a guest arrives. A template with a Capacity window sets its own clock.","event_booking_help":"Choose what runs when a booking is confirmed. A template with a Capacity window sets its own clock.","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_action_created_preferred_only_managers":"Task created — unassigned (the property's preferred-assignee list holds only owners, admins and managers, who don't get Housekeeping tasks automatically)","runs_action_org_assignee_unavailable":"Task created — unassigned (the assigned company could not take it)","runs_status_filter_label":"Run status","runs_errors_badge":"{count, plural, one {# error} other {# errors}}","runs_errors_badge_label":"{count, plural, one {Show the # failed run from the last 24 hours} other {Show the # failed runs from the last 24 hours}}","runs_recent_errors_chip":"Errors · last 24 h","runs_recent_errors_clear":"Show all runs","type_vacancy":"Vacancy","type_occupancy":"Occupancy","offset_shapes_window":"Some of these tasks use a Capacity window, so the offset moves the day they land on rather than their due date.","saved_dates_moved":"Saved. {count, plural, one {# existing task moved} other {# existing tasks moved}}.","saved_no_dates_moved":"Saved. No existing task moved — their timing comes from their template's Capacity window."},"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?","guest_left_title":"Has the guest left?","guest_left_description":"The guest isn't due to check out yet. If the unit is empty, mark them as checked out to start. This ends their stay.","guest_left_confirm":"Guest has left, start","guest_left_wait":"Wait","guest_left_failed":"Couldn't mark the guest as checked out. Try again.","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","cancel_confirm_title":"Cancel this task?","cancel_confirm_description":"The task will be marked as cancelled. You can reopen it later.","cancel_confirm_action":"Cancel 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","summary_needs_declaration":"{count, plural, one {# skipped: needs a property status — complete it on its own} other {# skipped: need a property status — complete them one at a time}}","actions":{"status":"Status","assign":"Assign","priority":"Priority","due_date":"Due date","delete":"Delete","unassign":"Unassign","clear_due":"Clear due date"},"confirm":{"tasks_count":"{count, plural, one {# task} other {# tasks}}","now":"Now","due_now":"Due now","to":"To","go_back":"Go back","keep_tasks":"Keep tasks","unassigned":"Unassigned","untitled":"Untitled task","no_due":"No due date","more_tasks":"{count, plural, one {# more task} other {# more tasks}}","status":{"heading":"Set {count, plural, one {# task} other {# tasks}} to {status}","title":"Change status?","description":"Change {count, plural, one {# task} other {# tasks}} to ''{summary}''?","action":"Set {status}","cancel_title":"Cancel {count, plural, one {# task} other {# tasks}}","cancel_info":"Cancelled tasks drop off the schedule unless it is set to show cancelled tasks."},"assign":{"heading":"Give {count, plural, one {# task} other {# tasks}} to {person}","title":"Reassign tasks?","description":"Reassign {count, plural, one {# task} other {# tasks}} to {summary}?","action":"Give {count, plural, one {# task} other {# tasks}}","unassign_title":"Unassign {count, plural, one {# task} other {# tasks}}","works_in":"{person} works in {departments}.","in_no_department":"{person} isn't in any department.","task_in":"{task} is in {department}","tasks_outside":"{tasks}.","loses":"{person} will no longer have {tasks}.","loses_more":"{count, plural, one {# more person} other {# more people}} will no longer have tasks."},"priority":{"heading":"Set {count, plural, one {# task} other {# tasks}} to {priority} priority","title":"Change priority?","description":"Set {count, plural, one {# task} other {# tasks}} to ''{summary}'' priority?","action":"Set {priority} priority"},"due":{"heading":"Change the due date of {count, plural, one {# task} other {# tasks}}","title":"Change due date?","description":"Set {count, plural, one {# task} other {# tasks}} due date to {summary}?","action":"Set due date","clear_title":"Clear the due date of {count, plural, one {# task} other {# tasks}}","plans_hold":"The tasks stay on their planned days. Only the due date changes."},"delete":{"heading":"Delete {count, plural, one {# task} other {# tasks}}","title":"Delete tasks?","description":"{count, plural, one {# task} other {# tasks}} will be removed from all task lists and the schedule.","confirm_label":"Delete"},"confirm_label":"Apply"},"toast":{"success":"{count, plural, one {# task} other {# tasks}} updated","partial":"{ok} of {total, plural, one {# task} other {# tasks}} updated · {failed} failed","all_failed":"{count, plural, one {# task} other {# tasks}} failed to update","progress":"Updating {done} of {total, plural, one {# task} other {# tasks}}…","retry_failed":"Retry failed","interrupted":"Stopped after an error · {ok} of {total, plural, one {# task} other {# tasks}} updated"}},"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","count":"Count","text":"Short text","checklist":"Checklist","single_choice":"Single choice","star_rating":"Star rating","number":"Measurement"},"element":{"label":"Element","placeholder":"Element…","general":"General"},"option_set":{"label":"Answer list","placeholder":"Choose an answer list…"},"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 — we cannot tell whether this job fits its window, and it cannot be placed in anyone's day. The due date does not depend on it.","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}}","select_page":"Select all properties on this page","page_selected_note":"{count, plural, one {# property selected on this page.} other {# properties selected on this page.}}","select_all_matching":"Select all {count} matching","all_matching_selected":"{count, plural, one {The # matching property is selected.} other {All # matching properties are selected.}}"},"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":"History","condition":"Condition","not_checked":"Not checked yet","being_fixed":"Being fixed","no_open_issue":"No open issue","next_check":"Next check {date} · {name}","more":"+{count} more","timeline":"Timeline","checked_by":"by {name}","linked_issue":"Issue opened from this check","out_of_scope":"Task not accessible","range":"{from}–{to} of {total}"},"issue_elements":{"label":"Elements","add":"Add element","placeholder":"Select an element","confirm":"Add","added":"Element added","add_failed":"Could not add the element","out_of_scope":"Element not accessible"},"shared":{"from_host":"From {host}","price_payable":"{amount} due","offer_note":"{host} offered you this task. Accept it to start work, or decline it with a reason.","offer_note_crew":"{host} offered your organization this task. A manager has to accept it before work starts.","read_only_note":"This task belongs to {host}. To change its details, leave them a comment.","accept":"Accept","decline":"Decline","complete":"Complete task","return":"Return task","accepted_toast":"Task accepted","declined_toast":"Task declined","returned_toast":"Task returned to {host}","assigned_toast":"Assignee updated","assign_placeholder":"Choose a team member","decline_title":"Decline this task?","decline_description":"The task goes back to {host} unassigned, with your reason.","decline_confirm":"Decline task","return_title":"Return this task to {host}?","return_description":"The task goes back to {host} unassigned, with your reason. Requirements you added and did not finish are removed.","return_confirm":"Return task","reason_label":"Reason","requirements_progress":"{completed} of {total} done","requirements_empty":"This task has no requirements.","requirement_unnamed":"Unnamed requirement","requirement_own":"Added by your team","requirement_not_on_web":"Not available on the web yet","start_to_answer":"Start the task to check off its requirements.","add_item_label":"Add a requirement for your team","remove_item_for":"Remove {item}","report_issue":"Report an issue","report_issue_for":"Report an issue on {item}","report_issue_description":"The issue is created for {host}, who decides who fixes it. You can follow its status on this requirement.","report_issue_label":"What is wrong?","report_issue_confirm":"Report issue","issue_reported":"Issue reported","issue_reported_toast":"Issue reported to {host}","host_waiting":"Waiting for {org} to accept this task.","host_via_user":"Worked by {user}","comment_own_org_only":"Only {org}","remove_item_title":"Remove this requirement?","remove_item_description":"{item} is removed from the task for your whole team. This cannot be undone.","remove_item_confirm":"Remove requirement","author_via":"{name} via {org}"},"subtask":{"parent_is_subtask":"A subtask can't have subtasks of its own. Add this one to the main task instead.","parent_cancelled":"This task is cancelled, so subtasks can't be added to it.","section_title":"Subtasks","done_count":"{done} of {total} done","hidden_count":"{count, plural, one {# more subtask not shown} other {# more subtasks not shown}}","empty":"No subtasks yet.","load_error":"Couldn't load the subtasks.","add":"Add subtask","add_description":"A task of its own under the main task, with its own department, assignee and due date.","part_of":"Part of: {title}","property_from_parent":"Same property as the main task.","confirm_complete_title":"Complete with open subtasks?","confirm_complete_description":"{done} of {total} subtasks done. Complete this task anyway?","confirm_complete_action":"Complete anyway","confirm_cancel_title":"Cancel with open subtasks?","confirm_cancel_description":"{done} of {total} subtasks done. The open ones stay open. Cancel this task anyway?","confirm_cancel_action":"Cancel anyway","cancel_note":"{done} of {total} subtasks done. The open ones stay open.","delete_note":"{done} of {total} subtasks done. The subtasks are kept."}},"task_report":{"title":"Task report","untitled_task":"Untitled task","file_name_suffix":"Task Report","footer_page_of":"Page {page} of {total}","print":"Print / Save PDF","preparing":"Preparing…","retry":"Try again","sections":{"summary":"Summary","requirements":"Checklist","media":"Photos & videos","notes":"Notes","issues":"Issues","timing":"Timing","people":"People","costs":"Costs"},"picker":{"label":"Sections in the report","all":"All sections","excluded":"{count, plural, one {# section hidden} other {# sections hidden}}"},"fields":{"task":"Task","status":"Status","priority":"Priority","property":"Property","address":"Address","description":"Description","due":"Due","started":"Started","ended":"Finished","worked":"Time worked","assignee":"Assignee","collaborators":"Collaborators","completed_by":"Completed by","total":"Total"},"result":{"pass":"Pass","flag":"Flagged","fail":"Fail","na":"Not applicable"},"item_done":"Done","item_not_done":"Not done","empty":{"requirements":"No checklist items.","media":"No photos or videos.","notes":"No notes.","issues":"No issues reported.","costs":"No costs billed to the owner."},"media_unavailable":"Photo unavailable","cost_types":{"labor":"Labor","material":"Material","expense":"Expense","other":"Other"},"links":{"copy":"Copy link","copied":"Link copied","copy_failed":"Couldn't copy the link. Select it below and copy it by hand.","note":"Anyone with the link can view this report without signing in. It shows only the sections selected above, with live task data, so later edits to the task appear.","active_title":"Active links","created":"Created {date}","created_by":"Created {date} by {name}","revoke":"Revoke","revoke_title":"Revoke this link?","revoke_description":"Anyone holding it will no longer be able to open the report. This cannot be undone."},"public":{"not_found_title":"Report not available","not_found_description":"This link is invalid or has been revoked.","error_title":"Could not load the report","error_description":"Something went wrong while loading this report."},"validation":{"sections_required":"Select at least one section.","sections_unique":"Each section can only be selected once."}},"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.","no_matches":"No team members match your search.","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":"Done with time logged","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 {# time entry} other {# time entries}}","stops_hint":"One row per time entry. Tasks finished without logged time count on the roster card but have no row here.","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","no_status":"No status","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"},"crashed":{"title":"Couldn't show the team map","description":"Try again. If it keeps happening, reload the page."}},"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":{"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.","saved":"Languages updated","coverage_count":"{translated} of {total}"},"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","id":"Indonesian","ka":"Georgian"},"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":"Answer List","option_choice":"Answer","be_building":"Booking Site Building","be_location":"Booking Site Area","be_content_item":"Booking Site Content","opportunity_catalog_entry":"Opportunity Type"},"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","task_issue_description_required":"Describe the issue","task_issue_source_forbidden":"You can only open an issue from a task you work on","task_video_size_required":"Video size is required","task_video_too_large":"Video must be 80 MB or smaller","unsupported_scope_type_for_entity":"This item can't be scoped to portals.","fee_collection_mode_reserved":"Report-only fees aren't available yet: nothing reports them, so this fee would never be charged. Set it to collect.","scope_ids_not_in_org":"Some selected items don't belong to your organization.","percentage_fees_disabled":"Percentage fees aren't enabled for this organization. Use a fixed amount.","fee_scopes_disabled":"Limiting a fee to specific properties isn't enabled for this organization.","base_components_duplicate":"Each part of the booking can be selected only once.","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","notification_recipients_required":"Choose who receives this notification","notification_user_required":"Select at least one user to notify","notification_user_group_required":"Select a user group to notify","option_set_title_required":"Answer list name 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","tag_description_too_long":"Description must be 1000 characters or less","tag_applies_when_too_long":"The AI instruction must be 500 characters or less","guest_label_ids_invalid":"One or more contact labels no longer exist. Refresh and try again.","guest_label_rule_disabled":"Contact label rules aren't turned on for this organization yet. Turn off Contact label to save the upsell.","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","advertisement_links_too_many":"An advertisement can have at most 6 links","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":"Supply 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_migrated_history":"This code belongs to a V1 access grant that has ended. It can't be retried. V2 takes the grant over at cutover, or issue a new code for the stay.","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_provider_cannot_clear_window":"This lock's provider cannot remove a code's start or end time once it is set. Set a new time instead, or delete this code and create a new one.","code_update_deletion_pending":"This code is being deleted from the lock, so it can no longer be changed. Create a new code 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_disconnected_account":"This code was issued through a lock account that has since been disconnected, so SuiteOp can no longer remove it or confirm it is gone, and it may still open the lock. Remove it at the lock or in the provider's app, or re-provision 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.","integration_reconnect_required":"This device's integration needs to be reconnected before SuiteOp can make changes to it. Reconnect it from the Integrations page, then try again.","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 playbook 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","iso3_required":"Country code must be 3 letters (for example, USA)","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","thermostat_setpoint_input_invalid":"Send either a temperature or heat/cool setpoints","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","ai_not_entitled":"The inbox AI is part of the SuiteOp Pro AI plan","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","edit_stale":"This text changed after the edit was suggested — review the new version before applying","edit_not_proposed":"This recap does not suggest that edit — reopen it and try again","edit_forbidden":"You do not have permission to change this content","edit_too_long":"The text is too long for this field","edit_empty":"The text cannot be empty","edit_unsupported":"This edit cannot be applied to this content","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).","schedule_same_times":"Pick two different times","schedule_dates_required":"Pick the first and the last day","schedule_dates_order":"The last day can’t be before the first","too_many_schedules":"This inbox already has the most times it can hold (50).","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","portal_card_id_required":"Choose which item this stay card shows","portal_card_id_forbidden":"This stay card can't point to a specific item","portal_cards_too_many":"You can attach up to 4 stay cards to one message","portal_cards_duplicate":"Each stay card can only be attached once","portal_cards_web_channel_only":"Stay cards can only be sent in the guest portal chat","portal_cards_need_reservation":"This conversation isn't linked to a reservation, so stay cards can't be sent","portal_card_unavailable":"That stay card is no longer available for this reservation","agent_answer_required":"Write an answer first","agent_answer_too_long":"Answer must be 2000 characters or fewer","agent_answer_busy":"The agent is already on this thread. Check its latest read and answer again if it still needs you.","auto_assign_rules_need_spread":"Keep “Fewest open conversations” or “Longest without one” on, so work doesn’t pile onto one person."},"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","otp_identifier_one":"Use an email or a phone number, not both","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","bulk_too_many":"Select up to 500 properties at a time"},"subdomain_required":"Domain is required","domain_required":"Domain is required","sender_name_required":"Sender name is required","email_sender_dmarc_rejects":"This address's email provider rejects mail that other services send on its behalf, so a sender on it would not deliver. Authenticate a domain you own and send from it, or leave the sender unset to use your hosted address.","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","drawn_signature_required":"Please sign in the box above","drawn_signature_invalid":"The signature could not be read — please clear and sign again","drawn_signature_too_large":"The signature is too detailed — please clear and sign again","requirement_group_title_required":"Requirement group title is required","image_drop_box":{"full":"This drop box is full"},"storage":{"file_too_large":"The file is too large","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"},"image":{"foreign_org_url":"This image belongs to another organization. Upload it again to use it here."},"cost_requires_flat_or_unit_quantity":"A cost must specify either a flat amount or unit cost × quantity","cost_bill_to_reason_required":"Choose why this charge isn't billed to the owner","cost_bill_to_reason_invalid":"That reason doesn't match how this charge is billed","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.","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_comment_not_participant":"Only people on this task can comment on it.","task_join_requires_manage":"Ask a manager to add you to this task.","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_guest_ticket_stay_locked":"This ticket was opened by a guest of its stay, so it can't be moved to another stay. You can remove the stay, or create a new task for the other stay.","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.","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.","template_replace_shared_task_has_work":"The partner company has already worked on this task. Take it back from them before loading another template.","shared_task_partner_work_not_deletable":"The partner company added this or has recorded work on it. It can't be deleted while the task is shared with them.","shared_task_partner_work_not_editable":"The partner company added this or has recorded work on it. It can't be changed while the task is shared with them.","shared_task_partner_sections_cap":"This task already holds as many of your company's requirement sections as it can take. Remove some before applying another template.","rematerialize_shared_task_has_work":"The partner company has already worked on this task. Take it back from them before refreshing it from its 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_company_required":"Select a company 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 playbook actions can be cancelled.","action_status_changed_before_cancel":"This playbook action's status changed before the cancellation completed. Refresh to see the latest state.","release_held_while_muted":"Outgoing messages are still paused for this account, so the held message can't be sent yet. Lift the pause first, then try again.","publish_draft_missing":"This playbook's draft couldn't be loaded, so it wasn't published. Save your changes again, then publish.","publish_invalid_definition":"Couldn't publish — this playbook'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_misconfigured_nodes":"Couldn't publish — some steps are missing required settings. Open the playbook, fix the flagged steps and try again.","publish_context_unavailable":"Couldn't publish — some steps use information that not every trigger provides. Open the playbook, fix the flagged steps and try again.","publish_no_trigger":"Couldn't publish — add a trigger and choose when it fires. A playbook 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 playbook to at least one property, group, or tag. An unscoped playbook never runs.","ai_activation_unlock":"Couldn't publish — this playbook has a step that unlocks a door, so the assistant can't switch it on. Publish it in the app instead.","ai_activation_open_valve":"Couldn't publish — this playbook has a step that opens a water valve, so the assistant can't switch it on. Publish it in the app instead.","ai_activation_company":"Couldn't publish — this playbook has a step that assigns tasks to a connected company, so the assistant can't switch it on. Publish it in the app instead.","unavailable_trigger":"This trigger isn't available for new playbooks. Choose a different trigger. If you're switching a saved playbook on, publish it after editing — switching it on checks the version that's currently live as well as your draft.","unknown_upsell_choice":"This playbook branches on an upsell choice that isn't available. Pick an existing upsell choice or remove that condition, then save again.","version_unreadable":"Couldn't switch this playbook on — its saved version couldn't be loaded. Save your changes again, then publish.","publish_state_changed":"This playbook changed while you were publishing. Refresh to see its current state, then try again.","unpublish_state_changed":"This playbook changed while you were unpublishing. Refresh to see its current state, then try again.","definition_state_changed":"This playbook was changed or deleted elsewhere. Refresh to see its current state.","rule_state_changed":"This playbook was changed or deleted elsewhere. Refresh to see its current state, then try again.","apply_existing_not_published":"Only a published playbook can be applied to existing reservations. Publish it, then try again.","apply_existing_not_all_properties":"You can apply this playbook to existing reservations only if you have access to every property it covers.","unscope_active":"An active playbook must run on at least one property. Add another rule first, or turn the playbook off.","slack_not_connected":"This playbook posts to Slack, but Slack isn't connected for your organization. Connect Slack under Settings → Integrations, then ask again.","find_tasks_unavailable":"Find tasks isn't turned on for this organization yet. Remove the step to save the playbook.","labels_unavailable":"Labels in playbooks aren't turned on for this organization yet. Remove the label triggers, conditions and steps, Guest care match, and the Contact Labels and Reservation Labels merge fields, then try again.","schedule_trigger_unavailable":"Scheduled playbooks aren't turned on for this organization yet. Choose a different trigger to save the playbook.","battery_replaced_unavailable":"The \"Battery replaced\" trigger isn't turned on for this organization yet. Choose a different trigger to save the playbook."},"opal":{"tool_unavailable":"This action is no longer available, so it wasn't run.","service_unavailable":"This action couldn't run because the service behind it is unavailable. Try again later.","action_failed":"Opal couldn't complete this action. Check the result before trying again.","secret_args_unavailable":"The secret values for this action are no longer available, so it wasn't run. Ask Opal again and enter them 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.","blocks_invalid_json":"This isn't valid JSON. Check for missing quotes, commas or brackets.","blocks_invalid_shape":"Block Kit JSON must be an array of blocks, each with a \"type\".","blocks_too_many":"Slack allows at most 50 blocks per message."},"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_min_notice_required":"Enter the minimum notice in hours, or turn off the toggle.","upsell_choice_time_invalid":"Select a valid time for this choice.","upsell_choice_quantity_time_field":"A time field can't let guests choose a quantity of each option.","upsell_choice_quantity_negative_price":"Options guests can choose a quantity of can't have a negative price.","upsell_choice_number_invalid":"Enter a valid number for this choice.","upsell_window_too_short":"This window is too short to offer a bookable time slot.","upsell_window_days_required":"Choose at least one day.","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_scope_condition_not_changeable":"You do not hold every property this schedule covers, so its reservation condition cannot be changed.","schedule_scope_workflows_not_replaceable":"You do not hold every property this schedule covers, so its workflows cannot be replaced.","schedule_scope_linked_tasks_workflows_not_replaceable":"This schedule has linked tasks on properties you do not hold, so its workflows cannot be replaced.","schedule_scope_not_deletable":"You do not hold every property this schedule covers, so it cannot be deleted.","schedule_scope_open_tasks_not_deletable":"This schedule has open tasks on properties you do not hold, so it cannot be deleted.","schedule_scope_not_toggleable":"You do not hold every property this schedule covers, so it cannot be activated or paused.","schedule_scope_due_dates_not_recomputable":"You do not hold every property this schedule covers, so its due dates cannot be recomputed.","schedule_scope_linked_tasks_due_dates_not_recomputable":"This schedule has linked tasks on properties you do not hold, so its due dates cannot be recomputed.","portal_manual_category_read_only":"This category is used by manuals on properties outside your access and is read-only to you.","portal_manual_categories_read_only":"One or more categories are used by manuals on properties outside your access and are read-only to you.","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.","assignee_person_or_company":"Choose a person or a company, not both.","company_assignee_no_collaborators":"Collaborators can't be added when a company is the assignee.","turn_variant_requires_check_out":"Same-day turn options only apply to check-out.","link_next_stay_requires_check_out":"The next-stay limit only applies to check-out.","link_next_stay_gap_range":"Enter a whole number of nights from 0 to 365","condition_tags_too_many":"A condition can list at most 20 tags or labels.","condition_tags_invalid":"A tag or label in this condition no longer exists. Remove it and save again.","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.","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":{"oauth_query_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.","video_ai_exclusive":"A step that accepts video cannot use AI verification.","allow_video_photo_only":"Only photo requirements can accept video.","allow_video_new_group_only":"Video cannot be enabled when appending to an existing checklist.","video_not_allowed_on_step":"This step does not accept video.","comment_too_many_attachments":"A comment can have at most 10 attachments.","rule_ids_required":"Select at least one playbook","rule_ids_max":"You can select up to 100 playbooks 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.","task_items_cap":"This template would create more than 750 requirements for one task. Trim the template or the property's elements first.","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.","device_echo_archive_refused":"Echo devices can't be archived. Remove the Echo from the Alexa page instead.","device_echo_single_property":"An Echo can be assigned to only one property. Move it from the Alexa page instead.","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.","reservation_delete_open_damage_claim":"This reservation has an open damage claim with Truvi. You can delete it once the claim is paid or rejected.","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.","integration_push_awaiting_lock_adoption":"This organization's migration is still adopting its locks, so push can't be turned on for a device account yet. Try again once the migration has finished finalizing.","integration_disconnect_in_progress":"This account is already being disconnected. Wait for that to finish, then refresh the page.","integration_disconnect_v1_still_live":"This device account was migrated and the old system is still using it, so disconnecting would remove its setup there too. It can be disconnected once the migration has cut over.","integration_disconnect_webhook_release_owed":"This account's webhook was registered by a migration that was rolled back, and the rollback has not removed it yet. Disconnecting now would make it impossible to remove. Finish the rollback first by pressing Roll back again, then disconnect.","webhook_retry_v1_still_live":"This device account was migrated and the old system is still using its webhooks, so re-running setup would replace them. Try again once the migration has cut over.","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_disconnect_has_inflight_bookings":"A booking still being paid for or confirmed is being made on this account. Wait for it to finish, then try disconnecting again — a checkout the guest abandons releases the account on its own when its session expires. If it is still refused after that, contact SuiteOp support.","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.","esign_provider_timeout":"The e-signature service took too long to respond. Try again in a few minutes.","guest_admin_property_rejected":"GuestAdmin rejected this property's details. Check the address and government reporting fields, then try again.","pms_custom_field_init_failed":"Setting up custom fields failed. Try again in a few minutes — if it keeps failing, contact support.","pms_custom_field_none_mapped":"SuiteOp couldn't find any of its custom fields on this account's PMS, and that PMS doesn't let SuiteOp create them. Try again in a few minutes — if it keeps happening, contact support to set them up.","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","restricted_sequence_format":"Use 1 to 8 digits","restricted_sequences_max":"Up to 20 sequences","restricted_sequence_duplicate":"This sequence is already in the list","restricted_sequence_digits_exhausted":"At least two digits must stay allowed","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","offline_duration_min":"Offline duration must be at least 1 minute","markup_percent_max":"Markup must be 1,000% or less","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","invite_email_in_use":"This email address is already in use by another account. Use a different email address.","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.","payment_account_pinned_to_booking_site":"A booking site or building takes its payments on this account. Move it to another payment account first — deleting this one would send those bookings' payments to a different account.","payment_account_has_inflight_bookings":"A booking still being paid for or confirmed takes its payment on this account. Wait for it to finish, then try again — a checkout the guest abandons releases the account on its own when its session expires. If it is still refused after that, contact SuiteOp support.","payment_account_juspay_one_click_only":"JusPay Hyperswitch can't be added here. Connect it from Add Account in Payments settings — that one-click setup creates the JusPay Hyperswitch merchant and profile the account needs.","payment_account_provider_immutable":"A payment account's provider can't be changed. Add a new account for the other provider instead.","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","recurrence_days_required":"Choose at least one day of the week","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","claims":{"description_required":"Describe what happened.","item_name_required":"Name the damaged item.","damage_description_required":"Describe the damage to this item.","repair_cost_required":"Enter the repair or replacement cost.","comment_required":"Write a message before sending.","decline_reason_required":"Give a reason for declining the offer.","bad_amount":"Truvi returned an amount that could not be read.","evidence_key_invalid":"That file does not belong to this claim.","evidence_not_uploaded":"The file has not finished uploading.","evidence_not_failed":"Only a failed upload can be retried.","evidence_pending":"Wait for the uploads to finish before submitting.","no_verification":"The guest must be screened before a claim can be filed.","unsupported_currency":"Claims can only be filed in GBP, USD, EUR, CAD, AUD, ZAR or PLN.","not_configured":"Damage claims are not enabled for this workspace.","window_closed":"Truvi no longer accepts a claim for this booking — the filing window after checkout has closed.","already_exists":"A claim already exists for this reservation.","already_exists_at_truvi":"Truvi already holds a claim for this booking.","provider_refused":"Truvi refused the claim: the screening does not belong to this account or the webhook is not registered.","no_verification_at_truvi":"Truvi has no record of this screening.","item_locked":"This item was already submitted and can no longer be changed.","item_name_taken":"Another item on this claim already has this name. Use a different name.","missing_evidence":"Some items are missing required evidence.","submit_rejected":"Truvi rejected the submission. Check the items and evidence and try again.","read_only":"This claim is closed and no longer accepts messages.","not_submittable":"This claim cannot be submitted right now.","not_editable":"This claim cannot be changed right now.","no_items":"Add at least one damaged item before submitting.","no_offer":"There is no settlement offer to respond to.","screening_locked":"This guest cannot be re-screened, and the screening cannot be cancelled, while a damage claim exists for the stay."},"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_manual_start_needs_date":"Set a due date before planning a start.","task_manual_start_after_due":"The planned start can’t be after the day the task is due.","task_element_not_on_property":"That element does not belong to this property.","task_not_an_issue":"Elements can only be added to an open issue.","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"},"damage_claim_note_required":"Describe what happened.","device_integration_required":"Connect this lock to an integration account before reinstalling reservation access.","reservation_reinstall_retry":"The reservation access operation changed. Refresh and try again.","damage_protection_too_many_options":"A step can offer at most 3 protection options — up to three waivers, or two waivers and a security deposit.","damage_waiver_duplicate_id":"Each waiver can appear only once","damage_waiver_flat_fields_on_tiered_step":"This step offers several waivers — edit them from the waiver list","damage_waiver_multiple_recommended":"Only one waiver can be marked as recommended.","damage_waivers_require_damage_step":"Waiver options only apply to a damage-deposit step","graded_set_requires_every_result":"Give every answer a result before scoring this list.","points_invalid":"Points must be 0 or more.","points_too_large":"Points must be 999,999.99 or less.","points_max_two_decimals":"Points can have at most 2 decimal places.","points_required_every_choice":"Give every answer points (N/A answers don't count).","task_points_disabled":"Points are turned off for your organization.","authority_reporting_disabled":"Authority reporting is turned off for your organization.","log_requires_graded":"Turn on Pass / Flag / Fail first.","option_choice_not_in_set":"That answer isn't part of this list.","system_option_set_locked":"This list is provided by SuiteOp and can't be changed.","yes_no_config_yes_no_only":"Yes / No settings only apply to a Yes / No requirement.","option_set_only_for_single_choice":"Only a Single choice requirement can use a list.","number_config_number_only":"Measurement settings only apply to a Measurement requirement.","number_retype_stale":"This section was changed by someone else while you were editing. Refresh to see its current type, then try again.","number_config_required":"A Measurement requirement needs its settings.","number_out_of_range":"That number is too long — use at most 10 digits before the decimal point.","number_range_needs_a_bound":"Fill in a minimum, a maximum, or both.","number_range_min_above_max":"The maximum can't be below the minimum.","number_unit_not_allowed":"Choose a unit from the list.","number_flag_needs_pass":"Set a Pass range before adding a Flag range.","number_flag_must_contain_pass":"Widen the Flag range until the whole Pass range fits inside it.","number_points_not_supported":"This question doesn't give points. Remove them and try again.","number_answer_invalid":"Enter the reading as a plain number, like 7.4.","number_na_not_allowed":"This question doesn't offer N/A.","result_requires_graded_set":"Turn on scoring for this list before giving an answer a result.","option_choice_update_empty":"Nothing to update on this choice.","option_set_in_use":"This list is used by requirements. Archive it instead — it will stop being offered but existing requirements keep working.","option_set_archived":"This list is archived. Restore it before using it for a requirement.","option_set_archived_in_use":"This list is archived but still used by existing requirements, so it can't be deleted. It stays available to them and is not offered for new ones.","recurrence_needs_start_date":"Set a start date before repeating this event","recurrence_already_in_series":"This event is already part of a weekly series","recurrence_until_too_soon":"The end date must be at least one week after the event's start date","recurrence_until_too_far":"A weekly series can hold at most 52 events — pick an end date within about 12 months","recurrence_scopes_unreachable":"This event is shared through a group, tag or portal that covers properties outside your access, so it can't be repeated from your account","knowledge":{"all_properties_requires_full_access":"Only members with access to every property can add a fact for all properties","exclusion_not_inherited":"Only a fact inherited from a group, a tag or all properties can be hidden on a property","feature_disabled":"Team knowledge is not turned on for this organization","invalid_status_transition":"This fact has already changed — refresh to see where it stands","item_name_required":"Enter the item's name","item_name_too_long":"Item name must be 200 characters or less","replaces_pair_required":"An override needs both the fact it replaces and the property it is for","replaces_scope_must_be_property":"An override can only apply to the property it overrides","scope_conflicts_with_all_properties":"A fact for all properties cannot also be limited to specific properties, groups or tags","scope_incomplete":"Choose where this fact applies again — the scope was only partly sent","scope_required":"Choose where this fact applies: all properties, or at least one property, group or tag","search_too_long":"Search must be 200 characters or less","single_subject":"A fact can be about one item, space or stay, not several","statement_contains_code":"Remove the code or password — Opal would repeat it to other guests","statement_contains_email":"Remove the email address — Opal would repeat it to other guests","statement_contains_phone":"Remove the phone number — Opal would repeat it to other guests","statement_required":"Enter the fact","statement_too_long":"Fact must be 500 characters or less","subject_has_no_scope":"A fact about an item, space or stay applies only to it — remove the properties, groups and tags"},"reservation_code_action_no_managed_codes":"There are no managed reservation codes to change or revoke.","reservation_code_action_shared_credential":"This credential is shared or pooled. Manage its holders from the device before changing or revoking access.","reservation_code_action_imported_only":"SuiteOp cannot change or remove this imported credential from the lock.","reservation_code_action_immutable_credential":"This provider or credential does not support this action without affecting existing access.","reservation_code_action_device_unavailable":"A required lock is unavailable, not ready, or has code pushes disabled.","reservation_code_action_reservation_ineligible":"This reservation is not eligible for new access. Check its dates, status, verification and auto-schedule setting.","reservation_code_action_recovery_capped":"This reservation has reached its credential replacement limit. Review the lock before trying another recovery.","reservation_code_action_operation_in_progress":"A credential change is already in progress. Wait for its result before starting another action.","reservation_code_requested_format":"Enter a PIN of 4 to 8 digits.","reservation_code_requested_length":"This PIN is the wrong length for these locks. Use your organization's code length.","reservation_code_requested_digits":"This PIN uses a digit these locks can't accept.","reservation_code_requested_repeated":"Use more than one digit in the PIN.","reservation_code_requested_consecutive":"Don't use a run of consecutive digits, like 1234.","reservation_code_requested_restricted":"This PIN contains a sequence your organization blocks.","reservation_code_requested_collision":"This PIN is in use, or too close to a code already on these doors. Choose another.","reservation_code_requested_prefix_collision":"This PIN starts with the same four digits as a code on a Schlage lock. Choose another.","reservation_code_requested_provider_generated":"A lock on this stay makes its own PIN, so you can't choose one. Use Generate instead.","reservation_code_requested_unavailable":"Choosing the PIN isn't available yet. Use Generate instead.","reservation_code_action_retiring_credential":"A credential is being removed or has expired. Review its status before changing access.","reservation_code_action_no_permission":"You need reservation modification and lock-code management permissions for this action.","reservation_code_action_unauthorized":"Your permission or property access changed. Refresh before trying this action again.","guide_list_booking_sites_org_wide":"Only a member with access to all properties can change whether a guide list with no portal shows on booking sites.","guide_list_booking_sites_org_wide_edit":"Only a member with access to all properties can edit a guide list with no portal that shows on booking sites.","reservation_code_action_ineligible":"The reservation or credential changed and this action can no longer continue.","reservation_code_action_stale":"The reservation code changed. Refresh before trying this action again.","reservation_code_action_capped":"This reservation has reached its credential replacement limit. Review the lock before trying another recovery.","storefront":{"date_invalid":"Enter a valid date (YYYY-MM-DD)","guests_min":"At least 1 guest is required","guests_max":"Too many guests for this booking","check_out_after_check_in":"Check-out must be after check-in","stay_too_long":"A stay can be at most 365 nights","calendar_range_order":"The end date must be on or after the start date","calendar_range_too_long":"The date range can be at most 366 days","listing_invalid":"This listing is not valid","check_in_past":"Check-in can't be in the past","check_in_too_far":"Check-in can be at most 2 years ahead","host_entry_key_mismatch":"This site's key does not match its environment or region","redirect_from_path_invalid":"Enter a path that starts with / (no ? or #)","redirect_to_url_invalid":"Enter a path that starts with / or an https:// address","redirect_self_loop":"A redirect can't point to its own path","redirect_loop":"This would create a loop with an existing redirect","redirect_duplicate":"A redirect from this path already exists","redirect_limit":"This site has reached the maximum number of redirects","llms_summary_max":"Keep the summary under 2,000 characters","robots_append_max":"Keep the rules under 4,000 characters","redirect_from_path_too_long":"This path is too long once encoded — shorten it","privacy_policy_url_invalid":"Enter a page on this site (/privacy) or an https:// address","color_hex":"Enter a colour as a hex code, e.g. #0F766E","url_https":"Enter a secure (https://) URL","link_href":"Links must start with / (a page on this site) or https://","locale_unsupported":"This language is not supported","default_locale_not_listed":"The default language must be one of the site languages","title_template_placeholder":"The title template must contain %s where the page title goes","site_hostname_taken":"This address is already taken — try again","site_slug_taken":"A site with this name was just created — try again","site_archived":"This site is archived — restore it first","site_has_no_repo":"This site's code isn't set up yet — try again in a moment","deployment_needs_new_commit":"This version's build failed after uploading and can't be retried — save a change to the site (or push a new commit) to deploy again","theme_stale":"The site's code changed since you opened this page. Reload and try again.","theme_not_managed":"This site's theme is managed in code and can't be edited here.","eject_unavailable":"Code access isn't available for this site yet.","origin_invalid":"Enter an origin like https://www.example.com (no path or trailing slash)","replacement_key_required":"This key is the site's live key — issue a replacement key first, then revoke this one","integration_id_invalid":"This doesn't match the expected format. Check it and try again.","label_invalid":"Use 3–54 lowercase letters, numbers and hyphens, not starting or ending with a hyphen","label_double_hyphen":"Use single hyphens only — “--” is not allowed","label_reserved":"This name is reserved — choose another","label_taken":"This address is already taken — choose another","live_key_unpublished":"This site's current key isn't published yet — issue a new key, then try again","retired_hostname_limit":"This site already holds 3 previous addresses — wait for one to be released before renaming again","analytics_range_invalid":"The end date must be on or after the start date","analytics_range_too_long":"Choose a range of 90 days or less","host_entry_experiment_mismatch":"This site's experiment does not match its live version","experiment_variant_required":"Choose the version to test","experiment_split_range":"Enter a whole number from 1 to 99","experiment_already_running":"An experiment is already running on this site — stop it first","experiment_already_stopped":"This experiment has already ended, so nothing was changed","experiment_a_not_live":"This site has no live version yet — deploy it first","experiment_variant_not_deployable":"This version can't be used in an experiment — choose another one","extensions_invalid_key":"Use lowercase letters, numbers and underscores, starting with a letter","extensions_duplicate_key":"Each field needs its own key","extensions_select_needs_options":"Add at least one option","extensions_duplicate_option":"Each option needs its own value","extensions_number_range_invalid":"The maximum must be at least the minimum","extensions_duplicate_upsell":"This upsell is already listed","extensions_upsell_unavailable":"This upsell can't be offered at booking. Choose an active purchase upsell.","editor":{"message_required":"Enter a request","message_too_long":"Keep the request under 8,000 characters","session_closed":"This editing session is closed. Start a new one.","session_budget_exhausted":"This session has used all of its AI allowance. Merge or discard it, then start a new one.","rate_limited":"You've sent a lot of requests. Wait a few minutes and try again.","branch_moved":"This session changed after you reviewed it. Check the latest changes and merge again. If this keeps happening, discard the session and start a new one.","branch_behind":"Your site's code changed after this session started. Start again from the latest version.","no_changes":"There is nothing to merge yet.","contract_check_required":"The preview must be ready and pass its checks before you can merge.","path_not_allowed":"These changes touch a file the AI editor isn't allowed to change.","secret_in_content":"These changes contain a secret key, so they can't be merged.","external_script":"These changes load a script from another website, so they can't be merged.","file_too_large":"A changed file is too large to merge.","diff_too_large":"Too many files changed to show them all, so these changes can't be merged.","turn_in_progress":"The assistant is still working on this session. Wait for it to finish.","turn_overran":"This is taking longer than usual. The assistant is still working, and its changes will appear here when it finishes."},"content_too_many_photos":"Too many photos — remove some and try again.","content_photo_in_use":"One of these photos is already used somewhere else. Upload it again here instead.","content_area_parent_invalid":"Only a neighborhood can be part of an area, and that area must be a city.","content_slug_invalid":"Use lowercase letters, numbers and hyphens only, like summer-in-philly.","content_slug_taken":"Another entry already uses this web address. Choose a different one.","content_reference_invalid":"One of the chosen items isn't on this site anymore. Choose again.","content_kind_changed":"A content type can't change its kind. Give it a new key instead.","content_field_changed":"A field can't change in a way that hides its saved values (how they're stored, a gallery becoming one photo, or what it links to). Give it a new key instead.","content_type_code_owned":"This content type comes from your site's code, so it can only be changed there.","content_too_many_types":"Your site can't hold more content types. Archive one you no longer use first.","content_too_many_fields":"That's more fields than a content type can have. Remove one first.","website_url_invalid":"Enter a website address, like yourwebsite.com.","website_url_private":"That address can't be used. Enter your public website.","brand_import_rate_limited":"Too many imports for now. Try again in an hour, or pick your brand below."},"requirement_detail_too_long":"Note must be 500 characters or less","vacancy_min_gap_required":"Enter how many empty days","vacancy_cadence_required":"Enter which day","vacancy_min_gap_max":"Enter 365 days or fewer","vacancy_cadence_max":"Enter 365 days or fewer","vacancy_final_offset_max":"Enter 30 days or fewer","vacancy_needs_cadence_or_final":"Turn on at least one action — repeat while empty, or once before the next arrival","workflow_mixed_trigger":"A workflow can use only one trigger — remove the settings that belong to another trigger type","vacancy_cadence_min":"Enter 1 or more days between repeats","vacancy_min_gap_min":"Enter at least 1 empty day","vacancy_final_offset_min":"Enter 1 or more days","vacancy_max_gap_required":"Enter the longest number of empty days","vacancy_max_gap_without_between":"Remove the second number or choose “is between”","vacancy_between_order":"The second number must be larger than the first","stay_nights_required":"Enter at least one number of nights, or remove the filter","stay_nights_range":"Nights must be a whole number from 1 to 365","stay_nights_order":"The most nights must be at least the fewest","booking_channels_required":"Choose at least one booking channel","condition_requires_reservation_schedule":"Only reservation schedules can filter by length of stay or booking channel","vacancy_day_exceeds_condition":"This day is outside the vacancies you chose — lower it, or widen the condition","time_required":"Enter a time, or turn off the fixed due time","vacancy_condition_impossible":"No vacancy can match this — widen the condition","task_start_before_checkout":"The guest has not checked out yet. This clean can start once they leave.","guest_left_not_today":"The guest is not due out today, so they cannot be marked as checked out from this task.","guest_left_not_applicable":"This task is not waiting on a guest checkout.","task_item_not_yours":"This requirement belongs to someone else's task.","occupancy_min_stay_required":"Enter how many occupied days","occupancy_min_stay_min":"Enter at least 1 occupied day","occupancy_max_stay_required":"Enter the longest number of occupied days","occupancy_day_exceeds_condition":"This day is outside the stays you chose — lower it, or widen the condition","occupancy_condition_impossible":"No stay can match this — widen the condition","time_off_times_required":"Choose both a start and an end time","time_off_part_day_single_date":"Part of a day must be on a single date","time_off_end_time_before_start":"End time must be after the start time","time_off_overlap":"This overlaps another time-off request you already have","time_off_advance_notice":"This policy needs {count, plural, one {# day} other {# days}} of notice. Pick a later start date.","time_off_no_working_days":"None of these dates are working days under this policy. Pick other dates.","time_off_policy_not_eligible":"This policy isn't available to you. Choose another policy.","custom_url":{"site_required":"Choose the booking site this domain serves","site_not_allowed":"Only a booking site domain can name a site","domain_reserved":"This domain is reserved and can't be used","hostname_refused":"This domain was refused. Check that it's spelled correctly, or contact support.","managed_by_booking_site":"This domain belongs to a booking site. Remove it from that booking site instead."},"charge_stage_changed":"This upsell changed since you opened it. Check it again before deciding.","pms_rms_slots_not_rms_account":"Custom field slots can only be mapped on an RMS Cloud account.","pms_rms_slot_type_mismatch":"This slot can't hold this field. Yes/no fields need a yes/no slot and text fields need a text slot.","pms_rms_slot_too_short_for_link":"This slot is too short for a link. Choose one that holds 175 characters (5–7).","pms_rms_slot_duplicate":"This slot is already used by another field. Choose a different one.","streamline_token_key_required":"Enter the Streamline token key","streamline_token_key_invalid":"The token key can’t contain spaces or colons","streamline_token_secret_required":"Enter the Streamline token secret","streamline_token_secret_invalid":"The token secret can’t contain spaces or colons","streamline_token_pair_invalid":"Enter a valid Streamline token key and secret","member_last_owner_demote":"The organization's only owner can't be given another role.","member_suspend_self":"You can't suspend your own membership.","member_reactivate_conflict":"This member is already active or was changed by someone else. Refresh and try again.","member_reactivate_not_internal":"Only internal team members can be reactivated.","option_set_last_option":"A list needs at least one answer, so its last answer can't be deleted.","go_live_setup_outstanding":"Finish the required setup items before going live.","time_entry_open_exists":"This shift already has an open time entry. Clock out of it first.","active_clock_in_exists":"This team member is already clocked in on another shift.","time_entry_overlap":"This time entry overlaps another entry. Try different times.","shift_overlap":"This shift overlaps another shift for the same team member.","consumable_in_use":"This consumable is still stocked at a property, so it can't be deleted.","consumable_duplicate_name":"A consumable with this name already exists.","consumable_already_stocked":"This consumable is already stocked at this property.","portal_brand_default_race":"Another brand was just made the default. Try again.","hostname_in_use":"This address is already in use. Choose a different one.","custom_url_primary_race":"Another address was just made primary. Try again.","hold_release_unconfirmed":"The release isn't confirmed yet, so the authorization hold is still active. Try again in a moment.","hold_release_payment_moved":"This payment changed while the hold was being released, so nothing was released. Refresh the payment before trying again.","availability_time_format":"Use a time like 09:00","availability_end_after_start":"End time must be after start time","availability_pick_a_day":"Pick at least one day","availability_ranges_overlap":"These hours overlap","availability_range_too_long":"Choose a range of 31 days or less","availability_not_in_department":"This person isn't in that department","connection_link":{"name_required":"Enter the owner's name","name_too_long":"The name can be at most 120 characters","expiry_range":"Choose between 1 and 30 days"},"clock_in_not_enabled":"Clock-in is turned off for your account.","assignee_clock_in_disabled":"This member doesn't clock in, so shifts can't be assigned to them.","payment_method_required":"Add a card to continue","card_attach_failed":"We couldn't save this card. Try another one.","demo_upgrade_busy":"Another setup is running right now. Try again in a few minutes.","demo_upgrade_not_eligible":"This workspace can't be upgraded.","support":{"note_required":"Tell the team what you need help with.","note_too_long":"Keep the note under 2,000 characters."},"contact":{"search_too_long":"Search is too long. Use up to 200 characters.","country_code_invalid":"Use a two-letter country code, like US or FR."},"recurrence_interval_too_long":"Repeat every: up to 365 days, 52 weeks or 12 months.","recurrence_day_of_month_required":"Enter a day of the month from 1 to 31.","season_too_long":"A season that repeats every year can't be longer than a year.","recurrence_cannot_generate":"A recurrence on this schedule can never create a task, for example weekly with no day chosen. Fix it in the editor, then resume.","recurrence_overlap":"Two recurrences create the same task on the same day at the same time, so it would be created twice. Change the time of one, or remove the task from it.","recurrence_overlap_unchecked":"Too many recurrences to check for tasks created twice. Remove some recurrences or split them across schedules."},"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","card_name_mismatch":"Cardholder name doesn't match the guest or ID","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":"Domains & email","copy":"Copy","tabs":{"custom_url":"Custom URLs","email_domain":"Sending email"},"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","hostname":"Hostname"},"type":{"portal":"Guest Portal","booking_engine":"Booking Engine"},"status":{"disabled":"Disabled","live":"Live","waiting_dns":"Waiting on DNS"},"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":{"google_maps":"Google Maps"},"kind_portal":"Guest portal","kind_booking_engine":"Booking engine","added":"Added {date}","more_actions":"More actions"},"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","ownership_label":"Domain ownership","ownership_hint":"Proves this domain belongs to your organization. You can remove it once the URL is live.","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 all the records above resolve.","certificate_pending":"DNS is set up. Your certificate is still being issued — check again in a few minutes.","certificate_failed":"Your certificate could not be issued. Remove this domain and add it again to retry.","auto_provisioned_notice":"This URL is managed by SuiteOp and is always live — no DNS setup required.","status_live":"Live","status_inactive":"Inactive"},"editing_locked":{"title":"Verify your DNS to unlock these settings","description":"Once your 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"},"hostname":{"suiteop":"Hosted by SuiteOp","own":"Your domain"},"booking_site_note":"Domains that belong to a booking site are managed on that booking site.","waiting":{"title":"Waiting for your DNS records","check_now":"Check now"},"steps":{"connect_dns":"Connect DNS","seo":"SEO & sharing","seo_summary":"Favicon, site name, meta title & description, link-preview image, welcome message","look":"Look & feel","look_summary":"Fonts, background image, booking link, brand colours from the linked brand","code":"Custom code","code_summary":"Header and body code (HTML/JS)","unlocks_after_dns":"unlocks after DNS"}},"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","waiting_dns":"Waiting on DNS"},"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":{"empty":"No senders yet — verify a domain first.","type":"Type","type_placeholder":"Select type","type_options":{"single_sender":"Single Sender","domain_verified":"Domain Verified"},"default":"Default","verified":"Verified","awaiting":"Awaiting confirmation","dmarc_blocked":"Won't deliver","dmarc_blocked_hint":"This address's email provider rejects mail that other services send on its behalf. Authenticate a domain you own and send from it, or remove this sender to use your hosted address.","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":"Playbooks that send from {sender} will fall back to the default sender.","cancel":"Cancel","confirm":"Remove","toast_deleted":"Sender removed"},"replies_to":"replies to {address}"},"delete":{"title":"Remove this domain?","description":"Playbooks 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":"Senders","senders_sub":"The names and addresses guests see in their inbox.","records_count":"{count, plural, one {Each needs # DNS record.} other {Each needs # DNS records.}}"},"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"},"guest_replies":{"title":"Guest replies","sub":"Where a guest's reply to your emails lands.","ready":"Replies come back to you","ready_sub":"Guest emails go out from {address}, so replies land in your own mailbox.","ready_sub_reply_to":"Guest emails go out from {address}, and replies land in {replyTo}.","hosted":"Replies come back through SuiteOp","hosted_sub":"Guest emails go out from {address}. We recommend adding your own domain and verifying a sender above, so guest emails go out from your own address and replies reach you directly.","inbox":"Replies come back to your SuiteOp inbox","inbox_sub":"Guest emails go out from {address}. Replies go to {inboundAddress} and appear in your SuiteOp inbox.","not_ready":"Guest emails don’t go out from your own address yet","not_ready_sub":"We recommend adding your own domain and verifying a sender above, so guest emails go out from your own address."},"record_chip":{"unknown":"DMARC: configure separately"},"actions":{"delete_domain":"Delete domain","delete_sender":"Delete sender"},"add_sending_domain":"Add sending domain","templates_footer":"Edit what these emails say in <link>Email templates</link>"},"page_description":"Serve the guest portal from your own web address and send emails from your own domain."},"workflows":{"page":{"title":"Agents","search_placeholder":"Search playbooks…","no_results":"No playbooks found","no_results_description":"Playbook automation rules will appear here."},"columns":{"name":"Name","trigger":"Trigger","folder":"Folder","status":"Status","updated":"Updated","active":"Active","inactive":"Inactive","untitled":"Untitled","actions":"Actions"},"row_actions":{"open":"Open"},"editor":{"not_found_title":"Playbook not found","not_found_description":"No playbook with ID {id} exists.","refresh_failed":"Couldn't refresh this playbook. You're seeing the last loaded version.","read_only_notice":"Read-only — you don't have permission to edit this playbook.","untitled":"Untitled","rename_aria":"Rename playbook","status":{"saving":"Saving…","saved":"Saved","unsaved":"Unsaved changes"},"published":"Published","draft":"Draft","has_draft_changes":"Draft changes","publish":"Publish","unpublish":"Unpublish","publish_success":"Playbook published successfully","unpublish_success":"Playbook unpublished","apply_existing":"Apply to existing reservations","apply_existing_title":"Apply to existing reservations?","apply_existing_body":"This schedules this playbook's check-in and check-out steps for reservations that already exist on its properties. Steps whose time has already passed run now; the rest run at their planned time. Booking and confirmation steps are not replayed. Canceled reservations and stays that have already ended are skipped, and steps already scheduled, sent or canceled are not repeated.","apply_existing_confirm":"Apply","apply_existing_cancel":"Cancel","apply_existing_success":"{count, plural, one {Applying this playbook to # existing reservation} other {Applying this playbook to # existing reservations}}","apply_existing_none":"No upcoming reservations to apply this playbook to","unpublished_leave_title":"Unpublished changes","unpublished_leave_description":"Your changes are saved as a draft, but the live playbook 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_booking_guest_marketing":"An email to the guest under a direct-booking trigger must be a marketing email sent to the guest only","context_issue_due_anchor":"The due date can't be set — only the \"Task is complete\" trigger has a completion time to count from","context_issue_generic":"This node reads data its trigger doesn't provide","publish_failed_toast":"Couldn't publish this playbook.","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","slack_blocks_invalid_json":"Block Kit JSON (not valid JSON)","slack_blocks_invalid_shape":"Block Kit JSON (must be an array of blocks, each with a \"type\")","slack_blocks_too_many":"Block Kit JSON (50 blocks max)","slack_blocks_too_many_with_mentions":"Block Kit JSON (49 blocks max when members are tagged)","task_template_required":"Task template","collaborators_required":"Select at least one collaborator","http_url_required":"URL","http_method_required":"HTTP method","precheck_answer_unavailable":"An existing Additional Question answer (a selected answer was deleted)","company_unavailable":"A connected company (the selected one is no longer connected)","service_fee_required":"Upsell / service fee","js_code_required":"JavaScript code","thermostat_mode_required":"Thermostat mode","thermostat_mode_unexecutable":"Supported thermostat mode","check_time_invalid":"Valid time (HH:MM)","check_time_upsell_required":"An upsell to read the time from","check_time_field_required":"A time field on the upsell","check_time_upsell_unavailable":"An active upsell (the selected one was archived or deleted)","check_time_field_unavailable":"A time field on the upsell (the selected field is no longer one of its time fields)","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","advance_notice_days_required":"Days before check-in","schedule_interval_invalid":"Valid repeat interval","schedule_start_date_required":"Start date","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","empty_fallback_value_required":"A value to use when it's empty","loop_overflow_step_required":"A step for when there are more items than the limit","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","email_marketing_guest_only":"Recipients (a marketing email goes to the guest only)","labels_required":"At least one label","label_unavailable":"An existing label (a selected label was deleted)","email_hosted_sender_custom_recipient":"Recipients (custom addresses need a verified sender)"},"publish_no_actions_title":"Publish without any actions?","publish_no_actions_body":"This playbook has a trigger but no action steps, so it will run when triggered but won't do anything. Add an action, or publish anyway.","lint":{"code":{"unknown_variable":"\"{token}\" isn't a recognized variable — it will be blank when the playbook runs. Pick it from the variable list instead of typing it.","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. Pick it from the variable list instead of typing it.","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 playbook 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.","revoked_changes_discarded_toast":"You no longer have permission to edit, so your unsaved changes were discarded."},"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_node":"Add node","trigger_label":"Trigger","add_first_step":"Add first step","add_first_step_description":"Click to create your first trigger","delete_edge":"Delete edge","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","recenter":"Re-center","minimap_label":"Canvas overview","zoom_in":"Zoom in","zoom_out":"Zoom out","reset_zoom":"Reset zoom","tidy_up":"Tidy up","trigger_kicker":"Trigger · {event}","add_step_path":"Add step · {path}","insert_step":"Insert a step here","controls_label":"Canvas controls","undo":"Undo","redo":"Redo","input_mode":"Input mode","input_mode_trackpad":"Trackpad","input_mode_mouse":"Mouse","input_mode_trackpad_hint":"Trackpad: swipe to pan, pinch to zoom","input_mode_mouse_hint":"Mouse: drag to pan, scroll to zoom","menu_open":"Open","menu_rename":"Rename","menu_rename_hint":"Double-click","menu_test_from_trigger":"Test from this trigger","menu_duplicate":"Duplicate","menu_delete":"Delete","ends_here":"Ends here","if_works":"If it works","if_fails":"If it fails","fit_short":"Fit","empty_hint":"Click anywhere to start with a trigger","if_more":"If there are more"},"branch":{"title":"Condition","success":"Yes","fail":"No","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":"Each item","complete":"When 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 playbook 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.","unavailable_triggers_label":"Not available","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_trigger":"Add a trigger","add_title_action":"Add an action","add_title_logic":"Add logic","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","advance_notice_days":"Days before check-in","advance_notice_days_value":"{days, plural, one {# day} other {# days}}","advance_notice_hint":"Booking lead time: how many days before check-in the reservation was booked.","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 playbook 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","booking":"Direct booking"},"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","add_source_placeholder":"Add source…","vacancy_unit":"days","vacancy_before_hint":"Days the property sits empty between its previous check-out and this stay's check-in.","vacancy_after_hint":"Days the property sits empty between this stay's check-out and its next check-in.","check_in_state_hint":"Use it on a delayed action: at check-in time nobody has arrived yet, so an immediate check matches almost every stay. Check-in state only changes through the guest portal, the front desk, your PMS or a workflow. If your team uses none of these, every stay reads as Not Checked In.","guest_tag_hint":"Checked when the workflow reaches this step: a label added to the guest later isn't seen. Best used on a branch.","reservation_requirement_hint":"Checked when the workflow reaches this step: a label added to the reservation later isn't seen. Best used on a branch.","added_label_hint":"Matches when the label just added to the conversation is one of these. Only the “Conversation label added” trigger carries a label, so under any other trigger this never matches.","offline_for_label":"Offline for at least","offline_for_unit_aria":"Offline for at least — Time unit","offline_duration_hint":"Measured from when the device went offline. Use it on a delayed action: when the device has only just disconnected no time has passed, so an immediate check never matches. Netatmo devices don't report this, so the condition never matches them.","precheck_match_label":"Match","precheck_match_any":"Matches any selected answer","precheck_match_all":"Matches all selected answers","property_ids":"Properties","tag_ids":"Tags","group_ids":"Property Groups","department_ids":"Departments","select_properties":"Select properties…","select_tags":"Select tags…","select_guest_labels":"Select contact labels…","select_stay_requirements":"Select reservation labels…","select_added_labels":"Select labels…","select_groups":"Select property groups…","select_departments":"Select departments…","select_upsells":"Select upsells…","select_precheck_answers":"Select answers…","upsell_item_ids":"Upsell Item IDs","precheck_answer_unavailable":"Answer unavailable","precheck_answer_out_of_scope":"Answer on a property outside your access","precheck_answer_untitled":"Untitled answer","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","delete_confirm_title":"Delete playbook?","delete_confirm_description":"This will permanently deactivate this playbook. This action cannot be undone.","delete_button":"Delete playbook","cancel":"Cancel","delete_action":"Delete","remove_template":"Remove template","convert_to_template":"Convert to template","select_groups":"Select groups…","select_tags":"Select tags…","select_properties":"Select properties…","unnamed":"Unnamed","scope_update_error":"Couldn't update playbook scoping"},"create_dialog":{"describe_title":"Describe it","describe_subtitle":"Tell AI what you want to automate in plain English","describe_badge":"AI-powered","generate_button":"Generate Playbook","chat_input_placeholder":"Type your answer...","chat_send":"Send","chat_initial_message":"What would you like to automate? Describe the playbook you have in mind and I will help you build it.","chat_error":"Something went wrong. Please try again.","generating":"Generating playbook…","generate_error":"Failed to generate playbook. Please try again.","generate_invalid":"The AI couldn't build a valid playbook from this description. It ran into these problems:","generate_timeout":"The playbook took too long to generate. The last attempt ran into these problems:","build_title":"Build it","workflow_created":"Playbook created","group_descriptions":{"reservation":"This playbook will run anytime a reservation is created or updated.","guest_status":"This playbook 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.","booking":"When a guest leaves a checkout on your booking site without paying.","schedule":"Runs on a repeating schedule you set."},"group_labels":{"reservation":"Reservation","guest_status":"Guest Status","payments":"Payments","review":"Review","guest_verification":"Guest Verification","device":"Device","task":"Task","opportunity":"Opportunity","action":"Action","booking":"Direct booking","schedule":"Schedule"},"generate_error_hint":"You can try again or go back to refine your description.","untitled_workflow":"Untitled playbook"},"log":{"title":"Logs","refresh":"Refresh","workflow_action":"Playbook Action","workflow_action_column":"Playbook 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":"Playbook 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":"Playbook 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","slack_tagged_members":"Tagged members","slack_skipped_members":"Skipped — not reachable on Slack","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","release_action":"Send held message","release_pending":"Sending…","release_succeeded":"Released — the message will be sent shortly","release_not_held":"This action is no longer held, so nothing changed","release_failed":"Couldn't release this action","release_confirm_title":"Send this held message?","release_confirm_body":"The previous SuiteOp account may already have sent this message. Sending it now delivers it once more, even if the guest already received it.","release_confirm":"Send message","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":"Playbook…","no_results":"No playbook actions found","no_results_description":"Playbook execution logs will appear here as playbooks 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","valve_dispatch_failed":"{failed} of {total} valve 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","task_subtask_parent_gone":"Triggering task no longer exists — task created as a standalone task","org_assignee_unavailable":"The assigned company could not take this task — task created unassigned","org_assignee_test_run":"Test run — the task is not sent to the assigned company and was created unassigned","ugc_email_hold_expired":"Email sending for this account was paused for more than 48 hours — the email was not sent","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_due_stale":"The task deadline or property changed, or the task is no longer active.","charge_schedule_stale":"The charge delivery time changed, or the charge is no longer eligible.","deposit_hold_resolved":"The security deposit was resolved before this ran: the guest added a card, or the step was waived.","chained_step_past_after_move":"This follow-up's time had already passed when the stay's dates moved, so it was not sent late.","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}","send_time_conditions_not_met":"Conditions were no longer met when this step was due to run: {conditions}","send_time_conditions_now_met_false_path":"The branch's conditions were met when this step was due to run, so its false path was skipped: {conditions}","send_time_outputs_missing":"The branch's conditions could not be re-checked when this step was due to run — outputs of {nodes} were missing","upsell_mismatch":"Skipped — this charge is for a different upsell than the one this step reads its time from","upsell_time_not_selected":"Skipped — the guest didn't pick a time on the selected upsell field","republish_step_removed":"Step or trigger removed in a newer published version of the playbook","republish_pre_arrival_elapsed":"A newer published version moved this step before check-in, which has already passed","reservation_moved_property":"Reservation moved to another property before scheduled execution","property_archived":"Property archived before scheduled execution","schedule_anchor_elapsed":"Skipped — the scheduled time had already passed ({scheduleEvent}; would have run at {firedAt})","schedule_anchor_unresolved":"Withheld — the scheduled time could not be determined on this imported reservation ({scheduleEvent}), so the step was not run immediately","notification_no_recipients":"No team members to notify — the recipients resolved to nobody","notification_missing_title":"The notification has no title","http_no_url_configured":"No URL is configured on this action","zapier_no_trigger_configured":"No Zapier trigger is configured on this action","zapier_trigger_not_found":"The Zapier trigger this action uses no longer exists","migrated_rule_held_until_cutover":"This automation was migrated and still runs in your previous SuiteOp account until cutover — the action was not run here","guest_tag_match_no_eligible_member":"No one with matching Guest care could take this task — handed to auto-assignment","migration_v1_owned_before_cutover":"This step was due before your account moved to SuiteOp, so your previous SuiteOp account handled it — it was not run here","migration_v1_muted_ambiguous":"This step was due while your previous SuiteOp account was being switched off, so it may not have been sent. It was not sent here — check whether the guest received it","migration_parent_output_unavailable":"This step uses information from an earlier step that your previous SuiteOp account handled, so that information isn't available here. The step was not sent rather than sent without it","migration_hold_released":"A SuiteOp team member released this held step so it is sent once","email_marketing_no_guest":"Marketing email skipped — this run has no guest","email_marketing_no_consent":"Marketing email skipped — the guest has not agreed to marketing email, or has unsubscribed","email_marketing_frequency_capped":"Marketing email skipped — the guest received a marketing email recently","email_marketing_recovered":"Marketing email skipped — the guest has booked since","email_marketing_already_sent":"Marketing email skipped — this email was already sent to the guest","label_none_configured":"No labels are configured on this action","label_no_reservation":"Skipped — this run has no reservation to label","label_no_guest":"Skipped — this reservation has no guest to label","label_deleted":"A label on this step no longer exists and was not added — remove it from the step","label_removed_by_person":"A label a person removed earlier was not added back","email_hosted_sender_custom_recipient":"Sending to custom addresses needs a verified sender — add one in Settings → White labeling → Email domain"}},"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":{"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.","slack_mentions":"Tag members","slack_mentions_help":"Each tagged member is @mentioned at the top of the message. Members without a Slack account in this workspace are skipped.","slack_mentions_max":"You can tag up to 10 members.","message_template":"Message Template","slack_message_format":"Message format","slack_message_format_text":"Plain text","slack_message_format_blocks":"Rich (Block Kit JSON)","slack_blocks_hint":"Paste a JSON array of blocks. Merge tags work inside text values.","slack_blocks_builder_link":"Design it in Slack's Block Kit Builder","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","query_params_label":"Query parameters","query_param_key_placeholder":"Parameter name","query_param_value_placeholder":"Value","add_query_param":"Add query parameter","remove_query_param":"Remove query parameter","show_value":"Show value","hide_value":"Hide value","zapier_step_hint":"Pick this step in Zapier's <em>Workflow step</em> trigger","zapier_listener_count":"{count, plural, =0 {No Zaps are listening yet} one {# Zap is listening} other {# Zaps are listening}}","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. For “Department users”, a Housekeeping task skips owners, admins and managers — if only they are left, 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_unassigned_hint":"The task is created with no assignee and waits in the unassigned queue. If the organisation uses auto-assignment, it picks the task up like any other unassigned task.","assignment_guest_care_hint":"Prefers someone whose Guest care matches the guest's labels, from the people auto-assignment could pick — least busy that day first. With no guest or no match, auto-assignment picks as usual.","task_scheduler_hint":"This step creates the task only when the playbook runs. For turnovers and recurring work, use the Scheduler, which creates tasks ahead of time.","task_scheduler_link":"Open the Scheduler","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","company":"Company","select_company":"Select a company","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","email_recipients_kept":"{count, plural, one {Also sends to # more recipient. Saving keeps it.} other {Also sends to # more recipients. Saving keeps them.}}","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 playbook 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","task":"Merge fields — Task","booking":"Merge fields — Direct booking"},"context_variable_groups":{"trigger":"Trigger","reservation":"Reservation","property":"Property"},"context_variable_labels":{"trigger":{"scheduleEvent":"Schedule Event","propertyId":"Property ID","reservationId":"Reservation ID"},"reservation":{"id":"Reservation ID","status":"Status","checkInState":"Check-in State","checkIn":"Check-in (raw date)","checkOut":"Check-out (raw date)","confirmedAt":"Confirmed At (raw date)","guestCount":"Guest Count","lengthOfStay":"Length of Stay","source":"Source","isRecurringGuest":"Is Recurring Guest"},"property":{"id":"Property ID","name":"Property Name","propertyGroupId":"Property Group ID","occupancyState":"Occupancy State","timezone":"Timezone"}},"merge_field_labels":{"date_now":"Current Date","brand_logo":"Brand Logo","brand_color":"Brand Color","brand_color_text":"Brand Color Text","brand_callout_message":"Brand Callout","organization_name":"Organization Name","property_name":"Property Name","property_nickname":"Property Nickname","property_address_full":"Property Address Full","property_cover_photo":"Property Cover Photo","property_wifi_name":"Property WiFi Name","property_wifi_password":"Property WiFi Password","bedroom_count":"Bedroom Count","listing_city":"Listing City","listing_country":"Listing Country","listing_street":"Listing Street Address","listing_max_occupancy":"Listing Maximum Occupancy","group_name":"Group Name","group_code_type":"Group Code Type","group_code_entry_key":"Group Entry Code Key","group_internal_access_notes":"Group Internal Access Note","property_map_link":"Property Map Link","device_name":"Device Name","device_label":"Device Label","device_type":"Device Type","device_link":"Device Deep Link","guest_first_name":"Guest First Name","guest_last_name":"Guest Last Name","guest_full_name":"Guest Full Name","guest_email":"Guest Email","guest_count":"Guest Count","guest_birth_date":"Guest's Birth Date","reservation_phone":"Guest's Phone","primary_guest_id":"Guest's ID","primary_guest_selfie":"Guest's Selfie","id_verification_status":"ID/Verification Status","other_guests":"Other Guests","guest_labels":"Contact Labels","stay_requirements":"Reservation Labels","check_in_date":"Check-in Date","check_in_time":"Check-in Time","check_in_eta":"Estimated Arrival Time","estimated_arrival_date":"Estimated Arrival Date","check_out_date":"Check-out Date","check_out_time":"Check-out Time","check_out_etd":"Estimated Departure Time","estimated_departure_date":"Estimated Departure Date","reservation_code":"Reservation Confirmation Code","reservation_id":"Reservation ID (PMS)","suiteop_reservation_id":"SuiteOp Reservation ID","reservation_door_code":"Reservation Door Code","reservation_keycode":"Reservation Keycode","reservation_unit_access_code":"Reservation Unit Access Code","reservation_building_access_code":"Reservation Building Access Code","reservation_nights":"Reservation Number of Nights","reservation_deeplink":"Reservation Deeplink (Internal)","reservation_portal_link":"Reservation Portal Link","deposit_hold_amount":"Deposit Hold Amount","deposit_hold_date":"Deposit Hold Date","deposit_hold_failure_type":"Deposit Hold Failure Type","deposit_hold_decline_reason":"Deposit Hold Decline Reason","deposit_step_link":"Deposit Step Link","reservation_additional_questions":"Reservation's Additional Questions","reservation_source":"Reservation Source","reservation_total_price":"Reservation Total Price","agreement_status":"Agreement Status","deposit_status":"Deposit Status","upsell_title":"Upsell Title","upsell_nickname":"Upsell Nickname","upsell_notes":"Upsell Notes","upsell_hero_image":"Upsell Hero Image","upsell_payment_amount":"Upsell Payment Amount","upsell_option":"Upsell Option","upsell_booked_date":"Upsell Booked Date","upsell_booked_time":"Upsell Booked Time","upsell_scheduled_date":"Upsell Scheduled Date","upsell_scheduled_time":"Upsell Scheduled Time","upsell_deeplink":"Upsell Deeplink (Internal)","review_rating":"Review Rating","cleanliness_rating":"Cleanliness Rating","checkin_rating":"Check-in Rating","communication_rating":"Communication Rating","value_rating":"Value Rating","location_rating":"Location Rating","accuracy_rating":"Accuracy Rating","review_ai_summary":"Review AI Summary","review_public_message":"Review's Public Message","review_source":"Review Source","private_feedback":"Private Feedback","opportunity_title":"Opportunity Title","opportunity_description":"Opportunity Description","opportunity_priority":"Opportunity Priority","opportunity_department":"Opportunity Department","opportunity_property_name":"Opportunity Property Name","opportunity_reservation_info":"Opportunity Reservation Info","opportunity_last_report":"Opportunity Last Report","task_id":"Task ID","task_title":"Task Title","task_description":"Task Description","task_link":"Task Link","task_link_public":"Task Public Link","task_status":"Task Status","task_priority":"Task Priority","task_due_date":"Task Due Date","task_start_date":"Task Start Date","task_end_date":"Task End Date","task_duration":"Task Duration","task_assignee_first_name":"Task Assignee's First Name","task_assignee_name":"Task Assignee Full Name","task_assignee_email":"Task Assignee's Email","tms_department_name":"Task Department Name","task_property":"Task Property","task_property_id":"Task Property ID from PMS","task_photos":"Task Photos","tms_costs":"Task Costs","tms_hourly_rate":"Task Hourly Rate","booking_guest_first_name":"Booking Guest's First Name","booking_check_in":"Booking Check-in Date","booking_check_out":"Booking Check-out Date","booking_guests":"Booking Guest Count","booking_resume_url":"Resume Booking Link","booking_listing_name":"Booking Listing Name"},"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","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...","payment_account_unavailable":"{name} (unavailable)","payment_account_unavailable_hint":"This account is inactive or can't take guest charges. Choose another 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_none":"No 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","email_marketing_label":"Marketing email","email_marketing_help":"Sent only to guests who agreed to marketing email, no more than once every 3 days, with an unsubscribe link.","email_marketing_guest_only":"A marketing email is sent to the guest only.","email_marketing_booking_locked":"Under a direct-booking trigger, an email to the guest is always a marketing email: it is sent only to guests who agreed to marketing email, with an unsubscribe link. An email to your team is not affected.","category_find_tasks":"Find tasks","email_sender_fallback":"Sends from {address}"},"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","booking":"Direct booking","schedule":"Schedule"},"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 Playbook Status","ask_agent":"Ask AI Agent","refund_reservation_charges":"Refund Reservation Charges","open_valve":"Open Water Valve","close_valve":"Close Water Valve","add_contact_label":"Add Contact Label","add_reservation_label":"Add Reservation Label","find_tasks":"Find tasks"},"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","unassigned":"Leave unassigned","guest_tag_match":"Guest care match","org_connection":"A company","property_default":"Preferred assignee"},"automation_statuses":{"scheduled":"Scheduled","processing":"Processing","complete":"Complete","failed":"Failed","canceled":"Canceled","draft":"Draft","filtered":"Filtered"},"schedule_events":{"action_is_executed":"action executed","branch0":"branch","charge_approved":"charge approved","charge_delivered":"charge delivered","charge_denied":"charge denied","charge_submitted":"upsell requested","check_in":"check-in time","check_out_date":"check-out time","co2_threshold":"CO₂ threshold","code_changed":"backup code activated","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","precheckin_submitted":"pre-check-in submitted","camera_motion":"camera motion","doorbell_press":"doorbell pressed","deposit_hold_failed":"scheduled deposit hold failed","deposit_hold_unresolved":"deposit hold still unresolved before check-in","reservation_requirement_added":"reservation label added","conversation_label_added":"conversation label added","booking_checkout_abandoned":"checkout abandoned","recurring_schedule":"on a schedule","device_battery_replaced":"battery replaced"},"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","reservation_source_changed":"Reservation booking channel changed"}},"log_page_title":"Playbook Log","copilot":{"title":"Copilot","placeholder":"Describe changes to your playbook…","send":"Send","coming_soon":"Coming soon — AI copilot will modify your playbook graph","badge":"AI","thinking":"Applying changes…","changes_applied":"Changes applied to your playbook.","trigger_set_changed":"This change modified the playbook's triggers — review the trigger nodes before publishing.","error":"Failed to apply changes: {message}","connect_plugin":"Connect {plugin}","hidden_value_cleared":{"url":"The URL of “{node}” was saved without the hidden value the copilot put in it — the copilot can't move or copy hidden values. Enter the value in the step settings.","body":"The request body of “{node}” was saved without the hidden value the copilot put in it — the copilot can't move or copy hidden values. Enter the value in the step settings.","header":"The {name} header of “{node}” was saved without the hidden value the copilot put in it — the copilot can't move or copy hidden values. Enter the value in the step settings.","query":"The {name} query parameter of “{node}” was saved without the hidden value the copilot put in it — the copilot can't move or copy hidden values. Enter the value in the step settings.","parameter":"The {name} setting of “{node}” was saved without the hidden value the copilot put in it — the copilot can't move or copy hidden values. Enter the value in the step settings."},"hidden_value_unchanged":{"unnamed_step":"this step","url":"The URL of “{node}” was not changed — the copilot can't edit hidden values. Change it in the step settings.","body":"The request body of “{node}” was not changed — the copilot can't edit hidden values. Change it in the step settings.","header":"The {name} header of “{node}” was not changed — the copilot can't edit hidden values. Change it in the step settings.","query":"The {name} query parameter of “{node}” was not changed — the copilot can't edit hidden values. Change it in the step settings.","parameter":"The {name} setting of “{node}” was not changed — the copilot can't edit hidden values. Change it in the step settings."}},"test":{"manual_test":"Manual Test","manual_test_description":"Creates a test reservation and runs the full playbook","manual_test_schedule_unavailable":"Scheduled triggers don't support Manual Test yet.","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 playbook 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 {seconds}s — 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.","http_method_downgraded_title":"Method changed on redirect","http_method_downgraded_description":"A redirect changed this request from {configured} to {sent}, the standard behavior for a 301, 302 or 303 response. The final hop received a {sent} request.","http_body_dropped_title":"Body not sent on redirect","http_body_dropped_description":"This request was redirected, and the body below was not sent on to the final hop. An error from the final hop may be the result.","http_body_not_sent":"not sent after redirect","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","booking":"direct booking"}}},"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","company":"Company","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","parameters":"Parameters","yes":"Yes","no":"No","statuses":"Statuses","due":"Due","due_any":"Any due date","due_overdue":"Overdue","due_today":"Due today","due_within_days":"Due within a number of days","within_days":"Within (days)","unassigned":"Unassigned","limit":"Max tasks","stop_if_empty":"Stop if none found"},"quick_actions":{"explain":{"label":"Explain this playbook","prompt":"Walk me through what this playbook does, step by step. Mention each trigger and what runs after it."},"find_issues":{"label":"Find issues","prompt":"Review this playbook 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 playbook runs. Wire it after the trigger."},"add_branch":{"label":"Add a condition branch","prompt":"Add a condition branch on this playbook. 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 {# playbook published} other {# playbooks published}}","published_partial_toast":"{ok} published, {failed} couldn't be published","publish_failed_toast":"Couldn't publish playbooks","unpublished_toast":"{count, plural, one {# playbook unpublished} other {# playbooks unpublished}}","unpublish_failed_toast":"Couldn't unpublish playbooks","cloned_toast":"{count, plural, one {# playbook duplicated} other {# playbooks duplicated}}","cloned_partial_toast":"{ok} duplicated, {failed} couldn't be duplicated","clone_failed_toast":"Couldn't duplicate playbooks","deleted_toast":"{count, plural, one {# playbook deleted} other {# playbooks deleted}}","delete_failed_toast":"Couldn't delete playbooks","delete_confirm_title":"Delete selected playbooks?","delete_confirm_description":"{count, plural, one {# playbook will be deleted and stop running.} other {# playbooks will be deleted and stop running.}} This can't be undone.","delete_confirm_action":"Delete","delete_confirm_cancel":"Cancel","selected":"{count, plural, one {# playbook selected} other {# playbooks 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 playbook and adjust it","search_placeholder":"Search templates…","filter_all":"All","empty":"No templates match your search.","load_error":"Could not load templates. Please try again.","catalog":{"lock_up_after_checkout":{"name":"Lock up after checkout","description":"Locks the property's smart locks as soon as the guest is marked checked out."},"unlock_at_guest_check_in":{"name":"Unlock at guest check-in","description":"Unlocks the property's smart locks the moment the guest is marked checked in."},"eco_mode_between_stays":{"name":"Eco mode between stays","description":"Turns the thermostat off once a guest checks out, so an empty property is not heated or cooled."},"precool_before_arrival":{"name":"Pre-cool before arrival","description":"Sets a comfortable temperature ahead of check-in so the guest walks into a ready property."},"welcome_email_before_check_in":{"name":"Welcome email before check-in","description":"Emails the guest their arrival details ahead of check-in. Pick which email template to send before publishing."},"checkout_cleaning_task":{"name":"Create the cleaning task at checkout","description":"Raises a turnover task the moment a stay ends. Pick which task template to use before publishing."},"low_battery_alert":{"name":"Low battery alert","description":"Notifies the team when a device reports a low battery, before a guest is left at a dead lock. Pick who gets notified before publishing."},"device_offline_alert":{"name":"Device offline alert","description":"Notifies the team as soon as a device drops off the network, so it is fixed before the next arrival. Pick who gets notified before publishing."},"noise_alert_response":{"name":"Respond to a noise alert","description":"Notifies the team when a noise sensor trips, so a party can be headed off early. Pick who gets notified before publishing."},"notify_on_new_review":{"name":"Notify on a new review","description":"Tells the team the moment a guest review lands, so a poor rating gets a same-day response. Pick who gets notified before publishing."},"alert_on_cancelled_task":{"name":"Alert on a cancelled task","description":"Flags a cancelled task to the team so a turnover is never silently dropped. Pick who gets notified before publishing."},"slack_when_task_completed":{"name":"Post to Slack when a task is done","description":"Posts to a Slack channel each time a task completes. Pick the channel before publishing."},"daily_open_task_summary_slack":{"name":"Daily open-task summary to Slack","description":"Every weekday morning, posts the open tasks to a Slack channel, with a link to each one. Pick the channel before publishing."}}},"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"},"add_contact_label":{"description":"Add contact labels to the reservation's guest. They follow the person across every booking.","label":"Add contact label"},"add_reservation_label":{"description":"Add reservation labels to the reservation. They apply to this booking only.","label":"Add reservation label"},"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"},"close_valve":{"description":"Remotely closes all water shut-off valves on the property.","label":"Close water valve"},"create_service_fee":{"description":"Attach a service fee or upsell charge to the reservation.","label":"Add service fee"},"find_tasks":{"description":"Find open tasks that match filters, to summarise or loop over them.","label":"Find tasks"},"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"},"open_valve":{"description":"Remotely opens all water shut-off valves on the property.","label":"Open water valve"},"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":"Hand the run to every Zap that picked this step in Zapier's Workflow step trigger.","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 a charge is approved — by an operator, or automatically when the guest's payment settles."},"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":"Upsell requested","notes":"Fires when a guest requests or buys an upsell. Host-added fees, damage waivers and deposits fire it too — any new charge does. Upsell charges carry upsell context."},"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":"Backup code activated","notes":"Runs when a reservation's backup access code is activated — by a manager, by the guest, or automatically when the primary code fails."},"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 when a device's battery drops below its threshold — set per device in the device's Settings tab, 30% when unset. While the battery stays low it runs again about once a day; it stops once 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":"Not available — no trigger runs when a lock code (PIN) is created or edited by hand. Backup code activated runs only when a backup code is activated or a failed primary code is replaced automatically."},"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":"Not available — retired. Use Device 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":"Not available — retired. Use Upsell requested; for the charge's delivery time, use Scheduled time."},"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":"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":"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 a task is cancelled — by an operator, or automatically by a schedule change or a cancelled reservation."},"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":"Not available — retired. Use Device is unlocked."},"update_thermostat":{"label":"Thermostat updated","notes":"Not available — changing a thermostat is an action, not a trigger. Add the Set thermostat mode & temperature action as a step instead."},"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."},"precheckin_submitted":{"label":"Pre-check-in submitted","notes":"Runs once when the guest completes the pre-check-in form in the guest portal, whatever the verification outcome."},"camera_motion":{"label":"Camera detects motion","notes":"Runs when a connected camera detects motion."},"doorbell_press":{"label":"Doorbell is pressed","notes":"Runs when someone presses a connected doorbell."},"deposit_hold_failed":{"label":"Scheduled deposit hold failed","notes":"Runs when the security-deposit hold scheduled on a guest's saved card is refused. Pre-check-in reopens and check-in instructions are hidden until the guest adds a card or you waive the step. A rule on this trigger replaces the default email to the guest, so make sure it tells them."},"deposit_hold_unresolved":{"label":"Deposit hold still unresolved before check-in","notes":"Runs before check-in, at the time you set on the action, if a refused security-deposit hold has still not been resolved."},"reservation_requirement_added":{"label":"Reservation label added","notes":"Runs once per reservation when a reservation label, such as Pet or Baby crib, is added to it."},"conversation_label_added":{"label":"Conversation label added","notes":"Runs when a label is added to a guest conversation, by the AI or by your team, if the conversation belongs to a reservation. Choose which labels with the “Label That Was Added” condition, then put them on the reservation or the guest with an “Add reservation label” or “Add contact label” step."},"booking_checkout_abandoned":{"label":"Checkout abandoned","notes":"Runs when a guest who entered their email leaves a direct-booking checkout without paying."},"recurring_schedule":{"label":"On a schedule","notes":"Runs on a repeating schedule — at a set hour on chosen days, every few hours, every few days or monthly — in a chosen time zone."},"device_battery_replaced":{"label":"Battery replaced","notes":"Runs when someone marks a device battery as replaced."}},"condition_catalog":{"day_of_the_week":"Day of Week","days_since_last_reservation":"Vacancy Before This Stay","days_until_next_reservation":"Vacancy After This Stay","device_battery_level":"Battery Level","device_offline_duration":"Offline Duration","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":"Additional Question Answer","property":"Property","property_occupancy":"Unit Occupancy","property_tag":"Property Tag","recurring_guest":"Recurring Guest","reservation_check_in_date":"Check-In Date","reservation_check_in_state":"Check-in State","guest_tag":"Contact Label","reservation_requirement":"Reservation Label","added_label":"Label That Was Added","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","assigned_org_id":"Assigned Company Org ID","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","count":"Matching tasks","decision":"Decision","durationMs":"Duration (ms)","failedCount":"Failed Count","failedDeviceIds":"Failed Device IDs","formattedList":"Formatted list","headers":"Response Headers","json":"Parsed JSON","listUrl":"Task list link","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","returned":"Tasks returned","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","tasks":"Tasks","toolsUsed":"Tools Used","totalTokens":"Total Tokens","truncated":"Truncated","updatedField":"Updated Field","zaps":"Zaps"},"ai_request_timeout":"The AI took too long to respond. Please try again.","step_copy":{"timing":{"not_connected":"Not connected","at_anchor":"At {anchor}","on_trigger":"When the trigger fires","before_anchor":"{amount} before {anchor}","after_anchor":"{amount} after {anchor}","on_action":"When {parent} {edge, select, failure {fails} other {succeeds}}","after_action":"{amount} after {parent} {edge, select, failure {fails} other {succeeds}}","on_branch":"When {parent} is {path, select, false {No} other {Yes}}","after_branch":"{amount} after {parent} is {path, select, false {No} other {Yes}}","on_loop":"{path, select, done {When {parent} is done} other {For each item of {parent}}}","after_loop":"{path, select, done {{amount} after {parent} is done} other {{amount} after each item of {parent}}}"},"lead":{"any":"Any booking lead time","at_least":"Booked at least {count, plural, one {# day} other {# days}} ahead","less_than":"Booked less than {count, plural, one {# day} other {# days}} ahead"},"due":{"at":"Due at {anchor}","before":"Due {amount} before {anchor}","after":"Due {amount} after {anchor}","at_run":"Due when this step runs","before_run":"Due {amount} before this step runs","after_run":"Due {amount} after this step runs"},"time_update":{"set_to":"Set to {time}","set_custom":"Set to a custom value","from_upsell":"From {upsell}","from_an_upsell":"From an upsell"},"filters":"{count, plural, one {# filter} other {# filters}}","condition":{"expression":"{left} {operator} {right}","expression_unary":"{left} {operator}","with_more":"{condition} +{count}"},"loop_max":"Up to {count, plural, one {# item} other {# items}}","issue_missing":"Missing: {items}"},"list":{"new_playbook":"New playbook","no_folder":"No folder","group_by":"Group by","group_none":"None","group_folder":"Folder","group_count":"{count, plural, one {# playbook} other {# playbooks}}","updated_by_tooltip":"Updated {updated} by {name} · Created {created}","updated_tooltip":"Updated {updated} · Created {created}","empty_filtered_description":"Try a different search or filter.","views":{"label":"Quick views","all":"All","published":"Published","draft_changes":"Draft changes","drafts":"Drafts","needs_attention":"Needs attention"},"checks":{"header_live":"Live","header_on":"On","header_scope":"Scope","header_setup":"Setup","hint":"Click to open in the editor","live_published":"Live: Published","live_changes":"Live: Draft changes","live_changes_detail":"The live version is older than your draft. Publish to update it.","live_never":"Live: Never published","live_never_detail":"Nothing runs until you publish.","on_active":"On: Active","on_inactive":"On: Inactive","on_inactive_detail":"Paused. Published steps won't run.","scope_count":"Runs on: {count, plural, one {# property} other {# properties}}","scope_none":"Runs on: No properties","scope_none_detail":"A playbook with no groups, tags or properties runs on no properties.","setup_ok":"Setup: All steps configured","setup_blocking":"Setup: {count, plural, one {# issue blocks} other {# issues block}} publishing","setup_advisory":"{count, plural, one {# suggestion} other {# suggestions}}","setup_unknown":"Setup: Not checked yet","setup_unknown_detail":"Open the playbook to check its steps."},"row":{"duplicating":"Duplicating…","duplicated_toast":"Playbook duplicated","duplicate_failed_toast":"Couldn't duplicate playbook","unpublished_toast":"Playbook unpublished","unpublish_failed_toast":"Couldn't unpublish playbook","delete_confirm_title":"Delete playbook?"}},"new_playbook":{"back":"Back to playbooks","title_label":"Playbook name","draft":"Draft","folder_label":"Folder","no_folder":"No folder","no_properties":"No properties","no_properties_hint":"Choose where this playbook runs once you continue editing.","not_saved":"Not saved yet. Nothing is created until you continue editing.","discard":"Discard","start_over":"Start over","continue_editing":"Continue editing","heading":"How would you like to start?","subheading":"Every playbook begins with a trigger. Pick one yourself, start from a template, or describe it and let AI draft the steps.","modes_label":"Starting point","build_subtitle":"Choose a trigger and add steps yourself","try":"Try","suggestions":{"review":"Ask for a review 2 days after check-out if the stay was 2+ nights","battery":"Alert #maintenance when a lock battery is low","checkout":"Send check-out instructions the evening before"},"footnote":"Nothing is saved until you continue editing. Leaving now discards this draft.","trigger_timed":"Supports before / after timing","trigger_instant":"Fires when it happens","use_trigger":"Use trigger","use_trigger_named":"Use the {trigger} trigger","origin_template":"From template “{name}”","origin_generated":"Generated from “{prompt}”","origin_trigger":"Started from the “{trigger}” trigger","next_runs_on":"Next: set Runs on","add_first_step":"Add first step","preview_label":"Playbook preview","discard_title":"Discard this draft?","discard_description":"Your conversation and draft will be lost. Nothing has been saved yet.","keep_editing":"Keep editing","template_preview_error":"Couldn't open this template. Please try again.","trigger_scheduled":"Fires on a repeating schedule you set"},"toolbar":{"inactive":"Inactive","save_saving":"Saving…","save_unsaved":"Unsaved changes","save_draft_saved":"Draft saved","save_all_published":"All changes published","issue_count":"{count, plural, one {# issue} other {# issues}}","test_run":"Test run","test_start_from":"Start from","opal":"Ask Opal","more_actions":"More actions","apply_existing_unavailable":"Publish the playbook and turn it on first","publish_changes":"Publish changes","publish_options":"Publish options","review_and_publish":"Review & publish…","duplicate_name":"{name} (copy)","ready_count":"{ready} of {total} ready"},"runs_on":{"chip_label":"Runs on","chip_empty":"Runs on no properties","count":"{count, plural, one {# property} other {# properties}}","title":"Runs on","no_properties":"No properties","intro":"Runs at any property that matches <b>at least one</b> of these rules.","empty_title":"Not running anywhere yet","empty_body":"A playbook with no groups, tags or properties runs on no properties. Add at least one rule before you publish.","or":"OR","rule_group":"In property group","rule_tag":"Has tag","rule_property":"Is one of these properties","add_group":"Group","add_tag":"Tag","add_property":"Property","add_rule":"Add rule","remove_rule":"Remove rule: {rule}","remove_value":"Remove {name}","loading":"Loading…","no_matches":"No matches","step_filters_title":"Steps that also filter by property","step_filters_body":"These narrow a step within the properties above. They never add properties.","unique_count":"{count, plural, one {# unique property} other {# unique properties}}","overlap":"{count, plural, one {# matches more than one rule and is counted once} other {# match more than one rule and are counted once}}","view_list":"View list","saved_note":"Saved immediately. Scope isn't part of the draft, so it also applies to the live version.","last_scope_refused":"An active playbook must run on at least one property. Add another rule first, or turn the playbook off.","list_title":"Runs on {count, plural, one {# property} other {# properties}}","search_properties":"Search properties","list_col_property":"Property","list_col_matched":"Matched by","matched_direct":"Direct","list_empty":"No properties match your search.","test_hint":"Only properties this playbook runs on are listed.","test_blocked":"This playbook runs on no properties, so there's nothing to test against. Set Runs on first."},"publish_review":{"title":"Review & publish","description":"The live playbook keeps running the previously published version until you publish.","triggers":"{count, plural, one {# trigger} other {# triggers}}","no_trigger":"No trigger","no_trigger_detail":"Add a trigger so the playbook has something to start from.","steps_ready":"{count, plural, =0 {No steps yet} one {# step ready} other {All # steps ready}}","steps_ready_detail":"Ready to run","issues_block":"{count, plural, one {# issue blocks publishing} other {# issues block publishing}}","issues_block_detail":"Fix them before publishing","fix":"Fix","change":"Change","choose":"Choose","no_scope_body":"Nothing will run until you choose where. Add a property group, tag or individual properties.","apply_existing_label":"Also apply to existing reservations","apply_existing_hint":"Schedules this playbook's check-in and check-out steps for reservations that already exist on its properties. Booking and confirmation steps are not replayed.","cancel":"Cancel"},"step_types":{"common":{"preview":"Preview"},"email":{"subject":"Subject:"},"slack":{"channel_info":"Missing a channel? Invite the SuiteOp bot to it in Slack, then sync channels from the Slack integration settings.","format_text":"Plain text","format_blocks":"Block Kit JSON"},"http":{"send_test":"Send test request"},"task":{"assign_to":"Assign to","due":"Due","due_amount":"Due offset","due_unit":"Due offset unit","due_direction":"Before or after","anchor":{"none":"No due date","run":"When this step runs","check_in":"Check-in","check_out_date":"Check-out","confirmation_date":"Booking confirmation","task_complete":"Task completion"},"anchor_needs_reservation":"needs a trigger with a reservation","anchor_needs_task_complete":"needs the \"Task is complete\" trigger","as_subtask":"Add as a subtask of the triggering task","as_subtask_hint":"The new task is grouped under the task that started this workflow — or under that task's parent when it is itself a subtask.","as_subtask_needs_task_trigger":"Only available when the workflow starts from a task trigger","due_preview":{"run":"e.g. due {due} for a step that runs {anchor}","check_in":"e.g. due {due} for a {anchor} check-in","check_out_date":"e.g. due {due} for a {anchor} check-out","confirmation_date":"e.g. due {due} for a booking confirmed {anchor}","task_complete":"e.g. due {due} for a task completed {anchor}"},"more_options":"More options","est_minutes":"{count} min"},"check_time":{"new_check_in":"New check-in time","new_check_out":"New check-out time","mode_fixed":"Fixed time","mode_upsell":"From upsell","invalid":"Enter a time like 14:00. Only a time of day is accepted.","upsell_required":"Pick the upsell to read the time from.","field_required":"Pick the upsell's time field.","preview_check_in":"e.g. check-in becomes {date} (property time)","preview_check_out":"e.g. check-out becomes {date} (property time)","upsell":"Upsell","select_upsell":"Select an upsell","no_upsells":"No upsells yet.","no_eligible_upsells":"None of these upsells can set a time yet. In a Purchase or Request upsell, choose Price By Option and set Option format to Time.","time_field":"Time field","select_time_field":"Select a time field","reason_not_priced":"not priced by option","reason_no_time_field":"no time field","reason_not_time":"not a time","option_unavailable":"{title} <muted>— {reason}</muted>","guest_can_pick":"Guest can pick","no_choices":"This field has no options yet.","guest_picks_check_in":"Guest picks {time} → check-in becomes {date}","guest_picks_check_out":"Guest picks {time} → check-out becomes {date}","auto_filter":"Upsell item is <b>{upsell}</b>","automatic":"Automatic","unknown_upsell":"an unavailable upsell","also_available":"Also available in messages as <pill></pill>"},"add_label":{"contact_labels":"Contact labels","reservation_labels":"Reservation labels","select_labels":"Select labels…","contact_help":"Follows the person across every booking.","reservation_help":"This booking only.","required":"Choose at least one label."},"find_tasks":{"hint":"Finds open tasks that match these filters, for later steps to list or count.","scope_hint":"Searches only the properties this playbook runs on (Runs on). Tasks with no property are left out.","departments":"Departments","any_department":"Any department","templates":"Task templates","any_template":"Any template","statuses":"Statuses","assignee":"Assigned to","assignee_modes":{"anyone":"Anyone","unassigned":"Unassigned","members":"Specific members"},"pick_members":"Select members…","due":"Due","due_windows":{"any":"Any due date","overdue":"Overdue","due_today":"Due today","due_within_days":"Due within"},"days":"days","limit":"Maximum tasks","stop_if_empty":"Stop the run when no tasks match"}},"panel":{"kicker_trigger":"Trigger · {trigger}","kicker_condition":"Condition","kicker_loop":"Loop over items","name_label":"Step name","header":{"more":"Step actions"},"tabs":{"label":"Panel view","configure":"Configure","last_test":"Last test"},"footer":{"unsaved":"Unsaved changes","saved":"No unsaved changes","discard":"Discard","cancel":"Cancel","save_step":"Save step","add_step":"Add step","set_up_later":"Set up later","continue":"Continue","next_field":"Next: {field}"},"issues":{"needs_attention":"Needs attention","blocking_count":"{count, plural, one {# thing} other {# things}} to fix before publishing","suggestions":"{count, plural, one {# suggestion} other {# suggestions}}","test_locked_title":"Editing paused during test","test_locked_body":"Editing is paused while a test result is on the canvas. Dismiss or clear the test to keep editing."},"summary":{"trigger":"Starts at <b>{trigger}</b> on the properties this playbook runs on.","trigger_lead":"Starts at <b>{trigger}</b> for stays booked <b>{mode, select, less_than {less than} other {at least}} {count, plural, one {# day} other {# days}}</b> ahead.","branch_empty":"Add a condition to decide which path runs.","branch":"Takes <b>Yes</b> when {count, plural, =1 {<b>the condition</b> matches} other {<b>{logic, select, or {any of {count} conditions} other {all {count} conditions}}</b> match}}, otherwise <b>No</b>.","loop":"Runs the loop body once for each item in <b>{source}</b>, up to <b>{max}</b> times.","loop_no_source":"Runs the loop body once for each item in a source list, up to <b>{max}</b> times.","email":"Sends {template, select, none {an email} other {<b>{template}</b>}} to <b>{recipient, select, guest {the guest} task_assignee {the task assignee} task_assignee_managers {the task assignee’s managers} custom {{address}} user {a team member} other {a recipient}}</b>, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","slack":"Posts to <b>{target, select, user_dm {a teammate} other {a Slack channel}}</b>, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","notification":"Sends a notification, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","task":"Creates a task{assign, select, auto_assignment {, <b>auto-assigned</b>} unassigned {, <b>left unassigned</b>} user_selection {, {assignee, select, none {assigned to <b>a specific user</b>} other {assigned to <b>{assignee}</b>}}} user_list {, {assignee, select, none {assigned to <b>a specific user</b>} other {assigned to <b>{assignee}</b>}}} user_group {, {assignee, select, none {assigned to <b>a user group</b>} other {assigned to <b>{assignee}</b>}}} org_connection {, {assignee, select, none {assigned to <b>a connected company</b>} other {assigned to <b>{assignee}</b>}}} department_users {, {department, select, none {assigned to <b>a department</b>} other {assigned to <b>{department}</b>}}} department_managers {, {department, select, none {for <b>department managers</b>} other {for <b>{department}</b> managers}}} property_default {, assigned to <b>the property’s preferred assignee</b>} guest_tag_match {, assigned to <b>a Guest care match</b>} other {}}, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","http":"Sends a <b>{method}</b> request to {url, select, none {an endpoint} other {<b>{url}</b>}}, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","time_fixed":"Sets {which, select, check_out {check-out} other {check-in}} to {time, select, none {a time} other {<b>{time}</b>}}, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","time_upsell":"Sets {which, select, check_out {check-out} other {check-in}} to the time the guest picked in {upsell, select, none {an upsell} other {<b>{upsell}</b>}}, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}.","generic":"Runs <b>{action}</b>, <b>{timing}</b>{filters, select, none {} other {, only if <b>{filters}</b>}}."},"when":{"label":"When","tip":"When this step runs, counted from what it is connected to.","amount_label":"Amount","immediately":"Immediately","after_delay":"After a delay","example":"If {anchor} is {base}, this runs {result}.","counted_from_trigger":"Counted from the moment the trigger fires.","after_parent":"After <b>{parent}</b>","edge_label":"Path this step is connected to","succeeds":"Succeeds","fails":"Fails","after_path":"After <b>{parent} → {path}</b>","path_yes":"Yes","path_no":"No","path_each":"Each item","path_done":"When done","orphan":"This step isn’t connected to a trigger or another step yet, so it never runs. Connect it on the canvas."},"outputs":{"label":"Outputs","tip":"What later steps can use from this one — pick them from the variable list."},"only_if":{"label":"Only if","narrows":"Narrows within Runs on","narrows_count":"Narrows within Runs on · {count, plural, one {# property} other {# properties}}","narrows_tip":"To add properties, change Runs on for the whole playbook.","narrows_hint":"Narrows Runs on"},"trigger":{"event":"Event","timing":"Timing","timing_dated":"Before or after {anchor}","timing_event":"When it happens","provides":"Provides {contexts} data.","lead_time":"Booking lead time","steps_here":"Steps that start here ({count})","schedule":{"title":"Schedule","hint":"The playbook runs at these times in the chosen time zone. A monthly run set for a day a month lacks runs on its last day.","hour":"Time","weekdays":"Days","frequency":"Repeats","frequency_options":{"weekly":"On chosen days","every_n_hours":"Every few hours","every_n_days":"Every few days","monthly":"Monthly"},"interval":"Interval","every_hours":"{count, plural, one {Every hour} other {Every # hours}}","every_days":"{count, plural, one {Every day} other {Every # days}}","every_months":"{count, plural, one {Every month} other {Every # months}}","hour_start":"Starting at","month_day":"Day of the month","start_date":"Starting on","time_zone":"Time zone","time_zone_search":"Search time zones…","time_zone_empty":"No time zone found.","time_zone_error":"Couldn't read your organization's time zone. Please try again."}},"branch":{"paths":"Paths","step_count":"{count, plural, one {# step} other {# steps}}","toggle_logic":"Switch between AND and OR"},"loop":{"available":"Available in loop body"},"add":{"title":"Add a step","subtitle":"After {source}{handle, select, none {} other { · {handle}}}{child, select, none {} other { · inserts before {child}}}","subtitle_root":"Starts a new path on the canvas","kind_label":"Step kind","tool_count":"{count, plural, one {# action} other {# actions}}"},"close":"Close"},"variable_picker":{"footer_tip":"Type '{{' in any text field to open this list.","pill_unknown":"Unknown variable — it would be empty. Pick one from the variable list.","upsell_time_fallback":"Chosen time","upsell_time_label":"{upsell} → {field}"},"slot":{"suggested_triggers":"Suggested triggers","other":"Other","do_something":"Do something","do_something_hint":"Message, task, device…","only_if":"Only continue if…","only_if_hint":"Stop unless it matches","split":"Split","split_hint":"Yes / No","repeat":"Repeat","repeat_hint":"Per item in a list","wait":"Wait","wait_hint":"For a time or event","handle_failure":"Handle a failure","handle_failure_hint":"If an action fails","continue_with":"Continue with","shape_the_flow":"Shape the flow","common_after":"Common after {trigger}","placeholder_next":"What happens next?","placeholder_failure":"What happens if it fails?","soon":"Soon","add":"Add","cancel":"Cancel"},"card":{"brings":"Brings {contexts}","brings_nothing":"Brings nothing specific","needs_setup":"Still needed: {field}","needs_more":"Still needed: {field} +{count}","ready":"Ready","needs_setup_status":"Needs setup","split_summary_empty":"Choose when to split"}},"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_supplies":"{count, plural, one {# supply} other {# supplies}}","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","supplies_tier":"Supplies","supplies_import_hint":"Imported as supplies on this item, or on the room if the item isn't on the property"},"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","discrepancies":"Listing mismatches"},"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","positive":"Positive","missing_items":"Missing items","safety":"Safety","noise":"Noise","temperature":"Temperature","communication":"Communication","accuracy":"Listing accuracy"},"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","cache_read":"Cache Read","cache_write":"Cache Write"},"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).","recently_analyzed":"X-Ray already ran for this property recently. It can run again on {date}."}}}