{"sudoReauth":{"title":"Confirm it is you","body":"This action needs a fresh proof of identity. Type your password to unlock it for the next 5 minutes.","passwordLabel":"Your password","confirm":"Confirm","working":"Checking…","cancel":"Cancel","totpAlternative":"Prefer your authenticator? A code verified in the last 5 minutes works too.","errorInvalid":"That password is not right.","errorNoPassword":"This account signs in with Microsoft and has no password. Verify an authenticator code instead.","errorUnauthenticated":"Your session expired. Sign in again.","errorMfaRequired":"This account uses two-step verification, so a password alone is not enough here. Verify an authenticator code instead.","useCode":"Use an authenticator or backup code instead","usePassword":"Use my password instead","codeLabel":"Authenticator or backup code","codeBody":"Enter the 6-digit code from your authenticator app, or one of your backup codes, to unlock this for the next 5 minutes.","errorCodeInvalid":"That code did not verify. Try the current code from your app.","errorCodeReplayed":"Wait for the next code from your app.","errorNoTotp":"This account has no authenticator set up yet. Turn on two-step verification in your security settings.","errorUnavailable":"Verification is temporarily unavailable. Try again in a minute."},"dualControl":{"tabOpen":"Open","tabHistory":"History","emptyOpen":"No open requests. Sensitive actions (removing user access, suspending accounts, arming live removal) land here for two-person sign-off.","emptyHistory":"Nothing has been executed or withdrawn yet.","filedBy":"Filed by","nominatedApprover":"Second approver","withdrawnBy":"Withdrawn by","reason":"Reason","launchInProgress":"Launch in progress…","launchAbandoned":"The launch did not finish — it can be launched again or withdrawn.","keyTurnedBy":"turned by {email}","keyTurn":"insert & turn","keyNeedsCapability":"needs the identity.lock capability","keyNotNeeded":"not needed — already armed","keyExecuted":"already executed","keyCancelled":"request withdrawn","keyOwnerOnly":"owner only","keySamePersonTwice":"you turned the other key — a second person must turn this one","keySelfInitiator":"you filed this request — two other people must turn the keys","keySelfTarget":"this request is about your account — you cannot approve it","execNeedsKeys":"Every required key must be turned first","execNeedsCapability":"Requires the identity.lock capability","execSelfTarget":"You cannot execute an action that targets your own account","execCancelled":"This request was withdrawn","execInProgress":"A launch is already in progress","execDone":"Already executed","execCover":"Flip the safety cover first","execGo":"Execute","withdraw":"Withdraw request","withdrawTitle":"Withdraw this request?","withdrawBody":"It will not run. It stays in History and in the audit log, and the people involved are told.","withdrawReasonPlaceholder":"Reason (optional)","withdrawConfirm":"Yes, withdraw","withdrawKeep":"Keep it","withdrawWorking":"Withdrawing…","withdrawDone":"Request withdrawn.","withdrawNotOpen":"This request is already closed.","withdrawInProgress":"This request is being executed right now.","withdrawSelfTarget":"You cannot withdraw a request that targets your own account.","withdrawNotAllowed":"Only the person who filed it or an owner can withdraw it.","filed":"Request filed — turn your key, then a second person turns the other.","keyTurned":"{key} key turned.","keyTurnedArmed":"{key} key turned — ARMED.","executed":"Executed ({status}).","offboardClientMode":"Central One manages identity: this suspends the Redsis One account, signs the person out everywhere, and reports them to Central One, which removes them from Microsoft 365, UniFi and every other platform. Nothing is reported until live offboarding is armed.","resultCentralOne":"Central One","resultDelegated":"handed to Central One","resultUserDeleted":"account soft-deleted: suspended, signed out, personal data anonymized"},"offboardingChecklist":{"title":"Offboarding Checklist","selfWarning":"You cannot offboard yourself.","introEmpty":"No offboarding checklists yet. Start a preview to see what removal would cover.","checklistCount":{"one":"{n} checklist for {name}","other":"{n} checklists for {name}"},"newPreview":"+ New preview","generatingPreview":"Generating preview…","emptyBefore":"No checklists yet. Click","emptyAfter":"to see what offboarding {name} would cover across all linked platforms.","complete":"✓ Offboarding complete","progress":"{done}/{total} steps done","progressPending":"{n} pending","statusDone":"✓ Done","statusFailed":"✗ Failed","statusSkipped":"— Skipped","statusPending":"• Pending","statusSimulated":"~ Simulated","statusDelegated":"→ Handed to Central One","kindAuto":"automated step","kindManual":"manual step","notePlaceholder":"Optional note","save":"Save","cancel":"Cancel","markDone":"Mark done","skip":"Skip","requestRemoval":"Request removal","requestBody":"This files a request in Dual-Control to remove {name} everywhere. Nothing is removed until two people turn their keys there, and one of them must be the Owner. You may turn one of the keys yourself.","requestBodyRun":"When the request runs it suspends the Redsis One account, signs the person out everywhere and removes them from every linked platform. Until live offboarding is armed it only simulates.","fileRequest":"File the request","filing":"Filing…","reqPending":"Removal request waiting for keys: {turned} of {required} turned.","reqOwnerKeyNeeded":"The Owner key is still needed.","reqArmed":"Removal request authorized. It can be executed in Dual-Control.","reqExecuting":"The removal is running.","reqExecutedLive":"The removal ran on {date}.","reqExecutedDryRun":"The request ran as a dry run on {date}, so nothing was removed. File a new request once live offboarding is armed.","reqFailed":"The removal request failed: {reason}","reqFailedNoReason":"The removal request failed. Re-run or withdraw it in Dual-Control.","reqCancelled":"The removal request was withdrawn.","reqOpen":"Open in Dual-Control →","reqChecklistBehind":"The removal ran, but this checklist was not updated with it. The request holds the full report."},"mobileone":{"tabAyva":"Ayva","tabWork":"Work","tabBoards":"Boards","tabAlerts":"Alerts","tabSearch":"Search","tabChats":"Chats","tabFleet":"Fleet","tabInbox":"Inbox","searchLabel":"Search","boardsLink":"Boards","comingSoonChatsTitle":"Company Chat is coming","comingSoonChatsSub":"Channels, groups and direct messages with your team — landing in an upcoming release.","comingSoonFleetTitle":"Fleet is coming","comingSoonFleetSub":"Your operations command center — nodes, jobs, AI accounts and uptime — landing in an upcoming release.","workSynced":"RedsisOne · synced","segMyWork":"My Work","segMyViews":"My Views","filterOpen":"Open","filterReview":"Review","filterDone":"Done","filterAll":"All","dueToday":"due today","dueOverdue":"overdue","workSyncedFooter":"Synced from RedsisOne · My Work","viewsComingTitle":"Saved views are coming","viewsComingSub":"Your RedsisOne · My Views — kanban, chart and table views — will sync here. Pin your favorites first.","inboxSub":"Decisions & alerts","segForYou":"For you","segAnnouncements":"Announcements","filterUnread":"Unread","filterMentions":"Mentions","markAllRead":"Mark all read","allCaughtUp":"You're all caught up","notifDecision":"decision","notifMention":"mention","notifAlert":"alert","notifDigest":"digest","notifInfo":"info","announcementsComingTitle":"Announcements are coming","announcementsComingSub":"Company announcements — with read receipts and comments — will show here. For now, find them in the web app.","navLabel":"Mobile navigation","unreadAria":"{n} unread","unavailable":"This app isn’t available for your account.","ayvaModuleOff":"Ayva is turned off for this workspace.","ayvaAccountOff":"Ayva isn’t enabled for your account.","history":"History","newChat":"New chat","historyTitle":"Chat history","noChats":"No chats yet.","untitledChat":"Untitled chat","now":"now","myWorkTitle":"My Work","itemsCount":"{n} items","myWorkEmpty":"Nothing is assigned to you right now.","boardsTitle":"Boards","boardsEmpty":"No boards yet.","boardDetailEmpty":"This board has no items yet.","notificationsTitle":"Notifications","notificationsEmpty":"You’re all caught up.","approvalsTitle":"Approvals","approvalsEmpty":"Nothing is awaiting your approval.","searchTitle":"Search","searchOff":"Search is currently unavailable.","searchPrompt":"Search boards, items, people and documents.","searchNoResults":"No results found.","picking":"Picking","pickNotFound":"Pick not found.","nowPicking":"Now picking","pickNeed":"Need","pickSerialNumber":"Serial #","pickAllLinesDone":"All lines picked","pickScanSerial":"Scan or type serial","pickScanBin":"Scan or type bin (BIN#### / RAK####)","pickUndoScan":"Undo scan"},"labelStations":{"warehouse":"Warehouse","noWarehouse":"No warehouse","station":"Station","stationPlaceholder":"Station (e.g. Dock 2)","save":"Save place","saved":"Saved","failed":"Not saved","pdfOnDevice":"PDF on this device","thisWarehouse":"This warehouse","otherPrinters":"Other printers"},"inventoryLabels":{"printPart":"Print part labels","printThese":"Print labels for these bins","lane":"Labels","title":"Print labels","description":"Labels for parts, units, bins and handovers. The preview is drawn here; nothing is sent outside Redsis One.","modePart":"A part","modeUnits":"Units","modeBins":"Bins","modeTransfer":"Handover receipt","pn":"Part number","pnPlaceholder":"Scan or type the part number","serials":"Serial numbers","serialsHint":"Scan each serial. One per line.","binsCodes":"These bins","binsRack":"A whole rack","binsZone":"A zone","codes":"Bin codes","codesHint":"Scan or type each bin. One per line.","rackCode":"Rack code","zone":"Zone","chooseZone":"Choose a zone","transferNumber":"Transfer number","design":"Label design","designAuto":"Recommended for this label","printer":"Printer","copies":"Copies of each","preview":"Preview","print":"Print","labelsCount":"{n} labels","showingFirst":"Showing the first {n}.","notFound":"Not found: {list}","sentTo":"Sent to the printer.","pdfReady":"The labels opened as a PDF. Print them from there.","openPdf":"Open the PDF again","warnings":"{n} barcodes could not be drawn. Check the data.","err_no_access":"You cannot print labels. Ask for the labels print permission.","err_nothing_yet":"Add something to label first.","err_no_template":"That label design is not available.","err_too_many":"That is more than 500 labels. Print in smaller batches.","err_chooseWarehouseFirst":"Pick the warehouse first.","err_not_a_rack":"That code is not a rack.","err_connector_not_configured":"Network printers are not connected yet. Choose PDF on this device.","err_printer_not_network_ip":"That printer cannot be reached from Redsis One.","err_printer_not_found":"That printer was not found.","err_failed":"Something went wrong. Nothing was printed."},"inventoryTasks":{"tasks":{"receive":{"name":"Receive","description":"Something arrived. Scan it in and put it in a bin."},"putaway":{"name":"Put away","description":"Move received stock from the dock to its bin."},"move":{"name":"Move","description":"Move stock from one bin to another."},"pick":{"name":"Pick","description":"Collect the parts on a pick list or sales order."},"count":{"name":"Count","description":"Count what is in a bin and report any difference."},"relabel":{"name":"Relabel","description":"Print a new label for a part, unit or bin."},"return_in":{"name":"Return in","description":"A part came back. Check it and put it away."},"map_bins":{"name":"Map bins","description":"Scan a rack, then each of its bins in order."},"opening_count":{"name":"Opening count","description":"Count a zone before it moves to Redsis One."}},"steps":{"scan_part":"Scan the part number or the unit label.","scan_serials":"Scan every serial number. Tap Done when finished.","enter_qty":"How many? Type the quantity.","choose_condition":"What condition is it in?","print_labels":"Print the labels and stick them on.","scan_dropoff_bin":"Scan the bin where you are leaving it.","confirm":"Check everything and confirm.","scan_item":"Scan the part or unit.","scan_target_bin":"Scan the bin you are putting it in.","scan_from_bin":"Scan the bin you are taking it from.","scan_pick":"Scan the pick list or sales order.","scan_pick_bin":"Go to the bin shown and scan it.","more_lines":"Anything else on this list?","scan_count_bin":"Scan the bin you are counting.","more_items":"Anything else to count?","scan_anything":"Scan what needs a new label.","take_photo":"Take a photo of the part (optional).","scan_rack":"Scan the rack label.","scan_bins_in_order":"Scan each bin on this rack, top-left first. Tap Done when finished.","scan_pick_unit":"Scan the serial number of the part you picked."},"choices":{"more":"Another item","next_bin":"Next bin","done":"All done","new":"New","good":"Good","used":"Used","defective":"Defective","in_repair":"In repair","scrap":"Scrap"},"errors":{"empty":"Nothing was scanned. Try again.","invalid_scan":"That label could not be read.","wrong_scan_kind":"That is not what this step needs.","not_a_number":"Type a whole number.","out_of_range":"That number is out of range.","unknown_choice":"Pick one of the options.","not_skippable":"This step cannot be skipped.","nothing_yet":"Scan at least one first.","wrong_input":"This step needs something else.","task_done":"This task is already finished.","unknown_part":"That part number is not known. Check the label or ask for it to be added.","unknown_bin":"That bin does not exist in this warehouse.","other_warehouse":"That bin belongs to another warehouse.","unit_unknown":"That serial number is not in the system.","unit_elsewhere":"That unit is recorded somewhere else.","unit_exists":"That serial number is already in stock.","not_in_bin":"That is not in the bin you scanned.","not_enough":"There is not enough in that bin.","same_bin":"The new bin is the same as the old one.","unknown_document":"That document was not found.","not_on_pick":"That part is not on this pick.","no_access":"You cannot do this in this warehouse.","disabled":"Guided tasks are switched off.","stale":"Someone else changed this task. It was reloaded.","failed":"Something went wrong. Nothing was changed.","scan_serial":"This part has serial numbers. Scan the serial label, not the part number.","no_printer":"No label printer is set up for this task. Set one in Set up, Tasks.","no_template":"No label design is set up for this task. Pick one in Set up, Tasks.","print_failed":"The label did not print. Check the printer and try again.","already_picked":"That unit is already on another pick.","line_full":"That line already has everything it needs.","not_in_stock":"That unit is not in stock here.","not_a_rack":"Scan a rack label first.","not_a_bin":"That is a rack, not a bin.","pick_closed":"This pick is already closed.","not_returnable":"That unit is not waiting to come back."},"labels":{"part":"Part","unit":"Serial","bin":"Bin","pick":"Pick list","count":"Quantity","condition":"Condition"},"ui":{"start":"Start","resume":"Resume","abandon":"Stop this task","undo":"Undo","skip":"Skip","done":"Done","confirm":"Confirm","next":"Next","scanHere":"Scan or type here","useCamera":"Use camera","stepOf":"Step {n} of {total}","suggested":"Suggested: {code}","scannedCount":"{n} scanned","openTasks":"Your open tasks","noOpenTasks":"No open tasks.","completed":"Done. Stock is updated.","chooseTask":"What are you doing?","warehouse":"Warehouse","print":"Print","photo":"Take photo","summary":"Summary","sentForApproval":"The difference was sent for approval.","startedAt":"Started {time}","settingsTitle":"Task settings","settingsDescription":"Choose, per warehouse, which optional steps are required or hidden, and where labels print.","stepRequired":"Required","stepHidden":"Hidden","alwaysRequired":"Always required","printer":"Label printer","labelUnit":"Unit label design","labelBin":"Bin label design","labelPart":"Part label design","none":"None","save":"Save","saved":"Saved","chooseWarehouse":"Choose a warehouse","noWarehouses":"You cannot run tasks in any warehouse yet. Ask an administrator for access.","adjustmentApplied":"The difference was corrected in stock.","adjustmentPending":"The difference was sent for approval.","adjustmentDraft":"The difference was saved as a draft. This warehouse needs an approval rule before it can be approved.","adjustmentNone":"Everything matched.","movementsRecorded":"{n} stock movements recorded.","startAnother":"Start another","backToTasks":"Back to tasks","mobileEntry":"Inventory tasks","chooseWarehouseFirst":"Pick the warehouse first.","have":"This bin holds {n}.","stopConfirm":"Stop this task? Nothing it scanned changes stock.","resumeHint":"Pick up where you stopped.","settingsSaveFailed":"The settings were not saved.","cameraScan":"Scan with camera","cameraScanning":"Scanning…","cameraClose":"Close","cameraError":"The camera is not available. Type or scan with the scanner instead.","cameraTypeInstead":"Type it instead.","progressLabel":"Task progress","answersTitle":"So far","runningIn":"In {code}","stopped":"This task was stopped.","openPdf":"Open the labels (PDF) to print them."}},"inventorySearch":{"allSites":"All sites","bySite":"By site","siteFilter":"Site filter","filterBySite":"Filter by site","modes":{"all":"All words","any":"Any word","whole":"Whole word"},"modeHints":{"all":"every word must appear","any":"any word may appear","whole":"exact whole-word match"},"notConnected":"Part search isn’t available yet.","notConnectedHint":"Let your administrator know.","technicalDetail":"Technical detail (administrators only)","cart":"Cart","placeholder":"Search part number, description, brand, serial…","searchAria":"Product search","clear":"Clear","fields":"Fields ({n}/{total})","search":"Search","bulk":"Bulk","emptyHint":"Search the catalog by part number, description, brand, serial, location, or condition.","qtyMasked":"Quantities are hidden for your access level — you can see which parts exist, not how many.","colPartNumber":"Part number","colDescription":"Description","colBrand":"Brand","colQty":"Qty","colAdd":"Add","noMatch":"No parts match “{q}”.","pageOne":"{n} part on page {page}","pageMany":"{n} parts on page {page}","prev":"Prev","next":"Next","addAria":"Add {pn} to cart","add":"Add","added":"Added","searchFailed":"Search failed ({status})","networkError":"Network error — check your connection and try again","bulkTitle":"Bulk lookup","bulkHelp":"Paste part numbers (one per line, or comma/tab separated). Returns total qty + locations per PN, across every site.","lookUp":"Look up","lookingUp":"Looking up…","lookupFailed":"Lookup failed ({status})","colInput":"Input","colTotalQty":"Total qty","colLocations":"Locations","notFound":"not found"},"ebay":{"eyebrow":"Online Sales Hub / eBay","common":{"save":"Save","saving":"Saving…","cancel":"Cancel","edit":"Edit","delete":"Delete","deleteConfirm":"Delete?","yes":"Yes","no":"No","close":"Close","unknownError":"Unknown error","failed":"Failed","couldNotSave":"Could not save","couldNotDelete":"Could not delete","couldNotUpdate":"Could not update","couldNotCreate":"Could not create","notConnected":"eBay account not connected","tokenRefreshFailed":"Could not refresh the eBay token","planNotAvailable":"This feature may not be available on your eBay plan.","apiError":"eBay API error — {error}. Check that the account is still connected at","apiErrorLink":"eBay settings","unknown":"Unknown","unknownBuyer":"Unknown buyer","buyer":"Buyer","nameAndBodyRequired":"Name and body are required"},"nav":{"sectionsAria":"eBay sections","home":"Home","setup":"Setup","listingStudio":"Listing Studio","orders":"Orders","inventory":"Inventory","inventorySync":"Inventory Sync","locations":"Locations","finances":"Finances","messages":"Messages","marketing":"Marketing","store":"Store","shipping":"Shipping","paymentPolicies":"Payment Policies","returnPolicies":"Return Policies","account":"Account","sales":"Sales","analytics":"Analytics","disputes":"Disputes","feedback":"Feedback"},"home":{"title":"eBay Integration","description":"Connect your eBay business seller account to manage orders, inventory, finances, and messages from within Redsis One.","connectedBanner":"eBay account connected successfully. You can now use the eBay portal.","sellerAccount":"Seller Account","sellerAccountDesc":"OAuth 2.0 authorization for your eBay business account","connected":"Connected","notConnected":"Not connected","notConfigured":"eBay is not configured yet. Set the required credentials right here in Redsis One — no hosting dashboard, no redeploy. The guided checklist walks you through each step.","openGuidedSetup":"Open guided setup","connectedOn":"Connected on","tokenExpires":"Token expires","refreshExpires":"Refresh expires","reauthorize":"Re-authorize","setup":"Setup","connectIntro":"Click below to authorize Redsis One to access your eBay seller account. You will be redirected to eBay to approve the connection.","connectButton":"Connect eBay Account","cardOrders":"Orders","cardOrdersDesc":"Manage open and fulfilled orders, mark as shipped","cardInventory":"Inventory","cardInventoryDesc":"Create and manage listings, publish or withdraw offers","cardFinances":"Finances","cardFinancesDesc":"Available funds, payout history, transaction ledger","cardMessages":"Messages","cardMessagesDesc":"Read and reply to buyer messages and inquiries","cardMarketing":"Marketing & Promotions","cardMarketingDesc":"Manage Promoted Listings campaigns and promotional offers","cardStore":"Store Manager","cardStoreDesc":"Edit store identity, branding, and custom categories","cardShipping":"Shipping Portal","cardShippingDesc":"Fulfillment policies, handling times, and eDelivery shipments","cardPaymentPolicies":"Payment Policies","cardPaymentPoliciesDesc":"Immediate payment rules and accepted payment methods","cardReturnPolicies":"Return Policies","cardReturnPoliciesDesc":"Return windows, shipping payer, and refund methods","cardLocations":"Inventory Locations","cardLocationsDesc":"Warehouses, stores, and fulfillment centers","cardAccount":"Seller Account","cardAccountDesc":"Selling limits, subscription level, and sales tax table","cardSales":"Sales — {year}","cardSalesDesc":"All synced orders, pipeline status, carrier tracking, and proof of delivery","cardInventorySync":"Inventory Sync","cardInventorySyncDesc":"Compare company inventory against the live eBay listings, mapped from your own inventory table","scopesTitle":"Authorized Scopes","scopesDesc":"What Redsis One can access on your eBay account","notificationTitle":"Notification Endpoint","notificationDesc":"Required by eBay for marketplace compliance (account deletion notifications)","tokenNotSet":"verification token not set — see Setup","registerHint1":"Register this URL in the","registerPath":"eBay Developer Portal → Your App → Notifications","registerHint2":"to satisfy the marketplace account deletion compliance requirement."},"disconnect":{"confirm":"Disconnect eBay?","yes":"Yes, disconnect","disconnecting":"Disconnecting…","button":"Disconnect"},"templatePicker":{"none":"No templates","use":"Use template","searchPlaceholder":"Search templates…","noMatch":"No templates match","manage":"Manage templates →"},"setup":{"title":"eBay Setup","description":"A guided checklist to connect your eBay business seller account. Complete each step in order; the Connect button unlocks once setup is ready.","reasonNotConnected":"That eBay screen needs a connected eBay account. Connect it below and go back.","reasonTokenRefreshFailed":"eBay stopped accepting our refresh token (the account may have been re-authorised elsewhere or the grant revoked). Re-authorise below to restore every eBay screen.","fromScreen":"(from eBay → {from})","chipDone":"Done","chipNeedsAction":"Needs action","copied":"Copied","copy":"Copy","saved":"Saved.","cleared":"Cleared.","enterCode":"Enter your authenticator code.","couldNotSave":"Could not save.","couldNotClear":"Could not clear.","valueSet":"set","fromServer":"from server","notSet":"Not set","placeholderReplace":"Enter a new value to replace","placeholderValue":"Enter a value","generateToken":"Generate a token","clear":"Clear","codePlaceholder":"6-digit code","codeAria":"Authenticator code","codeHint":"Changing a secret needs your authenticator code.","step1":"App credentials present","step1Done":"Your eBay developer app credentials are configured on the server.","step1Missing":"These values are set on the server. If any are missing, ask your administrator to set them:","step2":"Notification token set","tokenLabel":"Notification verification token","tokenHelp":"A secret string eBay echoes back to verify the notification endpoint. Set the same value here and in the eBay Developer Portal (Step 4).","syncSecretLabel":"Sync secret (optional)","syncSecretHelp":"Optional. Gates the eBay inventory-sync cron so only Redsis can trigger it.","step3":"Connect your eBay account","connected":"Connected","accountConnected":"Your eBay account is connected.","reauthorize":"Re-authorize","readyToConnect":"You are ready to connect. You will be redirected to eBay to approve the connection.","connectButton":"Connect eBay Account","completeStepsFirst":"Complete the steps above first.","step4":"Register on the eBay Developer Portal","onEbaySite":"On the eBay site","step4Intro":"These steps are done in the eBay developer portal — paste the values below where indicated.","alertsPath":"Alerts & Notifications → Marketplace account deletion endpoint","endpointUrl":"Endpoint URL","pasteTokenHint":"Paste the same verification token you set in Step 2 into the token field of the eBay portal.","runamePath":"RuName → “Auth accepted URL”","authAcceptedUrl":"Auth accepted URL","openDevPortal":"Open eBay Developer Portal","noPermission":"You do not have permission to configure the platform.","cannotChangeHere":"That setting cannot be changed here.","enterValue":"Enter a value (use Clear to remove the stored one).","codeRequired":"Enter your 6-digit authenticator code to change secrets.","somethingWrong":"Something went wrong"},"account":{"title":"Seller Account","description":"View selling limits, store subscription level, and your US sales tax configuration.","sellingLimits":"Selling Limits","privilegesUnavailable":"Seller privileges unavailable.","limitAmount":"Selling limit (amount)","limitQty":"Selling limit (qty)","sold30Amount":"Sold last 30d (amount)","sold30Qty":"Sold last 30d (qty)","itemsCount":"{n} items","subscription":"eBay Store Subscription","noSubscription":"No active eBay store subscription found.","unknownLevel":"Unknown level","active":"Active","salesTax":"Sales Tax Table","salesTaxDesc":"US states with a configured sales tax rate.","statesConfigured":{"one":"{n} state configured","other":"{n} states configured"},"salesTaxUnavailable":"Sales tax data unavailable.","noRates":"No sales tax rates configured. eBay may collect and remit on your behalf for marketplace facilitator states.","colState":"State","colRate":"Rate","colShippingTaxed":"Shipping taxed"},"analytics":{"title":"Performance Analytics","description":"Seller standards, 30-day traffic trends, and top listing performance.","standardsFailed":"Failed to load seller standards","trafficFailed":"Failed to load traffic data","trafficUnavailable":"eBay traffic data unavailable — {error}. Check that the account is still connected at","sellerStandards":"Seller Standards","levelTopRated":"Top Rated","levelAboveStandard":"Above Standard","levelBelowStandard":"Below Standard","metricDefectRate":"Defect Rate","metricLateShipment":"Late Shipment","metricCasesPct":"Cases %","threshold":"Threshold: {value}%","nearLimit":"⚠ Near limit","breached":"✕ Breached","noMetrics":"Metric details not available for this cycle.","topListings":"Top Listings","perListingUnavailable":"Per-listing data unavailable — displaying totals only.","topListingsBy":"Top Listings (by Transactions)","colTitle":"Title","colImpressions":"Impressions","colClicks":"Clicks","colCtr":"CTR","colTransactions":"Transactions","colRevenue":"Revenue","traffic30":"30-Day Traffic","noTraffic":"No traffic data available for this period.","trafficTrend":"30-Day Traffic Trend","impressions":"Impressions","transactions":"Transactions","avgCtr":"Avg CTR"},"disputes":{"title":"Dispute Manager","description":"View and act on open payment disputes. Accept or contest disputes directly from this page.","loadFailed":"Failed to load disputes","empty":"No open disputes — great news.","emptyHint":"Your dispute list is clear.","colOrderId":"Order ID","colBuyer":"Buyer","colAmount":"Amount","colReason":"Reason","colStatus":"Status","colAge":"Age","reasonNotReceived":"Not Received","reasonNotAsDescribed":"Not As Described","reasonUnauthorized":"Unauthorized","reasonWrongItem":"Wrong Item","statusOpen":"Open","statusUnderReview":"Under Review","statusPaymentDisputed":"Payment Disputed","statusClosed":"Closed","statusClosedSellerWon":"Closed — Seller Won","statusClosedBuyerWon":"Closed — Buyer Won","ageDays":"{n}d","detailFailed":"Could not load detail: {error}","loadFailedShort":"Load failed","loadingDetail":"Loading dispute details…","timeline":"Timeline","evidence":"Evidence Submitted","actions":"Actions","resolution":"Resolution","sellerWon":"✓ Resolved in your favour","buyerWon":"✕ Resolved in the buyer’s favour","accept":"Accept Dispute","acceptWarning":"This will accept the dispute and a refund will be issued. Are you sure?","accepting":"Accepting…","confirmAccept":"Confirm Accept","accepted":"Dispute accepted — refund will be issued.","contest":"Contest Dispute","contestTitle":"Contest this dispute","contestPlaceholder":"Describe why this dispute is incorrect (optional)…","submitting":"Submitting…","submitContest":"Submit Contest","contested":"Contest submitted — eBay will review the case."},"disputeTemplates":{"back":"Back to Disputes","title":"Dispute Response Templates","description":"Save standard responses for contesting disputes. Select a template from the Contest form to fill in the notes field.","typeGeneral":"General (all dispute types)","typeContest":"Contest — item not as described","typeNotReceived":"Contest — item not received","typeUnauthorized":"Contest — unauthorized purchase","general":"General","newTemplate":"New response template","namePlaceholder":"Template name (e.g. Proof of delivery — signed)","bodyPlaceholder":"Response body — what gets pasted into the contest notes field","empty":"No response templates yet. Create your first one above."},"feedback":{"title":"Feedback Manager","description":"View received buyer feedback and leave feedback for completed transactions.","identityFailed":"Failed to load seller identity","feedbackFailed":"Failed to load feedback","feedbackUnavailable":"eBay feedback unavailable — {error}. Check that the account is still connected at","received":"Received Feedback","filterAll":"All","filterPositive":"Positive","filterNeutral":"Neutral","filterNegative":"Negative","emptyAll":"No feedback found.","emptyFiltered":"No {filter} feedback found.","itemId":"Item ID: {id}","transactionId":"Transaction ID: {id}","noComment":"(no comment)","noCommentLeft":"(no comment left)","sellerAccount":"eBay Seller Account","accountType":"Account Type","business":"Business","individual":"Individual","memberSince":"Member since","marketplace":"Marketplace","leaveTitle":"Leave Feedback","leaveDesc":"Leave feedback for a completed transaction. eBay limits feedback to 80 characters.","transactionIdLabel":"Transaction ID","transactionPlaceholder":"e.g. 29-12345-67890","buyerId":"Buyer ID","buyerPlaceholder":"The buyer’s eBay user ID","itemIdLabel":"Item ID","itemPlaceholder":"eBay item ID","rating":"Rating","comment":"Comment","commentPlaceholder":"Optional feedback comment (max 80 characters)…","submitting":"Submitting…","submit":"Leave Feedback","submitted":"Feedback submitted successfully.","submitFailed":"Failed to submit feedback"},"finances":{"title":"eBay Finances","description":"Available funds, payout history, and transaction ledger. Use date filters to narrow the range.","loadFailed":"Failed to load finances","available":"Available funds","pending":"Pending funds","onHold":"On hold","filterByDate":"Filter by date:","apply":"Apply","clear":"Clear","payouts":"Payouts","colDate":"Date","colAmount":"Amount","colBank":"Bank","colStatus":"Status","noPayouts":"No payouts found","transactions":"Transactions","colType":"Type","colOrder":"Order","colFee":"Fee","colNet":"Net","noTransactions":"No transactions found","payoutSucceeded":"Succeeded","payoutInitiated":"Initiated","payoutRetried":"Retried","payoutReversed":"Reversed","payoutFailed":"Failed","txSale":"Sale","txRefund":"Refund","txCredit":"Credit","txDispute":"Dispute","txFee":"Fee","txShipping":"Shipping"},"marketing":{"title":"Marketing & Promotions","description":"Manage your eBay Promoted Listings campaigns and promotional offers.","tabCampaigns":"Campaigns","tabPromotions":"Promotions","campaignsUnavailable":"Campaigns could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.marketing scope. Check eBay → Setup.","promotionsUnavailable":"Promotions could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.marketing.readonly scope. Check eBay → Setup.","campaignCount":{"one":"{n} campaign","other":"{n} campaigns"},"newCampaign":"+ New Campaign","newCampaignTitle":"New Promoted Listings Campaign","campaignName":"Campaign Name","campaignNamePlaceholder":"e.g. Summer Sale 2026","bidPct":"Bid % (1–20)","startDate":"Start Date","endDate":"End Date","creating":"Creating…","createCampaign":"Create Campaign","noCampaigns":"No campaigns found.","noCampaignsHint":"Create your first Promoted Listings campaign above.","colName":"Name","colType":"Type","colStatus":"Status","colDailyBudget":"Daily Budget","colBid":"Bid %","colStart":"Start","colEnd":"End","colActions":"Actions","pause":"Pause","resume":"Resume","rename":"Rename","budget":"Budget","bid":"Bid%","endDateAction":"End date","clone":"Clone","perDay":"{amount}/day","newName":"New name:","dailyBudget":"Daily budget ($):","bidLabel":"Bid % (1–20):","newEndDate":"New end date:","cloneName":"Clone name:","endDateLabel":"End date:","copySuffix":"(copy)","pauseFailed":"Failed to pause campaign","resumeFailed":"Failed to resume campaign","createFailed":"Failed to create campaign","statusRunning":"Running","statusPaused":"Paused","statusEnded":"Ended","statusCompleted":"Completed","promoOrderDiscount":"Order Discount","promoMarkdown":"Markdown","promoVolume":"Volume","promoCoupon":"Coupon","promoActive":"Active","promoScheduled":"Scheduled","managedIn":"Creating promotions is managed in","sellerHub":"eBay Seller Hub","changesAfterSync":". Changes appear here after sync.","noPromotions":"No promotions found.","requiredFields":"Campaign name, start date, and end date are required.","endDateRequired":"End date is required."},"messages":{"title":"eBay Messages","description":"Read buyer messages and reply directly. Click a conversation on the left to open the thread.","loadFailed":"Failed to load conversations","conversations":"Conversations ({n})","noConversations":"No conversations","selectPrompt":"Select a conversation to view messages","loading":"Loading…","threadFailed":"Failed to load thread","replySent":"Reply sent!","sendFailed":"Failed to send","shortcutHint":"⌘+Enter to send","replyPlaceholder":"Type a reply… (⌘+Enter to send)","send":"Send"},"messageTemplates":{"back":"Back to Messages","title":"Message Reply Templates","description":"Save canned replies for common buyer questions. Select a template from the reply composer to fill the text field instantly.","newTemplate":"New template","namePlaceholder":"Template name (e.g. Shipping delay)","categoryPlaceholder":"Category (optional — e.g. shipping, returns)","categoryEditPlaceholder":"Category (optional)","bodyPlaceholder":"Template body — what gets pasted into the reply box","empty":"No templates yet. Create your first one above."},"orders":{"title":"eBay Orders","description":"Manage open and fulfilled orders. Click a row to view details and mark as shipped.","loadFailed":"Failed to load orders","statusFulfilled":"Fulfilled","statusAwaiting":"Awaiting","statusInProgress":"In Progress","statusCancelled":"Cancelled","filterAll":"All","filterAwaiting":"Awaiting shipment","filterShipped":"Shipped","filterCancelled":"Cancelled","totalCount":"{n} total","colOrderId":"Order ID","colBuyer":"Buyer","colTotal":"Total","colStatus":"Status","colDate":"Date","noOrders":"No orders found","detailTitle":"Order detail","orderTotal":"Order total","created":"Created","status":"Status","shipTo":"Ship to","items":"Items","sku":"SKU: {sku}","qty":"Qty: {n}","markedShipped":"Order marked as shipped!","markShippedFailed":"Failed to mark as shipped","cancelTitle":"Cancel Order","cancelDesc":"Cancels this order and notifies the buyer. Cannot be undone.","cancelConfirm":"Cancel — {reason}?","yesCancel":"Yes, cancel","cancelled":"Order cancelled.","cancelFailed":"Cancellation failed","reasonBuyerAsked":"Buyer asked to cancel","reasonOutOfStock":"Item out of stock","reasonAddressIssues":"Address issues","refundTitle":"Issue Refund","refundDesc":"Issue a goodwill refund to the buyer for this order.","refundConfirm":"Refund — {reason}?","yesRefund":"Yes, refund","refunded":"Refund issued successfully.","refundFailed":"Refund failed","reasonGoodwill":"Seller goodwill","reasonNotReceived":"Item not received","reasonBuyerReturn":"Buyer return","markShipped":"Mark as shipped","carrier":"Carrier","trackingNumber":"Tracking number","trackingPlaceholder":"e.g. 9400111...","submitting":"Submitting…","submitShipment":"Submit shipment"},"sales":{"title":"Sales — {year}","description":"All eBay orders synced from Jan 1 {year}. Track each sale from listing through carrier delivery confirmation.","cardTotal":"Total {year}","cardRevenue":"Revenue","cardCancelled":"Cancelled","pillAwaiting":"Awaiting Ship","pillPreparing":"Preparing","pillInTransit":"In Transit","pillOutForDelivery":"Out for Delivery","pillShipped":"Shipped","pillDelivered":"Delivered","pillCancelled":"Cancelled","pillFailed":"Failed","pillException":"Exception","filterAll":"All","searchPlaceholder":"Search order ID, buyer, tracking…","orderCount":"{n} orders","noOrders":"No orders found.","noOrdersHint":"Run \"Sync Orders\" above to pull this year’s orders from eBay.","colOrderId":"Order ID","colBuyer":"Buyer","colItems":"Items","colTotal":"Total","colStatus":"Status","colTracking":"Tracking","colDate":"Date","view":"View","orderAria":"Order {id}","syncing":"Syncing…","synced":"✓ {n} synced","checked":"✓ {checked} checked, {delivered} delivered","done":"✓ Done","lastSync":"Last sync: {date}","syncOrders":"Sync Orders","syncListings":"Sync Listings","updateTracking":"Update Tracking","back":"Back to Sales","placed":"Placed {date}","pipeline":"Order Pipeline","stepOrderPlaced":"Order Placed","stepProcessing":"Processing","orderTotal":"Order Total","shipTo":"Ship To","itemsOrdered":"Items Ordered","noLineItems":"No line items synced yet.","sku":"SKU: {sku}","qty":"Qty: {n}","carrierTracking":"Carrier Tracking","updated":"Updated {date}","lastSeen":"Last seen: {location}","proofOfDelivery":"Proof of Delivery","deliveredAt":"Delivered At","location":"Location","signedBy":"Signed By","notes":"Notes"},"paymentPolicies":{"title":"Payment Policies","description":"Define how buyers pay for your listings — immediate payment, allowed payment methods, and deposit requirements.","unavailable":"Payment policies could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.account scope. Check eBay → Setup.","editTitle":"Edit Payment Policy","newTitle":"New Payment Policy","policyName":"Policy Name","requireImmediate":"Require immediate payment","policyCount":{"one":"{n} policy","other":"{n} policies"},"newPolicy":"New Policy","none":"No payment policies configured.","immediateRequired":"Immediate payment required","noImmediate":"No immediate payment"},"returnPolicies":{"title":"Return Policies","description":"Configure your return rules — accepted return windows, who pays return shipping, and refund methods.","unavailable":"Return policies could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.account scope. Check eBay → Setup.","editTitle":"Edit Return Policy","newTitle":"New Return Policy","policyName":"Policy Name","returnsAccepted":"Returns accepted","windowDays":"Return window (days)","paidBy":"Return shipping paid by","buyer":"Buyer","seller":"Seller","refundMethod":"Refund method","moneyBack":"Money back","merchandiseCredit":"Merchandise credit","moneyBackOrExchange":"Money back or exchange","moneyBackOrReplacement":"Money back or replacement","policyCount":{"one":"{n} policy","other":"{n} policies"},"newPolicy":"New Policy","none":"No return policies configured.","dayWindow":"{n} day window","shippingPays":"Shipping: {payer} pays","noReturns":"No returns"},"shipping":{"title":"Shipping Portal","description":"Manage fulfillment policies, handling times, and international eDelivery shipments.","fulfillmentPolicies":"Fulfillment Policies","fulfillmentDesc":"Click any row to expand shipping tiers and excluded locations.","unavailable":"Fulfillment policies could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.account scope. Check eBay → Setup.","eDeliveryTitle":"eBay International Shipping (eDelivery)","eDeliveryDesc":"Recent international shipments processed via the eBay eDelivery program.","eDeliveryNotEnabled":"eBay International Shipping (eDelivery) is not enabled on this account.","noShipments":"No recent eDelivery shipments.","colShipmentId":"Shipment ID","colTracking":"Tracking #","colDestination":"Destination","colStatus":"Status","colShipDate":"Ship Date","free":"Free","buyerPays":"Buyer Pays","domestic":"Domestic","international":"International","excluded":"Excluded Locations","globalShipping":"Global Shipping Program enabled","days":"days","daysShort":"{n}d","updateFailed":"Failed to update","none":"No fulfillment policies found.","colPolicyName":"Policy Name","colPrimary":"Primary Carrier / Service","colHandlingTime":"Handling Time","colFreeShipping":"Free Shipping","colActions":"Actions","clickRow":"Click row for details"},"store":{"title":"Store Manager","description":"Manage your eBay store identity, branding, and custom category structure.","unavailable":"Store data could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.stores scope. Check eBay → Setup.","categories":"Store Categories","noCategories":"No custom store categories configured.","listingCount":{"one":"{n} listing","other":"{n} listings"},"updateFailed":"Failed to update store","editTitle":"Edit Store Info","storeName":"Store Name","descriptionLabel":"Description","categoryId":"Category ID (from eBay)","categoryPlaceholder":"e.g. 58058","logoAlt":"Store logo","defaultName":"eBay Store","visit":"Visit Store on eBay","primaryCategory":"Primary category:","editStore":"Edit Store"},"inventory":{"title":"eBay Inventory","description":"Manage your SKUs, conditions, quantities, and listing offers. Click a row to edit; use the status button to publish or withdraw.","loadFailed":"Failed to load inventory","itemCount":"{n} items","newItem":"New item","withdrawn":"Offer withdrawn","published":"Offer published","actionFailed":"Action failed","colSku":"SKU","colTitle":"Title","colCondition":"Condition","colQty":"Qty","colStatus":"Status","colPrice":"Price","none":"No inventory items found","statusPublished":"Published","statusDraft":"Draft","noOffer":"No offer","editItem":"Edit item","newItemTitle":"New inventory item","saved":"Item saved!","saveFailed":"Failed to save item","skuLabel":"SKU *","skuPlaceholder":"e.g. MY-PRODUCT-001","titleLabel":"Title *","titlePlaceholder":"Product title as shown on eBay","descriptionLabel":"Description","descriptionPlaceholder":"Optional description","condition":"Condition","conditionNew":"New","conditionLikeNew":"Like New","conditionVeryGood":"Very Good","conditionGood":"Good","conditionAcceptable":"Acceptable","quantity":"Quantity","saveItem":"Save item"},"locations":{"title":"Inventory Locations","description":"Manage warehouses, stores, and fulfillment centers where your eBay inventory is stored and shipped from.","unavailable":"Inventory locations could not be loaded: eBay is not connected, the token could not be refreshed, or the account lacks the sell.inventory scope. Check eBay → Setup.","newTitle":"New Inventory Location","keyLabel":"Location Key (unique ID)","keyPlaceholder":"e.g. WH_001","displayName":"Display Name","namePlaceholder":"Main Warehouse","type":"Type","typeWarehouse":"Warehouse","typeStore":"Store","typeFulfillmentCenter":"Fulfillment Center","phone":"Phone (optional)","phoneShort":"phone","street":"Street Address","streetPlaceholder":"123 Warehouse Dr","city":"City","state":"State","zip":"ZIP","creating":"Creating…","create":"Create Location","locationCount":{"one":"{n} location","other":"{n} locations"},"newLocation":"New Location","none":"No inventory locations configured.","noneHint":"Add a warehouse or store to associate inventory with a physical location.","statusEnabled":"Enabled","statusDisabled":"Disabled","disable":"Disable","enable":"Enable","rename":"Rename","requiredFields":"Key, name, and full address are required."},"inventorySync":{"title":"Inventory Sync","description":"Compare your company inventory against eBay listings. Set up the connector once, then sync and reconcile.","companyUnits":"Company Total Units","ebayUnits":"eBay Listed Units","notOnEbayUnits":"Items Not on eBay","comparison":"Inventory vs eBay Listings","comparisonEmpty":"Sync your eBay listings and configure an inventory connector to see the comparison.","skuCount":"{n} unique SKUs across both systems.","connectorTitle":"Inventory Connector Setup","connectorDesc":"Point to your local DB table and map columns — like Skyvia, but built in.","addConnection":"Add Connection","fieldsMapped":"{mapped}/{total} fields mapped","noConnectors":"No inventory connectors configured yet. Add one to start comparing eBay vs company inventory.","configName":"Config Name","configPlaceholder":"e.g. Redsis Local Inventory","connectorType":"Connector Type","typeLocalPostgres":"Local PostgreSQL (via Connector Agent)","typeNeon":"Neon PostgreSQL","typeSupabase":"Supabase PostgreSQL","typeDirect":"Direct PostgreSQL (connection string)","sourceTable":"Source Table (schema.table)","filter":"Filter (optional WHERE clause)","connectionString":"Connection String","csSaved":"(saved — leave blank to keep it)","csBlank":"(leave blank to use the Connector Agent)","csSavedPlaceholder":"•••••••• (saved)","removeSaved":"Remove the saved connection string (use the Connector Agent instead)","mappingTitle":"Column Mapping — map your table columns to Redsis fields","fieldSku":"SKU / Part Number","fieldQuantity":"Quantity on Hand","fieldDescription":"Description / Title","fieldUnitCost":"Unit Cost","fieldLocation":"Warehouse / Location","required":"Required","columnPlaceholder":"column name in {table}","yourTable":"your table","saveConfig":"Save Configuration","searchPlaceholder":"Search SKU or description…","filterAll":"All","filterNotOnEbay":"Not on eBay ({n})","filterCompanyLow":"Company Low ({n})","filterExcess":"Excess ({n})","itemCount":"{n} items","empty":"No inventory data yet.","emptyHint":"Set up an Inventory Connector and run a sync, or sync eBay listings first.","colSku":"SKU","colDescription":"Description","colCompanyQty":"Company Qty","colEbayQty":"eBay Qty","colDelta":"Delta","colEbayStatus":"eBay Status","colPrice":"Price","colAction":"Action","deltaSync":"Sync","deltaAvailable":"+{n} available","deltaShort":"{n} short","actionPost":"→ Post to eBay","actionIncrease":"→ Increase eBay qty","actionStockLow":"→ Company stock low","actionInSync":"✓ In sync","notListed":"Not listed","requiredFields":"Name and source table are required."}},"setupBanner":{"title":"Finish setting up {title} — {done}/{total} done","hint":"A few quick steps left to get {title} working in Redsis One.","cta":"Continue setup"},"ebayWriteback":{"notify":{"automationName":"eBay write-back","title":"Order {order} was not sent to eBay","titleNoOrder":"A board edit was not sent to eBay","reasons":{"notActionable":"This status does not change anything on eBay.","noOrderId":"This row has no eBay order number, so there is nothing to update on eBay.","trackingMissing":"Status is Shipped but the Tracking cell is empty. Add the tracking number and eBay will be marked as shipped.","trackingNumberMissing":"The Tracking cell only names the carrier. Add the tracking number after it and eBay will be marked as shipped."}}},"inventoryExplorer":{"eyebrow":"Warehouse Operations","notConnected":"Product search isn’t connected yet.","allSites":"All sites","partNumber":"Part number","description":"Description","brand":"Brand","qty":"Qty","title":"Inventory","subtitle":"Search parts and browse warehouses, zones and bins.","tabSearch":"Part search","tabBrowse":"Warehouses & locations","searchPlaceholder":"Search part number, description, brand, serial…","searchHint":"Type at least two characters for suggestions.","inStock":"In stock","noResults":"No parts match “{q}”.","noPhoto":"No photo","warehouses":"Warehouses","noWarehouses":"No warehouses yet.","noWarehousesHint":"Create your first warehouse to start organizing stock by zone and bin.","zones":"Zones","positions":"Positions","units":"units","onHand":"on hand","qtyMasked":"Quantities are hidden for your access level — you can see where a part exists, not how many.","loosePositions":"Unzoned positions","newWarehouse":"New warehouse","newZone":"New zone","newPosition":"New position","code":"Code","name":"Name","kind":"Kind","company":"Company","country":"Country","office":"Office","zone":"Zone","create":"Create","cancel":"Cancel","creating":"Creating…","createdWarehouse":"Warehouse created","createdZone":"Zone created","createdPosition":"Position created","manageHint":"You need the “manage inventory” permission to create locations.","loading":"Loading…","vanTech":"Technician","vanTechPlaceholder":"Select a technician…","vanTechHint":"The van holds this technician’s stock — bound to their truck.","vanTechNone":"No technicians available — add a field technician first.","vanTechNoTruck":"new truck","adoptVans":"Adopt tech vans","adoptVansNone":"No new tech vans to adopt.","adoptVansCount":"Adopt {n} van(s)","adoptVansConfirm":"Click again to adopt","adoptVansDone":"{n} van(s) adopted","projects":"Project","projectsHint":"Field Service contracts this warehouse serves. Coordinators of those contracts see its stock (when inventory by project is on).","projectsNone":"No project","projectsEdit":"Edit projects","projectsSave":"Save projects","projectsSaved":"Projects saved","projectsNoContracts":"There are no open contracts to tag.","suggestTitle":"Suggest projects by name","suggestHint":"Proposes a project for each warehouse whose name contains a keyword (for example RMX-SITE1 → SITE1). Nothing is assigned until you confirm the rows you pick.","suggestRun":"Suggest","suggestMapping":"Keyword → contract","suggestKeyword":"Keyword","suggestContract":"Contract","suggestAddRule":"Add keyword","suggestRemoveRule":"Remove","suggestNone":"No suggestions — every match is already tagged, or no warehouse name contains a keyword.","suggestCount":"{n} suggestion(s)","suggestWarehouse":"Warehouse","suggestMatched":"Matched","suggestConfirm":"Confirm {n} selected","suggestDone":"{n} tag(s) added, {m} already present"},"inventoryMap":{"modesLabel":"What the colours show","modes":{"stock":"Stock","age":"How long it has sat","picks":"Pick activity","route":"Open picks","playback":"Last 24 hours"},"liveOff":"Updates every 20 s","lastMove":"last move {time}","viaBarcoder":"via Barcoder","play":"Play","pause":"Pause","playbackTime":"Time in the playback","playbackCount":"{n} moves","playbackNone":"No moves in the last 24 hours.","playbackTruncated":"older moves left out","routeTitle":"Walking route","noPicks":"No open pick at this warehouse.","choosePick":"Pick list","stops":"{n} stops","routeMissing":"Not in stock here: {list}","legendAge":"Days since stock arrived","legendFresh":"Under a week","legendOld":"Over 6 months","legendPicks":"Picks in 30 days","legendQuiet":"Few","legendBusy":"Many","legendMoving":"Moving now","title":"Warehouse map","description":"The floor plan of the warehouse with every rack and bin, coloured by what it holds. Find a part and the bins holding it light up.","warehouse":"Warehouse","noWarehouses":"No warehouse you may see yet.","findLabel":"Find a part","findPlaceholder":"Scan or type a part number or serial…","find":"Find","clear":"Clear","notFound":"{pn} is not in this warehouse.","foundIn":"{pn} is in {n} bins","foundTotal":"{n} on hand here","sourceLayout":"Drawn in Design One · layout v{v}","sourceGenerated":"Laid out from the bin codes — import a Design One layout under Set up → Layouts to see the real floor plan.","legend":"Stock","legendEmpty":"Empty","legendSome":"Some","legendFull":"Most","legendHas":"Has stock","legendHit":"Holds the part","qtyMasked":"Quantities are hidden for your access level — the map shows which bins hold stock, not how many.","zoomIn":"Zoom in","zoomOut":"Zoom out","fit":"Fit to screen","rack":"Rack {code}","rackFront":"Front view","level":"Level {n}","close":"Close","bins":"{n} bins","empty":"Empty","units":"{n} units","serials":"Serials","serialsSome":"Serials (first {n} of {total})","foundSerial":"Serial {serial} ({pn}) is in {code}","loading":"Loading…","noParts":"Nothing in this bin.","unmappedTitle":"Bins not on the floor plan","unmappedHint":"These bins exist but the layout does not place them. Add them in Design One, or they stay listed here.","removedTitle":"Stock on a removed bin","removedHint":"A newer layout removed these bins but they still hold stock. Move the stock, then they are disabled on the next import.","open":"Open","print":"Print label","error":"Could not load the map. Try again.","live":"Live"},"inventoryLayouts":{"title":"Warehouse layouts","description":"Bring a floor plan drawn in Design One into a warehouse. Nothing changes until you have seen exactly what will happen and pressed Apply.","warehouse":"Warehouse","noWarehouses":"You do not manage any warehouse yet.","current":"Current layout","none":"No layout yet — the map is generated from the bin codes.","version":"v{v} · imported {date}","step1":"1. Get the layout","fromDesignOne":"Open Design One and press Publish to Inventory — the layout opens here by itself. From the desktop app, save the layout file and upload it here.","openDesignOne":"Open Design One","waiting":"Reading the layout from Design One…","handoverFailed":"The layout from Design One could not be read (the link was cut short or changed). Press Publish to Inventory in Design One again, or save the layout file there and upload it here.","viaLink":"This layout arrived in a link. Apply it only if you published it from Design One or were expecting it.","orUpload":"Or upload the layout file (.json)","upload":"Choose file","received":"Layout {id} v{v} received","step2":"2. Check what will change","pickLayoutWarehouse":"The layout has several warehouses. Which one is this warehouse?","checking":"Checking…","invalid":"This file is not a valid layout:","counts":{"add":"new bins","move":"re-drawn","rename":"get a path code","keep":"unchanged","disable":"disabled (empty, removed from the plan)","stock_on_removed":"removed but still hold stock — stay active"},"zonesToCreate":"New zones: {list}","ops":{"add":"New","move":"Re-drawn","rename":"Gets path code","disable":"Disabled","stock_on_removed":"Still holds stock"},"renameHint":"{from} keeps its label and is now also {to}","stockHint":"{code} holds {n} — it stays active until the stock is moved","truncated":"Showing the first {n} changes.","nothing":"This layout matches the warehouse exactly — nothing to change.","step3":"3. Apply","apply":"Apply layout","applying":"Applying…","applied":"Layout applied: {add} new, {move} re-drawn, {rename} linked, {disable} disabled.","stale":"The warehouse or the layout changed since you checked. Check again, then apply.","conflict":"Some bin codes are already used by other bins: {list}. Fix them in Design One or rename the bins, then try again.","noAccess":"You cannot change the layout of this warehouse.","history":"Earlier imports","superseded":"replaced","active":"current","viewMap":"View on the map","error":"Something went wrong. Nothing was changed."},"inventoryModule":{"eyebrow":"Warehouse Operations","title":"Inventory","description":"Find a part, see what is where, move stock, and set up warehouses and access.","jobs":{"find":"Find a part","stock":"Stock","move":"Move stock","setup":"Set up"},"find":{"searchOffTitle":"Part search is turned off for this site.","searchOffHint":"An administrator can turn it on in Admin → Modules (inventory_product_search) and connect the catalog under Set up → Sources."},"stock":{"views":{"list":"List","map":"Map"},"title":"What is where","description":"Every warehouse, van, zone and bin you may see, with the stock resting in it.","federated":"Stock across all sources","federatedHint":"Redsis One, Redix and legacy stock, merged and limited to what you may see.","search":"Search product / model…","allSources":"All sources","allWarehouses":"All warehouses","project":"Project","allProjects":"All my projects","notConnected":"(not connected)","loading":"Loading…","rows":"{n} rows","qtyMasked":"Quantities are hidden for your access level — you can see which products are stocked, not how many.","warehouse":"Warehouse","product":"Product","qty":"Qty","source":"Source","noStock":"No stock matches these filters.","denied":"No inventory visible to you yet","projectWarehouseNotConnected":"Your project has a warehouse assigned, but it isn’t connected to inventory yet. Ask whoever manages inventory for help.","projectWithoutWarehouse":"Your project doesn’t have a warehouse assigned yet. Ask whoever manages inventory.","deniedHint":"An administrator grants inventory visibility under Set up → Who sees what."},"move":{"title":"Move stock","description":"Pick, receive, load a van or transfer — every movement in one place.","lanes":{"tasks":"Tasks","picks":"Picks","incoming":"Incoming","receive":"Receive","transfer":"Load a van / transfer","labels":"Labels"},"picksNav":{"list":"Pick lists","cart":"Cart","newPick":"New pick"},"receiveTitle":"Receive stock","receiveDescription":"Bring new serialized units or quantity stock into a warehouse or van.","transferTitle":"Load a van / transfer","transferDescription":"Move stock from a warehouse onto a technician’s van. The technician sees it in “My Van” right away.","noLanes":"You do not have access to any stock movement here. Ask an administrator for picking or coordinator rights."},"setup":{"title":"Set up","description":"Warehouses and vans, tracked products, who sees what, and the connected sources.","tabs":{"warehouses":"Warehouses & vans","tracking":"Tracked products","access":"Who sees what","sources":"Sources","tasks":"Tasks","layouts":"Layouts"},"warehousesDescription":"Create warehouses, zones and bins. A van is a warehouse of kind “van” bound to its technician — it appears once, here and in Stock.","ledgerLocations":"Technician locations (ledger)","ledgerLocationsHint":"Trucks and home bases per service provider, as the stock ledger sees them.","trackingDescription":"Decide whether a product is tracked by serial number (one serial per unit, required for the return-part loop) or by quantity.","accessDescription":"Who can see which stock: admin and role grants by source, warehouse or product, and per-technician product visibility in the mobile app.","adminGrants":"Admin & role grants","techScope":"Technician visibility","sourcesDescription":"The databases this inventory reads: Redsis One, Redix and the legacy sites."},"part":{"backToSearch":"Back to search","brand":"Brand","manufacturer":"Manufacturer","category":"Category","scheduleB":"Schedule B (export)","status":"Status","cost":"Cost","listPrice":"List price","alternates":"Alternate part numbers","ibmTitle":"IBM part number","custTitle":"Customer part number","custTag":"customer","machineTypes":"Machine types","models":"Models","notes":"Notes","stockByLocation":"Stock by location","total":"{n} total","qtyHidden":"Quantities are hidden for your access level.","warehouse":"Warehouse","location":"Location","country":"Country","condition":"Condition","qty":"Qty","noStock":"No stock on record for this part.","allFields":"All product fields ({n})","yes":"Yes","no":"No"},"access":{"dimensions":{"source":"Source","warehouse":"Warehouse","location":"Location","product":"Product","product_prefix":"Product prefix","region":"Region"},"all":"All","grantAdded":"Grant added.","grantRemoved":"Grant removed.","selectSource":"Select source…","prefixPlaceholder":"e.g. AC-","regionPlaceholder":"region tag","valuePlaceholder":"value","users":"Users","roles":"Roles","search":"Search…","noMatches":"No matches","selectUser":"Select a user to view and edit their inventory visibility.","selectRole":"Select a role to view and edit its inventory visibility.","kindUser":"user","kindRole":"role","noGrantsHintUser":"With no grants, this user sees nothing (unless they hold “View all inventory”).","noGrantsHintRole":"With no grants, this role sees nothing (unless it holds “View all inventory”).","colDimension":"Dimension","colValue":"Value","colQty":"Qty","colCost":"Cost","noGrants":"No grants yet.","visible":"Shown","hidden":"Hidden","removeGrant":"Remove grant","addGrant":"Add a grant","allStar":"All (*)","showQty":"Show qty","showCost":"Show cost","add":"Add"},"sources":{"credentialsBefore":"Credentials for Redix and the legacy sites live only on the connector agent — set them in","dataStudio":"Data Studio","credentialsAfter":". A source below references that connection by id; here you only set the read query and the column map.","saved":"Source saved.","unreachable":"unreachable","notConfigured":"not configured","disabled":"disabled","disable":"Disable","enable":"Enable","edit":"Edit","delete":"Delete","builtIn":"built-in","addSource":"+ Add a Redix / legacy source","editTitle":"Edit agent source","newTitle":"New agent source","fieldId":"Source id (e.g. redix)","fieldLabel":"Label","fieldConnection":"Agent connection id","connectionPlaceholder":"matches db-connections.json on the agent","fieldEngine":"Engine","fieldStockSql":"Stock query (read-only SELECT; $1 / ? = product search term)","fieldColumnMap":"Column map (JSON: which result columns → warehouseId / productModel / qty / …)","introspect":"Introspect tables","introspecting":"Introspecting…","test":"Test query","running":"Running…","readOnlyHint":"Read-only — the connection must be registered on the agent first.","noTables":"No tables returned.","testSummary":"{rows} row(s){truncated} · {ms} ms · columns: {cols}","truncated":"+ (truncated)","mismatchHint":"A “—” means the column map does not match a result column yet — adjust the JSON above and test again.","enabled":"Enabled","cacheTtl":"Cache lifetime (seconds)","cancel":"Cancel","save":"Save"}},"part360":{"aggregatedAcross":"Aggregated across {n} part numbers","loading":"Loading availability…","emptyTitle":"No availability on record","emptyHint":"This part has no stock, open orders, or listings across your sites yet.","qtyMasked":"Quantities are hidden for your access level — you can see where a part exists, not how many.","notesHeading":"Notes","totals":{"heading":"Totals across all sites","inStock":"In stock","openSo":"Open SO","onOrder":"On order","inProduction":"In production"},"company":{"openSo":"Open SO","subtotal":"Subtotal","noStock":"No stock at this company."},"table":{"warehouse":"Warehouse","condition":"Condition","units":"Units","qty":"Qty","unknownWarehouse":"Unknown warehouse","unknownCondition":"Unspecified"},"ebay":{"heading":"eBay","live":"Live","mirror":"Mirror","listings":"{n} listings","mismatch":"Mismatch","mismatchHint":"The live eBay quantity and the local mirror disagree."},"autocomplete":{"placeholder":"Search part number, description, or brand…","ariaLabel":"Part search","clear":"Clear"},"facets":{"filtersLabel":"Filters","clear":"Clear","clearAll":"Clear all","apply":"Done","remove":"Remove filter","noOptions":"No options"}},"pickList":{"title":"Pick List","notPickedYet":"Not picked yet.","cart":{"part":"Part","site":"Site","condition":"Condition","noteOptional":"Note (optional)","decrease":"Decrease","increase":"Increase","remove":"Remove","emptyLead":"Your cart is empty. Find parts in","findPart":"Find a part","emptyTail":"and click Add.","summary":"{qty} items across {lines} lines","summaryOne":"1 item across 1 line","sites":" · {n} sites"},"newPick":{"fromYourCart":"From your cart","part":"Part","description":"Description","internalUse":"Internal use","internalUseHint":"Pull parts from a warehouse for internal consumption. A reason is required; above the warehouse’s threshold an approval is routed before it can be issued.","warehouse":"Warehouse","selectWarehouse":"Select a warehouse…","reason":"Reason","reasonPlaceholder":"e.g. repair / demo / R&D","parts":"Parts","productSku":"Product / SKU","remove":"Remove","addPart":"+ Add a part","createInternalUse":"Create internal-use pull","createInternalUseFailed":"Could not create the internal-use pull.","cartSummary":"{qty} items across {lines} lines.","cartSummaryOne":"1 item across 1 line.","cartEmptyFind":"Your cart is empty. Add parts from Find a part."},"index":{"productSearch":"Find a part","code":"Code","origin":"Origin","site":"Site","assignee":"Assignee","progress":"Progress","status":"Status","noPicksActive":"No active picks.","noPicksCompleted":"No completed picks.","noPicksAll":"No picks.","fillCartIn":"Fill a cart in","orWord":"or","createFromSource":"create one from a source"},"incoming":{"title":"Incoming","backToPulls":"Pulls","refresh":"Refresh","empty":"Nothing incoming. Shipped transfers and open returns appear here.","kind":"Kind","reference":"Reference","detail":"Detail","age":"Age","action":"Action","transfer":"Transfer","return":"Return","line":"line","lines":"lines","day":"day","days":"days","receiveAll":"Receive all","viaReturns":"Receive via Returns","flagOff":"The Unified Pull layer is off — enable inventory_one_pull to use Incoming.","readFailed":"Could not read the incoming queue.","receiveFailed":"Could not receive this transfer."}},"operations":{"eyebrow":"Operations","title":"Operations","description":"Service, warehouse and logistics — one operational command center.","asOf":"Updated","openTickets":"Open tickets","atRisk":"At risk (≤1h)","slaToday":"SLA today","techsOnline":"Techs online","techsActive":"Active techs","routesToday":"Routes today","openParts":"Open parts requests","equipmentAssets":"Equipment assets","activeContracts":"Active contracts","serviceTitle":"Service","serviceSub":"Field & depot operations","warehouseTitle":"Warehouse Operations","warehouseSub":"Inventory, parts & equipment","logisticsTitle":"Logistics","logisticsSub":"Routes, dispatch & shipping","open":"Open","openServiceHub":"Open Service Hub","openWarehouse":"Open Warehouse","openLogistics":"Open Logistics","liveMap":"Live map","liveMapHint":"OpenStreetMap tiles · click any pin for detail","onMap":"on map","activeTickets":"active tickets","atRiskTitle":"SLA at risk","atRiskEmpty":"No tickets at risk right now.","recentTitle":"Recent tickets","recentEmpty":"No recent tickets.","routesPublished":"published","routesDraft":"draft","routesInProgress":"in progress","totalStops":"stops","noService":"You don’t have access to service operations.","viewTicket":"View","ticket":"Ticket","severity":"Severity","status":"Status","sla":"SLA","received":"Received","quickLaunch":"Quick launch"},"fsProcurement":{"eyebrow":"Field Service","title":"Procurement","description":"Raise requisitions, route them for approval, cut purchase orders to vendors, and receive goods into stock — the requisition → PO → goods-receipt loop. Receiving posts real stock movements into inventory.","disabledTitle":"Procurement is not enabled","disabledBody":"This module ships off by default. A platform admin enables it at Admin → Modules (flag fs_procurement_enabled); the Owner always sees it.","tabs":{"requisitions":"Requisitions","purchaseOrders":"Purchase Orders","goodsReceipts":"Goods Receipts"},"status":{"draft":"Draft","submitted":"Submitted","approved":"Approved","rejected":"Rejected","ordered":"Ordered","sent":"Sent","received":"Received","closed":"Closed","cancelled":"Cancelled","open":"Open"},"common":{"product":"Product","quantity":"Qty","vendor":"Vendor","total":"Total","status":"Status","created":"Created","actions":"Actions","notes":"Notes","cancel":"Cancel","create":"Create","none":"Nothing here yet","approversHint":"Approver user IDs, comma-separated","number":"Number","working":"Working…"},"requisitions":{"heading":"Requisitions","empty":"No requisitions yet. Raise one to start a buy.","newTitle":"New requisition","estCost":"Est. cost","reason":"Reason","submit":"Submit for approval","convert":"Convert to PO"},"purchaseOrders":{"heading":"Purchase orders","empty":"No purchase orders yet.","newTitle":"New purchase order","expected":"Expected","lines":"Lines","unitCost":"Unit cost","addLine":"Add line","submit":"Submit for approval","sync":"Refresh approval","send":"Send to vendor"},"goodsReceipts":{"heading":"Goods receipts","empty":"No goods receipts yet.","newTitle":"Receive goods","warehouse":"Into warehouse","serial":"Serial","condition":"Condition","po":"Purchase order","post":"Post receipt (into stock)","addLine":"Add line"},"conditions":{"good":"Good","defective":"Defective","in_repair":"In repair","scrap":"Scrap"}},"internalOps":{"eyebrow":"Internal Ops","operationsEyebrow":"Operations","notInstalledTitle":"Internal Ops is not installed yet","backToHome":"Back to Internal Ops","home":{"title":"Internal Operations","description":"The Operations-owned central layer — warehouses, serial-tracked stock, shipping, returns, the repair lab, procurement, the product/homologation catalogue, and the shared approvals queue. Per-contract Service workspaces connect up into these boards.","notInstalledBody":"A platform admin installs the \"Internal Operations\" app from Admin → Apps — it materialises every board once, then this launcher opens straight into them."},"reports":{"title":"Reports","description":"SLA compliance, MTTR, inventory levels, return reconciliation, and repair throughput — live over the Internal Ops boards.","notInstalledBody":"Install the \"Internal Operations\" app from Admin → Apps, then this report reads live board data.","returnSla":"Return SLA (received by due)","shippingSla":"Shipping SLA (delivered by expected)","mttrHours":"MTTR (hours)","repairsClosed":"Repairs closed","repairsOpen":"Repairs open","returnReconciliation":"Return reconciliation","totalObligations":"Total obligations","reconciled":"Reconciled","outstanding":"Outstanding","discrepancy":"Discrepancy","notReturned":"Not returned","repairThroughput":"Repair throughput (closed by disposition)","noClosedRepairs":"No closed repair jobs yet.","inventoryLevels":"Inventory levels (on hand by warehouse and condition)","noStock":"No stock on hand yet.","colWarehouse":"Warehouse","condGood":"Good","condDefective":"Defective","condInRepair":"In-Repair","condScrap":"Scrap","colTotal":"Total"},"door":{"notInstalledDescription":"The Internal Operations boards have not been provisioned in this environment. A platform admin installs the \"Internal Operations\" app from Admin → Apps (it materialises every board once).","missingBoardTitle":"This board is missing","missingBoardDescription":"The Internal Ops workspace exists but this board could not be found — it may have been archived. A platform admin can re-install the app to restore it.","noAccessTitle":"You do not have access to this board","noAccessDescription":"This board exists but you are not a member. Ask an Internal Ops workspace admin to grant you access.","fallbackLabel":"Internal Ops"}},"logisticsMonitor":{"eyebrow":"Logistics Hub","title":"Inbound Monitor","description":"Inbound lanes, on-time performance and the most overdue SOs — read live from the canonical inbound feed.","lanesTitle":"Lanes","laneOverdue":"Overdue","laneThisWeek":"This week","laneLater":"Later","laneNoEta":"No ETA","laneDelivered":"Delivered","estadoTitle":"Company status","estadoOnTime":"On time","estadoAtRisk":"At risk","estadoLate":"Late","totalsTitle":"Totals","activeSos":"Active SOs","inTransitSos":"SOs in transit","activeLines":"Active lines","pendingUnits":"Pending units","avgProgress":"Avg. progress (open SOs)","arriving7d":"Arriving in 7 days","topLateTitle":"Top 10 most overdue SOs","topLateEmpty":"No overdue SOs — everything is on time.","colSo":"SO","colClient":"Client","colRegion":"Region","colPromise":"Promise","colProgress":"Progress","colDaysLate":"Days late","byRegionTitle":"By region","regionActiveSos":"Active","regionLateSos":"Overdue","feedTitle":"Feed health","feedStatus":"Status","feedRunning":"Running","feedCompleted":"Completed","feedCompletedWithErrors":"Completed with errors","feedFailed":"Failed","feedAbandoned":"Abandoned","feedStalled":"Stalled","feedFreshnessStalled":"The run never closed — it will be marked abandoned","feedFreshnessAging":"A scheduled run was missed","feedFreshnessStale":"The feed is not running — check the cron","feedLastRun":"Last run","feedNever":"No sync run yet","feedFetched":"Fetched","feedInserted":"Inserted","feedUpdated":"Updated","feedDeactivated":"Deactivated","feedErrors":"Errors","feedActiveLines":"Active lines","feedLastSeen":"Last seen","openInbound":"Open Inbound","openOutbound":"Outbound","emptyTitle":"No inbound data yet","emptyBody":"The inbound feed has not populated any lines yet. Once the Logistics Hub inbound sync runs, SOs, lanes and on-time metrics will appear here.","emptyCta":"Open Modules"},"logisticsInboxSo":{"eyebrow":"Logistics Hub","title":"Inbox SO","description":"Customer POs that arrived by email or WOI, one case per CPO. Choose quotes, resolve lines, set the destination or retry — every change is written on the Inbox CPO board under your name and applied on the next cycle.","tabLabel":"Inbox SO","emptyTitle":"No CPOs","emptyDescription":"No customer PO has arrived yet, or none matches the filters.","notConfiguredTitle":"Inbox CPO is not configured","notConfiguredBody":"The Inbox CPO board (CPO_INBOX_BOARD) has not been set. Configure it in the module settings.","notConfiguredCta":"Open module settings","schemaInvalidBanner":"The Inbox CPO board does not match its contract, so the list is read-only and every action is disabled. What is missing:","capNotice":"Showing the {count} most recent cases; older ones are not listed.","columns":{"status":"Status","cpoNumber":"CPO number","customer":"Customer","channel":"Channel","company":"Company","receivedAt":"Received","toReview":"To review","soNumber":"SO number","soLink":"SO link"},"status":{"recibida":"Received","pdf_listo":"PDF ready","leida":"Read","quote_ok":"Quote found","so_borrador":"Draft SO","confirmada":"Confirmed","especial_revisar":"Special: review","revision_andrea":"Needs review","cambio_cpo":"CPO change","no_reconocido":"Not recognized","error":"Error","descartada":"Discarded"},"problem":{"sin_quote":"No quote","varias_candidatas":"Several candidates","precio_distinto":"Different price","cantidad_excede":"Quantity exceeds","pn_no_encontrado":"PN not found","dato_dudoso":"Doubtful data","resuelta":"Resolved"},"channel":{"woi":"WOI","ariba":"Ariba","correo":"Email","woi_correo":"WOI + email","manual":"Manual"},"lines":{"title":"Lines with a problem","problem":"Problem","pn":"Part number","qty":"Qty","unitPrice":"Unit price","candidates":"Candidates","chosenQuote":"Chosen quote","choose":"Choose quote","chooseOther":"Other quote number…","saveQuote":"Save quote","markResolved":"Mark resolved","needsQuoteFirst":"Choose a quote before marking the line resolved.","none":"This case has no lines with a problem."},"destination":{"label":"Destination Incoterm","placeholder":"e.g. MIAMI","save":"Save destination","hint":"The destination code in Redix for this CPO. Saving it re-plans the sales order on the next cycle.","choose":"Choose a destination"},"detail":{"pdf":"CPO PDF","openPdf":"Open PDF","noPdf":"No PDF attached yet.","standard":"Standard CPO","showJson":"Show JSON","hideJson":"Hide JSON","downloadJson":"Download JSON","noStandard":"The CPO has not been read yet.","lastError":"Last error","loading":"Loading case…","loadFailed":"The case could not be loaded.","close":"Close","caseActions":"Case actions","revisionWithoutLines":"This case needs review but has no lines to resolve (missing SO fields, PDF without text, invalid profile or unverified sender). Only the Destination Incoterm can reactivate it from here; otherwise fix it on the board."},"salesOrder":{"title":"Sales Order","status":"Status","total":"Total","destination":"Destination","pn":"PN","quantity":"Qty","unitPrice":"Unit price","noLines":"The sales order has no lines.","unavailable":"The sales order could not be read from Redix right now.","open":"Open in Redix"},"timeline":{"title":"Timeline","empty":"No events yet.","engine":"engine"},"actions":{"discard":"Discard","discardConfirm":"Discard this CPO? The case closes once the next cycle applies it.","discardReason":"Discard reason","discardReasonRequired":"Write the reason for discarding.","discardUnavailable":"Add a “Discard Reason” column to the Inbox CPO board to discard from here. You can still discard by hand on the board.","approveRead":"Approve reading","approveReadHint":"The CPO reading went to review (evidence, confidence or fields). If you checked the PDF and the reading is right, approve it: the engine goes on with the quote match and the sales order plan on the next cycle. No other check is skipped.","approveReadUnavailable":"Approve reading only applies to a case in review because of the reading: CPO read, no sales order plan, no sales order and no open problem lines.","retry":"Retry","retryOnlyFromError":"Retry is not available in this state (closed, already queued or CPO change).","retryHasSo":"This case already has (or is creating) a sales order in Redix: retrying could create a second one.","pendingRow":"Board row pending — the engine has not created this case’s row yet.","rowArchived":"Row archived on the board — this case can no longer be edited from here.","closed":"This case is closed.","engineActor":"You are signed in as the user the Inbox CPO engine writes with, so the engine would treat your edits as its own and never apply them. Use your personal account.","appliesNextTick":"Applies on the next cycle (≤5 min)","cancel":"Cancel","confirm":"Confirm"},"toast":{"saved":"Saved on the board. It applies on the next cycle (≤5 min).","forbidden":"You do not have access to the Inbox SO.","casLost":"The case changed in the meantime. Reload and try again.","notFound":"That case or line no longer exists.","boardWriteFailed":"The board rejected the change — nothing was saved. You can try again.","invalidInput":"That value is not valid for this field.","notConfigured":"Inbox CPO is not configured.","schemaInvalid":"The board does not match its contract; actions are disabled."},"filters":{"status":"Status","company":"Company","allCompanies":"All companies","search":"Search CPO or customer","showClosed":"Show confirmed and discarded","clear":"Clear filters","noCompany":"No company"},"boundary":{"soDraftsNote":"Sales-order drafts born from customer REQUESTS live in SO Drafts; this tab only covers customer POs (CPO)."}},"logisticsIntake":{"eyebrow":"Logistics Hub","title":"Reception","description":"Every forwarded vendor email is a case — categorized, extracted and correlated. Review, correct and approve each one; approving loads it into the Entrantes feed.","pipelineBanner":"Live pipeline — every forwarded email is classified and extracted automatically. Review and correct each case here.","pipelineBannerAlign":"Live pipeline — every forwarded email is classified, extracted and aligned to a sales-cycle stage automatically. Review and correct each case here.","emptyTitle":"No cases in the inbox","emptyBody":"Nothing to review right now. When vendor emails are forwarded to the intake mailbox, the AI categorizes and extracts each one and it lands here as a case to approve.","emptyFilteredTitle":"No cases match these filters","emptyFilteredBody":"Try clearing a filter or the search box.","clearFilters":"Clear filters","filters":"Filters","search":"Search","searchPlaceholder":"Subject, vendor, PO, tracking…","filterStatus":"Status","filterCategory":"Category","filterVendor":"Vendor","filterConfidence":"Confidence","filterMissingSo":"Missing SO only","filterStage":"Stage","filterUnaligned":"Unaligned only","all":"All","resultsCount":"cases","resultsCountOne":"case","loadMore":"Show more","loadMoreCount":"{shown} of {total}","capNotice":"{n} more cases exist but are not loaded here — this screen holds the most recent ones. Filtering will not reach them.","status_nuevo":"New","status_clasificado":"Classified","status_pendiente_aprobacion":"Pending approval","status_aprobado":"Approved","status_rechazado":"Rejected","status_falta_info":"Missing info","status_tracking_cargado":"Tracking loaded","status_auto_aprobado":"Auto-approved","status_sin_clasificar":"Unclassified","cat_factura_pdf":"Invoice (PDF)","cat_hilo_tracking":"Tracking thread","cat_ebay":"eBay","cat_portal":"Portal","cat_ruido":"Noise","cat_falta_info":"Missing info","cat_peticion_cliente":"Customer request","cat_notificacion_estado":"Status notification","conf_high":"High","conf_medium":"Medium","conf_low":"Low","conf_none":"Not scored","colCategory":"Category","colStage":"Stage","colVendor":"Vendor","colPo":"PO#","colInvoice":"Invoice#","colParts":"Part#(s)","colQty":"Qty","colCarrier":"Carrier","colTracking":"Tracking#","colShipDate":"Ship date","colSo":"SO","colConfidence":"Confidence","colReceived":"Received","colStatus":"Status","badgePoNotFound":"No SO","badgeNoTracking":"No tracking","badgeDuplicate":"Possible duplicate","badgeBackorder":"Backorder / partial","review":"Review","approve":"Approve","approveAndNext":"Approve & next","reject":"Reject","markNeedsInfo":"Mark missing info","requestInfo":"Request info","edit":"Edit","save":"Save","cancel":"Cancel","close":"Close","openSource":"Open source","emailFormattedView":"Formatted view","emailPlainView":"Plain text","emailLoading":"Loading the email…","emailLoadFailed":"Could not load the email.","emailRetry":"Retry","emailRetryFailed":"The retry did not work — what you see is still the previous result. You can try again.","emailUnavailableNotice":"This is NOT the original email","emailUnavailableBody":"We could not bring you the original message, so what you see below is the plain text captured at ingest — no formatting, no attachments, no images.","emailUnavailableReasonNotConnected":"Why: this case's mailbox is not connected in RedsisOne, so we cannot open the original. The email is still in the mailbox — what is missing is the connection. This case has no archived copy either.","emailUnavailableReasonMailbox":"Why: the original could not be read from the mailbox, and this case has no archived copy.","emailUnavailableReasonArchive":"Why: the original could not be read from the mailbox, and the archived .eml copy for this case is not available in storage.","emailUnavailableReasonUnknown":"Why: we could not determine it. Fetching the original failed without reporting which step broke, so we will not name a cause.","emailTruncatedNotice":"This email is very large and was truncated — switch to plain text to read it all.","emailNoContent":"This email has no readable content.","emailTo":"To","emailCc":"CC","remoteImagesBlocked":"Remote images blocked","remoteImagesShow":"Show images","attachmentsTitle":"Attachments","attachmentOpen":"Open","attachmentDownload":"Download","attachmentTooLargeInline":"Too large to preview — download","downloadEml":"Download original .eml","correctCorrelation":"Correct correlation","bulkApprove":"Approve selected","bulkReject":"Reject selected","selectAll":"Select all","clearSelection":"Clear","selected":"selected","reviewCase":"Review case","railCaseWithPo":"Case · {po}","tabExtracted":"Extracted","tabEvidence":"Evidence","extractedFields":"Extracted fields","fieldVendor":"Vendor","fieldPo":"PO#","fieldInvoice":"Invoice#","fieldCarrier":"Carrier","fieldTracking":"Tracking#","fieldShipDate":"Ship date","fieldShipTo":"Ship to","amounts":"Amounts","subtotal":"Subtotal","tax":"Tax","shipping":"Shipping","total":"Total","linesTitle":"Line items","partNumber":"Part#","serial":"Serial","qty":"Qty","lineDescription":"Description","backordered":"Backordered","noLines":"No line items extracted.","correlationTitle":"Correlation","correlatedSo":"Sales Order (SO)","client":"Client","noSo":"No SO matched","soPlaceholder":"e.g. SO-2600973","vpoLinesTitle":"Matched VPO lines","evidenceTitle":"Source evidence","noEvidence":"No evidence stored for this case.","from":"From","subject":"Subject","receivedAt":"Received","aiModel":"AI model","confidenceLabel":"Confidence","fieldConfidence":"Field confidence","fieldSource":"Extracted from","reviewedBy":"Reviewed by","reviewNote":"Note","correctionsTitle":"Corrections","correctionEntry":"changed","rejectReason":"Reason for rejecting","rejectReasonPlaceholder":"Why is this being rejected?","needsInfoReason":"What is missing?","needsInfoReasonPlaceholder":"What information is missing?","rejectConfirm":"Reject this case?","suggestReject":"Looks like noise — suggest rejecting.","reopenHint":"Reopened from discarded — recategorize if needed, then approve.","showDiscarded":"Show discarded","reopen":"Reopen","recategorize":"Recategorize","fieldCategory":"Category","requestInfoNote":"Drafts an email to the vendor (draft only — never auto-sent).","none":"—","toastApproved":"Case approved — tracking confirmed.","toastRejected":"Case rejected.","toastNeedsInfo":"Marked as missing info.","toastSaved":"Changes saved.","toastCorrelated":"Correlation updated.","toastReopened":"Case reopened.","toastRecategorized":"Category updated.","toastRequestInfo":"Draft prepared (not sent).","toastRealigned":"Stage updated.","toastError":"Something went wrong — try again.","toastNothingSelected":"Select at least one case first.","toastBulkPartial":"Some cases were skipped.","toastApprovedDuplicate":"This tracking was already confirmed — case marked as loaded.","toastErrorNoSuggestions":"There is no suggested tracking to confirm on this case.","toastErrorTerminal":"This case has already been resolved.","toastErrorNotFound":"Case not found.","toastErrorForbidden":"You do not have permission for this action.","toastErrorConfirmFailed":"Could not confirm the tracking — review it in VPO Tracking.","chipAlreadyConfirmed":"Tracking already confirmed","noSuggestionTitle":"No suggested tracking to confirm","noSuggestionBody":"This case has no active tracking suggestion. Review the VPO in VPO Tracking to confirm the tracking there.","noSuggestionMissingTracking":"This case is missing a tracking number.","noSuggestionMissingPo":"This case is missing a purchase order (PO).","noSuggestionLink":"View in VPO Tracking","fieldStage":"Stage","stageUnaligned":"Unaligned","stageNotProcessed":"Not processed (email predates alignment)","stageCircuitTitle":"Sales-cycle stage","stageCurrent":"Current","fieldWaiting":"Waiting…","metricSinClasificar":"Unclassified","metricSinAlinear":"Unaligned","metricAligned":"Aligned","universeSoTitle":"SO in our VPO universe","universeSoSuggested":"suggested","universeSoOfN":"1 of {n}","universeSoOfUnknown":"1 of ?","universeSoAmbiguousUnknown":"The universe did not report how many SOs this VPO touches, so the one shown may be only a sample. Pick the right one.","universeSoAmbiguousUnknownKey":"We could not confirm how many SOs this key resolves to, so the one shown may be one of several. Pick the right one.","universeSoHint":"Found in our own VPO universe by this PO — not linked yet.","universeSoUse":"Use this SO","universeSoChoose":"Pick the SO","universeSoUseSample":"Use the sample anyway","universeSoEvidence":"Found by PO {po} in our VPO universe — nobody has linked it to this case yet.","universeSoAmbiguous":"This VPO touches {n} SOs — the one shown is only a sample. Pick the right one.","universeSoHintTracking":"Found in our own inbound mirror by this tracking number — not linked yet.","universeSoHintInvoice":"A person already linked this same vendor invoice to this SO on an earlier case.","universeSoTitleTracking":"SO found by the tracking number","universeSoTitleInvoice":"SO of the same invoice","universeSoEvidenceTracking":"Found by tracking {key} in our own inbound mirror — nobody has linked it to this case yet.","universeSoEvidenceInvoice":"Invoice {key} from this vendor was already linked to this SO by a person on an earlier case — nobody has linked it to this one yet.","universeSoCandidatesTitle":"Candidate SOs ({n})","universeSoAmbiguousKey":"This key resolves to {n} SOs — pick the right one; nothing is chosen for you.","filterSourceInput":"Origin","colSource":"Origin","inputsLink":"Intake inputs","inputsTitle":"Intake inputs","inputsDescription":"Every source that feeds the intake — mailboxes and platforms — with its status and how many cases have come in through it.","inputsBackToInbox":"Back to inbox","colInputKind":"Type","colInputAddress":"Address","colInputActive":"Status","colInputCount":"Cases","colInputLastSeen":"Last case","colInputNotes":"Notes","kindMailbox":"Mailbox","kindPlatform":"Platform","inputActive":"Active","inputInactive":"Inactive","inputNeverSeen":"No cases yet","inputs":{"aiagent":"AI Agent","accounting":"Accounting","purchasing":"Purchasing","ebay":"eBay","ibacs_feed":"IBACS / feed","portal":"Vendor portal","direct":"Direct"},"autopass":{"chipVerified":"Verified against legacy","panelTitle":"Auto-verification","verifiedSentence":"The PO in the email was looked up in the legacy system and every fact compared agreed. The case was closed without human review.","exceptionFallback":"This case needs your review.","stampKey":"Verified PO","stampSource":"Answered by","stampDecidedAt":"Decided","none":"—","colEmail":"What the email said","colSystems":"What our systems said","truncated":"Long list — only the first facts are shown; every disagreement is included.","agoJustNow":"just now","agoMinutes":"{n} min ago","agoHours":"{n} h ago","agoDays":"{n} d ago","v_match":"Match","v_mismatch":"Disagree","v_only_email":"Only in the email","v_only_system":"Only in our systems","v_undecided":"Undecided","metricsWindow":"Last 24 h","metricsCases":"cases","metricsAutoApproved":"auto-verified","metricsExceptions":"exceptions","metricsUnavailable":"The auto-pass metric could not be read right now.","r_caso_ya_resuelto":"Already decided","r_sugerencia_multi_po":"Email with several POs","r_sin_sugerencia_propia":"No suggestion to confirm","r_sin_po_valida":"No usable PO","r_sistemas_no_consultados":"Systems not asked","r_sistemas_no_respondieron":"Systems did not answer","r_vpo_no_encontrada":"VPO not found","r_vpo_cerrada":"VPO already closed","r_po_no_verificada":"PO not verified","r_contraste_no_corrio":"No comparison ran","r_contraste_no_interpretable":"Comparison unreadable","r_discrepancia_con_sistemas":"Disagrees with our systems","r_motor_de_hallazgos_degradado":"Findings engine degraded","r_hallazgos_abiertos":"Open findings","r_hallazgos_no_legibles":"Findings could not be checked","r_pn_fuera_de_la_po":"Part not on the PO","r_confianza_no_alta":"Confidence not high","r_cupo_diario_agotado":"Daily quota reached","r_confirmacion_fallida":"Could not be confirmed"},"lookup":{"title":"Systems (legacy)","subtitle":"Read-only — nothing is written from here.","colEmail":"What the email says","colSystems":"What our systems say","emailSilent":"The email does not say","systemsSilent":"Our systems do not carry it","rowSo":"SO","rowReceived":"Received at the warehouse","verdictMatch":"Match","verdictDiffers":"Do not match","verdictOnlyEmail":"Only in the email","verdictOnlySystems":"Only in our systems","verdictNeither":"Neither side carries it","freshPrefix":"Data from","freshJustNow":"a moment ago","freshMinutes":"{n} min ago","freshHours":"{n} h ago","freshDays":"{n} d ago","freshNone":"Never asked","freshNoAnswer":"No answer","sourceLabel":"Source","latency":"answered in {n} ms","retry":"Retry","loading":"Asking the systems…","refreshing":"Refreshing the answer…","refreshFailed":"Could not refresh — showing the previous answer with its real age.","healthAnswered":"The systems answered","healthUnreachable":"Could not ask","healthNeverAsked":"Nothing to ask with","classAnswered":"We know what there is","classKnownAbsent":"We know there is none","classNeverAsked":"We do not know","classUnreachable":"We could not ask","diag":{"correlacionada":"The systems resolved exactly one SO for this key.","ambiguo_n_sos":"This key resolves to several SOs — a person picks, never the machine.","vpo_cerrado":"The VPO is closed or fully received — the shipment already happened.","po_inexistente":"We asked and the legacy resolved no SO for this key.","sin_clave":"This case carries no PO and no valid tracking, so nobody asked.","ebay_sin_via":"The only identifier is an eBay order number, and the legacy has no route for it.","fuente_no_disponible":"We could not reach the systems, so we learned nothing about this case."},"errForbidden":"You do not have permission to query the systems.","errDisabled":"The systems lookup is switched off.","errNotFound":"This case no longer exists.","errRateLimited":"Too many queries in a row — wait a few seconds and retry.","errUnexpected":"The query failed. Retry, and report it if it keeps failing.","linesTitle":"Lines according to our systems","colOrdered":"Ordered","colReceivedQty":"Arrived","colVpo":"VPO","linesMore":"+{n} more lines not shown","filterLabel":"Diagnosis","filterNone":"Askable, not asked yet","diagShort":{"correlacionada":"One SO","ambiguo_n_sos":"Several SOs","vpo_cerrado":"Closed VPO","po_inexistente":"No SO in the legacy","sin_clave":"No key to ask with","ebay_sin_via":"eBay with no route","fuente_no_disponible":"Systems unreachable"}},"findings":{"sectionTitle":"Contrast","openCount":"{n} to review","noneChecked":"This case has not been contrasted yet.","checkedBy":"Contrasted by {key} {value} · {when}","keyPo":"PO#","keyTracking":"tracking","emailSays":"The email says","systemSays":"Our systems say","confirm":"Confirm","dismiss":"Dismiss","reopen":"Reopen","judgedTitle":"Already reviewed ({n})","judgedBy":"Reviewed by {who} on {when}","outdatedTitle":"The values changed after you reviewed this ({n})","outdatedBadge":"Changed after review","outdatedWhy":"This finding was contrasted again after your call, and the two values below are the current ones — not the ones you saw. Take another look and reopen it if it matters.","outdatedChangedAt":"Values changed on {when}","outdatedKeyCaveat":"Not every finding below comes from that contrast: {n} were contrasted again after somebody reviewed them.","statusConfirmed":"Confirmed","statusDismissed":"Dismissed","sev_alta":"High","sev_media":"Medium","sev_baja":"Low","f_tracking_distinto":"Tracking number does not match","f_cantidad_no_coincide":"Quantity does not match","f_recepcion_parcial_antigua":"Partial receipt sitting for a while","f_factura_duplicada":"Invoice number repeats","f_cliente_distinto":"Different client","fw_tracking_distinto":"The tracking number in the email is not among the ones our systems hold for this deal.","fw_cantidad_no_coincide":"The quantity in the email differs from the quantity ordered on the line.","fw_recepcion_parcial_antigua":"The line is partly received and the last receipt is older than the window.","fw_factura_duplicada":"The same invoice number is already on another intake case.","fw_cliente_distinto":"The client on the email and the client on the SO are not the same one.","undecidedTitle":"Could not be compared ({n})","undecidedNotAFinding":"This is not a finding: they are two different facts, not a discrepancy.","u_tracking":"This deal ships in waves: the tracking in the email may belong to another one.","u_cantidad":"Partial shipment or backorder: the email covers one dispatch and the line covers the whole order.","u_cliente":"The names differ as text and nobody has been able to decide whether they are the same company.","u_fecha":"There is no comparable pair of dates for this shipment.","k_tracking":"Tracking","k_cantidad":"Quantity","k_cliente":"Client","k_fecha":"Date","notInterpretable":"This contrast cannot be read here: its version or its key is not one this screen understands. Nothing is shown rather than half of it.","loading":"Loading the contrast…","loadError":"The contrast could not be loaded.","retry":"Retry","errForbidden":"You do not have permission to review findings.","errDisabled":"The contrast is switched off.","errNotFound":"That finding is no longer there. Reload the case.","errGeneric":"The action failed. Retry, and report it if it keeps failing.","toastConfirmed":"Finding confirmed","toastDismissed":"Finding dismissed","toastReopened":"Finding reopened","filterHasFindings":"With findings","badgeFindings":"{n} findings"},"vpos":{"eyebrow":"Logistics Hub","title":"Incoming VPOs","description":"Every VPO that still has no confirmed tracking — the AI suggests the tracking on the right VPO with its evidence, ready for you to confirm. Open a VPO to review it.","summaryPending":"Pending VPOs","summaryActionable":"With a suggestion","summaryAwaiting":"Awaiting email","emptyTitle":"No pending VPOs","emptyBody":"Every incoming VPO already has a confirmed tracking. New VPOs appear here as soon as the feed sees them without a tracking.","soLabel":"SO","vpoLabel":"VPO","vendorLabel":"Vendor","clientLabel":"Client","carrierLabel":"Carrier","untrackedLines":"line(s) without tracking","awaitingSuggestion":"No suggestion yet — waiting for the vendor email.","bandLabel":"Confidence","moreHidden":"more VPOs not shown (filters arrive next).","multiPoLabel":"Email with several POs — verify the PO before confirming.","universeBadge":"Universe","itemsLabel":"item(s)","band":{"alta":"High","baja":"Low"},"status":{"sugerido":"Suggested","confirmado":"Confirmed","rechazado":"Rejected","reemplazado":"Superseded"},"reviewLink":"Review","confirm":"Confirm","reject":"Reject","rejectSubmit":"Reject with reason","cancel":"Cancel","confirmedDone":"Confirmed","rejectedDone":"Rejected","reasonLabel":"Reason (required)","reasonPlaceholder":"Why is this suggestion wrong? (short note — no email/invoice text)","reasonCategoryLabel":"Category","rejectCategory":{"po_incorrecta":"Wrong PO","tracking_incorrecto":"Wrong tracking","no_relevante":"Not relevant","duplicado":"Duplicate","carrier_incorrecto":"Wrong carrier","otro":"Other"},"actionErrors":{"generic":"Something went wrong. Please try again.","reason_required":"A reason is required to reject.","not_found":"That suggestion no longer exists.","forbidden":"You do not have permission to do that.","out_of_scope":"That suggestion is outside your region.","line_inactive":"That VPO line is no longer active.","not_suggested":"That suggestion was already resolved.","invalid_category":"Pick a valid reason category.","tracking_conflict":"That tracking is already active on this VPO line — pick a different one."}}},"fsServiceIntake":{"triage":{"viewLabel":"View","tabTriage":"Triage","tabGrid":"Grid","subtitle":"Review each incident, set its classification, then promote it to a ticket.","summaryWaiting":"{n} incident(s) waiting","emptyTitle":"Inbox clear","emptyBody":"No incidents waiting — you’re all caught up.","beforePromote":"Before you promote:","readyToPromote":"Ready to promote","needCategory":"Set category","needSubcategory":"Set subcategory","needSite":"Set site","needClient":"Set client contact","promote":"Promote to ticket","classify":"Classify","classifyHint":"Set category, site and client on the board","working":"Working…","promoteBlockedNoBoard":"Can’t promote yet — this project has no Tickets board with the Field Service bridge active. Set it up in Setup & Systems.","promoteBlockedMultiBoard":"Can’t promote — this project has more than one Tickets board with the Field Service bridge active. There must be exactly one.","processedShow":"Show {n} processed","processedHide":"Hide processed","openTicket":"Open ticket","slaBreached":"SLA breached","slaPaused":"SLA paused","slaLeft":"left","terminalNoTicket":"Closed in triage — no ticket created.","bridgePendingNote":"The ticket is already being created on the board; it gets linked on the next attempt (automatic, or by pressing Approve again).","retryLink":"Retry link","bridgeItemGoneNotice":"The board item was deleted; review it before promoting.","promoteAgain":"Promote again","promoteAgainConfirm":"This creates a NEW ticket item for this incident. Do it only if the deleted one was not meant to stay deleted.","snTerminalNotice":"Resolved in ServiceNow ({state}). No ticket is created.","snUnknownChip":"ServiceNow: no state","snStateChip":"ServiceNow state: {state}","discardSnTerminal":"Discard: resolved in ServiceNow","promoteAnyway":"Promote anyway…","overrideReasonLabel":"Why does this need a ticket even though ServiceNow closed it?","overrideReasonPlaceholder":"E.g. the client closed the incident but the warranty visit is still pending","overrideReasonTooShort":"Write a reason of at least {n} characters.","overrideConfirm":"Create the ticket anyway","discardAllSnTerminal":"Discard the ones resolved in ServiceNow ({n})","discardAllConfirmText":"{n} incident(s) on this page are already resolved, closed or cancelled in ServiceNow. Each one is re-checked before it is discarded; the ones ServiceNow reopened are skipped.","discardAllConfirm":"Discard {n}","discardAllDone":"{discarded} discarded · {skipped} skipped (ServiceNow reopened them or they changed).","discardAllRemaining":"{n} more remain — run it again to discard them.","discardAllSnTerminalCapped":"Discard {cap} of {n} resolved in ServiceNow","assignBlockedSnTerminal":"Can’t create a work order: ServiceNow already resolved this incident ({state}). Discard it or use “Promote anyway…”.","mirrorStaleBanner":"The ServiceNow mirror hasn’t updated in {n} h: the ServiceNow state shown here may be out of date.","mirrorDownBanner":"The ServiceNow mirror isn’t responding and there’s no record of its last update: the state shown here may be out of date."},"eyebrow":"Field Service","title":"Inbox","description":"Each ServiceNow incident lands here as a live ticket — the ServiceNow data plus an AI complement (diagnosis, parts, severity). Monitor, correct and act on each one directly, with no approval step. Whether a case is also mirrored onto the project Tickets board depends on that board having the Field Service bridge active — each case states its own status in its panel.","navIntakeTitle":"Inbox","projectLabel":"Project","pickerTitle":"Choose a project","pickerOpen":"open","pickerAllClear":"All clear","pickerOpenIntake":"Open inbox","resumeLast":"Continue","backToProjects":"Projects","noBoardsTitle":"No intake board linked yet","noBoardsBody":"The ServiceNow integrator links (or creates) the intake board per project. Once a board is marked as service intake, its cases appear here to review.","noAccessTitle":"You don't have access to any intake board","noAccessBodyOne":"There is 1 intake board, but it is not shared with you.","noAccessBodyMany":"There are {n} intake boards, but none of them is shared with you.","noAccessAskOwners":"Ask {owners} for access.","noAccessAskOwnerUnknown":"Ask the board's owner for access.","emptyTitle":"No cases in this project","emptyBody":"Nothing here right now. As ServiceNow incidents sync in and the AI enriches them, they land here as live tickets to monitor.","selectCaseTitle":"Select a case","selectCaseBody":"Pick a case from the list to review its details and act on it.","untitledCase":"(no description)","dismiss":"Dismiss","status_nuevo":"New","status_en_revision":"Reviewing","status_promoting":"Promoting…","status_aprobado":"Ticket","status_rechazado":"Rejected","status_duplicado":"Duplicate","status_falta_info":"Needs info","stNew":"New","stReviewing":"Reviewing","stPromoted":"Ticket","stageCurrent":"Current","badgeSn":"ServiceNow","badgeIa":"AI","sectionServiceNow":"From ServiceNow","sectionSuggestions":"AI complement","sectionTriage":"Case triage","confidence":"Confidence","aiModelLabel":"Source","fieldSource":"from","fieldWaiting":"—","mirrorNoAccess":"(no access)","mirrorHiddenSuffix":"+{n} hidden","mirrorHiddenTitle":"{n} linked item(s) you don't have permission to view","fRequester":"Requester","fPriority":"Priority","fCategory":"Category","fCiAsset":"CI / Asset","fSite":"Site","fDescription":"Description","fDiagnosis":"Suggested diagnosis","fProblemType":"Problem type","fSeverity":"Severity","fProductSku":"Part number / SKU","fParts":"Suggested parts","fSuggestedTech":"Suggested technician","suggestedByAi":"AI-suggested","noSuggestions":"AI suggestions unavailable — work from the ServiceNow data and act on the ticket directly.","edit":"Edit","done":"Done","assignLabel":"Assign to technician","selectSp":"Select a technician…","noSps":"No assignable technicians","actApproveAssign":"Approve and assign","actApprove":"Approve","actReject":"Reject","actNeedsInfo":"Needs info","actDuplicate":"Duplicate","noteLabel":"reason","notePlaceholder":"Add a reason (required)…","confirm":"Confirm","cancel":"Cancel","terminalApproved":"Live on the Tickets board.","terminalRejected":"Flagged: rejected.","terminalDuplicate":"Marked as duplicate.","openInServiceNow":"Open in ServiceNow","filters":"Filters","search":"Search","searchPlaceholder":"Search cases…","filterStatus":"Status","filterCategory":"Category","filterPriority":"Priority","all":"All","colSn":"SN#","coordStateLabel":"Coordinator status","coordStatePick":"Pick a status…","coordStateHint":"It lives in a board column — automations can move it too.","coordStateMissingColumn":"This project board does not have the Estado Coordinador column yet.","slaA11yOk":"within target","slaA11yMet":"met on time","slaA11yWarning":"at risk","slaA11yCritical":"due soon","slaA11yBreached":"breached","slaA11yPaused":"clock stopped","slaA11yNone":"no SLA linked","slaUnitDay":"{n}d","slaUnitHour":"{n}h","slaUnitMinute":"{n}m","orderBy":"Sort","orderDue":"By due date","orderOldest":"Oldest first","orderNewest":"Newest first","pageOf":"page {n} of {total}","promoteToTicket":"Promote to ticket","promoteWorking":"Promoting…","prePromoteTitle":"Before promoting · as things stand right now","prePromoteLoading":"Working out how the ticket would be born…","prePromoteFailed":"The preview could not be computed","prePromoteSiteWord":"Site","prePromoteSlaWord":"SLA","prePromoteSiteResolved":"It will be born at {site}, client {client}.","prePromoteSiteClientOnly":"Client {client} is proven, but {site} matches no registered address — the ticket will be born with no site.","prePromoteSiteUnproven":"The contract has a client, but nothing on this case confirms it — the ticket will be born with no client and no site.","prePromoteSiteConflict":"Two signals on this case disagree about the client — the ticket will be born with no client and no site.","prePromoteSiteNone":"There is nothing here to resolve this case’s client with — the ticket will be born with no client and no site.","prePromoteSiteMissing":"the case does not say the site","prePromoteSlaResponse":"Response","prePromoteSlaArrival":"Arrival","prePromoteSlaResolution":"Resolution","prePromoteSlaNoTarget":"no target","prePromoteNoClockNoContract":"It will be born with no clock: this project has no contract to take the deadlines from.","prePromoteNoClockNoTerms":"It will be born with no clock: the contract has no deadlines set for {severity}.","prePromoteContract":"Contract {name}","prePromoteSeverity":"Severity {severity}","prePromoteAsOfNow":"Computed now; the promotion runs afterwards. If something changes in between, the two will differ.","caseSiteTitle":"Site","caseSiteWhy":"Pick it before promoting: the ticket is then born with its client, address and classification.","caseSiteNone":"No site picked yet","caseSiteUnnamed":"Linked site (its name is not readable from here)","caseSiteSearchLabel":"Search a site","caseSiteSearchPlaceholder":"Type to search sites…","caseSiteSearching":"Searching…","caseSiteNoResults":"No site matches that search.","caseSiteNotFoundHelp":"If the site does not exist yet, ask for it to be created on the Sites board — it will show up here right after.","caseSiteMore":"More results exist — narrow the search.","caseSiteChange":"Change","caseSiteClear":"Remove site","caseSiteSaving":"Saving…","caseSiteSaved":"Site saved","caseSiteUnchanged":"That site was already picked","caseSiteNoColumn":"This intake board has no site column (`location (Site)`), so the site cannot be picked from here. Ask for the column to be added to the board.","caseSiteNoRow":"This case has no row on an intake board, so there is nowhere to store the site.","caseSiteForbidden":"You do not have access to this case’s intake board.","caseSiteMissingCase":"This case no longer exists.","caseSiteFailed":"The site could not be saved.","caseSiteLoadFailed":"Sites could not be loaded.","colDue":"Due","colTicket":"Ticket","noTicket":"no ticket","noSlaLinked":"no SLA","slaPaused":"paused","slaMet":"met","openedAgo":"{age} old","colOpened":"Opened","batchSelectAll":"Select all","batchCount":"{n} selected","batchReject":"Reject selected","batchDuplicate":"Mark as duplicate","batchClear":"Clear selection","batchNotePlaceholder":"Reason (required, saved on the ticket)","batchConfirm":"Apply to selected","batchWorking":"Applying…","batchNoteRequired":"A reason is required to apply","batchDone":"{n} done","batchFailed":"{n} could not be done — still selected","batchDismiss":"Dismiss","colResize":"Resize column","colDescription":"Description","colCategory":"Category","colPriority":"Priority","colSucursal":"Branch","colParts":"Parts","colTech":"Suggested technician","colCoord":"Assigned coordinator","colStatus":"Status","colReviewStatus":"Review status","noMatches":"No cases match your filters.","noMatchesBody":"Every case in the project was searched, not just this page. Check the incident number or try fewer words.","viewCards":"Cards","viewGrid":"Grid","viewList":"List","sortAz":"A–Z","sortZa":"Z–A","clearFilters":"Clear filters","resultsCount":"cases","searchProjectsPlaceholder":"Search projects…","noProjectsMatch":"No projects match your search.","viewMode":"View","msgPromoted":"Case promoted to a ticket.","msgPromotedAssignFailed":"Ticket created, but the assignment failed — assign it from the ticket.","msgReviewed":"Case updated.","errForbidden":"You do not have permission to approve intake cases.","errForbiddenDispatch":"You do not have permission to assign tickets.","errNotFound":"Case not found.","errNoteRequired":"A reason is required.","errSpRequired":"Pick a technician to assign.","errNoWorkspace":"This case is not linked to a project.","errNoBridgeBoard":"No Tickets board with the Field Service bridge active in this project.","errMultipleBridgeBoards":"More than one Tickets board has the Field Service bridge active — there must be exactly one.","errWriteFailed":"Could not create the ticket — the case was NOT approved. It is still open, so you can try again.","errCaseBusy":"This case is being processed right now (its ticket is being created), so your decision was not applied. Wait a few seconds and try again.","errSnTerminal":"This incident was resolved in ServiceNow while you were reviewing it. No ticket was created.","errSnStateUnknown":"This case has no ServiceNow state, so automatic promotion skips it. No ticket was created.","errSnReopened":"ServiceNow no longer shows this incident as closed (it was reopened), so it was NOT discarded. Review it again.","errOverrideReasonRequired":"To create a ticket for an incident ServiceNow already closed, write a reason (at least 10 characters).","errDiscardNotPending":"This case is no longer pending (it already has a ticket or a decision), so it was not discarded.","errOverrideReasonTooLong":"The reason can’t be longer than 1000 characters.","errSnStateReadFailed":"Couldn’t read the ServiceNow state, so no ticket was created. Try again.","errBridgePending":"The ticket is already being created on the board; it gets linked on the next attempt (automatic, or by pressing Approve again).","errAmbiguousOrphan":"More than one unlinked item on the Tickets board could belong to this incident. None was adopted and no new one was created: someone has to pick.","errBridgeItemGone":"The Tickets item this case had registered was deleted and never got a ticket. Nothing was created: review it and use “Promote again” if appropriate.","errUnknown":"Something went wrong.","ticketActionsTitle":"Ticket actions","ticketActionsLoading":"Loading ticket actions…","ticketActionsError":"Could not load ticket actions. Refresh to try again.","ticketActionsRefresh":"Refresh","ticketActionsStatus":"Status & severity","ticketActionsAssign":"Assign technician","ticketActionsAssignHint":"Assigning schedules the technician on today’s route (creates the route stop).","ticketActionsNoTicket":"This case has no ticket yet — the technician is assigned on the ticket, which shows up here as soon as the project’s Tickets board creates it.","ticketActionsNoTicketStopped":"This case was closed in triage (rejected or duplicate), so no ticket will be created and no technician will be assigned.","ticketActionsTicketGone":"The ticket linked to this case can no longer be found — reload the Inbox; if it persists, the link has to be repaired.","ticketActionsAssignNoPermission":"You do not have permission to assign a technician on this ticket.","ticketActionsParts":"Request parts","ticketActionsNotes":"Notes & communication","ticketActionsNoteRequired":"This status change needs a reason: write it in the Reason field and try the change again. It is saved as the note for this change.","ticketActionsHistory":"History","assignPickTech":"Pick a technician…","assignCreateAndAssign":"Assign","assignWorking":"Assigning…","assignNoTechs":"No technicians available.","ticketActionsHistoryEmpty":"No activity recorded yet.","ticketActionsCancel":"Cancel ticket","boardFieldsTitle":"From the Tickets board","boardFieldsNote":"Read from the project’s Tickets board. Edit it there — this rail only shows it.","boardFieldsSla":"SLA","boardFieldsPrice":"Price","boardFieldsCost":"Cost","boardFieldsMargin":"Margin (Price − Cost)","boardFieldsCall":"Contact & call","boardFieldsParts":"Parts on the board","boardFieldsPhoto":"Technician’s photo evidence","boardFieldsEmptyCell":"Empty on the board","boardFieldsMappedAuto":"Matched by column name","boardFieldsMappedOverride":"Mapped for this board","boardFieldsSlaTarget":"Target {time}","boardFieldsSlaNoTarget":"Clock running, no target set","boardFieldsPhotoNone":"No photo evidence attached yet.","boardFieldsPhotoBroken":"This file could not be loaded — storage did not answer. The file is there; try again in a moment.","boardFieldsPhotoOpen":"Open","boardFieldsPhotoFrom":"From {item}","boardFieldsCellUnsupported":"Cannot be shown here — open it on the board","boardFieldsMappedMixed":"Partly resolved by column name, partly mapped by hand","boardFieldsAllEmptyTitle":"{n} board fields, none with a value yet","boardFieldsOpenBoard":"Open the board","descriptionMore":"See the full description","descriptionLess":"See less","boardFieldsPhotoRestricted":"{n} evidence record(s) you do not have permission to see","boardFieldsPhotoUnmapped":"No photo column is mapped on the evidence board ({n} record(s)). Map it on the Tickets board.","boardFieldsPhotoUnresolved":"{n} attachment(s) could not be resolved: the file is registered on another board — usually an item moved between boards. Report it so the reference gets repointed.","boardFieldsAbsentNoRowTitle":"This ticket is not on the Tickets board","boardFieldsAbsentNoRow":"Nothing is missing ON the board: the ticket has no live row there — either it was never linked, or the row it pointed at no longer lives on this board (deleted, or moved elsewhere). Without that row there is nowhere to read the SLA, the price or the photo evidence from. It cannot be fixed from this rail — whoever administers the project has to link the ticket to the project’s Tickets board.","boardFieldsAbsentRestrictedTitle":"You cannot read this project’s Tickets board","boardFieldsAbsentRestricted":"The ticket DOES have its row there — this is not “there is nothing”. What is missing is permission to read that board, or that row. Ask whoever administers the project for access.","boardFieldsAbsentUnmappedTitle":"No column on the Tickets board matches these five fields","boardFieldsAbsentUnmapped":"The board is readable and the ticket has its row; what is missing is the mapping. The rail matches by column NAME (Response SLA, Client Price, Contact Notes, Parts, POR) or by an explicit mapping saved on the Tickets board. Nothing is broken and no data is lost — until one of the two matches there is simply nothing to paint here.","boardFieldsAbsentNoValuesTitle":"The columns are mapped — none has a value to show yet","boardFieldsAbsentNoValues":"This is NOT “nothing is mapped”: the columns are there. Today this only happens with the SLA clock — the board engine has not computed it for this ticket yet, and a clock at zero would look exactly like “met on time”. It appears here as soon as the board computes it.","boardFieldsNoteEditable":"What you save here is written into the board cell itself — the same cell the board shows. There is no second copy.","boardFieldsPriceAmountLabel":"Amount","boardFieldsPriceSave":"Save price","boardFieldsPriceLockedTitle":"This price is already set","boardFieldsPriceLocked":"From this rail a price can only be written while it is empty or at zero, so a figure already agreed with the client is never changed by accident from a triage screen. To change it, open the ticket’s row on the board.","boardFieldsPriceAlreadySet":"Somebody set this price while this screen was open. Nothing was written — reload to see the current value.","boardFieldsCostAmountLabel":"Amount","boardFieldsCostSave":"Save cost","boardFieldsCostLockedTitle":"This cost is already set","boardFieldsCostLocked":"From this rail a cost can only be written while it is empty or at zero, so a figure already recorded is never changed by accident from a triage screen. To change it, open the ticket’s row on the board.","boardFieldsCostAlreadySet":"Somebody set this cost while this screen was open. Nothing was written — reload to see the current value.","boardFieldsCallLogTitle":"Log a call","boardFieldsCallPlaceholder":"What happened on this call","boardFieldsCallSave":"Save the call","boardFieldsCallSaved":"Call saved on the ticket.","boardFieldsCallNotMirrored":"Saved on the ticket. It could not be mirrored to the board: this project’s Tickets board has no contact-notes column mapped. Nothing was lost — map the column and the next one will land there too.","boardFieldsResponseDateAuto":"Set by the first logged call. It is never rewritten.","boardFieldsResponseDatePending":"Empty — the first call you log will set it.","boardFieldsResponseDateWhy":"This cell is what stops the response SLA clock, so it is not typed by hand — writing it would be moving the compliance figure by hand.","boardFieldsResponseDateNotMapped":"This board has no response-date column mapped, so the response clock cannot be closed from here. The call is still logged on the ticket.","boardFieldsPartsPick":"Choose parts","boardFieldsPartsSearch":"Search parts","boardFieldsPartsSave":"Save parts","boardFieldsPartsCancel":"Cancel","boardFieldsPartsNoCreate":"Only parts that already exist on the parts board can be linked. New ones are created there, not from this rail.","boardFieldsPartsEmptyBoard":"The parts board has nothing to link yet — or you cannot see its items. Open it and load the catalogue first.","boardFieldsPartsUnavailable":"This board maps Parts to a column that is not a link to a parts board, so there is nothing to pick from here.","boardFieldsPhotoReadOnly":"Read-only here: the photo evidence is what the technician attached from the field app.","boardFieldsSlaReadOnly":"Read-only: the board computes this clock.","boardFieldsCellNotEditable":"Not editable here ({type}) — open it on the board.","boardFieldsWriteSaved":"Saved on the board.","boardFieldsWriteForbidden":"It could not be written: you do not have permission to edit that board.","boardFieldsWriteNotOnBoard":"It could not be written: this ticket has no live row on the board.","boardFieldsWriteColumnNotOnBoard":"It could not be written: that column does not belong to this ticket’s board. Nothing was changed.","boardFieldsWriteNotMapped":"It could not be written: this board has no column mapped for that field.","boardFieldsWriteNoChange":"It was already like that — nothing was written.","boardFieldsContactPersonReadOnly":"Shown, never written from here: this cell holds the customer’s name. Edit it on the board.","boardFieldsWriteTruncated":"Saved on the board, but the cell could not hold it all and the oldest text was trimmed. The full note is on the ticket.","boardFieldsWriteError":"It could not be written — the board rejected the change. This is not a permissions problem: nothing was saved on the board, and you can try again."},"logisticsNav":{"cycle":"Sales Cycle","actionCenter":"Action Center","reception":"Reception","inboxSo":"Inbox SO","soDrafts":"SO Drafts","shipmentBoard":"Shipment tracking","carrierMonitor":"Carrier Monitor","monitor":"Logistics Monitor","inbound":"Inbound","vpos":"Incoming VPOs","deals":"Deals","outbound":"Outbound","routes":"Routes","vpoTracking":"VPO Tracking","sectionInboxes":"Inboxes","sectionSalesCycle":"Sales cycle","sectionPurchasing":"Purchasing / VPO","sectionShipping":"Shipping"},"homeModule":{"title":"Home","subtitle":"Your starting point in the workspace.","quickLaunch":"Quick launch","boards":"Boards","boardsHint":"Work items & views","fieldService":"Field Service","fieldServiceHint":"Tickets & dispatch","inventory":"Inventory","inventoryHint":"Stock & products","insights":"Insights","insightsHint":"Dashboards & charts","automations":"Automations","automationsHint":"Recipes & triggers","notifications":"Notifications","notificationsHint":"Your inbox","scratchNote":"Scratch note","scratchNoteHint":"It stays with this tab when you switch tabs or refresh. It is not saved on the server.","scratchNotePlaceholder":"Jot something for this session…"},"warehouseNav":{"warehouseHub":"Warehouse Operations","operationsDashboard":"Operations Dashboard","operationsDashboardTip":"Cross-area operations overview — service, warehouse & logistics","equipmentSettings":"Equipment Settings","inventoryDoor":"Inventory","equipmentModule":"Equipment","internalOps":"Internal Ops"},"serviceHubNav":{"triage":"Triage inbox","tickets":"Tickets","dispatch":"Dispatch","dashboards":"Dashboards","setup":"Setup & systems","sectionWork":"Work","sectionOversight":"Oversight","sectionAdmin":"Admin","dashboardsTitle":"Dashboards","dashboardsFootnote":"The consolidated per-contract KPI board lands here with the actor-first S5 build; these are the live oversight surfaces available today.","setupTitle":"Setup & systems","setupFootnote":"The Service Systems health page — every cron, mirror, feed, bridge and the connector with a live health light — lands here with the actor-first S6 build.","boardBack":"Back to Service Hub","boardNoAccessTitle":"No access to this board","boardNoAccessBody":"You do not have access to this service board. Ask an admin to add you to the workspace or grant the board.","boardNoneTitle":"No board specified","viewDesk":"Desk","viewBoard":"Board","viewToggleAria":"Service desk view","processHome":"Process Home","processHomeTip":"How a service ticket flows, end to end — start here","inbox":"Inbox","inboxTip":"Service Hub — the Inbox: review each project’s intake board (ServiceNow incidents) and promote them to Tickets","surveyResults":"Survey results","surveyResultsTip":"Customer satisfaction survey answers: rating, comment and status per ticket","clientOnboarding":"Client onboarding","clientOnboardingTip":"Set up a new service client end to end — one guided flow: intake, master data, boards, coordinator, techs, client + provider portals","operationalDashboard":"Operations dashboard","operationalDashboardTip":"SLA, daily incidents, technicians, parts and contracts on one screen; filter by contract, client and dates","partsRequests":"Parts requests","partsRequestsTip":"Parts the technicians ask for: approve or reject each request","techRequests":"Tech requests","techRequestsTip":"Technicians asking for access to the app: approve or reject each request","techScorecard":"Tech Scorecard","techScorecardTip":"Times, SLA compliance, satisfaction and reopened tickets for each technician","coordinatorCoverage":"Coordinator coverage","coordinatorCoverageTip":"Who covers each contract: name a replacement and see who has no backup"},"railM365Widgets":{"email":{"title":"Email","viewAll":"View all","notConnected":"Connect Microsoft 365 to see your inbox here.","connect":"Connect","needsReconnect":"Your Microsoft session expired. Reconnect to refresh your inbox.","reconnect":"Reconnect","error":"Couldn’t load your inbox right now. Try again in a minute.","empty":"Inbox is empty.","unread":"Unread","attachment":"Attachment"},"calendar":{"title":"Calendar","viewAll":"View all","notConnected":"Connect Microsoft 365 to see today's events here.","connect":"Connect","needsReconnect":"Your Microsoft session expired. Reconnect to refresh your calendar.","reconnect":"Reconnect","error":"Couldn’t load your calendar right now. Try again in a minute.","empty":"Nothing left on your calendar today.","allDay":"All day","join":"Join"}},"logisticsActionCenter":{"eyebrow":"Logistics Hub","title":"Action Center","description":"Everything across the sales cycle that needs a human — stuck deals, tracking suggestions, requests and SO drafts, and emails to send. Each item links to where you act.","summaryNeedsAction":"Needs your action","summaryRed":"Critical","summaryAmber":"Warnings","emptyAll":"Nothing needs your action right now.","sectionEmpty":"Nothing here right now.","sectionInactive":"Source not active — turn its flag on to see items here.","openLink":"Open","open":{"openVpos":"Open in VPOs","openPeticion":"Open request","openDeal":"Open deal","openDraft":"Open draft"},"hiddenMore":"{n} more not shown","staleLabel":"Stale","soLabel":"SO","vpoLabel":"VPO","daysStuck":"{n}d stuck","freshness":{"updated":"Updated","justNow":"just now","minutesAgo":"{n} min ago","hoursAgo":"{n} h ago","daysAgo":"{n} d ago","noData":"No data yet"},"section":{"deal_alert":"Stuck deals","tracking":"Tracking suggestions","so_draft":"Requests & SO drafts","outbound":"Emails to send"},"level":{"roja":"Critical","amarilla":"Warning","pendiente":"Pending"},"item":{"trackingSuggested":"Tracking suggestion to confirm","soDraftSuggested":"SO draft to approve","soDraftApproved":"Approved SO — not yet in the system","peticionPending":"Customer request to triage","outboundCliente":"Customer email to send","outboundVendor":"Vendor email to send"},"rule":{"so_tobuy_sin_vpo":"SO to buy with no VPO yet","vpo_sin_tracking":"VPO without confirmed tracking","tracking_sin_movimiento":"Tracking with no carrier movement","entregado_sin_recibido":"Delivered but not received in the warehouse","recibido_sin_factura":"Received but not invoiced","factura_sin_cobro":"Invoiced but not paid","peticion_sin_triage":"Request not triaged","aprobado_sin_materializar":"Approved but not entered in the system","entregado_sin_pod":"Delivered with no proof of delivery","promesa_incumplida":"Promise date missed","promesa_en_riesgo":"Promise date at risk — the ETA overshoots it, or it is due soon"}},"logisticsVpoMaster":{"eyebrow":"Logistics Hub","title":"VPO Tracking","description":"Every open VPO — confirmed and pending — with its full legacy detail and the tracking already approved in One. Filter, search, and open any SO in the Deal 360.","summaryTotal":"Open VPOs","summaryPending":"With a pending suggestion","summaryConfirmed":"With confirmed tracking","freshnessLabel":"Data as of","freshnessNever":"Not refreshed yet","filtersTitle":"Filters","searchLabel":"Search","searchPlaceholder":"VPO, SO, part#, client…","vendorLabel":"Vendor","vendorAll":"All vendors","statusLabel":"Purchase status","statusAll":"All statuses","trackingStateLabel":"Tracking","trackingState":{"todas":"All","con_confirmado":"With confirmed","con_sugerencia":"With a suggestion","sin_tracking":"No tracking"},"dropshipLabel":"Dropship","dropship":{"all":"All","yes":"Dropship only","no":"Exclude dropship"},"dateFieldLabel":"Date field","dateField":{"arrive":"Arrival (ETA)","received":"Received"},"dateFromLabel":"From","dateToLabel":"To","applyFilters":"Apply","clearFilters":"Clear","colVpo":"VPO","colVendor":"Vendor","colClient":"Client(s)","colSo":"SO(s)","colPn":"Part number(s)","colQty":"Qty (ordered / received)","colDates":"Dates (ETD / ETA / received)","colStatus":"Purchase status","colFlags":"Flags","colTrackingOne":"Tracking (One)","colShipmentStatus":"Shipment status","colTrackingLegacy":"Legacy tracking","colFreshness":"Freshness","colActions":"Action","dropshipBadge":"Dropship","exceptionBadge":"Exception","ebayLabel":"eBay#","legacyYes":"Has tracking (legacy)","legacyNo":"No legacy tracking","itemsLabel":"item(s)","soCountLabel":"SO(s)","noTrackingOne":"No tracking in One yet","podLabel":"POD","deliveredLabel":"Delivered","etaLabel":"ETA","shipmentStatusNone":"Not synced","shipmentStatusNoAutoTracking":"No automatic tracking","shipmentStatusNoAutoTrackingHint":"This carrier has no automatic tracking; the number is here so you can check it by hand.","approvalLabel":"Approval","carrierLabel":"Carrier","bandLabel":"Confidence","band":{"alta":"High","baja":"Low"},"status":{"sugerido":"Suggested","confirmado":"Confirmed","rechazado":"Rejected","reemplazado":"Superseded"},"openDeal":"Open","showing":"Showing","resultsLabel":"VPOs","pageOf":"Page {page} of {pages}","prev":"Previous","next":"Next","emptyTitle":"No open VPOs","emptyBody":"There are no open VPOs in your configured region(s) right now. New VPOs appear here as the feed sees them.","noDetailTitle":"Detail arrives on the next refresh","noDetailBody":"The VPO universe is loaded but the full legacy detail (parts, quantities, dates) has not been fetched yet. It fills in on the next feed refresh — no data is invented here.","noResultsTitle":"No VPOs match these filters","noResultsBody":"Adjust or clear the filters to see more VPOs.","confirm":"Confirm","reject":"Reject","rejectSubmit":"Reject with reason","cancel":"Cancel","confirmedDone":"Confirmed","rejectedDone":"Rejected","reasonLabel":"Reason (required)","reasonPlaceholder":"Why is this suggestion wrong? (short note — no email/invoice text)","reasonCategoryLabel":"Category","rejectCategory":{"po_incorrecta":"Wrong PO","tracking_incorrecto":"Wrong tracking","no_relevante":"Not relevant","duplicado":"Duplicate","carrier_incorrecto":"Wrong carrier","otro":"Other"},"actionErrors":{"generic":"Something went wrong. Please try again.","reason_required":"A reason is required to reject.","not_found":"That suggestion no longer exists.","forbidden":"You do not have permission to do that.","out_of_scope":"That suggestion is outside your region.","line_inactive":"That VPO line is no longer active.","not_suggested":"That suggestion was already resolved.","invalid_category":"Pick a valid reason category.","tracking_conflict":"That tracking is already active on this VPO line — pick a different one."},"monitor":{"deliveryLabel":"POs shown","delivery":{"abiertas":"Open","entregadas":"Delivered","todas":"All"},"promiseFilterLabel":"Promise","promiseFilter":{"todas":"All","incumplidas":"Missed","por_vencer":"Due soon"},"colPromise":"Promise (traffic light)","colSos":"SOs of this PO","state":{"cumplido":"Met","cumplible":"On track","cumplible_en_riesgo":"At risk","por_vencer":"Due soon","incumplido":"Missed","sin_promesa":"No promise date","sin_fecha_recepcion":"No reception date"},"stateHelp":{"cumplido":"This PO was fully received on or before the SO promise date.","cumplible":"Not received yet, and the promise date has not passed.","cumplible_en_riesgo":"Not received yet: the known ETA already lands after the promise date.","por_vencer":"Not received yet and the promise date falls within the next few days, with nothing announcing a delay. It is an early heads-up on the screen, not an alarm: the bell never rings for this.","incumplido":"Either received after the promise date, or still open with the promise date already past.","sin_promesa":"The SO carries no promise date — a data gap to fill, not a green light.","sin_fecha_recepcion":"The legacy marks it delivered (invoiced/closed) with no real reception date, so punctuality cannot be judged. Nothing is guessed here."},"rowStateLabel":"Row state = the worst of its SOs","daysLateOpen":"{n} d late","daysLateDelivered":"received {n} d late","daysLeft":"{n} d left","daysMargin":"{n} d of margin","dueToday":"Due today","onTimeExact":"On the promise date","noSoData":"No SO in the window","noSoDataHelp":"None of this PO’s SOs is inside the SO-universe window, so there is no promise date to judge against.","receptionUnknown":"No reception data from the legacy","receptionUnknownHelp":"The legacy returned no value for this PO’s \"fully received\" flag. That is not the same as \"not received\" — it is simply unknown.","soHeaderSo":"SO","soHeaderPromise":"Promise date","soHeaderState":"State","soHeaderDays":"Days","soHeaderCpo":"Customer PO (CPO)","soHeaderRfq":"Customer quote (RFQ)","rfqMore":"+{n}","soHeaderClient":"Client","soHeaderLastReceived":"Last reception (SO)","outOfWindow":"Out of window","outOfWindowHelp":"This SO is not in the SO-universe window, so its promise date is unknown here. It is not shown as met or missed — nothing is invented.","moreSos":"+{n} more","moreSosHelp":"The legacy caps the SO list it returns per PO, so the remaining SOs cannot be listed here. The total ({total}) is the real count.","showSos":"Show the SOs of this PO","worstSo":"Worst SO","none":"—"},"boardCells":{"showCells":"Show warehouse, accounting and labels","sectionVpo":"For this VPO","sectionGuide":"For the tracking","slot":{"recibido_bodega":"Received in warehouse","recibido_contabilidad":"Received in accounting","status_quickbooks":"QuickBooks status","labels":"Labels","file_po_requerido_ibacs":"Required PO (IBACS)","status_pago_proveedor":"Vendor payment status","guia_recibido_bodega":"Received in warehouse (this tracking)","guia_fecha_recibido_bodega":"Warehouse reception date","guia_label":"Tracking label"},"statusNone":"Not set","dateNone":"No date","clear":"Clear","filesNone":"No files","filesCount":"{n} file(s)","attachOnBoard":"Attach on the board","openOnBoard":"Open on the board","saving":"Saving…","saved":"Saved","notOnBoard":"This VPO is not on the board yet — the engine creates it on the next run.","restricted":"You do not have access to this board.","columnsMissing":"Columns are missing on the board.","loadError":"The board could not be read right now.","errors":{"forbidden":"You do not have permission to edit this board.","not_on_board":"That row is no longer on the board — it is recreated on the next run.","column_not_mapped":"That column is not on the board.","invalid":"That value does not match this field.","error":"Something went wrong while saving. Try again."}}},"logisticsCycle":{"eyebrow":"Logistics Hub","title":"Sales Cycle","description":"The whole sales cycle at a glance — from the customer request to tracking, invoicing and close. Built links are live with real counts; the rest is the roadmap.","monitorLink":"Open Monitor","kpiVpoOpen":"Open VPOs","kpiTrackingConfirmed":"Confirmed trackings","kpiIntakeInReview":"Email cases in review","verTodos":"See all","noAlerts":"Nothing needs attention here right now.","expand":"Show detail","collapse":"Hide detail","diagramLabel":"Sales cycle circuit diagram","roadmapEnObra":"On the workbench — being built in this phase. It lights up with a live count once it ships.","roadmapPendiente":"On the roadmap — not built yet. No number is shown until a real query stands behind it.","status":{"construido":"Live","en_obra":"In progress","pendiente":"Planned"},"legend":{"built":"Live","inProgress":"In progress","planned":"Planned","currentHint":"Lit line = current flowing"},"freshness":{"updated":"Updated","justNow":"just now","minutesAgo":"{n} min ago","hoursAgo":"{n} h ago","daysAgo":"{n} d ago","noData":"No data yet"},"stage":{"peticionRecibida":"Request received","oportunidad":"Opportunity identified","leadNuevo":"Lead (new customer)","cotizacionSugerida":"Suggested quote","negociacion":"In negotiation","ofertaPerdida":"Lost / abandoned offer","soSugerida":"SO suggested","soCreada":"SO created","vpoSugerida":"VPO suggested","vpoCreada":"VPO created","correosSalientes":"Outbound emails","trackingConfirmado":"Tracking confirmed","enTransito":"In transit / delivered","recibidoBodega":"Received in warehouse","despachadoCliente":"Shipped to customer","facturaEmitida":"Invoice issued","cobroRecibido":"Payment received","cerrado":"Closed","ebay":"eBay order","correoCliente":"Email to customer","correoVendor":"Email to vendor","podCliente":"Customer POD"},"unit":{"E0":"requests","E1":"drafts","E4":"open","E5":"sent","E6":"confirmed","E7":"orders","E8":"received","ebay":"linked","E11":"paid"},"alert":{"peticionSinTriage":"{n} requests awaiting triage","aprobadoSinMaterializar":"{n} approved, not yet in the ERP","sinTracking":"{n} without tracking","porConfirmar":"{n} suggestions to confirm","correosPorEnviar":"{n} drafts to send","facturaSinCobro":"{n} invoiced, not paid","sinSoMatch":"{n} invoices without an SO match"}},"logisticsOutbound":{"ui":{"sectionTitle":"Outbound emails","sectionSub":"Emails One drafted to the customer or a vendor for this deal. One only drafts — you send them from Outlook.","draftVendorButton":"Draft vendor email","draftVendorHint":"One saves a request-for-quote draft in your Outlook. Review and send it yourself.","toEmailLabel":"Vendor email","toEmailPlaceholder":"sales@vendor.com","toNameLabel":"Vendor name (optional)","toNamePlaceholder":"Vendor","draftSubmit":"Create draft","cancel":"Cancel","draftedInline":"Draft created in your Outlook","draftAnother":"Draft another","emptyList":"No outbound emails for this deal yet.","errorRow":"The draft could not be created — try again.","kind":{"cliente_ack":"To customer","vendor_rfq":"To vendor"},"status":{"borrador":"Draft","enviado_detectado":"Sent","expirado":"Expired","error":"Failed"},"errors":{"no_graph":"Connect your Microsoft account to draft emails.","invalid_email":"Enter a valid recipient email.","forbidden":"You don't have permission to draft emails.","not_found":"This deal is no longer available.","generic":"The draft could not be created. Try again."}},"templates":{"cliente_ack":{"subject":"We received your order","greeting":"Hello {name},","body":"Thank you for your order. We have received your request and our team is already working on it. We will keep you posted on the next steps and the estimated delivery time.","reference":"Reference: {po}","linesHeader":"Requested items:","noLines":"(Items to be confirmed.)","closing":"Best regards,"},"vendor_rfq":{"subject":"Request for quote","greeting":"Hello {name},","body":"We would like to request a quote and availability for the items below. Please reply with pricing, lead time and availability.","reference":"Our reference: SO {so}","linesHeader":"Items:","noLines":"(Items detailed separately.)","closing":"Thank you,"}}},"logisticsDeals":{"eyebrow":"Logistics Hub","title":"Deals","description":"Every deal in the sales cycle as one list — filter by stage, alert or search, or pick a lens for your role. Each row opens the full Deal 360.","monitorLink":"Open circuit","lens":{"all":"All deals","ventas":"Sales","bodega":"Warehouse","plata":"Money","cerrados":"Closed"},"lensDesc":{"all":"Every active deal.","ventas":"Open deals across the pipeline, by stage.","bodega":"Deals with goods on order — pending or received in the warehouse.","plata":"Invoiced deals awaiting collection.","cerrados":"Recently closed deals."},"filters":{"title":"Filters","stage":"Stage","alert":"Alert","connection":"Connection","search":"SO, client or PO","allStages":"All stages","allAlerts":"Any alert","allConnections":"All connections","apply":"Apply","clear":"Clear"},"col":{"so":"SO","client":"Client","po":"Customer PO","stage":"Stage","received":"Received","invoiced":"Invoiced","paid":"Paid","dropship":"Dropship","alert":"Alert","daysStuck":"Days stuck","connection":"Connection"},"alertLevel":{"ninguna":"None","amarilla":"Amber","roja":"Red"},"yes":"Yes","no":"No","daysStuckValue":"{n} d","notStuck":"—","noInboundDetail":"No inbound detail","summary":"{n} deals","pageOf":"Page {page} of {pages}","prev":"Previous","next":"Next","emptyTitle":"No deals match","emptyBody":"No deals match this lens or these filters. Try clearing the filters or a different lens.","stage":{"peticion_recibida":"Request received","so_sugerida":"SO suggested","so_creada":"SO created","vpo_sugerida":"VPO suggested","vpo_creada":"VPO created","correo_cliente_enviado":"Email to customer sent","correo_vendor_enviado":"Email to vendor sent","tracking_confirmado":"Tracking confirmed","en_transito":"In transit","entregado":"Delivered","recibido_bodega":"Received in warehouse","despachado_cliente":"Shipped to customer","factura_emitida":"Invoice issued","cobro_recibido":"Payment received","cerrado":"Closed","peticionSinTriage":"{n} requests awaiting triage","aprobadoSinMaterializar":"{n} approved, not yet in the ERP"}},"logisticsSoDrafts":{"eyebrow":"Logistics Hub","title":"SO Drafts","description":"Every customer request the AI drafted into a suggested sales order. Approve one to accept it, then type the SO into the ERP — One detects and links it automatically. Discard the ones that are not real orders.","summarySuggested":"Suggested","summaryApproved":"Approved","summaryMaterialized":"Linked to an SO","status_sugerido":"Suggested","status_aprobado":"Approved","status_materializado":"Linked","status_expirado":"Expired","status_descartado":"Discarded","poLabel":"Customer PO","soLabel":"SO","emailLabel":"Email","subjectLabel":"Subject","qtyLabel":"Qty","partLabel":"Part#","noLines":"No line items extracted — open the request to review it.","unknownClient":"Unknown customer","awaitingSo":"Approved — waiting for the SO to appear in the ERP. Type it in the legacy; One will link it on the next sync.","approve":"Approve","discard":"Discard","approvedDone":"Approved","discardedDone":"Discarded","moreHidden":"more not shown","emptyTitle":"No SO drafts","emptyBody":"Nothing to review right now. When a customer request email is forwarded to the intake mailbox, the AI drafts a suggested SO and it lands here to approve.","actionErrors":{"generic":"Something went wrong. Try again.","not_found":"This draft no longer exists.","forbidden":"You do not have permission to do that.","wrong_status":"This draft was already resolved — refresh the list."}},"setup":{"title":"Setup Center","subtitle":"Every platform variable — keys, secrets, OAuth apps & flags — configurable in one place","searchPlaceholder":"Search variables…","emptyGroup":"Nothing to show here.","connectorMondaySession_title":"Monday scrape session","connectorMondaySession_description":"The connector agent needs a captured Monday browser session (cookies) to scrape automation recipes that Monday does not expose via API. The session lives on the agent host — capture it once with the documented script.","connectorMondaySession_present":"Session captured","connectorMondaySession_stale":"Session stale — re-capture","connectorMondaySession_missing":"No session captured","connectorMondaySession_agent_unreachable":"Agent unreachable","connectorMondaySession_agent_unconfigured":"Agent not configured","connectorMondaySession_age":"Captured","connectorMondaySession_howto":"How to provision","fromDb":"Configured","fromEnv":"From hosting env","notSet":"Not set","readOnlyInfra":"Boot-time variable — set it in the hosting environment (e.g. Vercel → Environment Variables). It cannot be changed from this screen.","openConsole":"Manage in Feature Flags","getItHere":"Where to get it","counterpartNote":"Also paste the same value at:","save":"Save","saving":"Saving…","saved":"Saved — live everywhere within moments.","clear":"Clear","cleared":"Stored value cleared.","valuePlaceholder":"Enter value","secretPlaceholder":"Enter secret (write-only)","secretSetPlaceholder":"Replace stored secret","codeHint":"Authenticator code required to change secrets","multilinePasteWarning":"The text you pasted had line breaks, and this field only holds one line — they were dropped. If the value genuinely needs several lines (a SQL query, a PEM key), do NOT save it here: it will be stored mangled. Report the variable so it can be marked as multi-line.","verify":"Verify & apply","importBtn":"Import .env","exportBtn":"Export template","importTitle":"Import a .env file","importHint":"Paste the contents of a .env file. Everything is previewed (secrets masked) before anything is saved; unknown or read-only keys are skipped.","previewImportBtn":"Preview","applyImportBtn":"Apply import","importedN":"Variables imported:","unknownKey":"unknown","readOnlyKey":"read-only","cancel":"Cancel","req_critical":"critical","req_recommended":"recommended","req_optional":"optional","req_inert":"has default","wizardCta":"Finish setting up Redsis One","wizardCtaSub":"Walk through the install checklist — {n}% complete.","wizardOpen":"Open setup wizard","varsTab":"Variables","oauthTab":"OAuth Apps","wizardTitle":"Install wizard","wizardSubtitle":"Configure Redsis One step by step. Skip anything you don’t need yet — completeness updates as you go.","wizOverall":"Overall setup","wizOutstandingN":"{n} required values still to set","wizAllSet":"All set — every required value is configured.","wizSkip":"Skip for now","wizSkipped":"Skipped","wizUnskip":"Bring back","wizTest":"Test","wizTesting":"Testing…","generateVapidBtn":"Generate VAPID keys","generatingVapid":"Generating…","vapidGenerated":"VAPID keys generated — web push is now configured.","wizBack":"Back to Setup Center","probeLiveTag":"live check","probePresenceTag":"presence check","probeWorking":"Working","probeSet":"Set","probeFailed":"Failed","oauthSubtitle":"Each provider can use a Redsis-managed app or your own. OAuth grants data access; an API key controls the platform — both are available where the provider supports them.","oauthModeOAuth":"OAuth","oauthModeKey":"API key","oauthConnect":"Open connect screen","oauthSourceOverride":"Your app","oauthSourceDefault":"Redsis-managed","oauthSourcePartial":"Incomplete","oauthSourceUnset":"Not set","wizInfraTitle":"Infrastructure","wizInfraWhy":"Database and boot secrets — set these in your hosting environment first.","wizCoreTitle":"Core platform","wizCoreWhy":"Base URLs, trusted origins and app identity.","wizEmailTitle":"Email delivery","wizEmailWhy":"Outbound transactional email so the platform can notify and invite people.","wizAiTitle":"AI providers","wizAiWhy":"Keys for Claude and the other models that power Ayva and the AI features.","wizMicrosoftTitle":"Microsoft 365","wizMicrosoftWhy":"The Microsoft Graph app behind Teams, Outlook, Calendar and SharePoint.","wizMailTitle":"Personal mail","wizMailWhy":"OAuth apps behind the Gmail / Outlook / Yahoo “Connect” buttons.","wizIntegrationsTitle":"Integrations","wizIntegrationsWhy":"Accounting, e-signature and carrier apps such as QuickBooks and DocuSign.","wizAutomationTitle":"Automation & work tools","wizAutomationWhy":"n8n, Monday and Jira credentials for automations and sync.","wizMoreTitle":"Everything else","wizMoreWhy":"The remaining optional services — configure these as you need them.","summaryHeading":"At a glance","summaryConfigured":"Configured","summarySetHere":"Set here","summaryFromHost":"From hosting env","summaryNeedsYou":"Need you","summaryAllGood":"Everything required is configured — nothing needs you right now.","legendTitle":"What the labels mean","legendDb":"Set here — stored encrypted in this Setup Center.","legendEnv":"From your hosting env (run.env / GreenOne) — already configured and working.","legendUnset":"Not set anywhere yet.","needsToggle":"Show only what needs me","needsShowingTitle":"Variables that still need you","needsNone":"Nothing needs you right now — every required value is set. 🎉","showAllBtn":"Show all variables","migrateBtn":"Import from .env","migrateTitle":"Move your variables into Setup Center","migrateIntro":"Paste your variables once and they live here — encrypted — instead of only in a .env file. Anything that must stay in the host run.env (boot-time settings) is detected and left alone.","migrateStep1":"Set variables in Setup Center (/m/setup → platform_settings) or ask your admin to update run.env on the host (VM 112). No Vercel CLI needed.","migrateStep2":"Paste the whole file below. Values stay in your browser until you press Save.","migratePasteLabel":"Paste your .env contents","migratePreviewBtn":"Preview","migrateWillSet":"Will be saved here","migrateAlready":"Already set here","migrateStays":"Stays in your hosting env","migrateUnknown":"Not recognized","reasonInfra":"boot-time — must stay in run.env on the host","reasonFlag":"managed in Feature Flags","reasonUnknown":"not a known Redsis variable","reasonAlready":"already stored here","migrateApplyBtn":"Save these to Setup Center","migrateEncNote":"Secrets are encrypted (AES-256-GCM) and shown afterward only as their last 4 characters.","migrateDone":"moved in — now managed here, encrypted.","migrateNothing":"Paste your variables above, then press Preview.","backToVars":"Back to variables","servicesTab":"Services","backToServices":"Back to services","servicesConnectedOf":"of {total} services connected","statusConnected":"Connected","statusAttention":"Needs setup","statusAvailable":"Available","statusManaged":"Managed elsewhere","sectionAttention":"Needs your attention","sectionServices":"All services","sectionManaged":"Managed elsewhere","sectionManagedHint":"These live in your hosting environment or in Feature Flags — they can't be changed here. Shown for reference.","searchResultsTitle":"Search results","on":"On","off":"Off","switchedOn":"Turned on.","switchedOff":"Turned off.","moduleFlagNote":"Turns this feature on or off platform-wide.","resetDefault":"Reset to default","helpStepsTitle":"Where to find it","getYourKey":"Get your key","selectPlaceholder":"Choose…","secretSetBadge":"Set","replaceSecret":"Replace","advancedAdmin":"Advanced","advancedAdminHint":"Full modules & flags admin — every engine, shell and safety switch.","featuresTab":"Features","featuresHeading":"Feature switches","featuresSubtitle":"Turn the modules and features you have on or off — grouped by what they do. Same switches as the admin Flags console, here in one place.","featuresReadOnly":"You can see feature states but need the “manage feature flags” permission to change them.","featuresSearchPlaceholder":"Search features…"},"financialOne":{"title":"Financial One","subtitle":"Redsis's financial analyst","sealed":"Sealed module: Financial One runs on its own secure server. Redsis One never sees its data.","noAccess":"You don't have access to Financial One.","noAccessHint":"Financial One's owners decide who gets in, not Redsis One roles. Ask Mike if you need access.","notLinked":"Your Redsis One account is not linked to your Central One identity yet, so Financial One cannot recognize you. Ask an administrator to link it.","unavailable":"Financial One is not reachable right now. Try again in a few minutes.","reauth":"Sign in to Redsis One again, with your second factor, to open Financial One.","frameTitle":"Financial One"},"barcoder":{"serialsTitle":"Serial Numbers","serialsEmptyTitle":"No serial schemes yet","serials":{"description":"Design serial schemes from pieces, allocate numbers without collisions and look up any serial in the registry.","flagOffNote":"The Serial Number System is switched off. Stations, labels and boards keep working as before; you can prepare schemes here and nothing uses them until it is turned on.","openDesigner":"Open scheme designer","breadcrumbOperations":"Operations","breadcrumbSerials":"Serial numbers","breadcrumbSchemes":"Schemes","tabs":{"schemes":"Schemes","lookup":"Look up a serial","counters":"Counters","policies":"Client policies"},"stats":{"schemes":"Schemes","locked":"Locked and in force","drafts":"Drafts","registry":"Serials in the registry"},"status":{"draft":"draft","active":"locked · v{n}","lockedSystem":"locked system","retired":"retired","newVersion":"v{n} in progress"},"kind":{"generate":"generates numbers","validate":"validate only","policy":"picks a scheme by client rule","empty":"no pieces yet"},"table":{"name":"Scheme","key":"Key","kind":"What it does","status":"Status","golden":"Golden examples","registry":"In the registry","updated":"Updated","goldenMatch":"{matched}/{total} golden rows match","goldenFail":"{matched}/{total} golden rows match · check the engine","goldenNone":"none · new scheme","open":"Open in the designer"},"pieceKind":{"literal":"literal","field":"field","date":"date","counter":"counter","captured":"captured","check":"check digit","policy":"policy"},"pieceKindHint":{"literal":"fixed text","field":"PN, condition, site, country, supplier","date":"yy, ww, yyjjj, yymmdd","counter":"per week, year, day, PN","captured":"scanned by the operator","check":"computed from the rest","policy":"choose another scheme by rule"},"fieldSource":{"pn_ibm":"IBM part number","pn_ncr":"NCR part number","pn_oem":"OEM part number","condition_char":"Condition letter","part_status":"Part status","country":"Country code","supplier_code":"Supplier code","site_prefix":"Site prefix"},"dateFormat":{"yy":"yy · two-digit year","ww":"ww · week, two digits","ww_unpadded":"w · week, no leading zero","jjj":"jjj · day of the year","yyjjj":"yyjjj · year and day of the year","mmdd":"mmdd · month and day","yymmdd":"yymmdd · year, month and day"},"counterScope":{"week_pn":"Week and part number","week":"Week","year":"Year","day":"Day","day_pn":"Day and part number","pn":"Part number","scheme":"The whole scheme (never restarts)"},"overflow":{"fail":"Stop and alert","extend":"Add a digit and keep going","claves_map":"Legacy letter map (as the old Barcoder)"},"overflowShort":{"fail":"stops at {max} and alerts","extend":"grows past {width} digits","claves_map":"legacy letter map, up to {max}","none":"no counter in this scheme"},"calendar":{"iso":"ISO week (starts on Monday)","legacy_sunday_jan1":"Legacy week (Sunday, week 1 holds January 1)"},"checkAlgorithm":{"mod10":"Mod 10 (Luhn) · one digit","mod97":"Mod 97 (ISO 7064) · two digits"},"charset":{"any":"Letters, digits and . _ / -","digits":"Digits only","alnum":"Letters and digits","upper_alnum":"Capital letters and digits"},"policyWhen":{"ibm_pn_valid":"the IBM part number is valid","ncr_pn_present":"there is an NCR part number","captured_present":"the operator scanned a vendor serial","always":"in every other case"},"designer":{"eyebrow":"Scheme designer","description":"A serial is a row of pieces. Add, reorder and configure the pieces; the preview and the tests tell you when it is safe to lock.","readOnlySystem":"This is one of the locked legacy schemes. It reproduces the old Barcoder numbers exactly and cannot be edited. Clone it as a draft to build a variant.","readOnlyLocked":"Version {n} is locked and in force. Start a new version to change it; the locked version stays in force until the new one is locked.","readOnlyRetired":"This scheme is retired. Nothing new can be allocated from it; its serials stay in the registry.","newVersionNote":"You are editing version {n}. Version {current} stays in force until you lock this one.","schemes":"Schemes","newScheme":"New scheme","schemeName":"Scheme name","schemeNamePlaceholder":"Lenovo warranty serial","schemeKey":"Key","schemeKeyHelp":"Lowercase letters, digits and underscores, 3 to 48 characters. It cannot change later.","create":"Create draft","cancel":"Cancel","atAGlance":"At a glance","pieces":"Pieces","piecesHint":"drag to reorder · click to configure","piecesReadOnlyHint":"click a piece to see how it is built","addPiece":"Add a piece","kinds":"Kinds:","noPieces":"No pieces yet. Add the first one below.","preview":"Live preview","previewOnOrder":"sales order {so} · line {line}, today","previewOnSample":"sample line, today","previewEmpty":"Add a piece to see the serial.","previewFailed":"This line cannot be built yet: {reason}","handsOver":"Hands over to {scheme}","sampleValues":"Sample values","salesOrder":"Sales order","salesOrderPlaceholder":"Order number (optional)","salesOrderHelp":"Leave it empty to preview with the sample line.","orderIssue":{"not_configured":"The sales order connector is not set up yet, so the sample line is used.","not_found":"That sales order was not found, so the sample line is used.","confirm_mapping":"The sales order mapping for this site is not confirmed yet, so the sample line is used.","empty":"That sales order has no lines, so the sample line is used.","error":"The sales order could not be read, so the sample line is used."},"captureSample":"Scanned value · {name}","checks":{"length":"{n} characters","lengthRange":"{min} to {max} characters","tooLong":"Longer than {max} characters","unique":"Unique company-wide","notUnique":"Nothing makes each serial unique","noCollision":"No collision with {n} serials in the registry","collision":"{n} previewed serials are already in the registry","duplicate":"{n} previewed lines share a serial","notChecked":"Not checked against the registry yet","checking":"Checking against the registry…","labelFits":"Fits the serial 2x0.5 label at {pt} pt","labelTooLong":"Too long for the serial 2x0.5 label"},"issues":{"empty":"Add at least one piece.","policy_not_alone":"A policy piece must be the only piece of its scheme.","policy_no_fallback":"The last rule of a policy must apply in every other case.","multiple_counters":"A scheme can have only one counter.","no_unique_source":"Nothing makes each serial unique. Add a counter or a captured piece.","check_not_last":"The check digit must be the last piece.","scope_needs_year":"The counter restarts every year, but the serial does not show the year. Add a date piece with the year.","scope_needs_week":"The counter restarts every week, but the serial does not show the week. Add a date piece with the week.","scope_needs_day":"The counter restarts every day, but the serial does not show the day. Add a date piece with the day.","scope_needs_pn":"The counter restarts for every part number, but the serial does not show the part number. Add a part number field.","captured_range":"A captured piece has a shortest length greater than its longest length.","duplicate_captured_name":"Two captured pieces share a name. Give each one its own name.","too_many_variable":"More than two pieces have a variable length, so a scanned serial could not be read back. Give the fields a fixed length.","ambiguous_length":"Two pieces have a variable length. The serial still reads back, but a fixed length is safer.","too_long":"The serial can be longer than {max} characters."},"buildErrors":{"missing_value":"a field has no value on this line","bad_length":"a field does not have the length it needs","bad_chars":"a value has characters a serial cannot carry","counter_required":"the counter has no number yet","counter_overflow":"the counter is past its width","captured_missing":"a scanned value is missing","captured_invalid":"a scanned value does not fit its rule","not_buildable":"this scheme does not build a serial by itself","too_long":"the serial is too long"},"previewLines":"Lines checked","line":"Line","sampleLine":"sample","serial":"Serial number","result":"Result","lineOk":"ready","lineCollides":"already registered","lineDuplicate":"repeated","sandbox":"Test allocation","sandboxScope":"sandbox scope","runSandbox":"Test allocate · sandbox","sandboxRunning":"Allocating from two stations…","sandboxIdle":"Runs two stations at the same time against a throwaway counter. Nothing is written to the registry.","sandboxNotNeeded":"This scheme has no counter, so there is nothing to race.","sandboxStation":"Kiosk {n}","sandboxPassed":"Two stations at once, {n} numbers, no duplicate, no gap. The sandbox counter is thrown away.","sandboxFailed":{"capacity":"The counter is too narrow for the test: it overflowed before {n} numbers.","build_error":"The serial could not be built during the test.","duplicate":"{n} duplicate numbers. Do not lock this scheme.","gap":"{n} numbers were skipped. Do not lock this scheme.","collision":"{n} serials repeated. Do not lock this scheme."},"sandboxMore":"and {n} more","sandboxStale":"The scheme changed since this test. Run it again.","beforeLocking":"Before locking","checklist":{"issues":"No blocking problem in the pieces","issuesDone":"none","issuesBlocked":"{n} to fix","preview":"Preview checked on real data","previewDoneOrder":"{n} real lines","previewDoneSample":"the sample line","previewPending":"not checked yet","previewFailed":"a line fails or collides","overflow":"Overflow rule set","sandbox":"Test allocation passed","sandboxDone":"two stations, no duplicate, no gap","sandboxPending":"not run yet","sandboxFailed":"the test failed","sandboxSkipped":"not needed · no counter","golden":"Golden examples","used":"Used by","usedNone":"no client policy yet","usedDefault":"{client} · {site} (default)","usedAllowed":"{client} · {site} (allowed)"},"saveDraft":"Save draft","saving":"Saving…","saved":"Draft saved","lock":"Lock v{n}","locking":"Locking…","lockBlocked":"Lock unlocks when every row of the checklist is green.","locked":"Scheme locked","lockedBody":"Version {n} is in force. It can no longer be edited.","cloneAsDraft":"Clone as draft","cloned":"Draft created from the clone","copyOf":"{name} (copy)","created":"Draft scheme created","newVersion":"New version","newVersionStarted":"Version {n} started as a draft","retire":"Retire","retiredToast":"Scheme retired","reactivate":"Reactivate","reactivated":"Scheme reactivated","discardDraft":"Discard draft","confirmDiscard":"Click again to discard","discarded":"Draft discarded","unsaved":"Unsaved changes","piece":"Piece {n}","noSelection":"Select a piece to configure it.","moveLeft":"Move left","moveRight":"Move right","removePiece":"Remove piece","fields":{"text":"Text","source":"Value from","length":"Length","lengthHelp":"Leave it empty to use the value as it comes.","uppercase":"Write it in capitals","fallback":"If it is empty, use","format":"Format","countsPer":"Counts per","width":"Width","startsAt":"Starts at","captureName":"Name of the scan","charset":"Allowed characters","minLength":"Shortest","maxLength":"Longest","prefix":"Must start with","algorithm":"Algorithm","rules":"Rules, first match wins","when":"When","useScheme":"use the scheme","addRule":"Add a rule","removeRule":"Remove this rule"},"schemeSettings":"Scheme settings","overflowLabel":"When the counter overflows","calendarLabel":"Calendar for the date pieces","calendarHelp":"The legacy schemes use the old Sunday / January-1 week rule; keep ISO for new schemes unless the client asks for the IBM calendar.","uniqueness":"Uniqueness","uniquenessValue":"Company-wide, across every scheme","whoMayUse":"Who may use it","whoMayUseAll":"Every client, until a client policy restricts it.","editPolicies":"Open client policies","versions":"Versions","versionLocked":"v{n} · locked {date}","versionDraft":"v{n} · draft","versionSystem":"Built into the engine","errors":{"forbidden":"You do not have permission to change serial schemes.","invalid":"Some values are not valid. Check the pieces and try again.","invalid_key":"That key is not valid or is reserved.","key_taken":"Another scheme already uses that key.","not_found":"That scheme no longer exists.","system_locked":"A locked legacy scheme cannot be changed.","no_draft":"There is no draft to work on. Start a new version first.","draft_exists":"This scheme already has a draft version.","not_active":"Only a locked scheme can do that.","not_retired":"Only a retired scheme can be reactivated.","blocked":"The pieces still have a problem to fix.","bad_target":"A policy rule points to a scheme that is not locked.","preview_failed":"The preview found a line that fails or collides. Nothing was locked.","sandbox_failed":"The test allocation failed. Nothing was locked.","generic":"Something went wrong. Try again."}},"lookup":{"intro":"Type or scan any serial to see which scheme built it, how it reads piece by piece and what the registry knows about it.","inputLabel":"Serial number","submit":"Look up","searching":"Looking up…","emptyQuery":"Type a serial to look it up (128 characters at most).","failed":"The lookup failed. Try again.","scheme":"Scheme","unknownScheme":"No known scheme has this shape","boardScheme":"Board serial column","shape":{"valid":"Valid shape","invalid":"Does not match its scheme","unknown":"Shape not recognised"},"pieces":"Piece by piece","inRegistry":"In the registry","notInRegistry":"Not in the registry","notInRegistryBody":"This serial has never been reserved, committed or imported here.","fields":{"status":"Status","version":"Scheme version","scope":"Counter scope","pn":"Part number","condition":"Condition","site":"Site","client":"Client","source":"Where it came from","unit":"Unit","allocatedAt":"Allocated on","allocatedBy":"Allocated by","expires":"Reservation ends"},"statusLabel":{"reserved":"Reserved","committed":"Committed","voided":"Voided","released":"Released"},"sourceLabel":{"legacy":"Imported from the legacy Barcoder","one":"Allocated in Redsis One"},"related":"Other serials of the same unit"},"counters":{"intro":"One row per counter and scope. A counter only moves forward, in the same transaction that registers the serial.","counter":"Counter","scope":"Scope","last":"Last number","lastUsed":"Last used","empty":"No number has been allocated yet","emptyBody":"Counters appear here with the first allocation.","namespace":{"seriales":"52S and NCR (shared counter)","seriales_rz":"RZ supplier serial","serialinventory":"RD inventory label","custom":"Scheme {name}"},"scopeAll":"whole scheme"},"policies":{"intro":"Which schemes a client may use at a site, which one is the default and what the station must ask for.","readOnly":"You can see the policies. Changing them needs the permission to design serial schemes.","add":"Add a policy","edit":"Edit","remove":"Delete","confirmRemove":"Click again to delete","save":"Save policy","cancel":"Cancel","newTitle":"New client policy","editTitle":"Edit client policy","client":"Client","clientPlaceholder":"Client name as on the sales order","site":"Site","allSites":"All sites","allowed":"Allowed schemes","allowedHelp":"Tick every scheme this client may use.","defaultScheme":"Default scheme","noDefault":"No default","vendorSerialRequired":"Vendor serial required","ibmPnRequired":"IBM part number required","supplierCode":"Supplier code","supplierHelp":"Two characters, for example RZ.","country":"Country code","countryHelp":"Two letters, for example US.","asks":"The station asks for","asksNothing":"nothing extra","asksVendorSerial":"vendor serial","asksIbmPn":"IBM part number","empty":"No client policy yet","emptyBody":"Without a policy, every client can use every locked scheme.","saved":"Policy saved","removed":"Policy deleted","errors":{"forbidden":"You do not have permission to change client policies.","invalid":"Some values are not valid. Check the form and try again.","duplicate":"This client already has a policy for that site.","not_found":"That policy no longer exists.","unknown_scheme":"One of the schemes is not available any more.","default_not_allowed":"The default scheme must be one of the allowed schemes."}}},"processesTitle":"Process Builder","processesEmptyTitle":"No processes yet","processSteps":{"screen":{"label":"Data screen","desc":"Collect typed and scanned fields from the operator."},"serial":{"label":"Serial","desc":"Allocate a new serial or validate a scanned one."},"lookup":{"label":"Lookup","desc":"Pull a sales order or a saved query by a scanned key."},"print":{"label":"Print label","desc":"Send a label to the station printer."},"photo":{"label":"Photo","desc":"Capture the required photos for the unit."},"decision":{"label":"Decision","desc":"Branch to another step when the run matches a condition."},"boardWrite":{"label":"Board write","desc":"Create or update a board row from run facts."},"unitWrite":{"label":"Unit write","desc":"Write run facts onto the tracked unit."},"inventoryMove":{"label":"Inventory move","desc":"Receive, put away, move or adjust stock."},"notify":{"label":"Notify","desc":"Post a board update, an email or a Teams message."},"approval":{"label":"Approval","desc":"Require a second person with a capability to approve."},"subProcess":{"label":"Sub-process","desc":"Run another published process inline."}},"processes":{"description":"Compose, version and publish the processes your stations run.","readOnlyNote":"You can view this process, but only an Owner or a holder of the Process Builder permission can change it.","designer":{"palette":"Steps","recipe":"Recipe","inspector":"Step settings","emptyRecipe":"Add steps from the left to build the process.","pickStep":"Pick a step to edit it.","save":"Save draft","saving":"Saving...","saved":"Saved","valid":"valid","simulate":"Simulate","publish":"Publish","clone":"Clone for a client","dirty":"Unsaved changes","publishedReadOnly":"This version is published and cannot be changed. Start a new draft to edit it.","newDraft":"Start a new draft"},"chip":{"system":"System","client":"Client","published":"v{n} published","draft":"v{n} draft"},"binding":{"site":"Site","client":"Client","activity":"Activity","stations":"Stations","anywhere":"Any station"},"toast":{"saved":"Draft saved.","published":"Version published - it runs at the station now.","draftStarted":"New draft started from the latest version.","cloned":"Client copy created.","error":"That did not go through. Try again."},"checklist":{"title":"Before publishing","has_steps":"The process has at least one step.","steps_valid":"Every step is fully configured.","print_has_printer":"Every print step has a printer role.","simulation":"A test run reaches the end with sample data.","needsFix":"check step {step}","reviewer":"A second reviewer must be acknowledged before publishing.","reviewerAck":"A second reviewer has checked this process.","publishNow":"Publish this version"},"clone":{"title":"Clone for a client","hint":"Make a client-specific copy under the same key. The most specific binding wins at the station.","client":"Client","site":"Site (optional)","clone":"Create the client copy"},"sim":{"title":"Simulation","completed":"reaches the end in {n} steps","blocked":"blocked at {step}: {reason}"},"list":{"description":"Compose a station process from steps, publish a version, and run it at a station.","newProcess":"New process","colName":"Process","colKey":"Key","colScope":"Scope","colBindings":"Where it runs","colVersions":"Versions","colUpdated":"Updated","versionsCount":"{published} published / {draft} draft","draftOnly":"draft only","noDraft":"no open draft","anywhere":"Any station","open":"Open","emptyTitle":"No processes yet","emptyBody":"Compose a station process from steps - a data screen, a serial, a printed label, a photo, a board write - publish a version, and run it at a station.","never":"never"},"newDialog":{"title":"New process","key":"Key","keyHint":"Lowercase letters, numbers and dashes. Stations and scans route by this key.","name":"Name","scope":"Scope","system":"System (all clients)","client":"One client","site":"Site","clientBinding":"Client","activity":"Activity","stations":"Station kinds","stationsHint":"Comma-separated station kinds this runs at. Leave empty for any station.","create":"Create the process","cancel":"Cancel","badKey":"The key must be lowercase letters, numbers and dashes.","missingName":"Give the process a name.","error":"The process could not be created. Try again."},"inspector":{"id":"Step id","idHint":"Stable, snake_case. Conditions and later steps reference it.","titleEn":"Title (EN)","titleEs":"Title (ES)","help":"Help text","required":"Required","repeat":"Repeat until done","serial":{"mode":"Mode","allocate":"Allocate a new serial","validate":"Validate a scanned serial","scheme":"Scheme","policy":"Client policy","from":"Serial from","scan":"A scan","unit":"The unit itself"},"lookup":{"source":"Source","salesOrder":"Sales order (Redix)","query":"Saved query","queryRef":"Query reference","expects":"Expected scan kinds"},"print":{"profileRole":"Label profile role","printerRole":"Printer role","copies":"Copies","reprintReason":"Ask for a reason on a reprint"},"photo":{"requirementRef":"Requirement reference","min":"Minimum photos","allowSkip":"Allow skip (lands in Photo pending)"},"screen":{"layout":"Layout","both":"Kiosk + PDA","kiosk":"Kiosk","pda":"PDA handheld","fields":"Fields","fieldRequired":"Required","addField":"Add a field"},"decision":{"branches":"Branches","fact":"Fact path","value":"Value","goto":"Go to","addBranch":"Add a branch","otherwise":"Otherwise go to"},"boardWrite":{"board":"Board","op":"Operation","create":"Create a row","update":"Update a row","keyColumn":"Key column","mapping":"Column mapping","target":"Column","factPath":"Fact path","addMapping":"Add a mapping"},"unitWrite":{"mapping":"Field mapping"},"inventoryMove":{"action":"Action","receive":"Receive","putaway":"Put away","move":"Move","adjust":"Adjust","mapping":"Field mapping"},"notify":{"channel":"Channel","board":"Board update","email":"Email","teams":"Teams","to":"To","template":"Template"},"approval":{"capability":"Required capability","reason":"Ask for a reason"},"subProcess":{"processKey":"Process key","version":"Version (optional)"}}},"stationsTitle":"Stations","stationsEmptyTitle":"No published processes yet","photoTitle":"Photo Station","photoEmptyTitle":"No captures yet","photo":{"description":"Capture product photos straight into the Photo Library - three renditions, tied to the unit and its serial. Works with this device camera or a tethered station camera.","flagOffNote":"Photo Station is off for everyone but the Owner until its flag is on.","tabs":{"station":"Station","pending":"Photo pending","library":"Library","requirements":"Requirements"},"flow":{"label":"Flow","product":"Product photos","probation":"Probation photos","verify":"Verify photos"},"scan":{"prompt":"Scan the serial","placeholder":"Scan or type a serial","open":"Open","scanning":"Looking it up...","rescan":"Scan another","newUnit":"New unit"},"invalidSerial":"That serial does not pass its scheme check - it looks like a mis-scan. Scan it again.","serialUnknownTitle":"New serial","serialUnknownBody":"Redsis One does not know this serial yet. Say what it is, or just start taking photos - they attach to the unit by themselves once it is labelled.","unit":{"title":"Unit","serial":"Serial","pn":"Part number","client":"Client","site":"Site","condition":"Condition","status":"Status","labelledAt":"Labelled","notYet":"not yet","declaredTitle":"What is it?","save":"Save","savedFacts":"Saved"},"requirement":{"title":"Required photos","of":"of","approved":"approved","waiting":"waiting","needsRetake":"needs a retake","missing":"missing","complete":"All required photos are in","none":"No photo requirement applies - take as many as you need.","nextShot":"Next"},"live":{"deviceTitle":"Live view","noAgentTitle":"No camera on this PC","noAgentBody":"Use this device camera or upload a file. A phone uses its own camera into the same library.","useDevice":"Use this camera","upload":"Upload a file","start":"Start camera","stop":"Stop camera","capture":"Capture","grid":"Grid","rotate":"Rotate","exposureUp":"Exposure +","exposureDown":"Exposure -","autofocus":"Autofocus","shotChip":"Shot {n} of {total}","freeShot":"Free photo","damage":"Damage photo","starting":"Starting the camera...","cameraBlocked":"The camera is blocked. Allow it for this page and try again.","cameraError":"The camera could not be opened.","agentOutdated":"This station's agent is out of date - update it.","agentError":"The station camera reported a problem.","uploading":"Saving the photo...","tethered":"Station camera","device":"This device","pedalHint":"Capture is the gold button, the foot pedal or the space bar."},"shot":{"approve":"Approve","crop":"Crop","retake":"Retake","reject":"Reject","reopen":"Reopen","approved":"Approved","awaiting":"Approve or crop","rejected":"Needs a retake","missing":"Not taken yet","free":"Extra photo","damageLabel":"Damage"},"approveAll":"Approve all - next unit","review":{"approved":"Approved.","rejected":"Sent back for a retake.","reopened":"Back to waiting for approval.","cropped":"Crop saved.","captured":"Photo saved with its three renditions in {ms} ms.","deduplicated":"That exact photo was already here - nothing added.","uploadFailed":"The photo could not be saved.","tooLarge":"That file is larger than 10 MB.","unsupported":"That is not a JPEG, PNG, WebP or AVIF image.","approvedAll":"{n} photo(s) approved."},"crop":{"title":"Crop and rotate","rotateLeft":"Rotate left","rotateRight":"Rotate right","reset":"Whole photo","apply":"Save crop","applyApprove":"Save and approve","cancel":"Cancel","hint":"Drag to choose the part to keep. The three renditions are re-made from the untouched original."},"pending":{"title":"Photo pending","kpiPending":"Pending","kpiOlderDay":"Older than a day","kpiToday":"Taken today","kpiRejected":"With a retake","kpiAvgWait":"Average wait","filterSite":"Site","filterClient":"Client","filterCondition":"Condition","filterWaiting":"Waiting","filterKind":"Kind","search":"Serial, part or order","all":"All","anyWait":"Any","waitDay":"Over a day","waitWeek":"Over a week","colSubject":"Unit","colRequired":"Required","colTaken":"Taken","colWaiting":"Waiting","colWhere":"Where","whereStation":"At {name}","wherePhone":"Sent to a phone","whereUnrouted":"Not routed","sendStation":"Send to station","sendPhone":"Phone","takeBack":"Take back","approveAllRow":"Approve all","retakeRow":"Ask for a retake","empty":"Nothing is waiting for photos.","truncated":"Showing the longest-waiting units; narrow the filters to see the rest.","phoneTitle":"Take photos on a phone","phoneBody":"Open this on the phone, or scan the code. The phone uses its own camera into the same library.","phoneCopy":"Copy the link","copied":"Copied","open":"Open","refresh":"Refresh","sent":"Sent to {name}.","sentPhone":"Sent to a phone.","takenBack":"Routing cleared."},"library":{"title":"Library","filterStatus":"Status","filterKind":"Kind","search":"Serial or part number","all":"All","statusPending":"Waiting","statusApproved":"Approved","statusRejected":"Rejected","empty":"No photos match.","takenAt":"Taken","loadMore":"Load more","of":"of","openSubject":"Open the unit"},"requirements":{"title":"Photo requirements","intro":"A rule says: units of this process, condition or client need these photos. The most specific rule wins; an empty field means \"any\".","add":"Add a requirement","process":"Process","condition":"Condition","client":"Client","minPhotos":"How many photos","kinds":"Counts these kinds","shots":"Named shots","anyField":"any","addShot":"Add a shot","shotName":"Shot name","save":"Save","cancel":"Cancel","remove":"Remove","removeConfirm":"Remove this requirement? Photos stay; the units it covered simply stop being pending.","empty":"No requirements yet - every unit is complete until you add one.","saved":"Requirement saved.","exists":"A requirement for the same process, condition and client already exists.","newTitle":"New requirement","editTitle":"Edit requirement","kindLabels":{"product":"Product","probation":"Probation","verify":"Verify","rma":"RMA","damage":"Damage","packing":"Packing"}},"agentStrip":{"paired":"Station Agent: {name}","none":"Station Agent: none","camera":"Camera","uploads":"Uploads","device":"this device"},"common":{"loading":"Loading...","error":"Something went wrong. Try again.","retry":"Retry","close":"Close","cancel":"Cancel","none":"None","remove":"Remove"}},"station":"Station","runNotPublished":"This process is not published yet. Publish it in Process Builder and it will run here, step by step.","toggleBrightness":"Toggle station brightness","run":{"pickStation":"Choose a station","allStations":"All stations","noStations":"No stations yet. Create one in station setup, then open it here to run a process.","noProcesses":"No process is published for this station yet.","ownerAllNote":"You are the Owner, so every published process is listed, whatever a station is bound to.","steps":"{n} steps","resumeTitle":"Resume your open run","resumeBody":"{name} — {done} of {total} steps done.","resume":"Resume","start":"Start","starting":"Starting…","working":"Working…","loading":"Loading…","complete":"Run complete","completeBody":"Every step is done. Start another from the stations list.","voided":"Run voided","back":"Back","voidRun":"Void","voidTitle":"Void this run?","voidBody":"The unit is kept and no label prints again. Give a reason.","voidReason":"Reason","voidConfirm":"Void run","cancel":"Cancel","continue":"Continue","submit":"Submit","stepOf":"Step {n} of {total}","scanSerial":"Scan or type the serial","serial":"Serial","lookup":"Scan or type the code to look up","print":"Print the label","printConfirm":"Print","copies":"Copies","reprintReason":"Reason for reprint","photo":"Attach the photos, or skip to finish later","photoAttach":"Mark photos attached","photoSkip":"Skip for now","approve":"A supervisor must approve to continue","approverId":"Approver id","approveDo":"Approve","statusOk":"Done","statusFailed":"Needs attention","reprintTitle":"Reprint a label","reprintBody":"Scan or type the unit id to reprint its label at this station.","reprintUnit":"Unit id","reprint":"Reprint","reprintOk":"Sent to the printer.","reprintFailed":"Could not reprint: {detail}","blockTitle":"Fix this to continue","block":{"serial_scheme_unresolved":"No serial scheme is set for this step.","serial_alloc_failed":"The serial could not be allocated. Try again.","serial_invalid":"That serial is not valid.","unit_site_required":"A site is required to record the unit.","unit_pn_required":"A part number is required to record the unit.","inventory_input":"The stock move needs a product and a quantity.","inventory_failed":"The stock move was refused.","nothing_yet":"Add at least one before finishing.","rejected":"That action is not allowed here.","drain_overflow":"The process looped on automatic steps. Check its design.","generic":"This step cannot continue yet."}}},"pressOne":{"title":"Press One","subtitle":"The company websites: each site, where its leads go, every lead received, and the editor.","eyebrow":"Marketing Hub · Web","tabs":{"overview":"Overview","sites":"Sites","connections":"Connections","routes":"Lead routes","leads":"Leads","editor":"Editor"},"zone":{"title":"Press One","subtitle":"One place for the Group site and every country site: what each one serves, where its leads land, and the editor behind them.","cta":"See the sites"},"common":{"save":"Save","cancel":"Cancel","edit":"Edit","add":"Add","delete":"Delete","archive":"Archive","enabled":"Enabled","disabled":"Disabled","none":"None yet","never":"Never","test":"Test","open":"Open","actions":"Actions"},"overview":{"kpiLeads7d":"Leads, last 7 days","kpiDelivered":"Delivered to a CRM","kpiRetrying":"Still trying","kpiFailed":"Failed","kpiUnrouted":"From an unknown site","sitesTitle":"Sites","sitesHint":"What each site is serving right now and where its leads go.","noSites":"No sites yet. Add the Group site and the country domains in the Sites tab.","live":"Live","preview":"Preview","same":"Preview and live match","previewAhead":"Preview is ahead of live","unreachable":"Not answering","protected":"Behind sign-in","routesTo":"Leads go to","noRoute":"No route: leads follow the legacy Redix-by-country path","lastLead":"Leads (7 days)","connectionsTitle":"CRM connections","connectionsHint":"The credentials the lead routes write with. Green means the last test reached the CRM.","noConnections":"No CRM connection yet. Connect Redix or monday.com in the Connections tab.","deployHint":"Promote to live and Roll back are approved human actions and stay in GreenOne.","openGreenOne":"Open Static Sites in GreenOne"},"sites":{"eyebrow":"Press One","title":"Sites","subtitle":"One row per website instance: the Group site and each country domain. The domains decide which site a contact-form submission belongs to.","add":"Add a site","editTitle":"Edit site","fields":{"slug":"Handle","name":"Name","company":"Company","country":"Country code","domains":"Domains","domainsHint":"Comma-separated hostnames; the first one is the public address. A submission whose Origin matches one of them belongs to this site.","locales":"Languages","localesHint":"Comma-separated codes, e.g. en, es, pt.","defaultLocale":"Default language","kind":"Pages produced by","kindStatic":"Static generator","kindWordpress":"Press One (WordPress)","wpSiteId":"WordPress site id","previewUrl":"Preview address","greenoneTarget":"GreenOne static-site target","status":"Status","note":"Note"},"statuses":{"planned":"Planned","active":"Active","archived":"Archived"},"companies":{"RGI":"RGI (USA, Brazil, Mexico, Ecuador)","RCO":"RCO (Colombia)"},"table":{"site":"Site","company":"Company","domains":"Domains","languages":"Languages","kind":"Pages","serving":"Serving","deploy":"Deploy"},"archiveConfirm":"Archive this site? Its lead routes stay but stop matching new submissions.","saved":"Site saved.","archived":"Site archived.","openPreview":"Open preview","openLive":"Open live site","promote":"Promote / roll back in GreenOne"},"connections":{"eyebrow":"Press One","title":"Connections","subtitle":"The CRM connections a lead route can write with. Credentials are stored encrypted by the Integrations module; this page lists and tests them.","connect":"Connect","connectHint":"Redix takes one service token per sede (the token decides the company). monday.com takes an API token and a board id.","manageAll":"All integrations","table":{"name":"Connection","platform":"Platform","scope":"Scope","health":"Health","lastUsed":"Last used","actions":"Actions"},"health":{"online":"Online","offline":"Offline","degraded":"Degraded","needs_setup":"Needs setup","unknown":"Not tested yet"},"tested":"Connection test passed","testFailed":"Connection test failed","platforms":{"redix":"Redix","monday":"monday.com"}},"routes":{"eyebrow":"Press One","title":"Lead routes","subtitle":"Which CRM each site writes its leads to. A route without a country is the site default; a route with a country only takes visitors who picked that country.","add":"Add a route","editTitle":"Edit route","fields":{"site":"Site","country":"Visitor country","countryAny":"Any country (site default)","connection":"CRM connection","action":"What to create","fieldMap":"Field mapping","fieldMapHint":"Left: the CRM field (for monday.com, col_<column id>). Right: a lead field, or a literal written as =text with ${field} placeholders.","enabled":"Enabled","priority":"Priority"},"table":{"site":"Site","country":"Country","destination":"Destination","action":"Creates","enabled":"State","actions":"Actions"},"defaultMapHint":"default mapping","sendTest":"Send a test lead","testSent":"Test lead delivered","testFailed":"Test lead not delivered","deleteConfirm":"Delete this route? Leads already received keep their history.","saved":"Route saved.","noConnections":"Connect a CRM first (Connections tab); then a route can point at it.","mapKey":"CRM field","mapValue":"Lead field or =literal","addMapRow":"Add a field","resetDefaults":"Reset to defaults","leadFields":"Lead fields","empty":"No routes yet. Until a site has one, its leads follow the legacy Redix-by-country path."},"leads":{"eyebrow":"Press One","title":"Leads","subtitle":"Every submission of the public contact form, stored the moment it arrived, with each CRM delivery and its result.","filters":{"allSites":"All sites","allStatuses":"All statuses","unrouted":"Unknown site"},"table":{"received":"Received","who":"Who","company":"Company","country":"Country","site":"Site","locale":"Language","status":"Status","deliveries":"Deliveries"},"statuses":{"received":"Received","routed":"Delivering","delivered":"Delivered","failed":"Failed","unrouted":"Unknown site"},"deliveryStatuses":{"queued":"Queued","delivered":"Delivered","duplicate":"Already in CRM","failed":"Retrying","dead":"Gave up"},"attempts":"Attempts","nextTry":"Next try","retryNow":"Retry now","retried":"Delivery retried","retryFailed":"Retry did not deliver","empty":"No leads match.","test":"TEST","legacyRedix":"Legacy path: Redix by country + e-mail","viaEmailOnly":"E-mail only (no route)"},"editor":{"eyebrow":"Press One","title":"Editor","subtitle":"The WordPress network where the pages are written: the Group site and the country sites, in their languages.","notConnected":"Press One's editor is not connected yet","notConnectedHint":"The WordPress network is the next lane (its own server at press.redsis.app). This tab opens it the moment these are in place:","missing":{"origin":"PRESS_ONE_ORIGIN: the editor address (https://press.redsis.app).","assertion_key":"PRESS_ONE_ASSERTION_KEY: Redsis One's signing key for the 60-second door assertion (Setup Center).","grant_keys":"PRESS_ONE_GRANT_KEYS: Press One's public keys, so its answer can be verified (Setup Center)."},"noAccess":"You don't have an editor role in Press One.","noAccessHint":"Who edits which site is decided in Central One's role matrix, not by Redsis One roles. Ask Mike or Jair if you need access.","notLinked":"Your Redsis One account is not linked to your Central One identity yet, so Press One cannot recognize you. Ask an administrator to link it.","unavailable":"Press One is not reachable right now. Try again in a few minutes.","reauth":"Sign in to Redsis One again, with your second factor, to open the editor.","frameTitle":"Press One editor","frameHint":"The editor runs on its own server inside this frame. If it stays blank, your browser blocks third-party cookies: open it in a new tab.","openNewTab":"Open in a new tab","parentSpec":"Plan: redsis-website docs/specs/press-one/SPEC.md (phases 1 to 3)."}},"quickbooks":{"title":"QuickBooks","ui":{"cashflow":{"company":"Company","openingBalance":"Opening balance","refresh":"Refresh from QuickBooks","refreshing":"Refreshing…","prevMonth":"Previous month","nextMonth":"Next month","expectedIn":"Expected in","expectedOut":"Expected out","net":"Net","projectedEnd":"Projected end balance","askAyva":"Ask Ayva about this month","summarize":"Summarize","summarizing":"Summarizing…","noData":"Nothing expected this month yet. Refresh from QuickBooks to pull open invoices, bills and purchase orders.","refreshFailed":"Could not refresh: {error}","dayIn":"in","dayOut":"out","weekdays":"Sun,Mon,Tue,Wed,Thu,Fri,Sat"},"lookup":{"placeholder":"Type to search {noun}…","searching":"Searching QuickBooks…","noMatch":"No match in QuickBooks","noMatchRetryHint":"If you know it exists, try again in a moment. If it is not a vendor in QuickBooks, ask accounting to create it.","createNew":"Create “{name}” in QuickBooks","creating":"Creating…","recent":"Recent","createFailed":"Could not create it in QuickBooks.","showId":"QuickBooks id","lookupFailed":"Could not search QuickBooks.","busyRetrying":"QuickBooks is busy, retrying…","waitingForRead":"Waiting for the read to finish…","otherName":"Other name"},"wizard":{"step1":"Install the connector on the QuickBooks machine","step1Body":"On the Windows machine that has QuickBooks Desktop and the company file: install Python 3.11 or newer, copy the connector folder over, then fill these in.","host":"Machine address (reachable from Redsis One)","qbw":"Company file path (.qbw)","qbwExample":"C:\\QuickBooks\\TEST.qbw","smoke":"Quick local check (no service yet):","health":"Once it is running, this address should answer ok: true","step2":"Register this machine (creates its secret)","agentId":"Machine id","agentName":"Display name (optional)","register":"Register and create its secret","reRegister":"Register again (new secret)","regFailed":"Registration failed.","secretOnce":"The secret is shown once. Copy the whole install command below and run it in an elevated PowerShell in the connector folder on the QuickBooks machine.","step3":"Confirm it came online","refresh":"Refresh status","online":"online","offline":"offline","noAgents":"No machines registered yet.","step4":"Point a company at this machine","company":"Company","useNative":"Use this machine for the company","linked":"This company now goes through your machine.","linkFailed":"Could not point the company at the machine.","step5":"Test the connection (safe, read-only)","runTest":"Ask QuickBooks to answer","testOk":"QuickBooks answered — the connection is live.","testNoAnswer":"No answer from QuickBooks.","testFailed":"The test could not run.","next":"Next: run the catalog test to fire every action, or open Sales to edit a record.","catalogTest":"Catalog test","openSales":"Open Sales"},"transport":{"title":"How each company is reached","hint":"Connector: Redsis One builds the request and a connector machine runs it in QuickBooks Desktop (the standard). Bridge: the older n8n path for a location not yet on a connector.","colCompany":"Company","colPath":"Path","colMachine":"Connector machine","colFile":"Company file (.qbw)","colSave":"Save","pathNative":"Connector (standard)","pathLedger":"Bridge (n8n)","anyOnline":"Any online machine","online":"online","offline":"offline","save":"Save","saved":"Saved","colReason":"Reason for the change","reasonPlaceholder":"Why? (optional)","reasonLabel":"Reason for changing {company}","lastChange":"Last change: {when} · {who}","lastChangeWithReason":"Last change: {when} · {who} · “{reason}”","system":"system","noChange":"Nothing changed, so there was nothing to save.","noChangeReasonKept":"Nothing changed, so the reason was not recorded.","saveFailed":"Could not save. Your reason was kept; try again."},"convert":{"conversion":"What to create","sourceNumber":"{noun} number","find":"Find","colNumber":"Number","colCustomer":"Customer","colDate":"Date","colTotal":"Total","select":"Select","selected":"Selected","noMatches":"No documents match that number.","carryHint":"QuickBooks carries the lines into the new document and keeps the link.","create":"Create {noun}","created":"Created {noun} {number}","failedAt":"Could not finish ({step}).","noTxnId":"The selected document has no QuickBooks id.","pairEstimateInvoice":"Invoice from an estimate","pairEstimateSalesOrder":"Sales order from an estimate","pairSalesOrderInvoice":"Invoice from a sales order"},"rulesManager":{"newRule":"New rule","editRule":"Edit rule","presetUpper":"UPPERCASE only","presetAlnum":"Letters + digits only","presetUpperAlnum":"UPPER letters + digits only","msgUpper":"{field} must be UPPERCASE.","msgAlnum":"{field}: letters and numbers only, no symbols.","msgUpperAlnum":"{field}: UPPERCASE letters and numbers only.","fieldName":"Rule name","fieldEntity":"Applies to","allEntities":"Every record type","fieldLeaf":"Field","fieldLeafHint":"The QuickBooks field name, e.g. Name, RefNumber, Memo.","fieldKind":"Check","kindRegex":"Pattern (regular expression)","kindMaxlen":"Maximum length","kindTransform":"Casing","fieldPattern":"Pattern","fieldFlags":"Pattern options","fieldMaxLen":"Maximum length","fieldTransform":"Required casing","transformUpper":"UPPERCASE","transformLower":"lowercase","transformTrim":"No spaces at the start or end","fieldSeverity":"When it trips","severityError":"Block the save","severityWarning":"Warn, but allow","fieldSede":"Company","allSedes":"Every company","fieldMessage":"Message people see","messagePlaceholder":"Item names must be UPPERCASE letters and numbers only.","errRequired":"A name, a field and a message are required.","save":"Save rule","cancel":"Cancel","colRule":"Rule","colScope":"Applies to","colConstraint":"Check","colSeverity":"When it trips","colOn":"On","on":"On","off":"Off","edit":"Edit","delete":"Delete","confirmDelete":"Delete this rule?","empty":"No rules yet. Add one and every QuickBooks form will enforce it before anything is sent.","saveFailed":"Could not save the rule."},"inbox":{"recentJobs":"Recent statements and documents","noJobs":"Nothing uploaded yet. Drop a statement or a document above.","colLabel":"File","colSource":"Kind","colCompany":"Company","colStatus":"Status","colCharges":"Posted / postable","colWhen":"Uploaded","srcAmex":"AMEX statement","srcBank":"Bank statement","srcCardPdf":"Card statement (PDF)","srcBillPdf":"Vendor bill (PDF)","srcReceipt":"Receipt","srcMessage":"Message","stUploaded":"Uploaded","stExtracting":"Reading…","stReview":"Ready to review","stPartiallyPosted":"Partly posted","stPosted":"Posted","stError":"Could not read","jobError":"This file could not be read: {error}","jobErrorInternal":"an internal error occurred while saving the statement. Try again; if it keeps happening, contact support.","stMatching":"Classifying","jobErrorInterrupted":"the read stopped while it was reading the file. Upload it again.","jobErrorAmexInBank":"This file is an AMEX statement, not a bank statement. Upload it as a card statement.","progressAria":"Progress of the statement read","progressReading":"Reading the file…","progressMatching":"Classifying charge {done} of {total}","progressPercent":"{percent}%","progressElapsed":"running for {time}","progressEta":"~{n} min left","progressStale":"The read stopped (the server restarted).","progressContinue":"Continue","deleteStatement":"Delete statement","deleteStatementShort":"Delete","deleteStatementConfirm":"You are about to delete the statement «{label}» with {n} charges. This cannot be undone. Are you sure?","deleteStatementConfirmOne":"You are about to delete the statement «{label}» with 1 charge. This cannot be undone. Are you sure?","deleteStatementYes":"Delete","deleteStatementCancel":"Cancel","deleteStatementBusy":"Deleting…","errDeleteHasPosted":"It cannot be deleted: it has charges already sent to QuickBooks.","errDeleteStillReading":"It cannot be deleted yet: the statement is still being read. Wait for it to finish; if it got stuck, open it and click «Continue».","errDeleteStatement":"Could not delete the statement: {error}","colActions":"Actions","progressContinuing":"Continuing…","progressConflict":"Someone already continued it, or it is still moving. Refreshing…","progressFailed":"Could not continue: {error}","progressFinished":"Read finished. Opening the review…","progressLoadingResult":"Loading the result…","ruleIssueNotFound":"The rule «{rule}» points to the account «{account}», which does not exist in QuickBooks: {n} charges were left without that account.","ruleIssueAmbiguous":"The rule «{rule}» points to the account «{account}», which matches several accounts in QuickBooks: {n} charges were left without that account.","ruleIssueLink":"Review the classification rules","amzFreshRead":"Amazon orders read {age}","amzFreshAgeLt1h":"less than 1 h ago","amzFreshAgeHours":"{h} h ago","amzFreshAgeDays":"{d} days ago","amzFreshNever":"Amazon has not been read yet","amzFreshUnmatchedOne":"1 charge without an order","amzFreshUnmatchedMany":"{n} charges without an order","amzFreshAllMatched":"every Amazon charge has its order","amzFreshStaleHint":"the reader has not read in more than {h} h; tell support","amzFreshStaleHintSync":"the reader has not read in more than {h} h; tap Sync now and, if it persists, tell support","amzFreshNotConnected":"Amazon is not connected for this company","amzFreshAgeJustNow":"just now","amzSyncNow":"Sync now","amzSyncStillRunning":"Still reading; reload the page in a while","amzSyncBlocked":"Amazon asked for verification (captcha). It will retry on the next automatic read; if it persists, tell support.","amzSyncNoSession":"The Amazon session was closed; tell support to sign in again.","amzSyncNetwork":"Amazon could not be read; try again later.","amzSyncCooldown":"Can read again at {time}","amzSyncConfirmTitle":"Read Amazon orders now?","amzSyncConfirmBody":"Brings the NEW orders from the last 30 days and re-matches this statement. Changes to orders already stored come with the automatic read every 6 h.","amzSyncConfirmLast":"Last read: {age}.","amzSyncConfirmTakes":"Takes about {s} s.","amzSyncConfirmUntil":"Nobody can read again until {time}.","amzSyncConfirmGo":"Read now","amzSyncConfirmCancel":"Cancel","amzSyncPhaseConnecting":"Connecting to Amazon","amzSyncPhaseReading":"Reading orders · page {n}","amzSyncPhaseMatching":"Matching this statement","amzSyncPhaseDone":"Done","amzSyncElapsed":"{s} s","amzSyncReady":"Read finished","amzSyncReload":"Reload","reviewHint":"{counts} · confirm the vendor and account on each row, then post to QuickBooks.","countCharge":"1 charge","countCharges":"{n} charges","countPayment":"1 payment","countPayments":"{n} payments","countCredit":"1 credit","countCredits":"{n} credits","back":"All statements","moduleOff":"The QuickBooks module is off. Turn it on to use this."},"connections":{"colCompany":"Company","colStatus":"Status","colActions":"Actions","lastChecked":"checked {when}","neverChecked":"never checked","checkNow":"Check now","turnOff":"Turn off","turnOn":"Turn on","off":"Off","edit":"Edit","delete":"Delete","confirmDelete":"Remove this company from Redsis One? Nothing changes inside QuickBooks.","addCompany":"Add a company","companyName":"Company name","companyNameHint":"As people know it, e.g. \"Redsis USA\".","advanced":"Advanced (routing)","routingHint":"Routing code, gateway address and qbXML version — set by whoever wires the machine.","testLabel":"Test company","save":"Save"},"fleet":{"registerVm":"Register a machine","cancel":"Cancel","agentId":"Machine id","agentIdHint":"Short and stable, e.g. qb-vm-rec-01. It goes into the connector’s configuration.","name":"Name","dispatchUrl":"Address Redsis One reaches it at (optional)","dispatchUrlHint":"The machine can also report it on its own once the connector runs.","files":"Company files this machine may open (one per line, optional)","registerMint":"Register and create its secret","errRequired":"A machine id and a name are required.","errRegister":"Could not register the machine.","errRotate":"Could not create a new secret.","secretTitle":"Secret for “{id}” — copy it now, it will not be shown again","secretBody":"Paste these two lines into the connector’s .env on that machine. The secret is stored encrypted here and cannot be recovered — if it is lost, create a new one.","copy":"Copy","copied":"Copied","done":"Done","colMachine":"Machine","colAddress":"Address","colFiles":"Company files","colHeartbeat":"Last seen","colStatus":"Status","colActions":"Actions","noUrl":"no address yet","anyFile":"any file","allowedFiles":"Allowed files","allowedFilesHint":"One path per line. Empty = any file.","saveFiles":"Save","savingFiles":"Saving…","filesSaved":"Saved","reportedFiles":"The connector reports:","reportedNotYet":"nothing yet","reportedAny":"no list (its ALLOWED_FILES is empty)","filesDiffer":"The two lists differ. Redsis One only sends this machine the allowed files.","filesAllowAny":"No allowed list: it accepts any file.","errFilesTooMany":"Too many files — the limit is {max}.","errFilesTooLong":"A path is longer than {max} characters.","errSaveFiles":"Could not save the files.","never":"never","disabled":"turned off","online":"online","offline":"offline","turnOff":"Turn off","turnOn":"Turn on","rotate":"New secret","rotateConfirm":"Create a new secret? The old one stops working immediately.","rotateGo":"Create","empty":"No connector machines yet.","emptyManage":"Register one above, or use the guided setup.","onlineWindow":"A machine counts as online when it has checked in within the last {s} seconds.","outageNone":"No outages recorded.","outageLast":"Last outage: {start} · {minutes} min","outageOngoing":"Down since {start} · still not answering","outageCount7d":"{n} in the last 7 days"},"testRunner":{"company":"Company","scope":"Which actions","allModules":"Everything","run":"Run {n} actions","running":"Running {n} actions…","safety":"Reads (find / report) run live against the company file, capped to one record. Writes (create / edit / delete / void) are only built and checked here and are never sent, so running everything is safe.","pickCompany":"Pick a company first.","runFailed":"The run could not be completed.","filterAll":"All","pass":"Passed","fail":"Failed","built":"Built only","skipped":"Skipped","colAction":"Action","colArea":"Area","colOperation":"Operation","colKind":"Kind","colStatus":"Result","colMs":"Time","noneForFilter":"No actions for this filter."},"browser":{"fields":"{n} fields","report":"report","all":"All areas"},"uploader":{"file":"File","message":"Message","company":"Company","kind":"What is it","kindAuto":"Let Redsis One detect it","kindAmex":"AMEX statement (Excel or CSV)","kindBank":"Bank statement (CSV)","kindCardPdf":"Card statement (PDF)","kindBill":"Vendor bill (PDF or photo)","kindReceipt":"Receipt (PDF or photo)","kindMessage":"Pasted message","pasteHere":"Paste the message here","dropHint":"Drop a file here or click to choose one","upload":"Read it","uploading":"Reading… this can take a minute for a long statement","done":"Read {n} charge(s). Opening the review…","failed":"Could not read it: {error}","needFile":"Choose a file or paste a message first.","kindImage":"Photo or image","notConnected":"not connected to QuickBooks"},"chrome":{"eyebrow":"Finance Hub","subtitle":"Work in QuickBooks Desktop from here: customers, sales, purchases, items, banking — every action goes straight into the company file.","company":"Company","chooseCompany":"Choose a company","noCompany":"No company connected yet","testBadge":"Test","chooseFile":"Choose file","noFileChosen":"No file chosen","online":"Online","offline":"Offline","notChecked":"Not checked","find":"Find in QuickBooks","findPlaceholder":"Customer, vendor, item, invoice #…","findHint":"Type at least 2 characters","findNoResults":"Nothing in QuickBooks matches “{q}”","findSearching":"Asking QuickBooks…","findUnavailable":"QuickBooks did not answer for {group}","findStopped":"Stopped at {group}: {reason}. The rest was not searched, so the connector is not left with a queue.","findNeedsCompany":"Choose a company to search in.","groupCustomers":"Customers","groupVendors":"Vendors","groupItems":"Items","groupTransactions":"Transactions","new":"New","newMenuTitle":"Create in QuickBooks","open":"Open","close":"Close"},"zone":{"title":"QuickBooks Home","asOf":"as of {time}","refresh":"Refresh numbers","collapse":"Hide the flow map","expand":"Show the flow map","laneCustomers":"Customers","laneVendors":"Vendors","laneCompany":"Company & banking","estimates":"Estimates","salesOrders":"Sales orders","invoices":"Invoices","receivePayments":"Receive payments","deposits":"Record deposits","purchaseOrders":"Purchase orders","receiveItems":"Receive items","enterBills":"Enter bills","payBills":"Pay bills","items":"Items & inventory","chartOfAccounts":"Chart of accounts","writeChecks":"Write checks","cardCharges":"Card charges","journal":"Journal entries","open":"{n} open","openLast12m":"{n} open (last 12 months)","toReorder":"{n} to reorder","toDeposit":"{n} to deposit","unknown":"Not available","offlineHint":"The QuickBooks machine for this company is offline; numbers return when it reconnects.","chooseHint":"Choose a company to see its numbers.","partialHint":"Some numbers could not be read from QuickBooks in that run.","noNumbersYet":"No numbers yet","waitSeconds":"Wait {s} s","countAtLeast":"{n}+","amountAtLeast":"≥ {amount}","loadFailed":"Could not load the numbers. Try again in a moment.","cappedNoneOpen":"{n}+ reviewed · open ones may not show","calculating":"Calculating…","progressReading":"Reading {done} of {total} QuickBooks figures","progressPercent":"{percent}%","progressEta":"~{n} min left","progressAria":"Progress of the QuickBooks numbers update","calculatingLong":"Still calculating. The numbers will show here when they are ready — come back later.","dataFrom":"data from {date}","lastRunFailed":"The last update could not read QuickBooks ({time}); these are the previous numbers.","reasonBusy":"QuickBooks was busy with another job.","reasonTimeout":"QuickBooks took too long to answer.","reasonNotAvailable":"QuickBooks is not reachable for this company right now.","reasonError":"QuickBooks returned an error for this number."},"overview":{"attention":"Needs your attention","allGood":"Nothing needs attention right now.","failures24h":"{n} action(s) failed in the last 24 hours","offlineCompanies":"{n} company(ies) offline","uncheckedCompanies":"{n} company(ies) never checked","inboxReview":"{n} statement(s) waiting for review","quickActions":"Do something","reports":"Reports","reportsHint":"Runs in QuickBooks; the result shows here.","recentActivity":"Recent activity","seeAll":"See all","onboardingTitle":"Connect your first QuickBooks company","onboardingBody":"Redsis One talks to QuickBooks Desktop through a small connector on the Windows machine that has QuickBooks. The guided setup takes about ten minutes.","onboardingCta":"Set up a company","onboardingNoAccess":"Ask a QuickBooks administrator to connect a company.","checkNow":"Check now"},"lists":{"type":"Type","recordTypes":"Record types","filterOpen":"Open","filterAll":"All","filterActive":"Active","searchByName":"Search by name","searchByNumber":"Search by number","searchButton":"Search","results":"{n} result(s)","capped":"Showing the first {n}. Narrow the search to see the rest.","emptyTitle":"Nothing here yet","emptyBody":"Search QuickBooks above, or create the first one.","emptySearch":"Nothing matches “{q}”.","edit":"Edit","view":"View","back":"Back to the list","convert":"Convert a document","convertHint":"Turn an estimate or sales order into the next document. QuickBooks carries the lines and keeps the link.","cashflowTitle":"Cashflow calendar","cashflowHint":"Money expected in and out per day, with a running balance.","inboxTitle":"Accounting inbox","inboxHint":"Card and bank statements: extract, classify, post.","openInQuickBooks":"QuickBooks ID","loadingRecord":"Opening the record…","recordNotFound":"That record is no longer in QuickBooks.","refreshed":"Reloaded from QuickBooks"},"activity":{"when":"When","title":"Activity","subtitle":"Everything sent to QuickBooks from Redsis One, in plain words.","viewWrites":"Changes","viewAll":"Everything","viewFailed":"Failed","filterCompanyAll":"All companies","filterMine":"Only mine","by":"by {name}","system":"System","retry":"Retry","retrying":"Retrying…","retried":"Retried — the new attempt is at the top.","checkInQb":"QuickBooks never answered, so this may or may not have posted. Check in QuickBooks before trying again.","details":"Details","technical":"Technical details","exportCsv":"Export CSV","loadMore":"Show older","empty":"No activity yet. Anything you send to QuickBooks will show up here.","took":"took {s} s","statusOk":"Done","statusFailed":"Failed","justNow":"just now","minutesAgo":"{n} min ago","hoursAgo":"{n} h ago","lookupsNote":"System lookups (typeahead searches, live counts) are hidden here. Switch to “Everything” to see them.","records":"{n} record(s)"},"feedback":{"sending":"Sending to QuickBooks…","usually":"usually 2–5 seconds","undo":"Undo","undoVoid":"Undo (void in QuickBooks)","undoDelete":"Undo (delete in QuickBooks)","undoing":"Undoing…","undone":"Taken back in QuickBooks","undoFailed":"Could not undo: {error}","cannotUndo":"This can’t be undone in QuickBooks once sent.","confirmUndo":"Take this back in QuickBooks?","open":"Open","details":"Details","errorGeneric":"Something went wrong talking to QuickBooks.","noCompanyChosen":"Choose the company first.","confirm":"Confirm","cancel":"Cancel","saved":"Saved"},"settings":{"companies":"Companies","companiesHint":"The QuickBooks company files Redsis One can work in, and whether each one answers.","machines":"Connector machines","machinesHint":"The Windows machines running QuickBooks Desktop with the Redsis connector.","rules":"Rules","rulesHint":"Governance rules every form enforces, and card-charge classification rules.","inboxAccess":"Inbox access","powerTools":"Power tools","powerToolsHint":"For administrators: every QuickBooks action as a raw form, the workbench, and the catalog test.","allActions":"All QuickBooks actions","allActionsHint":"The complete list — 239 actions, every field.","workbench":"Workbench","workbenchHint":"Find, edit and save any record type in one screen.","catalogTest":"Catalog test","catalogTestHint":"Fire every action at a company file: reads run live, writes are only built and checked.","setup":"Connect a machine","setupHint":"Guided: install the connector, register the machine, test a read.","checkAll":"Check all companies","checking":"Checking…","checked":"Checked: {ok} online, {offline} offline","checkedStopped":"{n} not checked: stopped at {company} ({reason}).","advanced":"Advanced","sedeCode":"Routing code (sede)","adminOnly":"Only QuickBooks administrators can change this.","lists":"Company lists","listsHint":"Accounts, classes, terms, payment methods and the other lists QuickBooks keeps."},"form":{"submitVoid":"Void in QuickBooks","submitDelete":"Delete in QuickBooks","submitRun":"Run in QuickBooks","submitFind":"Find","submitSave":"Save to QuickBooks","submitCreate":"Create in QuickBooks","optionalHint":"Everything not marked * is optional.","technicalTitle":"Technical details — what will be sent to QuickBooks","sections":"Other sections","fewerColumns":"Fewer columns","moreColumns":"More columns","essentials":"Essentials","more":"More fields","advanced":"Advanced — QuickBooks ids and technical fields","postsTo":"Posts to","showTechnical":"Show technical details","hideTechnical":"Hide technical details","requiredHint":"* required","lineItems":"Line items","fixThese":"A few things to fix first","reviewWarnings":"Worth a second look","noPermission":"You can view this, but not send it to QuickBooks. Ask an administrator for the permission."},"results":{"records":"{n} record(s)","showing":"Showing {n} of {total}","rawResponse":"Raw response","qbSaid":"QuickBooks said: {message}","noAnswer":"No answer came back from QuickBooks.","statusCode":"QuickBooks status code"}},"friendly":{"verbs":{"Add":"Create {noun}","Mod":"Edit {noun}","Query":"Find {noun}","Del":"Delete {noun}","Void":"Void {noun}","Report":"Run {noun}","Other":"Manage {noun}"},"descriptions":{"Add":"Creates {noun} in QuickBooks for the selected company.","Mod":"Changes {noun} that already exists in QuickBooks. Only the fields you fill in are updated.","Query":"Looks up {noun} in QuickBooks. Nothing is changed.","Del":"Permanently deletes {noun} from QuickBooks. QuickBooks keeps an audit trail entry.","Void":"Voids {noun} in QuickBooks: the record stays, its amounts become zero.","Report":"Runs {noun} in QuickBooks and shows the result here.","Other":"A QuickBooks operation on {noun}."},"nouns":{"ARRefundCreditCard":"a credit card refund","Account":"an account","AccountTaxLineInfo":"an account tax-line mapping","AgingReport":"an aging report","BarCode":"a barcode","Bill":"a bill","BillPaymentCheck":"a bill payment by check","BillPaymentCreditCard":"a bill payment by credit card","BillToPay":"a bill to pay","BillingRate":"a billing rate","BudgetSummaryReport":"a budget summary report","BuildAssembly":"an assembly build","Charge":"a statement charge","Check":"a check","Class":"a class","ClearedStatus":"a cleared status","Company":"the company information","CompanyActivity":"the company activity","CreditCardCharge":"a credit card charge","CreditCardCredit":"a credit card credit","CreditMemo":"a credit memo","Currency":"a currency","CustomDetailReport":"a custom detail report","CustomSummaryReport":"a custom summary report","Customer":"a customer","CustomerMsg":"a customer message","CustomerType":"a customer type","DataEventRecoveryInfo":"a data event recovery record","DataEventSubscription":"a data event subscription","DataExt":"a custom field value","DataExtDef":"a custom field definition","DateDrivenTerms":"date-driven payment terms","Deposit":"a deposit","Employee":"an employee","Entity":"a name (customer, vendor, employee or other)","Estimate":"an estimate","Form1099CategoryAccountMapping":"a 1099 category mapping","GeneralDetailReport":"a general detail report","GeneralSummaryReport":"a general summary report","Host":"the QuickBooks host information","InventoryAdjustment":"an inventory adjustment","InventorySite":"an inventory site","Invoice":"an invoice","Item":"an item","ItemAssembliesCanBuild":"the buildable quantity of an assembly","ItemDiscount":"a discount item","ItemFixedAsset":"a fixed asset item","ItemGroup":"an item group","ItemInventory":"an inventory item","ItemInventoryAssembly":"an inventory assembly item","ItemNonInventory":"a non-inventory item","ItemOtherCharge":"an other-charge item","ItemPayment":"a payment item","ItemReceipt":"an item receipt","ItemSalesTax":"a sales tax item","ItemSalesTaxGroup":"a sales tax group","ItemService":"a service item","ItemSites":"the on-hand quantity by site","ItemSubtotal":"a subtotal item","JobReport":"a job report","JobType":"a job type","JournalEntry":"a journal entry","Lead":"a lead","List":"a list entry","ListDeleted":"a deleted list entry","ListDisplay":"a list window in QuickBooks","ListMerge":"a list merge","OtherName":"an other name","PaymentMethod":"a payment method","PayrollDetailReport":"a payroll detail report","PayrollItemNonWage":"a non-wage payroll item","PayrollItemWage":"a wage payroll item","PayrollSummaryReport":"a payroll summary report","Preferences":"the company preferences","PriceLevel":"a price level","PurchaseOrder":"a purchase order","QBXMLEvents":"the QuickBooks event feed","ReceivePayment":"a customer payment","ReceivePaymentToDeposit":"a payment waiting to be deposited","SalesOrder":"a sales order","SalesReceipt":"a sales receipt","SalesRep":"a sales rep","SalesTaxCode":"a sales tax code","SalesTaxPayable":"a sales tax payable","SalesTaxPaymentCheck":"a sales tax payment","SalesTaxReturn":"a sales tax return","SalesTaxReturnLine":"a sales tax return line","ShipMethod":"a shipping method","SpecialAccount":"a special account","SpecialItem":"a special item","StandardTerms":"standard payment terms","Subscription":"an event subscription","Template":"a form template","Terms":"payment terms","TimeReport":"a time report","TimeTracking":"a time entry","ToDo":"a to-do","Transaction":"a transaction","Transfer":"a funds transfer","TransferInventory":"an inventory transfer","Txn":"a transaction","TxnDeleted":"a deleted transaction","TxnDisplay":"a transaction window in QuickBooks","UIEventSubscription":"a UI event subscription","UIExtensionSubscription":"a UI extension subscription","UnitOfMeasureSet":"a unit of measure set","Vehicle":"a vehicle","VehicleMileage":"a vehicle mileage entry","Vendor":"a vendor","VendorCredit":"a vendor credit","VendorType":"a vendor type","WorkersCompCode":"a workers' comp code"},"overrides":{"ListMerge":"Merge two list entries","QBXMLEvents":"QuickBooks event feed","HostQuery":"Check the QuickBooks connection","CompanyQuery":"Show company information","PreferencesQuery":"Show company preferences","ItemQuery":"Find any item","TransactionQuery":"Find any transaction","EntityQuery":"Find any name","TxnVoid":"Void a transaction","TxnDel":"Delete a transaction","ListDel":"Delete a list entry","ReceivePaymentToDepositQuery":"Payments waiting to be deposited","BillToPayQuery":"Bills to pay","ItemSitesQuery":"On-hand quantity by site","ItemAssembliesCanBuildQuery":"How many assemblies can be built"},"leaves":{"RefNumber":"Number","TxnDate":"Date","DueDate":"Due date","ShipDate":"Ship date","ExpectedDate":"Expected date","Memo":"Memo","BalanceRemaining":"Balance due","Balance":"Balance","TotalBalance":"Total balance","TotalAmount":"Total amount","Amount":"Amount","SalesTaxTotal":"Sales tax","AppliedAmount":"Applied amount","IsActive":"Active","IsPaid":"Paid","IsPending":"Pending","IsToBePrinted":"To be printed","IsToBeEmailed":"To be emailed","IsManuallyClosed":"Closed manually","IsFullyReceived":"Fully received","IsFullyInvoiced":"Fully invoiced","IsAutoApply":"Apply automatically to open invoices","Name":"Name","FullName":"Full name","FirstName":"First name","LastName":"Last name","MiddleName":"Middle name","Salutation":"Salutation","JobTitle":"Job title","CompanyName":"Company","Phone":"Phone","AltPhone":"Alternate phone","Email":"Email","Contact":"Contact","AltContact":"Alternate contact","Notes":"Notes","Note":"Note","AccountNumber":"Account number","Desc":"Description","Description":"Description","SalesDesc":"Sales description","PurchaseDesc":"Purchase description","Quantity":"Quantity","QuantityToBuild":"Quantity to build","Rate":"Rate","Cost":"Cost","SalesPrice":"Sales price","PurchaseCost":"Purchase cost","QuantityOnHand":"On hand","QuantityOnOrder":"On order","QuantityOnSalesOrder":"On sales orders","ReorderPoint":"Reorder point","BuildPoint":"Build point","AverageCost":"Average cost","ManufacturerPartNumber":"Manufacturer part #","BarCodeValue":"Barcode","ListID":"QuickBooks ID","TxnID":"QuickBooks transaction ID","TxnLineID":"Line ID","EditSequence":"Version stamp (edit sequence)","TimeCreated":"Created","TimeModified":"Last modified","PONumber":"PO number","Addr1":"Address line 1","Addr2":"Address line 2","Addr3":"Address line 3","Addr4":"Address line 4","Addr5":"Address line 5","City":"City","State":"State / province","PostalCode":"Postal code","Country":"Country","ExchangeRate":"Exchange rate","CreditLimit":"Credit limit","HiredDate":"Hired date","OpenBalance":"Opening balance","OpenBalanceDate":"Opening balance date","AccountType":"Account type","Duration":"Duration","BillableStatus":"Billable","ReminderDate":"Reminder date","IsDone":"Done","IsAdjustment":"Adjusting entry","VendorMsg":"Message to vendor","Initial":"Initials","PaymentMethodType":"Payment method type","PriceLevelType":"Price level type","PriceLevelFixedPercentage":"Fixed percentage","StdDueDays":"Days until due","StdDiscountDays":"Discount days","DiscountPct":"Discount %","MaxReturned":"Max results","ActiveStatus":"Active status","FromModifiedDate":"Modified from","ToModifiedDate":"Modified until","ReportPeriod":"Report period","DisplayReport":"Open the report window in QuickBooks"},"refs":{"Customer":"Customer","Vendor":"Vendor","Item":"Item","Account":"Account","Class":"Class","Terms":"Terms","SalesRep":"Sales rep","ShipMethod":"Shipping method","PaymentMethod":"Payment method","Currency":"Currency","Template":"Form template","CustomerMsg":"Customer message","CustomerType":"Customer type","VendorType":"Vendor type","JobType":"Job type","Employee":"Employee","OtherName":"Other name","PriceLevel":"Price level","SalesTaxCode":"Sales tax code","ItemSalesTax":"Sales tax item","InventorySite":"Site","InventorySiteLocation":"Bin / location","FromInventorySite":"From site","ToInventorySite":"To site","UnitOfMeasureSet":"Unit of measure","BillingRate":"Billing rate","Entity":"Name","PayeeEntity":"Payee","BankAccount":"Bank account","CreditCardAccount":"Credit card account","ARAccount":"Accounts receivable account","APAccount":"Accounts payable account","DepositToAccount":"Deposit to","Parent":"Parent","ItemGroup":"Item group","ItemInventoryAssembly":"Assembly item","ItemService":"Service item","AdditionalContact":"Additional contact","DiscountAccount":"Discount account","IncomeAccount":"Income account","ExpenseAccount":"Expense account","COGSAccount":"Cost of goods sold account","AssetAccount":"Asset account","PrefVendor":"Preferred vendor","ShipToEntity":"Ship to","SalesRepEntity":"Person","TransferFromAccount":"From account","TransferToAccount":"To account","ItemInventory":"Inventory item"},"tabs":{"overview":"Overview","sales":"Sales","purchases":"Purchases","banking":"Banking","settings":"Settings"},"status":{"created":"{subject} created in QuickBooks","updated":"{subject} updated in QuickBooks","deleted":"{subject} deleted from QuickBooks","voided":"{subject} voided in QuickBooks","found":"Found {n} · {subject}","foundNone":"Nothing found for {subject}","ran":"{subject} · done","failed":"{subject} · could not be completed","rejected":"QuickBooks rejected {subject}","unreachable":"QuickBooks could not be reached for {subject}"}},"inboxAccess":{"title":"Accounting Inbox access","desc":"Who may open the Accounting Inbox. Each kind of statement has its own access: someone with card access does not see bank statements, and the other way round. The Owner always has access.","cardTitle":"Cards","cardDesc":"Card statements (AMEX and other cards), receipts, bills and pasted messages.","bankTitle":"Bank accounts","bankDesc":"Bank account statements (CSV) that become QuickBooks checks.","rulesTitle":"Classification rules","rulesDesc":"Create and edit the rules that classify inbox charges. Does not include the QuickBooks governance/validation rules.","rulesGrantHeading":"Who can manage the rules","rulesPeopleWith":"People who manage the rules","grantHeading":"Grant inbox access","searchPlaceholder":"Search people by name or email…","noMatches":"No matching people.","grant":"Grant","peopleWith":"People with inbox access","noneYet":"No one has been granted inbox access yet (besides the Owner).","revoke":"Revoke access","actionFailed":"Action failed."},"reconImport":{"title":"QuickBooks · Amazon reconciliation import","description":"Upload an Amazon Business Reconciliation Report CSV to see how it parses — charge identifier, orders per charge, amounts. Preview is read-only; importing writes the orders so card charges match by charge identifier.","moduleOff":"The QuickBooks module is off. Turn it on to use the reconciliation import.","exportPrefix":"Export it from","exportPath":"Amazon Business → Business Analytics → Reports → Reconciliation","exportSuffix":"on the account that holds the purchases, then drop the CSV here.","backPrefix":"Back to the","backLink":"accounting inbox","inboxHintPrefix":"Reconciling Amazon Business purchases?","inboxHintLink":"Import a reconciliation CSV","inboxHintSuffix":"to match card charges to their orders.","fileLabel":"Reconciliation CSV","preview":"Preview","chooseFirst":"Choose a CSV first.","previewFailed":"Preview failed","importFailed":"Import failed","measurableOk":"all required columns found. Mapping below.","notMeasurableTitle":"Not measurable — required columns missing","notMeasurableCouldNotFind":"The parser could not find:","notMeasurableFix":"Add the real header name(s) to HEADER_CANDIDATES in recon-csv-read.ts and re-run. No transactions are reported until every required column maps.","importTitle":"Import to reconciliation","importDesc":"Writes the {n} charge order(s) into qb_amazon_order so card charges match by charge identifier. Idempotent — re-importing updates, never duplicates.","sedeLabel":"Sede (QuickBooks company)","importBtn":"Import","importedMsg":"Imported {n} order row(s) into {sede} ({m} with a charge identifier).","importGated":"Import is not enabled for your user yet. Ask an administrator.","countDataRows":"Data rows","countTxns":"Transactions","countCharges":"Charges","countRefunds":"Refunds","countWithId":"With identifier","countKeyless":"Keyless","countOverRefunds":"Over-refunds","countDropped":"Dropped rows","droppedBreakdown":"Dropped rows: {u} with an unknown transaction type · {o} without an Order ID.","mappingTitle":"Column mapping","colField":"Field","colMappedTo":"Mapped to header","required":"(required)","notFound":"— not found","fieldChargeIdentifier":"Charge identifier","fieldTransactionType":"Transaction type","fieldAmount":"Transaction amount","fieldCurrency":"Currency","fieldCardLast4":"Card last-4","fieldOrderId":"Order ID","fieldOrderDate":"Order date","fieldLineAmount":"Line amount","fieldAsin":"ASIN","fieldTitle":"Product title","fieldQuantity":"Quantity","fieldInvoiceNumber":"Invoice number","unmappedTitle":"Unmapped columns in this CSV ({n})","unmappedDesc":"Present in the file but not consumed by the parser — check if any should be wired.","sampleTitle":"Sample transactions","sampleFirst":"(first {n})","colChargeId":"Charge identifier","colType":"Type","colAmount":"Amount","colCard":"Card","colOrders":"Orders","colFirstOrder":"First order","keyless":"— keyless"},"convertCopy":{"reading":"Reading the estimate…","previewTitle":"The sales order will carry","headerTitle":"From the estimate","linesTitle":"Lines","head":{"customer":"Customer","class":"Class","billTo":"Bill to","shipTo":"Ship to","poNumber":"P.O. number","terms":"Terms","salesRep":"Sales rep","fob":"FOB","shipMethod":"Ship via","salesTax":"Sales tax","customerTaxCode":"Customer tax code","customerMessage":"Customer message","other":"Other","memo":"Memo"},"colItem":"Item","colDesc":"Description","colQty":"Qty","colPrice":"Rate","colAmount":"Amount","include":"Include","all":"All","none":"None","chosen":"{n} of {total} lines","group":"Group","subtotal":"Subtotal: QuickBooks recalculates it","quantityInvalid":"Enter a quantity greater than 0.","noLines":"Choose at least one line.","closeEstimate":"Close the estimate afterwards (mark it inactive and note the sales order number in its memo)","closeNeedsEdit":"Closing the estimate needs the edit permission.","closeUnavailable":"This estimate cannot be closed from here.","statusClosed":"This estimate is closed (inactive).","statusLinked":"Already linked to {docs}.","confirmAgain":"Create another sales order from it anyway","warnGroupsExpanded":"{n} item group(s) are copied as their items, exactly as quoted.","warnCustomFields":"{n} custom-field value(s) are not copied.","warnMarkup":"{n} line(s) carry a markup: it is already inside the rate.","warnOrderUncertain":"This connection does not report where the item groups sat among the other lines: check the order below.","create":"Create sales order","created":"Sales order #{ref} created","createdNoRef":"Sales order created","linesCopied":"{n} line(s) copied.","estimateClosed":"The estimate is now closed."},"subtitle":"Work in QuickBooks Desktop across every company — items, customers, vendors, invoices, purchase orders, bills and more.","hubTitle":"Finance Hub","connection":"Company","connections":"Connections","selectConnection":"Select a company","noConnections":"No connections yet","addConnection":"Add connection","editConnection":"Edit connection","deleteConnection":"Delete","testConnection":"Test connection","online":"Online","offline":"Offline","unknown":"Not checked","enabled":"Enabled","disabled":"Disabled","sedeCode":"Sede code","agentUrl":"Agent URL","companyFile":"Company file","version":"QBXML version","name":"Name","lastChecked":"Last checked","areas":"Areas","actions":"Actions","allActions":"All actions","searchActions":"Search actions…","create":"Create","modify":"Modify","find":"Find","run":"Run","running":"Working…","required":"Required","advanced":"Advanced fields","addLine":"Add line","removeLine":"Remove","result":"Result","success":"Success","failed":"Failed","noResults":"No records found","sendNotice":"This sends the request to QuickBooks Desktop on the selected company.","view":"View","edit":"Edit","save":"Save changes","cancel":"Cancel","back":"Back","reportsNotice":"Reports run through the connection but have no dedicated screen yet.","warnings":"Warnings","submitAnyway":"I reviewed the warnings — submit anyway","showQbxml":"Show QBXML","hideQbxml":"Hide QBXML","qbxmlPreview":"QBXML this will send","copy":"Copy","copied":"Copied","selectOption":"Select…","requiredWhen":"Required when {scope} is used","requiredWhenOption":"Required when this option is used","requiredOneOf":"{group}: this field or {others}","requiredLines":"At least one line is required","maxLines":"up to {max}","addValue":"Add value","removeValue":"Remove value","yes":"Yes","no":"No","inbox":{"kindCredit":"Credit","kindPayment":"Payment","statusUncertain":"uncertain","statusPosting":"posting…","statusMatched":"matched","statusUnmatched":"unmatched","statusConfirmVendor":"Confirm vendor","statusConfirmVendorHint":"Check the vendor and the account and click here to confirm them (USD 75 or more: attach the receipt first).","statusPosted":"posted","statusIgnored":"ignored","statusDuplicate":"duplicate","statusDeletedInQb":"Deleted in QuickBooks","statusDeletedInQbRef":"Deleted in QuickBooks · {ref}","verifyDeleted":"Verify in QuickBooks","verifyDeleting":"Verifying in QuickBooks…","verifyDeletedNotDeleted":"QuickBooks does not list this charge as deleted. If it was voided, it still exists in QuickBooks.","verifyDeletedUnknown":"Could not verify now: QuickBooks did not answer. Nothing was changed; try again in a moment.","verifyDeletedStateChanged":"This row changed while it was being verified; it was reloaded. The verification changed nothing.","controlMismatch":"Statement totals do not match the rows read — posting is blocked.","controlMatch":"Statement totals match the rows read.","cardLabel":"Card ···{n}","chargesStatementRead":"Charges (statement / read)","paymentsCreditsStatementRead":"Payments & credits (statement / read)","noSummary":"No statement summary sheet in this file — totals could not be cross-checked.","postedSoFar":"Posted {n} so far.","postedSoFarRemaining":"Posted {n} so far · {left} left, continuing…","postedDone":"Posted {n}.","notPosted":"{n} not posted — see row status.","verifying":"{n} post(s) being verified with QuickBooks — try again in 10 min.","errRedirected":"The server redirected the request (session expired or missing permission). Stopped — reload the page.","errNotJson":"Unexpected answer from the server (HTTP {status}). Stopped — nothing was assumed.","errShape":"The server answered without the expected data (HTTP {status}). Stopped — nothing was assumed.","errHttp":"Request failed (HTTP {status}).","errNetwork":"Could not reach the server. Stopped — nothing was assumed.","errSave":"Could not save: {error}","errReload":"Could not refresh the rows: {error}","backupColumn":"Backup","backupWithEvidence":"Backed up","backupMissing":"No backup","backupJustified":"Justified","attachReceipt":"Attach receipt","justifyPlaceholder":"Why there is no receipt","justifyLabel":"Justification note","justifyHint":"Justification: date, amount, vendor, purpose and why there is no receipt","errAttach":"Could not attach the receipt: {error}","errNeedsEvidence":"This charge needs a receipt or a justification before it can be approved.","memoNoteLabel":"Memo","memoNoteAdd":"Add memo","memoNoteShown":"Memo: {memo}","sourceRule":"Rule “{rule}”","sourceInbox":"You confirmed this one before in the inbox","sourceQbLast":"Same as last time in QuickBooks ({date}) · {n} of {m}","sourceQbAmbiguous":"This vendor was coded different ways in QuickBooks. Pick one:","sourceQbSplit":"Split like last time ({date}): {parts}","sourceQbSplitPart":"{pct}% {name}","sourceQbSplitApply":"Split this way","sourceUseOption":"Use {name} ({n} times)","sourceUseOptionOne":"Use {name} (once)","sourceHint":"Suggested by the statement type: {hint}","memoNotePlaceholder":"Memo for QuickBooks (optional)","errMemoTooLong":"The memo can be at most 200 characters.","errSplitUnbalanced":"The parts must add up to the charge total before it can be approved.","errJobStillReading":"The statement is still being read. Wait for it to finish and try again.","errEvidenceBadType":"That file type is not supported: a receipt must be an image (JPG, PNG, WEBP, GIF or HEIC) or a PDF.","errControlMismatch":"The statement totals do not match the rows read; sending is blocked.","errCcAccountMismatch":"This statement is already linked to a different card account.","errBankAccountRequired":"Choose the QuickBooks bank account (e.g. Chase) for this statement; nothing was sent.","needsEvidenceMsg":"{n} blocked — no backup.","orderView":"View order","orderHide":"Hide order","orderNoMatch":"No Amazon order yet","orderNumber":"Order {n}","orderOpensNewTab":"opens Amazon in a new tab","orderPlacedBy":"Purchased by {name}","orderPo":"PO {po}","orderTotal":"Order total {amount}","orderCancelled":"Cancelled","orderNoImage":"No image","itemSuggested":"Suggested: {account}","itemNoSuggestion":"No suggestion yet","itemSourceAsin":"you confirmed it before","itemSourceSimilar":"similar to another","itemSourceAi":"AI","itemAccountLabel":"Account for {title}","itemPickAccount":"Choose an account…","itemSearchAccount":"Search another account","itemConfirm":"Confirm accounts","itemConfirmHint":"Choose an account for every product to confirm.","itemConfirmed":"Confirmed: {account}","itemConfirmDone":"Accounts confirmed. Nothing was sent to QuickBooks yet.","itemSuggesting":"Suggesting accounts…","itemPending":"{n} products are still waiting for a suggestion.","errItemUnresolved":"QuickBooks has no account named \"{account}\". Nothing was saved.","errItemAmbiguous":"Several QuickBooks accounts are named \"{account}\": {list}. Pick the right one in the account search. Nothing was saved.","errItemConfirm":"Could not confirm the accounts: {error}","errItemSuggest":"Account suggestions are not available right now: {error}","suggestStats":"Right suggestions: {hits}/{confirmed} ({pct}) — by product {a}, similar {b}, AI {c}","approvalPending":"Pending approval","approvedBy":"Approved by {name}","approveException":"Approve exception","withdrawApproval":"Remove approval","errSelfApproval":"You wrote this justification — someone else has to approve it.","errApproval":"Could not save the approval: {error}","needsApprovalMsg":"{n} waiting for approval.","notSentNeedsEvidence":"Not sent — needs a receipt or a justification.","personalAccountMissing":"Waiting for the personal account “{account}” in QuickBooks — this split is not sent until it exists.","personalAccountLookupFailed":"Could not check the personal account “{account}” in QuickBooks — this split was not sent.","postErrPayment":"Payment to the card — not booked as an expense.","postErrBankCredit":"Deposit — not booked as a check.","postErrMissingDate":"No date — it cannot be sent to QuickBooks until it has one.","postErrExistsInQb":"Already in QuickBooks (no. {txnId}) — not sent again.","postErrQbAmountMismatch":"QuickBooks has a similar charge with a different amount (no. {txnId}) — check it before sending again.","postErrUncertainNotInQb":"Checked: it did not reach QuickBooks. Safe to send again.","postErrStalePosting":"The send was left half-way — check in QuickBooks whether it arrived.","postErrNoQbAnswer":"QuickBooks did not answer — it may have recorded it. Check before sending again. ({detail})","postErrQbStatus":"QuickBooks rejected it (code {status}): {detail}","postErrMissingRefs":"The account, the vendor or the card account is missing.","postErrNotBridgePostable":"Cannot be sent to the bridge account (it is a payment, or it has no date or amount).","personalParkedMsg":"{n} split(s) waiting for the personal account.","notSentRow":"Not sent — QuickBooks never received it ({reason}). Safe to send again.","postWarming":"Opening QuickBooks… the first time can take up to 2 minutes.","postVerifying":"The send may still be running on the server — verifying… ({seconds} s left at most)","postVerified":"The server finished sending. Counts refreshed.","postVerifyTimeout":"Rows are still being sent after 10 minutes. Reload the page later to see the result.","postStalled":"QuickBooks took too long to answer and {n} row(s) were not sent. Try again in a minute.","colDate":"Date","colAmount":"Amount","colDescription":"Description","colVendor":"Vendor","colAccount":"Account","colCostCenter":"Cost center","requiredLegend":"Required","searchVendor":"Search vendor or other name…","searchAccount":"Search account…","searchClass":"Search cost center…","ccAccountLabel":"Credit-card / bank account","bankAccountLabel":"Bank account","searchCcAccount":"Search account…","postMatched":"Post {n} matched","noneExtracted":"No charges extracted.","splitButton":"Split","splitUndo":"Undo split","splitAddPart":"Add part","splitRemovePart":"Remove part","splitBadgeOne":"Split · 1 part","splitBadge":"Split · {n} parts","splitBalanced":"Adds up to {total}","splitRemaining":"{amount} left to assign","splitOver":"Over by {amount}","splitIncomplete":"Complete every part (amount + account)","splitTotalHint":"Charge total {total}","personalMark":"Mark personal","personalUnmark":"Not personal","personalBadge":"Personal","personalHint":"Goes to the partner's personal-expense account configured for the company.","batchSelectAll":"Select all","batchSelectRow":"Select charge","batchSplitDisabled":"A split charge is edited on its own row, not in a batch.","batchSelected":"{n} selected","batchAccount":"Account","batchCostCenter":"Cost center","batchMarkPersonal":"Mark personal","batchIgnore":"Ignore","batchConfirmVendor":"Confirm vendor ({n})","batchConfirmVendorHint":"Marks as ready the selected rows whose vendor was recognised from the start of its name. The other selected rows are left as they are.","batchConfirmVendorConfirm":"Confirm the vendor of {n} charge(s):","batchClearSelection":"Clear","batchPickAccount":"Choose the account to apply to the selection…","batchPickCostCenter":"Choose the cost center to apply to the selection…","batchConfirmAccount":"Apply account «{name}» to {n} charge(s):","batchConfirmCostCenter":"Apply cost center «{name}» to {n} charge(s):","batchConfirmPersonal":"Mark {n} charge(s) as personal:","batchConfirmIgnore":"Ignore {n} charge(s):","batchConfirmApply":"Confirm","batchConfirmCancel":"Cancel","batchPreviewMore":"+{n} more","batchApplying":"Applying…","batchDone":"Updated {n}.","batchSkipped":"{n} skipped (locked or already sent).","batchNeedsEvidence":"{n} need a receipt or justification first.","batchFailed":"{n} could not be updated.","filterTextLabel":"Filter by vendor or description","filterTextPlaceholder":"e.g. uber, amazon…","filterShowLabel":"Show","filterAll":"All","filterReview":"To review","filterReady":"Ready","filterPosted":"Posted to QuickBooks","filterIgnored":"Ignored and payments","filterShowing":"Showing {n} of {m}","filterNoMatches":"No charge matches the filter.","postIncludesHidden":"Includes {n} ready outside the filter","batchSelectVisible":"Select the {n} visible","batchVendor":"Vendor","batchPickVendor":"Choose the vendor to apply to the selection…","batchConfirmVendorSet":"Apply vendor «{name}» to {n} charge(s):","colStatus":"Status","rowIgnore":"Ignore","rowRestore":"Restore","statusMissing":"Missing: {parts}","missingAccount":"account","missingSplit":"a split that adds up","missingVendor":"vendor or other name","missingClass":"class","missingReceipt":"receipt or justification","missingJoinLast":" and ","sourceRuleNoVendor":" · the rule sets no vendor","ccAccountAutoPicked":"Picked because its name has ···{n}. Change it if it is not the one.","ccAccountMismatch":"This account does not mention ···{n}. Check that it is the card account.","postBlockNoReady":"No charges are ready to post yet.","postBlockNoCard":"Pick the card account to post.","postBlockNoBank":"Pick the bank account to post.","backupNotRequired":"No receipt needed","splitButtonShort":"Split","splitUndoShort":"Unsplit","personalMarkShort":"Personal","personalUnmarkShort":"Not personal","rowIgnoreShort":"Ignore","rowRestoreShort":"Restore","postMatchedOne":"Post 1 matched","bankTextLabel":"Bank text:","vendorMissing":"Vendor missing","classMissing":"Class missing","missingVendorMsg":"{n} held: no vendor or other name. Pick it and send again.","missingVendorMsgOne":"1 held: no vendor or other name. Pick it and send again.","postHeldNoVendor":"{m} held (no vendor)","postHeldNoVendorOne":"1 held (no vendor)","postConfirmHeldNoVendor":"{k} ready will not be sent: no vendor or other name.","postConfirmHeldNoClass":"{k} ready charge(s) will not be sent: no class.","errMissingVendor":"Pick the QuickBooks vendor or other name before marking it ready.","errInvalidVendor":"That is not a QuickBooks vendor. Pick it from the list.","errHistoryWriteFailed":"The change could not be saved because it could not be recorded in the history; nothing was changed. Try again.","postErrVendorUnconfirmed":"Vendor to confirm: QuickBooks did not answer when the statement was read. Pick or confirm the vendor.","postErrVendorNotInQb":"The rule's vendor does not appear in QuickBooks; confirm it or pick another.","postErrVendorQbBusy":"QuickBooks was busy; try again.","postErrMissingVendor":"Held: no vendor or other name. It was not sent.","missingClassMsg":"{n} held: no class. Pick the class and send again.","missingClassMsgOne":"1 held: no class. Pick the class and send again.","postHeldNoClass":"{m} held (no class)","postHeldNoClassOne":"1 held (no class)","postHeldMixed":"{m} held (no vendor / no class)","postErrMissingClass":"Held: no class. It was not sent.","postErrMissingClassLine":"Held: a line of the split has no class. It was not sent.","errMissingClass":"Pick the QuickBooks class before marking it ready.","errMissingClassLine":"Every line of the split needs its class before marking it ready.","errInvalidClass":"That is not a QuickBooks class. Pick it from the list.","postLostAfterSent":"{n} charges were sent. Then the connection to QuickBooks was lost; the rest were not sent — check the status before trying again.","postLostAfterSentOne":"1 charge was sent. Then the connection to QuickBooks was lost; the rest were not sent — check the status before trying again.","sentView":"View what was sent","sentHide":"Hide what was sent","sentTitle":"What was sent to QuickBooks","sentColField":"Field","sentColSent":"Sent","sentColQb":"In QuickBooks","sentFieldVendor":"Vendor","sentFieldAccounts":"Account(s)","sentFieldClasses":"Class(es)","sentFieldMemo":"Memo","sentFieldAmount":"Amount","sentFieldDate":"Date","sentFieldRef":"Reference","sentStatusMatch":"Matches","sentStatusDiffers":"Differs","sentStatusUnverified":"Not verified","sentDiffersMark":"differs","sentRecheck":"Check again in QuickBooks","sentRechecking":"Checking QuickBooks…","sentCheckedAt":"Checked in QuickBooks {when}","sentLoggedAt":"Sent {when}","sentNotLogged":"I could not find the record of this send.","sentLoadFailed":"Could not read what was sent. Try again.","sentRecheckFailed":"Could not check QuickBooks. Try again in a moment.","sentLoading":"Reading what was sent…","sentRecheckInFlight":"QuickBooks is already checking another charge of this company; try again in a few seconds.","sentRecheckTooSoon":"You just checked this charge; wait a few seconds before checking again.","sentGone":"QuickBooks says it does not have this charge.","sentNoCurrent":"no current data","sentNotFoundNow":"QuickBooks did not find the charge in this query (it may be temporary); check again later.","chargeHistory":{"view":"History","hide":"Hide history","title":"History of the charge","loading":"Reading the history…","loadFailed":"Could not read the history. Try again.","empty":"Nothing has been recorded for this charge yet.","unknownResult":"Unknown result: a send was attempted and the QuickBooks answer was not recorded. Check it in QuickBooks before sending again.","unauthoredOne":"1 change without a recorded author on this statement","unauthoredMany":"{n} changes without a recorded author on this statement","unauthoredHint":"Changes that reached the database without saying who made them. See them in the History of each charge.","fromLabel":"from {source}","emptyValue":"(empty)","sourceUi":"the screen","sourceSystem":"the system","sourceScript":"an operator script","sourceQbExternal":"QuickBooks (outside RedsisOne)","sourceDbTrigger":"unrecorded origin","kindRowCreated":"Row created","kindRowChanged":"Changed","kindRowDeleted":"Row deleted","kindExtractRead":"Statement read","kindSuggested":"Automatic suggestion","kindDedupCheck":"Duplicate check in QuickBooks","kindPostAttempt":"Send attempt to QuickBooks","kindPostResult":"Send result","kindRollbackAttempt":"Attempt to void in QuickBooks","kindRollbackResult":"Void result","kindEvidenceAdded":"Receipt attached","kindEvidenceRemoved":"Receipt removed","kindQbBaseline":"First re-read in QuickBooks","kindQbChangedOutside":"Changed in QuickBooks outside RedsisOne","kindQbDeletedOutside":"No longer in QuickBooks (deleted or voided outside); it will not be sent again by itself","fieldVendor":"Vendor","fieldAccount":"Account","fieldClass":"Class","fieldDescription":"Statement description","fieldMemoNote":"Memo note","fieldAmount":"Amount","fieldDate":"Date","fieldKind":"Type","fieldStatus":"Status","fieldSplit":"Split","fieldPostedRef":"TxnID in QuickBooks","fieldPostError":"Reason","fieldQbRef":"RO reference","fieldJustification":"Justification","fieldExceptionApproval":"Exception approval","fieldOrderMatch":"Amazon order","fieldQbVendor":"Vendor in QuickBooks","fieldQbAccounts":"Accounts in QuickBooks","fieldQbClasses":"Classes in QuickBooks","fieldQbMemo":"Memo in QuickBooks","fieldQbAmount":"Amount in QuickBooks","fieldQbDate":"Date in QuickBooks","fieldQbRef2":"Reference in QuickBooks","kindCharge":"Charge","splitPart":"{amount} → {account}","splitPersonal":"personal","factTxnId":"TxnID {v}","factRefNumber":"Reference {v}","factRule":"Rule «{v}»","factProfile":"Format {v}","factFile":"File {v}","factSha":"Fingerprint {v}","factQueryType":"Query {v}","factError":"Detail: {v}","factReceipt":"Receipt «{v}»","factPostType":"Type {v}","factRows":"{v} rows read","srcRule":"proposed by a rule","srcInboxHistory":"same as last time in the inbox","srcQbHistory":"same as last time in QuickBooks","srcProfileHint":"suggested by the statement format","srcManual":"picked by a person","verdictFound":"already in QuickBooks (not sent)","verdictNotFound":"not in QuickBooks","verdictInDoubt":"in doubt: QuickBooks did not answer, not sent","outcomeOk":"Recorded in QuickBooks","outcomeError":"QuickBooks rejected it","outcomeUncertain":"No answer from QuickBooks (uncertain)","outcomeNotSent":"Not sent","rereadNow":"Check in QuickBooks now","rereadRunning":"Checking QuickBooks…","rereadHint":"Reads again in QuickBooks the charges of this statement that are already recorded, and notes in their History what changed or disappeared outside RedsisOne. Nothing is written to QuickBooks.","rereadDone":"Checked {read} charges in QuickBooks: {changed} changed outside and {deleted} no longer exist. The detail is in each charge's History.","rereadPartial":"Not all of them could be checked; try again in a few minutes.","rereadNotFoundOnce":"QuickBooks did not find {n} this time: nothing is blocked, they will be checked again on the next re-read.","rereadNotFoundPending":"QuickBooks still does not find {n}; a nightly read is needed to confirm it.","rereadFoundAgain":"{n} that QuickBooks had not found are there again.","rereadNone":"This statement has no charges recorded in QuickBooks to check.","rereadNotTest":"For now the check only works on test companies.","rereadNotResponding":"QuickBooks is not answering. Nothing was checked; try again when it is back.","rereadOffline":"QuickBooks is offline. Nothing was checked.","rereadBusy":"A statement of this company is being sent or read. Wait until it finishes and try again.","rereadFailed":"Could not check QuickBooks. Try again.","rereadClose":"Close the message","voidedOutside":"Voided in QuickBooks outside RedsisOne: it is not sent again","voidedOutsideHint":"This charge no longer exists in QuickBooks. Talk to accounting before doing anything with it.","kindEvidencePending":"Started attaching a receipt","kindEvidenceFailed":"The receipt could not be attached","unknownEvidenceResult":"Unknown result: a receipt started being attached and whether it was saved was not recorded. Check the receipts of the charge.","kindQbNotFoundOnce":"QuickBooks did not find this charge in the re-read; it will be checked again","kindQbFoundAgain":"QuickBooks found the charge again; the earlier notice is cleared"},"qbReasonBusy":"QuickBooks was busy","qbReasonNotResponding":"QuickBooks was not answering","qbReasonConnectionLost":"the connection to QuickBooks was lost","receiptView":"View receipt","receiptRemove":"Remove","receiptRemoveAria":"Remove the receipt «{name}»","receiptRemoveConfirm":"Remove the receipt «{name}»?","receiptRemoveCancel":"Cancel","errReceiptRemove":"Could not remove the receipt: {error}","errReceiptLocked":"This charge was already sent to QuickBooks: its receipt can no longer be removed.","reapplyRules":"Apply rules to this statement","reapplyRulesRunning":"Applying rules…","reapplyRulesDone":"Rules applied: {n} charges updated.","reapplyRulesDoneOne":"Rules applied: 1 charge updated.","errReapplyRules":"Could not apply the rules: {error}","filterDuplicate":"Duplicates","postErrDuplicateOf":"Duplicate: already in the statement «{label}» of {date}","postErrDuplicateOfGone":"Duplicate: it was in another statement (deleted)","errIsDuplicate":"This charge is a duplicate: it cannot be edited.","postConfirm":"You are about to send {n} charges for {currency} {total} to {company}. Are you sure?","postConfirmOne":"You are about to send 1 charge for {currency} {total} to {company}. Are you sure?","postConfirmHidden":"Includes {k} outside the filter.","postConfirmNotSent":"{k} ready charge(s) will not be sent: missing receipt or date.","postConfirmSend":"Send","postConfirmCancel":"Cancel","postedDoneOne":"Posted 1.","postedSoFarOne":"Posted 1 so far.","notPostedOne":"1 not posted — see the row status.","verifyingOne":"1 post being verified with QuickBooks — try again in 10 min."},"bankChecks":{"title":"Checks from the bank statement","hint":"Upload the bank CSV; each payment is reviewed and recorded as a check.","kindHint":"With «Bank statement», Redsis One recognises the bank from the file’s columns (today: Chase). Upload the CSV as you downloaded it.","companyPlaceholder":"Choose the QuickBooks company","companyHint":"Required: the checks of this statement are created in this company.","companyRequired":"Choose the QuickBooks company before uploading the statement.","realCompanyPending":"Available once the move to the real company is approved","errRealCompanyNotEnabled":"For now, checks from a bank statement are created only in a TEST QuickBooks company. This company will be enabled once the move to the real company is approved.","emptyTitle":"Upload the Chase activity as a CSV","emptyBody":"In Chase: Accounts → the account → Download account activity → CSV. Then upload the file here.","emptyAction":"Go to the upload form","noAccess":"You do not have access to bank statements. Ask a QuickBooks administrator for it (QuickBooks settings → Inbox access).","recentTitle":"Uploaded statements","colChecks":"Checks created","sumReadOne":"1 payment read","sumRead":"{n} payments read","sumReadyOne":"1 ready","sumReady":"{n} ready","sumReviewOne":"1 to review","sumReview":"{n} to review","sumDuplicateOne":"1 duplicate","sumDuplicate":"{n} duplicates","sumIgnoredOne":"1 ignored","sumIgnored":"{n} ignored","sumPostedOne":"1 created in QuickBooks","sumPosted":"{n} created in QuickBooks","sumDeletedOne":"1 deleted in QuickBooks","sumDeleted":"{n} deleted in QuickBooks","summaryLabel":"Statement summary","bankAccount":"QuickBooks bank account","bankAccountHint":"The account these checks come out of (e.g. Chase).","searchBankAccount":"Search the bank account…","suggestedAccountBadge":"Suggested","suggestedAccountText":"{name} — the last bank account used in this company. Not chosen yet.","useSuggestedAccount":"Use this account","filterLabel":"Show","filterAll":"All","filterReady":"Ready","filterReview":"To review","filterDuplicate":"Duplicates","filterPosted":"Created","colRow":"Row","colDate":"Date","colPayee":"Payee","colAmount":"Amount","colAccount":"Account","colClass":"Class","colMemo":"Memo","colStatus":"Status","rowLabel":"Row {n}","searchPayee":"Search the payee…","searchAccount":"Search the account…","searchClass":"Search the class…","payeeFromBank":"Bank says: {name}","memoPlaceholder":"Memo for QuickBooks","memoInQb":"In QuickBooks: {memo}","descriptionFromBank":"Bank description: {text}","memoEdit":"Edit the memo of row {n}","selectRow":"Select row {n}","selectReadyVisible":"Select the ready ones shown ({n})","clearSelection":"Clear the selection","selectedOne":"1 selected","selected":"{n} selected","sendOne":"Create 1 check in QuickBooks (${total})","send":"Create {n} checks in QuickBooks (${total})","sendNoneReady":"There is no ready payment in this view to create.","sendNeedsAccount":"Choose the QuickBooks bank account (e.g. Chase) for this statement.","confirmTitle":"Create the checks in QuickBooks?","confirmBodyOne":"You are about to create 1 check for ${total} in {company}, from the account {account}.","confirmBody":"You are about to create {n} checks for ${total} in {company}, from the account {account}.","confirmYesOne":"Yes, create 1 check","confirmYes":"Yes, create {n} checks","confirmCancel":"Cancel","stateReady":"Ready","stateCreating":"Creating in QuickBooks…","stateCreated":"Created · check No. {ref}","stateCreatedNoRef":"Created in QuickBooks","stateDeletedInQb":"Deleted in QuickBooks · check No. {ref}","stateDeletedInQbNoRef":"Deleted in QuickBooks","verifyDeleted":"Verify in QuickBooks","verifyDeleting":"Verifying in QuickBooks…","verifyDeletedNotDeleted":"QuickBooks does not list this check as deleted. If it was voided, it still exists in QuickBooks.","verifyDeletedUnknown":"Could not verify now: QuickBooks did not answer. Nothing was changed; try again in a moment.","verifyDeletedTooSoon":"You just verified this check; wait a few seconds before verifying it again.","verifyDeletedInFlight":"QuickBooks is already answering another query for this company; try again in a few seconds.","verifyDeletedStateChanged":"This row changed while it was being verified; it was reloaded. The verification changed nothing.","rowMissingPayee":"Row {n}: the payee is missing — choose it","rowMissingAccount":"Row {n}: the account is missing — choose it","rowMissingBoth":"Row {n}: the payee and the account are missing — choose them","rowMissingList":"Row {n}: still to choose: {parts}","rowPartPayee":"the payee","rowPartAccount":"the account","rowPartClass":"the class","rowPartJoinLast":" and ","rowMissingDate":"Row {n}: it has no date — check the statement","rowConfirmPayee":"Row {n}: confirm the proposed payee","confirmPayee":"Confirm the payee of row {n}","confirmPayeeShort":"Confirm","rowExistsInQb":"Row {n}: QuickBooks already has a check or payment for the same amount and date — review it","rowDuplicateOf":"Row {n}: this payment was already in another statement","rowUncertain":"Row {n}: we could not confirm whether QuickBooks created it; it is checked before anything is sent again","rowError":"Row {n}: {error}","ignoredTitle":"Ignored ({n})","ignoredDeposit":"Deposit: not recorded as a check","ignoredPaperCheck":"Paper check: already recorded when it was written","ignoredManual":"Ignored by hand","warming":"Opening QuickBooks… the first time can take up to 2 minutes.","progress":"{n} created so far · {left} to go","resultDoneOne":"1 check created in QuickBooks.","resultDone":"{n} checks created in QuickBooks.","resultFailedOne":"1 could not be created — its row says why.","resultFailed":"{n} could not be created — each row says why.","resultVerifying":"QuickBooks did not answer in time; we are checking what it created ({seconds} s left).","resultVerified":"Checked with QuickBooks: the rows show what was created.","resultVerifyTimeout":"QuickBooks is still busy. Come back in 10 minutes; nothing will be sent twice.","resultStalled":"QuickBooks is not answering; {n} still to create. Try again in a few minutes.","resultClose":"Close the message","errBankAccountRequired":"Choose the QuickBooks bank account (e.g. Chase) for this statement; nothing was created.","errAccountMismatch":"This statement is already tied to another bank account; nothing was created.","errAccountCheckFailed":"Could not check the account in QuickBooks; nothing was sent. Try again.","errDuplicateCheckFailed":"QuickBooks did not answer the duplicate check; nothing was created. Try again in a minute.","errStillReading":"The statement is still being read. Wait a moment and try again.","errSave":"Row {n}: it could not be saved — {error}","errSaveAccount":"The bank account could not be saved: {error}","errAccountLocked":"checks of this statement are already in QuickBooks, so its account can no longer change.","errSendInProgress":"A send of this statement is in progress; wait for it to finish.","errReload":"The rows could not be refreshed: {error}","errNetwork":"There is no connection with the server. Try again.","deleteStatementConfirm":"You are about to delete the statement «{label}» with {n} payments. It cannot be undone. Sure?","deleteStatementConfirmOne":"You are about to delete the statement «{label}» with 1 payment. It cannot be undone. Sure?","errDeleteHasPosted":"It cannot be deleted: it has checks already created in QuickBooks.","noRows":"There are no payments in this view."},"qbErrors":{"connResponding":"QuickBooks is answering (last answer {n} min ago)","connRespondingJustNow":"QuickBooks is answering (last answer less than a minute ago)","connNotRespondingSince":"QuickBooks has not answered since {time}","connOffline":"No connection to QuickBooks","qbBusy":"QuickBooks is answering another request; try again in a few seconds.","qbNotRespondingSince":"QuickBooks has not answered since {time}.","qbNotResponding":"QuickBooks is not answering.","qbConnectionLost":"The connection to QuickBooks was lost; check the status before trying again.","qbConnectionLostNothingSent":"The connection to QuickBooks was lost; nothing was sent, you can try again.","notConnected":"This company is not connected to QuickBooks yet.","connectorOnline":"Connector “{name}” is online.","dialogOpen":"QuickBooks is blocked: a window is open on the connector machine and it won't let Redsis One in. Someone needs to close it on that machine; the status updates with the next QuickBooks query.","companyFileMissing":"This company has a connector but its QuickBooks company file is not set yet.","otherCompanyOpen":"QuickBooks has another company open right now. Wait a minute or two and try again.","ledgerBridgeMissing":"This company is not connected to QuickBooks yet: it has no connector assigned. An administrator needs to choose “Connector” in Settings → Companies → “How each company is reached”.","fileTooLarge":"The file is larger than allowed ({max}).","fileTooLargeNoMax":"The file is larger than allowed."},"blockedAlert":{"title":"QuickBooks blocked on {company}","body":"QuickBooks for {company} is blocked: a window is open on {machine} and it won't let Redsis One in. Someone needs to close it on that machine; until then nothing can be read from or recorded in that company.","machineNamed":"the connector machine “{name}”","machineUnknown":"the connector machine"},"offlineAlert":{"offlineTitle":"QuickBooks connector {name} stopped responding","offlineBody":"The connector {name} stopped responding {minutes} min ago (last heartbeat {time} Bogotá time). The machine may still be on: usually QuickBooks is stuck or opening the company file.","lastError":"Last error: {error}","recoveredTitle":"QuickBooks connector {name} is responding again","recoveredBody":"{name} is responding again. It was not responding for {minutes} min ({from}–{to} Bogotá time)."},"classificationRules":{"learnTitle":"Learn from the QuickBooks history","learnDesc":"Reads the card charges already entered in QuickBooks over the last 12 months, so the inbox can suggest the same account as the last time each vendor was paid. It only reads; it changes nothing in QuickBooks.","learnButton":"Learn from the QuickBooks history (12 months)","learnCompany":"Company","learnRunning":"Reading QuickBooks, month by month… This can take several minutes. You can leave this page.","learnWindow":"Not now: between 4 and 5 am and between 12 and 1 pm (Bogotá) QuickBooks is busy with the daily numbers. Try again after that.","learnUnavailable":"This company is not connected or is turned off.","learnCooldown":"This company was just read. Try again in {min} min.","learnCappedMonths":"These months have more card charges than one reading brings (3,000), so some were left out: {months}.","learnDone":"Done: {n} charges learned from {months} months.","learnFailedMonths":"These months could not be read and were skipped: {months}. Press the button again later to retry them.","learnWindowMonths":"These months were left for later because the busy hours began: {months}. Press the button again later.","learnErrorGeneric":"Something went wrong while reading QuickBooks. Try again in a moment.","learnStored":"The inbox knows {n} QuickBooks charges for this company (last updated {when}).","learnNever":"The QuickBooks history has not been read for this company yet.","title":"Classification rules","desc":"Steer a card charge to an expense account, a personal (owner-reimbursable) bucket, or a clearing/bridge account by matching its vendor text — before you post. Lower priority runs first; the first match wins.","backToGovernance":"Governance rules","newRule":"New rule","editRule":"Edit rule","save":"Save","saving":"Saving…","cancel":"Cancel","fieldSede":"Sede","fieldMatchType":"Match","fieldMatchValue":"Vendor text","fieldTarget":"Send to","fieldAccountName":"QuickBooks account","fieldMemoRequired":"Require receipt or justification","fieldPriority":"Priority","fieldEnabled":"Enabled","allSedes":"All sedes","matchContains":"Contains","matchExact":"Exact","matchRegex":"Regex","targetExpense":"Expense account","targetPersonal":"Personal (owner)","targetBridge":"Bridge / clearing","matchValuePlaceholder":"e.g. amazon, uber, anthropic","accountNameHint":"Pick it from the chart of accounts of the sede: the charge posts to that account.","accountPickerPlaceholder":"Type to search the account…","accountPickerNeedsSede":"Choose the sede first: each company has its own accounts.","chooseSede":"Choose a sede…","legacyAccountChip":"Account typed by hand — edit the rule to pick it from the list","fieldVendor":"Vendor (optional)","vendorPickerPlaceholder":"Type to search the vendor…","vendorPickerNeedsSede":"Choose the company first: each one has its own vendors.","vendorHint":"If you pick one, the charges of this rule arrive with this vendor.","priorityHint":"Lower runs first (default 100).","memoRequiredHint":"Requires a receipt or a justification before sending.","colRule":"Rule","colScope":"Scope","colTarget":"Send to","colPriority":"Priority","colOn":"On","on":"On","off":"Off","edit":"Edit","delete":"Delete","confirmDeleteRule":"Delete the rule «{rule}»? Charges already read do not change.","empty":"No classification rules yet. Add one so charges classify themselves before posting.","actionFailed":"Action failed.","errMatchType":"Choose how the rule matches.","errMatchValue":"Enter the vendor text to match.","errRegex":"That regular expression is not valid.","errTarget":"Choose where the charge is sent.","errAccountName":"Pick the account from the list.","errSedeRequired":"Choose the sede: a rule with an account applies to one company (each has its own accounts).","errAccountNameTooLong":"The account name is too long (at most 120 characters typed by hand, 200 when picked from the list).","errAccountListId":"That is not a valid QuickBooks account. Pick it again from the list.","errVendorNotFound":"That vendor no longer exists in QuickBooks; pick it again from the list.","errVendorListId":"That is not a valid QuickBooks vendor. Pick it again from the list.","errVendorNameTooLong":"The vendor name is too long (at most 200 characters).","errPriority":"Priority must be a whole number.","fieldMemoText":"Fixed memo","memoTextPlaceholder":"e.g. Network supplies","memoTextHint":"Optional. Goes first in the QuickBooks Memo of every charge this rule matches (max. 200 characters).","listMemo":"Memo: {memo}","listVendor":"Vendor: {vendor}","errMemoText":"The fixed memo can be at most 200 characters.","checkingAccount":"Checking the account in QuickBooks…","openingCompany":"QuickBooks is opening the company… {time} so far (it can take up to 1½ min)","errAccountNotFound":"QuickBooks has no account «{account}» in {sedes}. Pick it again from the list.","errAccountAmbiguous":"«{account}» matches more than one QuickBooks account in {sedes}. Pick the right one from the list.","accountCandidates":"Possible accounts: {candidates}.","warnAccountUnverified":"Saved, but «{account}» could not be checked in {sedes}: QuickBooks did not answer. Check it there before charges use it.","warnAccountUnverifiedNoSede":"Saved, but «{account}» could not be checked: no QuickBooks company is enabled.","dismiss":"Close","duplicate":"Duplicate","duplicateBornDisabled":"The copy starts turned off. Choose the company, let the account and vendor resolve, then turn it on.","reresolving":"Finding the account and vendor in this company… QuickBooks can take a moment to open.","reresolveNotFound":"Not found in this company — pick it from the list.","reresolveAmbiguous":"More than one match in this company — pick the right one from the list.","reresolveUnchecked":"QuickBooks did not answer — pick it from the list."}},"integrations":{"title":"Integrations","companyConnection":"Company connection","companyConnections":"Company Connections","companyConnectionsSub":"Platforms Redsis One itself runs on","catalogSection":"Connect a platform","tabOverview":"Overview","tabConnection":"Connection","tabConfiguration":"Configuration","tabActivity":"Activity","tabHealth":"Health","tabDocs":"Docs","connectsTo":"Connects to","runTest":"Run test","managedInAdmin":"Managed centrally — credentials live in the admin console.","openAdminConsole":"Open admin console","noActivity":"No activity yet.","credentialsNeeded":"Credentials this connector needs:","settingsEdit":"Change credentials or settings","settingsHide":"Hide","settingsSave":"Save and test","settingsUnchanged":"Leave blank to keep the current one","configuration":"Configuration","authentication":"Authentication","whereToGetCreds":"Where to get credentials","officialDocs":"Official documentation","lastChecked":"checked","noProbe":"No live health probe — manage from the admin console.","subtitle":"Connect 300+ business platforms to your boards, apps, and modules.","searchPlaceholder":"Search platforms…","allCategories":"All categories","catalog":"Catalog","connected":"Connected","live":"Live","roadmap":"On the roadmap","connect":"Connect","manage":"Manage","myConnections":"My connections","bindingsTitle":"Boards, apps & modules","noConnections":"No connections yet","noConnectionsHint":"Connect a platform to start syncing with your boards, apps, and modules.","functionalities":"What you can do","triggers":"Triggers (inbound)","actions":"Actions (outbound)","twoWaySync":"Two-way sync","buildPlan":"Build plan","platformsCount":"{count} platforms","wizardTitle":"Connect a platform","stepAuth":"Authenticate","stepName":"Name & test","stepTarget":"Choose target","stepDirection":"Direction & data","stepReview":"Review","targetBoard":"A One Board","targetModule":"A module","targetApp":"The Integrations app","targetBoardHint":"Create items on a board from inbound events.","targetModuleHint":"Feed records into an existing module.","targetAppHint":"Keep activity in the Integrations inbox.","directionInbound":"Inbound","directionOutbound":"Outbound","directionTwoWay":"Two-way","directionInboundHint":"Bring data into Redsis One.","directionOutboundHint":"Push Redsis One data out.","directionTwoWayHint":"Both directions.","next":"Next","back":"Back","finish":"Create connection","testConnection":"Test connection","testing":"Testing…","testOk":"Connection works","testFailed":"Connection failed","selectBoard":"Select a board","selectModule":"Select a module","webhookUrl":"Inbound webhook URL","webhookUrlHint":"Paste this into the platform to receive events.","authViaOAuth":"Connect with OAuth","authViaKey":"Use an API key","authOAuthHint":"Recommended — sign in to grant access to your data.","authKeyViaSetup":"This provider connects through OAuth. Platform-control API keys are managed in the Setup Center.","openSetupCenter":"Open Setup Center","enableCapabilities":"Enable these functionalities","titleFrom":"Item title comes from","disconnect":"Disconnect","needsSetup":"Needs setup","online":"Online","offline":"Offline","all":"All","account":"account","accounts":"accounts","addAccount":"Add account","neverChecked":"Never checked","noBindings":"No bindings yet.","statusError":"Error","statusActive":"Active","createdToast":"Connection created","noConnector":"This platform is in the catalog but not buildable yet — it’s on the roadmap.","displayName":"Connection name"},"servicenowActivity":{"panelTitle":"ServiceNow Activity","panelSubtitle":"Full movement history — every field change, work note, comment, and attachment captured from ServiceNow.","loading":"Loading activity…","forbidden":"You don’t have access to this ticket’s activity.","error":"Couldn’t load activity.","retry":"Retry","emptyTitle":"No activity captured yet.","emptyHintBefore":"History is captured on the next sync once the ","emptyHintAfter":" flag is turned on.","attachments":"Attachments","attachmentFallback":"attachment","system":"System","unknownDate":"Unknown date","fieldFallback":"field","changed":"changed","valueEmpty":"(empty)","workNote":"Work note","additionalComment":"Additional comment","comment":"Comment"},"servicenowConsole":{"instanceUrlTitle":"Instance URL","instanceUrlLabel":"Instance base URL","filterOptional":"Filter (optional)","perBoardFilter":"Per-board filter","newOauthClientIdPlaceholder":"New OAuth client id (optional)","ticketFilterOptional":"Ticket filter (optional)"},"servicenowRules":{"assignedToGroup":"Assigned to group","backfillTitle":"Backfill ticket history","backfillDesc":"Pulls the full activity/movement history (field changes, work notes, comments) of this instance's already-mirrored tickets into the timeline. The sync only captures history for tickets that change going forward, so this one-time catch-up fills in the closed/older backlog. Bounded per call; runs in pages until done.","backfillWarnPrefix":"Requires the","backfillWarnSuffix":"flag ON. Enable it in","backfillEnableLink":"Admin → Modules","backfillWarnEnd":"first, then run this.","backfillButton":"Backfill history","backfillButtonBusy":"Backfilling…","title":"Sync rules","navRules":"Rules","description":"Every ticket that matches a rule is replicated to its destination board (exclusive priority routing).","reconciler":"Reconciler","on":"ON","off":"OFF","console":"Rules console","instance":"Instance","noInstances":"Connect a ServiceNow instance first to configure its rules.","noBoardsForInstance":"This instance has no rules boards yet.","newBoard":"New rules board","workspace":"Workspace","boardName":"Rules board name","optional":"(optional)","boardNamePlaceholder":"Instance — Rules","filterColumns":"Dynamic filter columns","filterHelp":"Each column is a ServiceNow ticket field to filter by. A ticket routes to the first rule (by Priority) whose columns ALL match. The fixed State and Priority columns are added automatically.","addColumn":"Add column","remove":"Remove","columnNamePlaceholder":"Column name (e.g. Assignment group)","fieldPlaceholder":"SN field (e.g. assignment_group)","pickField":"Select a ServiceNow field…","create":"Create rules board","creating":"Creating…","cancel":"Cancel","created":"Rules board created","open":"Open","createError":"Could not create the rules board.","pickWorkspace":"Pick a workspace.","atLeastOneFilter":"Add at least one filter column (name + ServiceNow field).","rulesCount":"rule(s)","noRulesYet":"No rules yet — add them in the rules board.","colRule":"Rule","colFields":"Fields","colBoard":"Board (tickets)","colPriority":"Priority","colState":"State","active":"Active","inactive":"Inactive","noDestination":"no board yet","tickets":"tickets","scopePersonal":"personal","scopeOrg":"org","modeWrites":"writes on","modeReadOnly":"read-only","connected":"connected","notConnected":"not connected","runNow":"Run now","runNowHelp":"Route this instance’s mirror tickets to their destination boards right now (same engine as the cron; safe to re-run).","running":"Running…","runError":"Reconciler run failed.","statSeen":"seen","statRouted":"routed","statReassigned":"reassigned","statUnmatched":"unmatched","groupBy":"group","groupHelp":"This column partitions tickets — one destination board per distinct value (the `*` token).","maxTag":"max","overflowWarn":"Board cap reached — extra values go to “Otros”.","replicaCols":"Columns","replicaColsHelp":"Choose which ServiceNow fields replicate onto this instance’s destination boards.","coreDefault":"core","replicaColsTitle":"Replicated columns","replicaColsSubtitle":"Applied to all this rules board’s destination boards. Adding fields fills them in on the next run; removing never deletes existing columns.","selectAll":"Select all","selectCore":"Core default","loadingFields":"Loading fields…","noSchema":"This instance has no cached schema yet — build a full-replica board or explore the schema first.","searchFields":"Search fields…","selectedCount":"selected","coreDefaultNote":"Nothing selected → the curated core set is used.","save":"Save","colsSaved":"Columns saved","colsSaveError":"Could not save the columns.","removeHelp":"Remove this rules board from the console — unlinks the sync; destination boards are kept.","removeConfirm":"Remove this rules board? Destination boards are kept.","removeYes":"Remove","removeError":"Could not remove the rules board.","reconcileOffTitle":"Automatic routing is off.","reconcileOffBody":"The per-board routing reconciler is disabled by a feature flag, so the scheduled reconcile cron does not run — mirror tickets are not routed to their destination boards automatically. Run now still routes on demand.","reconcileOffLink":"Enable it in Admin → Modules","reconcilePointerHint":"Automatic per-board ticket routing. Manage it in the rules console."},"designer":{"title":"Designer","untitled":"Untitled","back":"Back to designs","saving":"Saving…","saved":"Saved","saveError":"Save failed — will retry","viewOnly":"View only","newDesign":"New design","create":"Create","namePlaceholder":"Design name…","empty":"No designs yet","emptyHint":"Create your first design to get started.","allTypes":"All types","modeDiagram":"Diagram","modeOrgChart":"Org chart","modeWorkflow":"Workflow","modeFloorPlan":"Floor plan","modeArchitecture":"Architecture","modeNetwork":"Network","typeDiagrams":"Diagrams","typeOrgCharts":"Org Chart","typeWorkflows":"Workflows","typeFloorPlans":"Floor Plans","typeArchitecture":"Architecture","typeNetworks":"Network Diagrams","libraries":"Product libraries","librariesHint":"Vendor catalogs whose items appear in the editor palette.","newLibrary":"New library","libraryName":"Library name","libraryVendor":"Vendor (optional)","libraryDesc":"Description (optional)","importTitle":"Import","importHint":"Upload or paste a CSV (with a \"name\" column, plus optional part_no, vendor, category, icon, url) or a JSON array of objects.","importRun":"Import items","deleteLibrary":"Delete library","confirmDelete":"Confirm delete","noLibraries":"No libraries yet — create one above, then import items.","itemsSuffix":"items","importInvalid":"Could not parse that file — check the CSV/JSON format.","importEmpty":"No rows with a usable \"name\" column."},"bridge":{"title":"Bridge","description":"Connect a board to a module so its items and the module’s records stay in sync.","zone":{"title":"Bridge status","connectors":"Connectors","connectorsValue":"{enabled} of {registered} on","connectorsHint":"Registered in code, switched on by an administrator.","noConnectors":"No connectors are registered yet.","authorizations":"Authorizations","authorizationsHint":"Live board grants across every connector. One board wired to two connectors counts twice.","platform":"Platform","platformOn":"Live","platformOff":"Off","platformOnHint":"Connectors sync as their own switches allow.","platformOffHint":"The portal-wide switch is off.","platformOffBanner":"The Bridge platform is switched off portal-wide, so nothing syncs no matter what is enabled below. An administrator can turn it back on in Admin → Modules."},"overview":{"tab":"Overview","driftTitle":"Needs attention","allClear":"Everything lines up — no drift to report.","connectorsTitle":"Connectors","col":{"connector":"Connector","flag":"Module flag","switch":"Switch","boards":"Boards","enforce":"Access","state":"State"},"state":{"live":"Live","inert":"Inert","off":"Off"},"flag":{"on":"On","off":"Off","none":"n/a"},"boardsValue":"{n} live","boardsNone":"None","boardsRevoked":"(+{n} revoked)","enforceOn":"Enforced · {n} conn.","enforceNoConn":"Enforced · no connection","enforceOff":"—","flagsTitle":"Platform switches","flags":{"platform":"Platform","accessLayer":"Access layer","reconcile":"Reconcile sweep"},"manageInAdmin":"Manage in Admin → Modules","fix":{"admin-modules":"Admin → Modules","bridge-connectors":"Open Connectors","bridge-authorizations":"Open Board authorizations","bridge-connections":"Open Connections"},"drift":{"connector_on_no_boards":"{connector} is switched on but no board is authorized — it syncs nothing. Authorize a board or switch it off.","enforced_no_connections":"{connector} is enforced but has no access connection, so the enforcement is inert. Add a connection or turn enforcement off.","flag_on_row_off":"{connector}’s module flag is on but its connector switch is off — half-activated, so it stays dark. Switch the connector on.","row_on_flag_off":"{connector}’s connector switch is on but its module flag is off — half-activated. Turn the module flag on in Admin → Modules.","connections_all_disabled_enforced":"{connector} is enforced but every access connection is disabled, so users see nothing on connected boards. Enable a connection.","platform_off_sync_dark":"The Bridge platform is off — every connector is dark and nothing syncs.","reconcile_off":"The hourly reconcile sweep is off — items that predate a grant won’t back-fill on their own."}},"admin":{"connectorsTitle":"Connectors","connectorsDesc":"Every module a board can be connected to. Switching a connector off hides it from every board at once.","grantsTitle":"Board authorizations","grantsDesc":"Choose which boards may sync through this connector, and which of its fields they may sync.","moduleToggle":"Connector enabled","enabled":"Enabled","disabled":"Disabled","boardsAuthorized":"Boards authorized","authorizeBoard":"Authorize a board","revoke":"Revoke","revoked":"Revoked","allowedFields":"Allowed fields","allFields":"All fields","fieldsNarrowed":"{n} of {total} fields","hiddenMirroredTickets":"{n} tickets from this board are already in Field Service and are hidden from Ticket Central while this grant is revoked.","noConnectors":"No connectors are registered yet.","noGrants":"No boards are authorized for this connector yet.","saved":"Saved","saveFailed":"Could not save. Nothing was changed — try again.","targetModule":"Target module","fieldCount":"Fields","pickBoard":"Pick a board","searchBoards":"Search boards…","noBoardsWarning":"Switched on, but no board is authorized — this connector syncs nothing."},"studio":{"tabs":{"connections":"Connections","roles":"Roles","sync":"Sync (fields)","inboxBoards":"Inbox boards","railFields":"Rail fields"},"connections":{"heading":"Connections","intro":"Connect a module to a board and control who sees which rows, columns, and groups. No module shows board data outside these grants.","add":"New connection","empty":"No connections yet. Create one to give a module a board with per-user permissions.","grantOne":"{n} grant","grantMany":"{n} grants","noOwnRows":"no own-rows column","toggleAria":"Connection enabled","deleteAria":"Delete connection","collapseAria":"Collapse","expandAria":"Expand","enableStampTitle":"Turning this connection back on SEALS the board as an intake board again.","enableStampCta":"Turn on and seal","stampBlockedTickets":"{board} is this project's TICKETS board. The connection already exists and will be turned ON — it gives the Field Service module access to this board, and it is the row that scopes ticket reads once Field Service enforcement is switched on — but the board will NOT be sealed as an intake board, so it does NOT become an Inbox entry. The Inbox lists INTAKE: a ticket is what an intake case BECOMES, not a way in. Sealing it would make it a SECOND intake board and silently break this project's intake⟷tickets rail, and the tickets on it would turn into open Inbox cases that are never deleted. The ticket DETAIL needs no connection at all — it already reaches the Inbox rail through the ticket's own board link. To put this project in the Inbox, connect its INTAKE board.","stampBlockedWorkspaceIntake":"This project already has an intake board: {board}. The connection already exists and will be turned ON, but this board will NOT be sealed as a second intake board: a project has exactly ONE — intake is the list, tickets are the detail — and sealing a second one would silently break this project's intake⟷tickets rail (the provisioner stops converging and only writes a log line every 10 minutes). Use {board} for the Inbox. Heads-up: no screen in the product removes an intake marker today, so if the WRONG board is the marked one it has to be cleared by whoever administers the platform data — not from this console.","stampBlockedArchived":"{board} is ARCHIVED, so it is NOT sealed as an intake board. Sealing an archived board would write the marker and a new column to a board somebody deliberately took out of service, and the rail provisioner does not see it the same way (it enumerates only live boards), so it would not build anything. If this really has to be the project's intake board, unarchive it first.","cancel":"Cancel","removeTitle":"Delete this connection?","removeDetail":"People who see this board through this module stop seeing it. You can create the connection again afterwards.","removeDetailInbox":"This takes the board out of the coordinators' Inbox: it retires the intake marker THIS connection stamped (never one somebody set by hand). The cases already created are NOT deleted — they are real work, with status and notes — and they come back into view if you connect the board again.","removeCta":"Delete connection","disableTitle":"Turn this connection off?","disableDetailInbox":"Turning it off does the same thing to the Inbox as deleting it: the board comes out, because the intake marker this connection stamped is retired. The cases already created are kept. Turning it back on seals the board again.","disableCta":"Turn off","fieldServiceInbox":"Service Hub Inbox: connecting a board ADDS it to the coordinators' Inbox — it never removes the boards that are already there. Creating the connection SEALS the board as an intake board, so its items become cases in the Inbox; the screen tells you how many before you confirm. Deleting or disabling this connection takes the board back out of the Inbox by retiring ONLY the marker this connection stamped — a marker somebody set by hand is never touched, and that board stays visible. The cases that were already created are NOT deleted: they are real work, with status and notes. Everyone still only sees the boards they already have read access to. One project = ONE intake board. A second board, or the project's Tickets board, still CONNECTS — the connection is what gives the module access to that board — but it is NOT sealed as an intake board, so it does not become an Inbox entry, and this screen says why (the Inbox lists intake; the ticket detail already reaches the rail on its own)."},"newConnection":{"heading":"New connection","closeAria":"Close","moduleLabel":"Module (any hub)","moduleSearch":"Search modules…","boardLabel":"Board (name / BRD- / paste link)","boardSearch":"Search boards…","decidingLabel":"\"Own rows\" column — a person/email column that ties a row to the signed-in user (optional)","decidingNone":"None (no self / own-rows scope on this connection)","creating":"Creating…","create":"Create connection","errLoadBoard":"Could not load board.","errCreate":"Could not create the connection.","stampWarning":"Heads up: this board has {n} items, and connecting it turns every one of them into an OPEN case in the coordinators' Inbox.","stampDetail":"Creating this connection seals the board as an intake board and adds a \"Triage Status\" column to it if it does not have one. It also ARMS this project's intake⟷tickets rail: on the project's TICKETS board it switches the Field Service bridge on, writes a permission for it, and can create a live two-way sync between the two boards — that board is part of the same project, and this click configures it. Disconnecting later takes the board back out of the Inbox — it retires only the marker this connection stamped, never one somebody set by hand — but the cases that were already created are NOT deleted: they are real work, with status and notes.","stampConfirm":"I understand: seal this board and turn its {n} items into Inbox cases.","stampBlockedTickets":"{board} is this project's TICKETS board. The connection WILL be created — it gives the Field Service module access to this board, and it is the row that scopes ticket reads once Field Service enforcement is switched on — but the board will NOT be sealed as an intake board, so it does NOT become an Inbox entry. The Inbox lists INTAKE: a ticket is what an intake case BECOMES, not a way in. Sealing it would make it a SECOND intake board and silently break this project's intake⟷tickets rail, and the tickets on it would turn into open Inbox cases that are never deleted. The ticket DETAIL needs no connection at all — it already reaches the Inbox rail through the ticket's own board link. To put this project in the Inbox, connect its INTAKE board.","stampBlockedWorkspaceIntake":"This project already has an intake board: {board}. The connection WILL be created, but this board will NOT be sealed as a second intake board: a project has exactly ONE — intake is the list, tickets are the detail — and sealing a second one would silently break this project's intake⟷tickets rail (the provisioner stops converging and only writes a log line every 10 minutes). Use {board} for the Inbox. Heads-up: no screen in the product removes an intake marker today, so if the WRONG board is the marked one it has to be cleared by whoever administers the platform data — not from this console.","stampAlreadyIntake":"This board is already an intake board, so connecting it seals nothing and creates no new cases — it is in the coordinators' Inbox already. Deleting this connection later will NOT take it out: the marker it carries was not stamped by this connection.","createAndStamp":"Seal board and create connection"},"editor":{"errLoad":"Could not load this connection.","loading":"Loading…","whoCanSee":"Who can see this ({n})","noGrantsYet":"No one yet. Add a grant below — until then only the Owner sees this board through {module}.","ownRowsColumn":"Own-rows column","decidingNone":"None — own / self scope will show nothing","decidingHint":"A person/email cell matching the signed-in user marks a row as \"theirs\"."},"grant":{"add":"Add a grant","closeAria":"Close","roleFallback":"role","canEdit":"can edit","viewOnly":"view only","managesAccess":"manages access","colsCount":"{n} of {total} cols","groupOne":"{n} group","groupMany":"{n} groups","enabledAria":"Grant enabled","removeAria":"Remove grant","modeUser":"User","modeDepartment":"Department","modeWorkspace":"Workspace","modeSelf":"Self rule","modeEveryone":"Everyone","userLabel":"User","userSearch":"Search people…","departmentLabel":"Department","departmentPick":"Pick a department…","workspaceLabel":"Workspace","workspacePick":"Pick a workspace…","selfHint":"Every user of this module, automatically scoped to their own rows (via the connection's own-rows column).","everyoneHint":"Every user of this module. Pair with a scope + role below to say what \"everyone\" sees.","roleLabel":"Role","roleCanEditSuffix":"can edit","roleViewSuffix":"view","scopeOverrideLabel":"Scope override","inheritFromRole":"Inherit from role","scopeAll":"All rows","scopeOwn":"Own rows","scopeCustom":"Custom (uses this grant's filter)","visibleColumns":"Visible columns","allSoFarPickSome":"all so far — pick some","visibleGroups":"Visible groups","showRowsWhere":"Show rows where (all conditions match)","columnPlaceholder":"column…","valuePlaceholder":"value","removeConditionAria":"Remove condition","addCondition":"condition","specificItems":"Specific items","specificItemsHint":"(optional — also visible, on top of the scope)","untitled":"(untitled)","removeItemAria":"Remove item","itemsSearch":"Search items on this board…","limitViews":"Limit to saved views (optional)","adding":"Adding…","addGrant":"Add grant","errNoOwnRows":"This connection has no \"own rows\" column. Set one in the connection settings above, or choose a different scope.","errCustomEmpty":"Custom scope needs at least one filter condition (or a specific item below).","errAdd":"Could not add the grant."},"preview":{"title":"Preview as a user","resolving":"Resolving…","seesNothing":"Sees nothing — no grant matches this user (fail-closed).","rowsCount":"{n} rows","columnsCount":"{n} columns","canEdit":"can edit","viewOnly":"view only","untitled":"(untitled)","search":"Search a user to preview…"},"roles":{"heading":"Roles","intro":"Fully-custom, reusable across every connection. Scope + edit + filter + manage-access + column/group policy. Clone a template to start.","newRole":"New role","template":"template","edit":"edit","view":"view","filter":"filter","manageAccess":"manage access","customColumns":"custom columns","customGroups":"custom groups","clone":"Clone","editBtn":"Edit","archive":"Archive","copyName":"{name} copy","editRole":"Edit role","closeAria":"Close","nameLabel":"Name","namePlaceholder":"e.g. Dispatcher","scopeFieldLabel":"Scope","scopeAll":"All rows","scopeOwn":"Own rows","scopeCustom":"Custom filter (per grant)","descriptionLabel":"Description","descriptionPlaceholder":"Optional","canEditRows":"Can edit rows","canFilter":"Can filter","canManageAccess":"Can manage access","columnPolicyLabel":"Column policy","allColumns":"All columns","customPerGrant":"Custom (pick per grant)","groupPolicyLabel":"Group policy","allGroups":"All groups","saving":"Saving…","saveRole":"Save role","errSave":"Could not save the role."},"scopes":{"all":"all rows","own":"own rows","custom":"custom filter"},"ops":{"contains":"contains","not_contains":"does not contain","contains_any":"contains any of","starts_with":"starts with","eq":"equals","neq":"is not","in":"is any of","not_in":"is none of","gt":"greater than","gte":"at least","lt":"less than","lte":"at most","is_true":"is checked","is_false":"is unchecked","before":"is before","after":"is after","is_empty":"is empty","is_not_empty":"is not empty"},"inboxBoards":{"heading":"Boards in the coordinators' Inbox","boardOne":"{n} board","boardMany":"{n} boards","intro":"Every board carrying the intake marker, grouped by project — because one Inbox entry IS one project. Un-marking a board takes it out of the coordinators' Inbox and stops the enrich job from creating new cases from it. Nothing else changes.","empty":"No board carries the intake marker, so the coordinators' Inbox is empty.","loadFailed":"Could not measure this board. Nothing was changed — try again.","measuring":"Measuring…","itemsLabel":"{n} live items","openCasesLabel":"{n} open cases","totalCasesLabel":"{n} cases in total","originHand":"marked by hand","originConnection":"marked by connection «{name}»","originUnrecognized":"marked by an unrecognised mechanism","lastBoardBadge":"last marked board of this project","lastBoardHint":"This is the ONLY marked board of this project, so un-marking it takes the whole project out of the Inbox — not just this board.","caseSafety":"No intake case is ever deleted. The cases already created are real work — they have status, notes, and sometimes a ticket hanging off them — so they stay in the database exactly as they are. Un-marking only takes the board out of the Inbox.","cronNote":"It also stops the enrich job from creating NEW cases from this board, which is the point.","unmarkCta":"Un-mark","unmarkAria":"Un-mark this board from the Inbox","cancel":"Cancel","confirmTitle":"Take {board} out of the coordinators' Inbox?","confirmNumbers":"{open} open cases stop being visible in the Inbox. The {total} cases this board has are NOT deleted.","confirmProject":"This is the last marked board of «{project}», so the whole project disappears from the Inbox picker.","confirmAck":"I understand: un-mark this board and hide its {open} open cases from the Inbox.","confirmCta":"Un-mark this board","resultUnmarked":"{board} is out of the Inbox. Its {total} cases were kept, untouched.","resultUnmarkedProject":"{board} is out of the Inbox, and «{project}» no longer appears there at all — it was its last marked board. Its {total} cases were kept, untouched.","resultProjectLeftSuffix":"«{project}» no longer appears in the Inbox at all — it was its last marked board.","errNotMarked":"{board} does not carry the intake marker, so there was nothing to remove. It is already out of the Inbox.","errStampedByConnection":"The intake marker on {board} was stamped by the connection «{name}», not by hand — so this button does not touch it. That connection owns its own inverse: turn it off or delete it on the Connections tab and the marker it stamped is retired with it. Removing it from here as well would leave the connection alive and believing its marker is still in place.","resultUnmarkedOrphanGone":"{board} is out of the Inbox. Its marker was signed by the connection {id}, which no longer exists — so that connection could not retire it and this button did. Its {total} cases were kept, untouched.","resultUnmarkedOrphanOtherBoard":"{board} is out of the Inbox. Its marker was signed by the connection {id}, which points at a DIFFERENT board ({other}) — most likely this board is a duplicate that inherited the signature. Turning that connection off would have retired the OTHER board's marker and left this one in place, so this button removed it instead. Its {total} cases were kept, untouched.","errStampedByConnectionUnknown":"The intake marker on {board} carries a provenance this version does not recognise, so it was NOT removed. A marker whose author is unknown is treated as machine-stamped, never as hand-stamped — clearing it blindly would remove a marker some other mechanism still believes it owns.","errBoardNotFound":"There is no live board with that id — it was deleted while this screen was open. Reload the page.","errCountMismatch":"The numbers changed while the dialog was open: it is now {open} open cases and {total} in total, not {ackOpen} and {ackTotal}. Nothing was changed. Reload and confirm the real numbers.","errForbidden":"You do not have permission to change what the coordinators' Inbox shows.","markHeading":"Mark a board by hand","markIntro":"Puts the intake marker on a board so its items become Inbox cases for the coordinators. The marker is stamped by hand, with no connection behind it — the same shape the integrator writes.","markSearch":"Search boards…","markClearAria":"Clear the chosen board","markCta":"Mark as intake board","markWarning":"It can be refused: a project has exactly ONE intake board, and the project's Tickets board is never sealed as intake. If someone marked another board of this project in the meantime, this will be rejected and say which board is in the way.","markStampWarning":"Marking this board turns its {n} items into OPEN cases in the coordinators' Inbox, right away.","markStampDetail":"This is not undoable: un-marking the board later takes it out of the Inbox but does NOT delete a single case.","markStampConfirm":"I understand: this creates {n} open cases in the coordinators' Inbox, and un-marking later does not delete them.","markStampMeasuring":"Measuring how many items this board has…","markNeedsAck":"Nothing was marked: this board has {n} items that would become open cases in the coordinators' Inbox, and that number has to be acknowledged first. Tick the box and try again.","markResult":"{board} is marked, and it is back in the coordinators' Inbox.","markAlreadyHand":"{board} already carries a hand-stamped intake marker — nothing was changed.","markAlreadyConnection":"{board} already carries an intake marker stamped by a connection, so it was NOT re-stamped: re-stamping would erase that provenance and the connection would lose the ability to retire its own marker.","markBlockedTickets":"{board} is this project's TICKETS board, so it is not marked as intake. The Inbox lists INTAKE; a ticket is what an intake case BECOMES, not a way in. Mark the project's intake board instead.","markBlockedWorkspaceIntake":"This project already has an intake board: {blocking}. A project has exactly ONE — marking a second one silently breaks its intake⟷tickets rail. Un-mark {blocking} first if the wrong board is the marked one.","markBlockedArchived":"{board} is ARCHIVED, so it is not marked as intake. The rail provisioner only sees live boards, so the marker would be written and nothing would be armed. Un-archive it first."},"railFields":{"heading":"Rail fields (Tickets boards)","intro":"The Inbox rail reads five fields from the project's Tickets board: SLA, price, the contact/call that moves the case, parts, and the technician's photo evidence. This is where you say WHICH column feeds each one — until now that map could only be changed by editing the board's JSON by hand.","empty":"No Tickets board holds a service ticket yet, and none carries a saved mapping, so there is nothing to map. A board appears here as soon as its first ticket lands on it.","scopeNote":"Listed here: every board that already holds at least one service ticket, plus any board that already carries a saved mapping. A board with no tickets has no rail to configure.","ticketsLabel":"{n} tickets","archivedBadge":"archived","archivedHint":"This board is archived. Its existing tickets still read this mapping, so it stays editable.","fieldSla":"SLA","fieldPrice":"Price","fieldCost":"Cost","fieldCall":"Contact / call","fieldParts":"Parts","fieldPhoto":"Photo evidence","sourceOverride":"Set by hand","sourceAuto":"Matched by name","stateBroken":"Broken mapping","stateUnmapped":"Not mapped","overrideHint":"Someone chose these columns for this board. A hand-set mapping always beats the name match.","autoHint":"Nobody configured this slot, so the system matched a column by name. It looks for: {names}.","brokenHint":"This slot points at columns that no longer exist on this board ({ids}), so the rail shows NOTHING here: a hand-set mapping never falls back to the name match. Pick a column, or go back to automatic.","unmappedHint":"Nothing was configured and no column name matched, so this slot is not shown in the rail at all. The name match looks for: {names}.","staleHint":"Some chosen columns no longer exist on this board and are ignored: {ids}.","edit":"Change","cancel":"Cancel","save":"Save mapping","backToAuto":"Back to automatic","backToAutoHint":"Removes the hand-set mapping so this slot goes back to matching by name. Without this, choosing a column would be a one-way door.","searchColumns":"Search columns…","chosen":"Chosen, in the order they will be shown","chooseAtLeastOne":"Pick at least one column. To leave the slot to the name match, use “Back to automatic” — saving an empty mapping would switch the slot off for good.","removeColumnAria":"Remove this column from this field","previewHeading":"What the rail would show","previewMeasuring":"Reading real data from this board…","previewFrom":"sampled from {item}","previewBlank":"That cell is empty on the ticket.","previewOpaque":"The rail cannot render this column type, so it would say so rather than show an empty box.","previewSlaNotComputed":"This column carries no computed SLA breakdown, so the rail would show nothing: that is exactly what happens when a plain date column is mapped to the SLA field.","previewPhotoFile":"{n} attached file(s) on that ticket.","previewPhotoConnect":"{n} linked evidence item(s) on that ticket.","previewPhotoUnsupported":"This column is neither a file column nor a link to the evidence board, so the rail would never find a photo in it.","previewNoData":"This board has tickets and not one of them has a value in this column, so the rail would stay empty until somebody fills it.","previewNoItems":"This board has no rows to sample.","previewRestricted":"You may configure this board, but you cannot read its rows, so there is nothing to preview.","previewFailed":"Could not read a sample. Nothing was changed — try again.","resultSaved":"{field} on {board} now reads: {columns}.","resultCleared":"{field} on {board} is back to matching by name.","resultNoChangeSame":"Nothing changed: {field} already read exactly those columns.","resultNoChangeAuto":"Nothing changed: {field} was already matching by name.","errBoardNotFound":"There is no live board with that id — it was deleted while this screen was open. Reload the page.","errColumnNotOnBoard":"That column does not belong to this board, so NOTHING was saved. The rail filters a mapping against the board's live columns, so a foreign id would leave the field silently blank instead of failing.","errForbidden":"You do not have permission to change what the rail reads.","saveFailed":"Could not save. Nothing was changed — try again."}},"board":{"empty":"No modules are authorized for this board yet. An administrator can authorize one in Admin → Bridge.","emptyAdminHint":"Authorizing a board is a portal administration step — it decides where this board’s data is allowed to flow.","enableLabel":"Sync this board through this connector","mappingTitle":"Field mapping","none":"Not mapped","linkedRecords":"Linked records","lastSync":"Last sync","never":"Never","backfill":"Sync existing items","backfillHint":"Runs this connector once over every item already on the board. Safe to repeat — existing links are updated, not duplicated.","backfillDone":"Synced {synced} of {scanned} items.","backfillFailed":"The backfill did not finish. See the last error below.","saved":"Saved","autoBadge":"Auto-detected"},"inactive":{"platformOff":"The Bridge platform is switched off portal-wide, so no connector syncs. An administrator can turn it back on in Admin → Modules.","connectorOff":"This connector is switched off for the whole portal, so nothing syncs. An administrator can turn it back on in Admin → Bridge → Connectors.","noGrant":"This board isn’t authorized for this connector yet. An administrator can authorize it in Admin → Bridge → Board authorizations.","grantRevoked":"This board’s authorization was revoked, so syncing has stopped. An administrator can restore it in Admin → Bridge → Board authorizations.","moduleOff":"The module this connector syncs to is switched off. An administrator can turn it back on in Admin → Modules.","boardOff":"Syncing is switched off for this board. Turn it back on with the toggle above — the administrator’s authorization is still in place."},"fields":{"fieldService":{"status":"Status","severity":"Severity","client":"Client","site":"Site","productSku":"Product / SKU","problemType":"Problem type","assignee":"Assignee","received":"Received","slaDue":"SLA due","description":"Description","receiptConfirmed":"Receipt confirmed","lastClientActivity":"Last client activity","clientUnread":"Client message"},"helpdesk":{"status":"Status","priority":"Priority","assignee":"Assignee","requester":"Requester","subject":"Subject","description":"Description","firstResponseDue":"First response due","resolutionDue":"Resolution due"},"equipment":{"status":"Status","category":"Category","assignee":"Holder","name":"Name","model":"Model","serialNumber":"Serial number","location":"Location","purchaseDate":"Purchase date"},"vendors":{"name":"Name","status":"Status","category":"Category","serviceType":"Service type","contactName":"Contact name","contactEmail":"Contact email","contactPhone":"Contact phone","paymentTerms":"Payment terms"},"providers":{"name":"Name","status":"Status","email":"Email","phone":"Phone","regions":"Regions","skills":"Skills","dispatchMode":"Dispatch mode","projects":"Projects"},"clients":{"name":"Name","status":"Status","clientType":"Type","redixId":"Redix ID","timezone":"Timezone","contactName":"Contact name","contactEmail":"Contact email","contactPhone":"Contact phone","notes":"Notes"},"sites":{"siteCode":"Site code","snLocationCode":"SN location code","client":"Client","address":"Address","geo":"Coordinates","region":"Region","status":"Status"},"contracts":{"name":"Name","client":"Client","status":"Status","effectiveFrom":"Effective from","effectiveTo":"Effective to","slaTier":"SLA tier","notes":"Notes"},"calendars":{"name":"Name","timezone":"Timezone","weeklyHours":"Weekly hours"},"holidays":{"date":"Date","name":"Name","calendar":"Calendar"}}},"brochures":{"title":"Brochure Studio","subtitle":"Design AI-assembled, Redsis-branded product brochures","newBrochure":"New brochure","titlePlaceholder":"Brochure title…","create":"Create","cancel":"Cancel","empty":"No brochures yet","emptyHint":"Create your first brochure to get started.","formats":{"a4-portrait":"A4 — portrait","a4-landscape":"A4 — landscape","letter-portrait":"US Letter — portrait","letter-landscape":"US Letter — landscape","a5-portrait":"A5 — portrait","tri-fold":"Tri-fold","bi-fold":"Bi-fold","data-sheet":"Data sheet","square":"Square","digital-16x9":"Digital 16:9"},"status":{"draft":"Draft","in_review":"In review","approved":"Approved","published":"Published"},"back":"Back to brochures","saving":"Saving…","saved":"Saved","saveError":"Save failed — will retry","viewOnly":"View only","addText":"Text","addImage":"Image","addShape":"Shape","page":"Page","addPage":"Add page","removePage":"Remove page","imagePrompt":"Paste an image URL","inspector":{"title":"Properties","noSelection":"Select an element on the canvas to edit it.","text":"Text","color":"Color","fontSize":"Font size (pt)","bold":"Bold","align":"Align","alignLeft":"Left","alignCenter":"Center","alignRight":"Right","position":"Position (mm)","size":"Size (mm)","delete":"Delete element","locked":"Locked","lockedHint":"This element is part of a locked template region and can’t be edited."}},"presentations":{"title":"Presentations","subtitle":"Build, present, and publish slide decks — native to Redsis One","newDeck":"New deck","namePlaceholder":"Deck name…","create":"Create","creating":"Creating…","cancel":"Cancel","searchPlaceholder":"Search decks…","empty":"No decks yet","emptyHint":"Create your first deck to get started.","noResults":"No decks match your search.","rename":"Rename","save":"Save","delete":"Delete","deleteConfirm":"Delete this deck? It will be archived and removed from your list.","moreActions":"More actions","slidesOne":"slide","slidesOther":"slides","createError":"Could not create the deck. Please try again.","actionError":"Something went wrong. Please try again.","editedPrefix":"Edited","compose":{"entry":"Build with Ayva","title":"Build with Ayva","subtitle":"Describe the deck. Ayva composes a complete narrated, animated, on-brand presentation — you review and tweak.","briefLabel":"What should the deck do?","briefPlaceholder":"e.g. A 10-slide pitch to a hospital CFO for our managed-print service — cover, the problem, our solution, proof, pricing, next steps.","briefHint":"The more you say about the goal, the audience and what to cover, the sharper the deck.","audienceLabel":"Audience (optional)","audiencePlaceholder":"e.g. a hospital CFO","titleLabel":"Title (optional)","titlePlaceholder":"Ayva picks one if you leave it blank","languagesLabel":"Languages","templateLabel":"Start from a template (optional)","templateNone":"Let Ayva compose from scratch","clientLabel":"Client (optional)","clientSearch":"Search clients…","deliverNote":"Ayva always delivers a complete, on-brand deck.","compose":"Compose the deck","composing":"Composing…","error":"Could not compose the deck. Please try again.","reviseOpen":"Tweak with Ayva","reviseTitle":"Tweak with Ayva","reviseClose":"Close","revisePlaceholder":"e.g. drop the pricing part · say it in Portuguese too · punchier narration","reviseHint":"⌘/Ctrl + Enter to send","reviseSend":"Apply","revising":"Applying…","reviseError":"Could not apply that change. Please try again.","reviseDone":"Done."},"builder":{"slideTypes":{"cover":"Cover","agenda":"Agenda","section":"Section","statement":"Statement","bullets-beat":"Bullets with beats","two-column":"Two columns","flow":"Flow","comparison":"Comparison","kpi-grid":"KPI grid","timeline":"Timeline","product-cards":"Product cards","pricing":"Pricing","team-contacts":"Team and contacts","image-full":"Full image","quote-callout":"Quote","closing":"Closing"},"figures":{"chip":"Chip","pill":"Status pill","stat":"Stat tile","node":"Flow node","cylinder":"Database","stamp":"Stamp","panel":"Panel","callout":"Callout","comparison":"Comparison","agenda":"Agenda rail","ring":"Ayva ring"},"presets":{"calm":"Calm","snappy":"Snappy","still":"Still","wired":"Wired","cinematic":"Cinematic","editorial":"Editorial"},"inspector":{"tab":"Builder","slideType":"Slide type","makeBuilderSlide":"Make this a Builder slide","replaceLayout":"Replace this slide with the new type?","replaceLayoutHint":"The blocks and beats are rebuilt from the type. Text in matching slots and the narration are kept.","confirm":"Replace","cancel":"Keep","preset":"Motion preset","beats":"Beats","beat":"Beat","addBeat":"Add beat","autoPlan":"Auto-plan","show":"Show","emphasize":"Emphasize","dim":"Dim","doneAfter":"Fade once the next beat starts","hold":"Hold (s)","narration":"Narration","chunk":"Sentence","addChunk":"Add sentence","firesBeat":"Fires","noBeat":"No beat","draftWithAyva":"Draft with Ayva","translateFrom":"Translate from {lang}","previewVoice":"Preview with voice","stop":"Stop","editable":"Editable on built decks","editableHint":"Users can change the text of these blocks after a build. Everything else follows the template.","block":"Block","textPerLanguage":"Text per language","binding":"Data binding","noBinding":"None (fixed text)","bindingFormat":"Format","anchorBeat":"Revealed by beat","builtInfo":"Built from the template \"{template}\", part \"{part}\".","builtEditable":"Editable text on this slide:","noBuilderSlide":"This slide has no Builder type yet. Pick one to get its layout, beats and narration slots.","moveUp":"Move up","moveDown":"Move down","remove":"Remove","working":"Preparing the voice…"},"editor":{"backToParts":"Parts","insertType":"Insert slide","publish":"Publish part","lockedBanner":"This deck follows the template \"{template}\". Only the highlighted text can be edited here.","openBuilder":"Builder","detachHint":"Parts, order and languages are changed on the Builder page, where the deck can also be detached from its template."},"list":{"newFromTemplate":"New from template","admin":"Builder admin"},"admin":{"title":"Presentation Builder","subtitle":"The Redsis format: templates, parts, voices and rules behind every built presentation","tabs":{"format":"Format","voices":"Voices","parts":"Parts","templates":"Templates","health":"Health"},"format":{"title":"Format","hint":"Colors and type come from the Redsis brand (src/lib/brand.ts) and are locked. Stage margins, subtitle style and motion are yours.","name":"Format name","locked":"Locked by the brand","tokens":"Tokens","stage":"Stage","marginX":"Side margin (%)","marginY":"Top/bottom margin (%)","subtitle":"Subtitles","subtitleSize":"Size (% of height)","subtitlePosition":"Position","subtitleBackground":"Background","motion":"Motion","defaultPreset":"Default preset","silentHold":"Silent hold per beat (s)","autoAdvance":"Auto-advance after narration (s)","save":"Save Format","saved":"Format saved"},"voices":{"title":"Voices and languages","hint":"One default voice per language. Kokoro runs inside Redsis One; ElevenLabs needs the key configured under Ayva voice settings.","language":"Language","engine":"Engine","voiceId":"Engine voice","displayName":"Display name","speed":"Speed","isDefault":"Default for this language","add":"Add voice","save":"Save voice","delete":"Remove","elevenlabsUnavailable":"ElevenLabs is greyed out: no API key is configured.","elevenlabsReady":"ElevenLabs key configured"},"parts":{"title":"Parts","hint":"A part is one or more slides authored in the editor. Templates compose parts; a build copies the published version.","new":"New part","key":"Key","name":"Name","kind":"Kind","kinds":{"fixed":"Fixed","required":"Required","optional":"Optional"},"description":"Description","create":"Create part","open":"Open in editor","publish":"Publish","published":"Published","draft":"Draft","version":"v{n}","slides":"{n} slides","neverPublished":"Never published","status":"Status","retire":"Retire","restore":"Restore","publishedOk":"Published version {n}","warnings":"Warnings"},"templates":{"title":"Templates","hint":"Order the parts, set defaults and rules, choose the publishing policy, then publish a version the wizard can use.","new":"New template","key":"Key","name":"Name","description":"Description","create":"Create template","parts":"Parts","addPart":"Add part","defaultOn":"On by default","required":"Required","lockPosition":"Lock position","remove":"Remove","saveParts":"Save parts","languages":"Languages offered","audience":"Default audience","publishing":"Publishing","publishingPolicy":{"never":"Internal only — no external links","approval":"External links need approval","allowed":"External links allowed"},"approverCapability":"Approver capability","customFields":"Custom fields (wizard)","customFieldKey":"key","customFieldLabel":"Label","addCustomField":"Add field","saveSettings":"Save settings","rules":"Rules","addRule":"Add rule","ruleName":"Name","when":"When","path":"Context path","op":"Condition","value":"Value","then":"Then","action":"Action","actions":{"enablePart":"Enable part","disablePart":"Disable part","movePart":"Move part","setVariant":"Set variant","requireField":"Require field"},"part":"Part","position":"Position","variant":"Variant","message":"Message","enabled":"Enabled","saveRules":"Save rules","validate":"Validate","publish":"Publish version","validationOk":"The template is valid.","errors":"Errors","warnings":"Warnings","publishedOk":"Published version {n}","status":"Status","version":"v{n}","retire":"Retire","restore":"Restore","noParts":"No parts yet — add at least one published part.","restoreStarter":"Restore starter content","moveUp":"Move up","moveDown":"Move down","restoredStarter":"{parts} parts and {templates} templates restored; {partsUpdated} parts and {templatesUpdated} templates updated from the repo"},"health":{"title":"Narration engine health","espeak":"espeak-ng (Spanish and Portuguese phonemes)","ffmpeg":"ffmpeg (AAC mixes)","elevenlabs":"ElevenLabs key","kokoro":"Kokoro model cache","ok":"OK","missing":"Missing","narrationFlag":"Narration flag","on":"On","off":"Off"}},"wizard":{"title":"New presentation from a template","subtitle":"Pick a template and the client; the parts, data and narration are built for you.","template":"Template","noTemplates":"No published templates yet. Publish one in Builder admin.","client":"Client","clientSearch":"Search clients…","clientManual":"Type a client name","clientSource":{"company":"Companies","redix":"Redix","manual":"Typed"},"contact":"Contact name","city":"City","entity":"Redsis entity","presenter":"Presenter","presenterTitle":"Title","audience":"Audience","deal":"Deal","dealTitle":"Deal title","dealValue":"Deal value","dealCurrency":"Currency","quote":"Quote","quoteLine":"Line","quoteDescription":"Description","quoteQty":"Qty","quoteUnit":"Unit price","addLine":"Add line","quoteValidUntil":"Valid until","products":"Products","productSearch":"Search products…","custom":"Custom fields","languages":"Languages","primaryLanguage":"Primary language","deckTitle":"Deck title","parts":"Parts","partsHint":"Rules already applied for this client. Toggle optional parts; required parts stay.","remove":"Remove","missing":"Missing information","preview":"Preview plan","build":"Build presentation","building":"Building…","narrationQueued":"Narration is being generated in the background.","error":"The build failed. Please try again.","back":"Back","next":"Next","steps":{"template":"Template","context":"Client and context","languages":"Languages","review":"Review and build"}},"build":{"title":"Builder","subtitle":"Built from \"{template}\" v{version}","parts":"Parts","on":"On","off":"Off","required":"Required","locked":"Locked","apply":"Apply changes","applying":"Regenerating…","applied":"Deck regenerated. Your edits to editable text were kept.","refreshContext":"Refresh from sources","updateTemplate":"Update to template v{n}","upToDate":"On the latest template version","detach":"Detach from template","detachConfirm":"Detach this deck? It becomes a free deck: every block editable, no more template updates, narration kept as it is.","detached":"Deck detached.","languages":"Languages","primary":"Primary","narration":"Narration","generate":"Generate narration","regenerate":"Regenerate narration","narrationOff":"Narration is off for this account.","status":{"queued":"Queued","generating":"Generating… {done}/{total}","ready":"Ready","failed":"Failed","stale":"Out of date — regenerate","off":"Not generated"},"play":"Play","edit":"Edit text","client":"Client","presenter":"Presenter","narrationQueued":"Narration is being generated in the background.","rulesApplied":"Rules applied","moveUp":"Move up","moveDown":"Move down","noRules":"No rules fired for this context.","share":"Share","publishing":{"never":"Internal only","approval":"External links need approval","allowed":"External links allowed"},"error":"Something went wrong. Please try again."},"player":{"captions":"Captions","language":"Language","silent":"Silent mode — beats run on a timer; → for the next beat","autoplayBlocked":"Click or press Space to start the narration","loading":"Loading narration…","noNarration":"No narration for this language","fullscreen":"Fullscreen","keys":"→ next beat · ← back · Space play/pause · C captions · L language · F fullscreen"}}},"videoStudio":{"title":"Video Studio","subtitle":"Create shareable marketing, training and pitch videos — powered by VEED.","newProject":"New video","create":"Create","cancel":"Cancel","titlePlaceholder":"Video title…","empty":"No videos yet","emptyHint":"Create your first video to get started.","loadError":"Couldn’t load videos.","createError":"Couldn’t create that video.","back":"Back to videos","saving":"Saving…","saved":"Saved","saveError":"Save failed — will retry.","purpose":"Purpose","status":"Status","visibility":"Visibility","all":"All","purposeMarketing":"Marketing","purposeTraining":"Training","purposeNews":"News","purposePitch":"Pitch","purposeOnboarding":"Onboarding","purposeOther":"Other","statusDraft":"Draft","statusEditing":"Editing","statusRendering":"Rendering","statusReview":"Review","statusPublished":"Published","statusArchived":"Archived","visInternal":"Internal","visPublic":"Public","visSigned":"Signed link","sectionDetails":"Details","sectionEdit":"Edit in VEED","sectionAi":"AI tasks","sectionAssets":"Assets","sectionPublish":"Publish","openInVeed":"Open in VEED","veedUrlLabel":"VEED project URL","veedUrlHint":"Paste the veed.io project link so the team can jump back into editing.","importMp4":"Import finished MP4","importHint":"Upload the exported MP4, or let n8n auto-ingest it when the team exports from VEED.","aiRun":"Run","aiRunning":"Running…","aiSubtitles":"Auto-subtitles","aiBgRemoval":"Background removal","aiGreenScreen":"Green screen","aiLipSync":"Lip-sync","aiFabric":"Fabric talking-head","aiHint":"AI jobs run on VEED’s API (Fabric avatars run on fal.ai) and are billed per render.","jobQueued":"Queued","jobProcessing":"Processing","jobSucceeded":"Done","jobFailed":"Failed","noAssets":"No assets yet.","assetSource":"Source","assetRender":"Render","assetCaption":"Caption","assetThumbnail":"Thumbnail","publish":"Publish","publishHint":"Route a finished render to one or more channels.","chNewsFeed":"News Feed / Announcements","chDownload":"Direct download / link","chYoutube":"YouTube","chSharepoint":"SharePoint / Drive","publishQueued":"Queued for publish","publishDone":"Published","budgetTitle":"AI budget · this month","budgetOf":"of","budgetWarn":"Approaching the monthly AI budget cap.","budgetExceeded":"Monthly AI budget cap reached — new AI renders are paused until next month or a higher cap.","archive":"Archive","confirmArchive":"Confirm archive","notConfigured":"Video Studio isn’t fully configured yet — ask an admin to add the VEED API keys.","editor":{"editorName":"Video One","backToProject":"Back to project","saved":"Saved","saving":"Saving…","saveConflict":"Newer edit exists","saveError":"Save failed — retrying on next change","reload":"Reload latest","addTrack":"Add track","trackVideo":"Video","trackAudio":"Audio","trackText":"Text","trackOverlay":"Overlay","trackCaptions":"Captions","tabMedia":"Media","tabInspector":"Clip","tabBrand":"Brand","tabCaptions":"Captions","tabAudio":"Audio","tabRender":"Render","tabHistory":"History","tabKeys":"Keys","nothingSelected":"Select a clip to edit its properties.","transform":"Transform","posX":"Position X","posY":"Position Y","scale":"Scale","rotation":"Rotation","opacity":"Opacity","textContent":"Text","fontSize":"Size","fontFamily":"Font","bold":"Bold","color":"Color","background":"Box","align":"Align","volume":"Volume","fadeIn":"Fade in (s)","fadeOut":"Fade out (s)","muteClip":"Mute clip","speed":"Speed","transition":"Transition to next clip","transitionNone":"None (cut)","transitionDuration":"Duration (s)","clearKeyframes":"Clear volume keyframes","duplicate":"Duplicate","rippleDelete":"Ripple delete","deleteClip":"Delete","addToTimeline":"Add to timeline","addAsAudio":"Add as audio","noAssets":"No usable media yet — upload a source clip in the project workspace.","brandColors":"Brand colors","dropLogo":"Click a logo to drop it as an overlay at the playhead; click a color to add a lower-third.","importFromAsset":"Import","importCaptions":"Import captions (e.g. a VEED auto-subtitles result)","noCaptionAssets":"No caption assets yet — run the VEED Auto-subtitles AI task first.","captionPosition":"Position","top":"Top","bottom":"Bottom","burnIn":"Burn captions into the rendered MP4 (a VTT track is always attached)","duckingEnable":"Auto-duck music under voice","duckingAmount":"Duck amount","duckingAttack":"Attack","duckingRelease":"Release","applyDucking":"Apply ducking keyframes","trackRoles":"Track roles","roleVoice":"Voice","roleMusic":"Music","roleNone":"—","preset":"Output preset","fpsLabel":"Frame rate","startRender":"Render MP4","rendering":"Rendering…","renderQueued":"Queued","renderFailed":"Render failed","renderDone":"Render complete — see Assets in the project workspace","budgetExceeded":"Monthly budget cap reached — renders resume next month or with a higher cap.","budgetWarningMsg":"Heads up: this render brings you close to the monthly budget cap.","workerOffline":"Render worker not connected yet — editing and autosave still work; renders will start once it is deployed.","restore":"Restore","current":"current","sendToVeed":"Send to VEED","sendToVeedHint":"Copies a download link and opens the VEED project.","sendToVeedCopied":"Download link copied — paste it into veed.io (opening now).","sendToVeedFailed":"Could not prepare the hand-off link.","laneTitle":"Edit here (Video One)","laneHint":"The native timeline editor — multi-track trim, text, captions, audio ducking, transitions, brand overlays. Fully interoperable with the VEED lane: same assets, same renders, same budget.","laneOpen":"Open editor","laneNoEdit":"No native edit yet — open the editor to start one.","laneLastSaved":"Last saved","laneRevision":"revision"},"explainer":{"laneTitle":"Explainer (clip library)","laneHint":"Compose a narrated explainer from the clip library: order the clips, rewrite any narration, render to MP4 with the Ayva voice.","laneOpen":"Open composer","laneRuntime":"Running time","laneClips":"clips","newExplainer":"New explainer","badge":"Explainer","duplicate":"Duplicate","duplicating":"Duplicating…","library":"Clip library","librarySubtitle":"The scenes explainer videos are composed from. Edit a clip and its voice and timing follow.","libraryEmpty":"No clips yet","libraryLoading":"Loading the library…","clipsCount":"clips","phase":"Visual phase","shows":"What it shows","narration":"Narration","headline":"Headline","subtitleField":"Subtitle","lead":"Lead-in (s)","tail":"Tail (s)","min":"Minimum on screen (s)","tags":"Tags","tagsHint":"Comma-separated.","beats":"Beats","beatsHint":"One per line. \"12.5 | text\" pins a beat to a second.","version":"Version","history":"History","restore":"Restore","noHistory":"No earlier versions.","saveNote":"Note for the history (optional)","save":"Save clip","saving":"Saving…","saved":"Saved. The voice is being regenerated.","savedNoVoice":"Saved.","voice":"Voice","voiceReady":"Voice ready","voiceQueued":"Voice queued","voiceGenerating":"Generating voice…","voiceFailed":"Voice failed","voiceMissing":"No voice yet","onScreen":"On screen","backToLibrary":"Back to the library","editClip":"Edit clip","composerTitle":"Composer","composerSubtitle":"Order the clips, include or leave out, override a narration, then render.","sequence":"Sequence","addClip":"Add clip","allClipsUsed":"Every clip is in the sequence.","include":"Include","remove":"Remove","moveUp":"Move up","moveDown":"Move down","dragHint":"Drag a clip to reorder it.","override":"Override text for this video","overrideHint":"Leave a field empty to use the library clip.","runningOrder":"Running order","starts":"starts at","totalRuntime":"Total running time","speed":"Voice speed","problems":"Fix before rendering","render":"Render","rendering":"Rendering…","renderQueued":"Render queued. It runs in the background; this page follows its progress.","renders":"Renders","noRenders":"No renders yet.","stageVoice":"Voice","stageFrames":"Frames","stageMux":"Assembling","stageDone":"Done","statusQueued":"Queued","statusProcessing":"Rendering","statusSucceeded":"Ready","statusFailed":"Failed","download":"Download MP4","attempt":"attempt","saveSequence":"Save","sequenceSaved":"Sequence saved.","unsaved":"Unsaved changes","busy":"A render of this video is already running.","budget":"The monthly Video Studio budget is spent.","createError":"Could not create the explainer.","actionError":"Something went wrong. Please try again.","openProject":"Project workspace","backToVideos":"All videos","noLibrary":"The clip library is empty.","estimated":"estimated","look":{"title":"Look","libraryTitle":"Library look","libraryHint":"Colours, background, animation, title layout and logos every clip of this library inherits.","sharedHint":"Changes the clip for every video that uses it.","engineDefault":"Engine default","inheritsLibrary":"Inherits the library look","ownLook":"Own look","version":"Look version","revertDefault":"Revert to engine default","clearLibrary":"Clear the library look","saveLibrary":"Save library look","librarySaved":"Library look saved. Every clip without its own look follows it.","saveClipLook":"Save clip look","clipSaved":"Clip look saved.","savedFromComposer":"Look edited from the composer","discardDraft":"Discard changes","previewAndLook":"Preview & edit look","hidePreview":"Hide preview","changedLook":"Look","tabColours":"Colours","tabAnimation":"Animation","tabLayout":"Layout","tabAssets":"Assets","useDefault":"Use the default","tint":"Background tint","tintEngine":"As the engine decides","tintBrand":"Brand (violet)","tintYellow":"Yellow","mood":"Mood","speed":"Speed","speedHint":"Below 1 the choreography takes longer; above 1 it lands sooner. The voice is never changed.","enter":"Enter","exit":"Exit","fromPreset":"From the preset","titleMode":"Title","engineLimits":"This engine supports only some title modes.","titleSlot":"Title position","titleSize":"Size","titleWeight":"Weight","titleColor":"Colour","titleReveal":"Reveal","showSubtitle":"Show the subtitle under the headline","brandBug":"Show the brand mark (bottom right)","libraryAssets":"Logos & images","upload":"Upload","noAssets":"No logos or images yet. Upload a PNG, JPEG, WebP or SVG (up to 3 MB).","useAsOverlay":"Overlay","useAsBackground":"Background","archiveAsset":"Archive this asset","overlays":"Overlays","noOverlays":"No overlays on this scene.","fromLibrary":"from the library look","hideHere":"Hide on this clip","hiddenHere":"hidden on this clip","removeOverlay":"Remove overlay","opacity":"Opacity","width":"Width (px)","from":"From (s)","to":"To (s)","backgroundImage":"Background image","removeBackground":"Remove the background image","missingAsset":"missing asset","booting":"Starting the engine...","play":"Play","pause":"Pause","scrub":"Scrub through the scene","noVoicePreview":"Voice not available for this text; preview plays silent.","proposalTitle":"Ayva proposes a change","proposalNoChange":"No visible change.","proposalApply":"Apply","proposalDiscard":"Discard","proposalApplied":"Applied as a new version.","proposalDiscarded":"Discarded.","proposalExpired":"This proposal expired (24 h). Ask Ayva again."}}},"reports":{"title":"Reports","subtitle":"Daily end-of-day reports and dashboards, by day.","empty":"No reports are available to you yet.","noReports":"No reports filed for this day yet."},"insights":{"title":"Insights","intro":"Native business intelligence — build datasets, charts and dashboards over your boards and connected databases.","datasets":{"title":"Datasets","emptyTitle":"No datasets yet","emptyBody":"Datasets are the tables and queries you build charts on. Create one from a board to get started.","newButton":"New dataset"},"newDataset":{"title":"New dataset","subtitle":"Build a dataset from a board, a connected database table, or a read-only SQL query. Its columns become the dimensions and metrics you can chart.","nameLabel":"Dataset name","namePlaceholder":"e.g. Sales pipeline","boardLabel":"Board","boardPlaceholder":"Choose a board…","create":"Create dataset","creating":"Creating…","noBoards":"You don’t have any boards yet. Create a board first, then build a dataset on it.","sourceBoard":"From a board","sourceBoardHint":"Chart the items of a One Board.","sourceDatabase":"From a database","sourceDatabaseHint":"Pick tables from a connected database — each selected table becomes a dataset.","sourceSql":"From SQL","sourceSqlHint":"Define a virtual dataset with a read-only SELECT.","sourceJoin":"Join tables","sourceJoinHint":"Visually join multiple tables from one database — the SQL builds itself.","sourceBlend":"Blend datasets","sourceBlendHint":"Join two existing datasets across different databases on key columns.","joinBaseTable":"Base table","joinPickTable":"Pick a table…","joinJoins":"Joins","joinAdd":"Add join","joinOn":"on","joinColumns":"Columns","joinColumnsHint":"Pick the columns the dataset exposes (rename duplicates automatically).","joinSqlPreview":"Generated SQL","joinCopySql":"Copy SQL","joinCopied":"Copied","joinOpenAsSql":"Open as SQL","joinInner":"Inner join","joinLeft":"Left join","joinRight":"Right join","joinFull":"Full outer join","blendLeft":"Left dataset","blendRight":"Right dataset","blendPick":"Pick a dataset…","blendKeys":"Join keys","blendKeysHint":"Rows match when every key pair is equal (case-insensitive).","blendAddKey":"Add key pair","blendJoinType":"Join type","blendJoinLeft":"Left (keep all left rows)","blendJoinInner":"Inner (matching rows only)","connectionLabel":"Connection","connectionPlaceholder":"Choose a connection…","agentGroup":"On-prem · Connector Agent","cloudGroup":"Cloud · saved connections","testBadge":"TEST","unsupportedBadge":"not queryable from Insights","loadingTables":"Loading tables…","tablesLabel":"Tables","tableSearchPlaceholder":"Filter tables…","selectAll":"Select all","clearSelection":"Clear selection","columnsSuffix":"columns","selectedSuffix":"selected","createSelected":"Create datasets from selection","noTables":"No tables found on this connection.","noConnections":"No data connections available yet. Connect databases in Data Studio first.","manageConnections":"Manage connections in Data Studio","sqlLabel":"SQL (read-only SELECT)","sqlPlaceholder":"select customer, sum(total) as revenue\nfrom invoices\ngroup by customer","sqlHelp":"Validated against the live connection before the dataset is created. Write statements are refused.","createSql":"Validate & create","agentUnreachable":"The connector agent did not answer — on-prem sources are hidden until it’s back."},"detail":{"columns":"columns","totals":"Totals","rowCount":"Rows","dataPreview":"Data preview","noData":"This dataset has no rows yet.","queryError":"Could not run the query","explore":"Explore","savedCharts":"Saved charts","noCharts":"No saved charts yet. Open Explore to build one."},"explore":{"title":"Explore","dataTab":"Data","customizeTab":"Customize","columnsTitle":"Columns","searchColumns":"Search columns & metrics","noColumns":"No matching columns","changeDataset":"Change dataset","gallery":"Visualization type","searchViz":"Search charts","viewTable":"View as table","viewQuery":"View query","copy":"Copy","copied":"Copied","queryUnavailable":"A compiled SQL preview is not available for this dataset type.","rowsLabel":"rows","saveAs":"Save as","saveAsNew":"Saved as a new chart","updated":"Chart updated","vizType":"Chart type","groupBy":"Group by","none":"None","metrics":"Metrics","aggregate":"Aggregate","column":"Column","countRows":"Count of rows","addMetric":"Add metric","remove":"Remove","filters":"Filters","addFilter":"Add filter","value":"Value","rowLimit":"Row limit","running":"Running…","chartNamePlaceholder":"Chart name","save":"Save chart","saving":"Saving…","saved":"Chart saved","noData":"No data to display","secondDim":"Second dimension","valueColumn":"Value column","lineSeries":"Line series","options":"Options","stacked":"Stacked","normalized":"100%","horizontal":"Horizontal","smooth":"Smooth","showPoints":"Points","showValues":"Values","showLegend":"Legend","showGrid":"Grid","format":"Format","fmtNumber":"Number","fmtCurrency":"Currency","fmtPercent":"Percent","currencyCode":"Currency code","sort":"Sort","sortNone":"Default","sortValueDesc":"Value (high → low)","sortValueAsc":"Value (low → high)","sortCategory":"Category (A → Z)","gaugeMin":"Min","gaugeMax":"Max","gaugeTarget":"Target","scatterHint":"1st metric = X axis, 2nd = Y axis, 3rd = bubble size.","boxplotHint":"Distribution of raw values per group (quartiles + outliers).","pivotRow2":"Second row","pivotColumn":"Columns","pivotAsChart":"View as chart","viz":{"bar":"Bar","lollipop":"Lollipop","dumbbell":"Dumbbell","bullet":"Bullet","pareto":"Pareto","radial_bar":"Radial bar","line":"Line","spline":"Spline","step":"Step line","area":"Area","streamgraph":"Streamgraph","slope":"Slope","cycle_plot":"Cycle plot","calendar_heatmap":"Calendar heatmap","scatter":"Scatter","bubble":"Bubble","hexbin":"Hexbin","quadrant":"Quadrant","parallel_coordinates":"Parallel coordinates","pie":"Pie","donut":"Donut","semi_donut":"Semi-donut","rose":"Rose","horizon":"Horizon","heatmap":"Heatmap","treemap":"Treemap","sunburst":"Sunburst","icicle":"Icicle","marimekko":"Marimekko","funnel":"Funnel","sankey":"Sankey","alluvial":"Alluvial","chord":"Chord","arc":"Arc diagram","gauge":"Gauge","waterfall":"Waterfall","radar":"Radar","boxplot":"Box plot","violin":"Violin","ridgeline":"Ridgeline","beeswarm":"Beeswarm","density":"Density","ecdf":"ECDF","dot_strip":"Dot strip","histogram_cumulative":"Histogram + cumulative","population_pyramid":"Population pyramid","correlation_matrix":"Correlation matrix","splom":"Scatter matrix","day_hour_heatmap":"Day × hour heatmap","heat_table":"Heat table","pivot":"Pivot","big_number":"Big number","table":"Table","scatter_3d":"3D scatter","surface_3d":"3D surface","bar_3d":"3D bar grid","pie_3d":"3D pie","play_scatter":"Play-axis scatter","bar_race":"Bar race"},"aggs":{"SUM":"Sum","AVG":"Average","MIN":"Min","MAX":"Max","COUNT":"Count","COUNT_DISTINCT":"Distinct"},"ops":{"eq":"=","neq":"≠","gt":">","gte":"≥","lt":"<","lte":"≤","like":"contains","in":"in (comma-sep)","is_null":"is empty","not_null":"is not empty"}},"chartGallery":{"title":"Chart gallery","search":"Search charts","recommended":"Recommended for your data","all":"All","coming":"Coming","expert":"Expert-only","preview":"Preview","previewEmpty":"Select a chart to preview it on your data.","previewComing":"This chart type is coming soon.","of":"of","noResults":"No charts match.","caveatLabel":"When it's the wrong choice","families":{"kpi":"KPI","comparison":"Comparison","trend":"Trend","partOfWhole":"Part of a whole","distribution":"Distribution","correlation":"Correlation","tabular":"Table"}},"chartEditor":{"simple":"Simple","standard":"Standard","expert":"Expert","resetToSimple":"Reset to Simple","searchOptions":"Search options","question":"What do you want to know?","questions":{"trend":"How is this trending?","rank":"Who has the most?","share":"What share is each?","target":"Are we on target?","relate":"How are these related?","oneNumber":"What's the one number?"},"chartLabel":"Chart","changeChart":"Change chart","titleLabel":"Title","titlePlaceholder":"Untitled chart","sections":{"data":"Data","colour":"Colour","shape":"Shape","shading":"Shading","labels":"Labels","font":"Font","background":"Background","axes":"Axes & legend","interaction":"Interaction"},"comingNote":"Coming — not editable in this rail yet.","customColour":"Custom colour","cvdMeasured":"Colour-blind separation","contrastMeasured":"Contrast vs surface","nearestStep":"Nearest passing step","applyStep":"Apply","keepAnyway":"Keep anyway","keepAnywayNote":"Kept below target — pair it with data labels or the table view so colour is not the only cue. Logged on the theme report.","reliefRequired":"Legal only with a secondary encoding (data labels or the table view).","forbiddenTitle":"Not available — here's the honest version","resetOption":"Reset","target":"target"},"styleThemes":{"title":"Chart theme","hint":"Pick a saved theme for your Insights charts. Themes are stored with the accessibility report they were measured against.","scopeNote":"One Boards and dashboard widgets keep the built-in palette.","loading":"Loading themes…","unavailable":"Chart themes are not available for your account.","empty":"No themes yet.","activeLabel":"Active","builtIn":"Built-in palette","sourceOrg":"organisation default","sourceUser":"your override","starter":"Starter","active":"Active","version":"v","modeLight":"Light","modeDark":"Dark","apply":"Use","useBuiltIn":"Use built-in","cancel":"Cancel","clearConfirm":"Go back to the built-in palette?","clearNote":"Your override is removed; the organisation default applies if one is set.","clearConfirmLabel":"Use built-in","appliedToast":"Theme applied.","clearedToast":"Back to the built-in palette.","reportPass":"Passes all checks","reportWarn":"Passes with a relief","reportFail":"Fails a check","failBlocked":"This theme fails an accessibility check and cannot be used.","errScopeForbidden":"You do not have permission to change that.","errFailedValidation":"That theme fails an accessibility check and cannot be used.","errGeneric":"Could not update the theme."},"connections":{"title":"Data connections","subtitle":"Every database Insights can chart — rename, test, and add sources.","add":"Add connection","name":"Name","engine":"Engine","source":"Source","datasets":"Datasets","lastTest":"Last test","actions":"Actions","test":"Test","testing":"Testing…","rename":"Rename","edit":"Edit","remove":"Delete","neverTested":"Never tested","testOk":"Healthy","testFailed":"Failed","aliasPlaceholder":"Display name…","save":"Save","cancel":"Cancel","agentBadge":"Office (agent)","cloudBadge":"Cloud","agentDown":"Connector agent unreachable:","agentNotConfigured":"The office connector agent is not configured — only cloud connections are listed.","sourceName":"source","confirmDelete":"Delete this connection? Datasets built on it will stop running.","stages":{"dns":"DNS","tcp":"TCP","auth":"Login","query":"Query","permissions":"Read access","tunnel":"Agent tunnel"},"form":{"titleNew":"New cloud connection","titleEdit":"Edit connection","name":"Name","description":"Description","engine":"Engine","host":"Host","port":"Port","database":"Database","username":"Username","password":"Password","passwordKeep":"Leave empty to keep the current password","ssl":"SSL","sslRequire":"Require (encrypt, no cert check)","sslVerify":"Verify (encrypt + check certificate)","sslDisable":"Disable (local only)","sslCaLabel":"CA certificate (PEM, optional)","sslCaPlaceholder":"Paste a PEM CA only if the server uses a private CA","sslCaKeep":"Leave empty to keep the stored CA","create":"Create connection","saveChanges":"Save changes","saving":"Saving…"}},"chartAnalytics":{"forecast":"Forecast","forecastOff":"Off","forecastPeriods":"{n} periods","highlightAnomalies":"Highlight anomalies","splitBy":"Split by","forecastNote":"Forecast · ±95% band","anomalyNote":"Anomaly — outside the expected range","moreNote":"+{n} more","ofTotal":"of total","comboMigratedNote":"This chart used two y-scales; it now renders as two aligned panels.","learnMore":"Learn more","comboMigratedWhy":"Two independent y-axes can imply a correlation the data does not support, so dual-axis charts now render as aligned panels that share one category axis."},"chartScene":{"resetView":"Reset view","orbitHint":"Drag to orbit · scroll to zoom","showTable":"Show data table","hideTable":"Hide data table","tableTwinLabel":"Chart data as a table","tableCategory":"Category","tableTruncated":"Showing the first {n} rows.","fallbackNoWebgl":"This device cannot draw 3D charts.","fallbackReducedMotion":"Reduced motion is on, so the 3D camera is off.","fallbackTooSmall":"There is not enough data for a readable 3D scene.","fallbackContextLost":"3D drawing stopped unexpectedly.","surfaceInterpolated":"{n} gaps bridged from neighbouring cells — those points are estimates.","otherGroup":"Other","play":"Play","pause":"Pause","restart":"Restart","previousFrame":"Previous frame","nextFrame":"Next frame","speed":"Speed","frameSlider":"Time frame","trails":"Trails","reducedMotionStepper":"Reduced motion is on — step through the frames yourself.","needsThreeMetrics":"This chart needs three number columns — one per axis.","needsTwoFrames":"This chart needs at least two time periods to play."},"dataOps":{"scheduleTitle":"Refresh schedule","scheduleHint":"Queries always hit the source live; the schedule runs a health probe on the source and stamps the dataset as refreshed — hourly, or daily at a fixed UTC hour.","boardLive":"This dataset reads its board live on every chart — there is nothing to refresh.","cadenceLabel":"Cadence","cadenceManual":"Manual","cadenceHourly":"Hourly","cadenceDaily":"Daily","hourLabel":"At","saveSchedule":"Save schedule","saving":"Saving…","scheduleSaved":"Schedule saved.","refreshNow":"Refresh now","refreshing":"Refreshing…","probeOk":"Source verified — {rows} rows counted in {ms}ms.","lastRefreshed":"Last refreshed","never":"never","lineageTitle":"Lineage","lineageIntro":"How data flows through Insights: connections and boards feed datasets, datasets feed charts, charts land on dashboards. Hover a node to trace its full path; click it to see everything it affects.","lineageEmpty":"Nothing to map yet — create a dataset to start the graph.","colSources":"Sources","colDatasets":"Datasets","colCharts":"Charts","colDashboards":"Dashboards","openObject":"Open","closePanel":"Close","impactSummary":"Editing this affects {datasets} datasets, {charts} charts and {dashboards} dashboards downstream.","impactNone":"Nothing depends on this object.","impactHint":"Select a node to see its downstream impact.","usageTitle":"Usage analytics","usageIntro":"Observability over the BI layer: query volume and latency per dataset from the audit log, error rates, the slowest queries, AI generation spend and stale dashboards.","colDataset":"Dataset","queries30":"Queries (30d)","queries7":"Queries (7d)","day":"Day","successRuns":"Successful","errorRuns":"Errors","errorRate":"Error rate","topDatasets":"Top datasets by query volume","dailyVolume":"Daily query volume (30d)","datasetStats":"Per-dataset performance (30d)","lastRun":"Last run","slowestQueries":"Slowest queries (30d)","duration":"Duration","statusCol":"Status","when":"When","noUsage":"No activity recorded yet.","aiSpend":"AI generation spend (30d)","aiByModel":"AI spend by model (30d)","model":"Model","aiGenerations":"Generations","aiTokens":"Tokens","aiCost":"Cost","staleDashboards":"Stale AI dashboards","noStaleDashboards":"No AI dashboards yet.","widgetsSuffix":"widgets","lastUpdated":"updated"},"governance":{"certifiedBadge":"Certified","certify":"Certify","uncertify":"Remove certification","certifiedHint":"Certified by an Insights admin — trusted for reporting.","searchPlaceholder":"Search datasets and charts…","searchButton":"Search","clearSearch":"Clear","chartsTitle":"Charts","noSearchResults":"Nothing matches your search.","favorites":"Favorites","favoriteAdd":"Add to favorites","favoriteRemove":"Remove from favorites","collections":"Collections","collectionsIntro":"Your folders of datasets, charts and dashboards.","newCollectionPlaceholder":"New collection name…","createCollection":"Create","deleteCollection":"Delete collection","confirmDeleteCollection":"Delete this collection? Its items are not affected.","emptyCollection":"No items yet — add one below.","addItem":"Add","pickItem":"Add to this collection…","removeItem":"Remove","noCollections":"No collections yet. Create one to organize your BI objects.","itemGone":"(no longer available)","typeDataset":"Dataset","typeChart":"Chart","typeDashboard":"Dashboard","rls":{"title":"Row-level security","intro":"Filter policies applied automatically to every query a matching user runs on this dataset (ANDed onto their filters). A policy with no subject applies to everyone; if policies cannot be evaluated the query is refused (fail closed).","empty":"No policies — everyone sees all rows.","subject":"Applies to","everyone":"Everyone","role":"Role","user":"User","rolePlaceholder":"Choose a role…","userPlaceholder":"Search users by name or email…","userNoMatches":"No users match.","filtersLabel":"Filters","addFilter":"Add filter","addPolicy":"Add policy","adding":"Adding…","remove":"Remove","column":"Column","value":"Value","needFilter":"Add at least one complete filter row.","unknownSubject":"(deleted)"},"activity":{"title":"Insights activity","subtitle":"Audit log of dataset, chart, dashboard, connection and security changes.","action":"Action","allActions":"All actions","userFilter":"User","userPlaceholder":"Email or name…","from":"From","to":"To","filter":"Filter","reset":"Reset","when":"When","who":"Who","object":"Object","detail":"Detail","system":"System","empty":"No activity recorded yet.","limitNote":"Newest 200 entries shown."}},"semantics":{"columnsTitle":"Columns & data dictionary","columnsSubtitle":"Describe each column — descriptions appear as tooltips in every chart builder.","colColumn":"Column","colKind":"Kind","colType":"Type","colDescription":"Description","descriptionPlaceholder":"Describe this column…","saveDescription":"Save","calcBadge":"Calculated","sharedBadge":"Shared metric","remove":"Remove","confirmRemoveField":"Remove this calculated column? Charts using it will stop running.","addCalcTitle":"Add calculated field","addCalcHint":"Arithmetic, ROUND, ABS, COALESCE and CASE WHEN over columns referenced in [brackets], e.g.","fieldName":"Name","fieldKind":"Kind","kindDimension":"Dimension","kindMetric":"Metric","expression":"Expression","expressionPlaceholder":"([price] - [cost]) / [price]","metricExpressionPlaceholder":"SUM([revenue]) / COUNT([order_id])","create":"Validate & add","validating":"Validating…","sharedTitle":"Shared metrics","sharedSubtitle":"Define a metric once — every report builder offers it from the “Shared metrics” group. Certified metrics are reviewed, blessed definitions.","sharedEmpty":"No shared metrics yet. Define one below.","sharedName":"Metric name (e.g. Revenue)","sharedDescription":"Description (optional)","sharedFormat":"Format","fmtNumber":"Number","fmtCurrency":"Currency","fmtPercent":"Percent","certified":"Certified","certify":"Certify","uncertify":"Remove certification","sharedCreate":"Validate & create","confirmRemoveMetric":"Delete this shared metric definition? Charts already using it keep working."},"params":{"title":"Query parameters","help":"Detected tokens run as typed, safely bound values — never pasted into the SQL. Set a default for every parameter.","type":"Type","typeText":"Text","typeNumber":"Number","typeDate":"Date","defaultValue":"Default value","panelTitle":"Parameters","whatIfTitle":"What-if","whatIfEnable":"Add a what-if slider","whatIfHelp":"Scale one metric with a slider at view time — scenario modeling without changing the data.","whatIfLabel":"Slider label","whatIfLabelPlaceholder":"e.g. Growth ×","whatIfMetric":"Applies to","whatIfMin":"Min","whatIfMax":"Max","whatIfStep":"Step","whatIfDefault":"Default"},"timeIntel":{"grain":"Time grain","grainNone":"None","grains":{"day":"Day","week":"Week","month":"Month","quarter":"Quarter","year":"Year"},"rolling":"Rolling average","rollingOff":"Off","showDelta":"Show Δ vs previous","topN":"Top N","topNHint":"Keeps the N largest categories; the rest roll into “Other”.","othersLabel":"Other","bins":"Histogram bins","binsHint":"Distribution of raw values in equal-width bins."},"chartFormatting":{"conditionalColors":"Conditional colors","addRule":"Add rule","allMetrics":"All metrics","ruleValue":"Threshold","referenceLines":"Reference lines","addReferenceLine":"Add reference line","refValue":"Value","refLabel":"Label (optional)","bandTo":"Band to (optional)","seriesColors":"Series colors","resetColor":"Reset to palette color","remove":"Remove","annotate":"Annotate","annotationsTitle":"Chart annotations","annotationsHint":"Pin a note to a category on this chart — it shows as a marker with the note in its tooltip.","annotationCategory":"Category","annotationText":"Note","annotationColor":"Color","addAnnotation":"Add annotation","noAnnotations":"No annotations on this widget yet.","noCategories":"This widget has no categories to annotate.","deleteAnnotation":"Delete annotation"},"distribution":{"title":"Share","close":"Close","anyoneWithLink":"Anyone with a link can view this dashboard — no sign-in required.","linksSection":"Share links","modeView":"View link","modeEmbed":"Embed link","expiryNever":"Never expires","expiry7":"Expires in 7 days","expiry30":"Expires in 30 days","expiry90":"Expires in 90 days","createLink":"Create link","loading":"Loading…","noLinks":"No share links yet.","revoked":"Revoked","expired":"Expired","expires":"expires","copy":"Copy","copied":"Copied","copyLink":"Copy public URL","copyEmbed":"Copy iframe snippet","copyFailed":"Could not copy to the clipboard.","revoke":"Revoke link","scheduleSection":"Email this dashboard","scheduleHint":"Sends each recipient a notification + email with the dashboard link on the schedule. Leave recipients empty to send it to yourself.","cadenceDaily":"Daily","cadenceWeekly":"Weekly","cadenceMonthly":"Monthly (day 1)","recipientsFilter":"Filter people…","noPeople":"No people match.","subscribeMe":"Email me on this schedule","createSchedule":"Create schedule","lastSent":"last sent","recipientCount":"{n} recipient(s)","deleteSchedule":"Delete schedule","sun":"Sunday","mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday","pdfFollowUp":"v1 delivers the dashboard link. PDF/PNG snapshot attachments are a planned follow-up.","publicBadge":"Shared view — anyone with the link","publicPoweredBy":"Powered by Redsis One","publicEmpty":"This dashboard has no shareable content.","publicFootnote":"Read-only shared view. Data reflects the moment this page loaded.","publicInactiveTitle":"This link is no longer active","publicInactiveBody":"The share link was revoked or has expired. Ask the dashboard owner for a new link.","publicRateLimitedTitle":"Too many requests","publicRateLimitedBody":"This shared dashboard is being requested too often. Wait a minute and reload.","alertsSection":"Alerts","alertSaveFirst":"Save the chart first — alerts attach to saved charts.","alertHint":"Get notified (in-app + email) when this metric crosses a threshold. Checked every 15 minutes.","alertNamePlaceholder":"Alert name","alertAbove":"goes above","alertBelow":"drops below","alertCooldown":"Cooldown between alerts","cooldown1h":"Max once an hour","cooldown4h":"Max once every 4h","cooldown24h":"Max once a day","alertCreate":"Add alert","alertDelete":"Delete alert","alertLastFired":"last fired","alertValidation":"Give the alert a name and a numeric threshold."},"dashboardShell":{"page":"Page","addPage":"Add page","renamePage":"Rename page","deletePage":"Delete page","deletePageConfirm":"Delete this page? Its widgets move to the first page.","moveToPage":"Move to page","theme":"Theme","themeDefault":"Template default","redsisBrand":"Redsis brand","accent":"Accent color","resetAccent":"Reset accent","mobile":"Mobile","mobileTitle":"Mobile layout","mobileHint":"Phones stack widgets top to bottom in this order. KPI tiles pair two-up; hidden widgets don’t show on phones.","moveUp":"Move up","moveDown":"Move down","hideOnMobile":"Hide on mobile","showOnMobile":"Show on mobile","present":"Present","exit":"Exit","rotation":"Rotate pages","rotationOff":"Off","close":"Close"},"interactions":{"crossFilterPrefix":"Filtered:","clearFilter":"Clear filter","drillRoot":"All","drillUp":"Up one level","underlyingRows":"View underlying rows","underlyingTitle":"Underlying rows","rowsSuffix":"rows","exportCsv":"Export CSV","loading":"Loading…","close":"Close","queryFailed":"Could not load rows","noRows":"No matching rows","hintCrossFilter":"Click a mark to filter the other widgets · Shift-click for the rows behind it","hintDrill":"Click a mark to drill down · Alt-click to cross-filter · Shift-click for rows","hierarchies":{"title":"Drill-down hierarchies","subtitle":"Ordered coarse→fine column paths (e.g. Year → Quarter → Month). On charts built from this dataset, clicking a category drills to the next level.","empty":"No hierarchies yet. Add one to enable click-to-drill on charts.","add":"Add hierarchy","namePlaceholder":"Hierarchy name (e.g. Geography)","pickColumn":"Add a level…","remove":"Remove","moveUp":"Move up","moveDown":"Move down","save":"Save hierarchies","saving":"Saving…","saved":"Hierarchies saved","levelsHint":"Coarse first, fine last — at least two levels."}},"collab":{"comments":{"button":"Comments","title":"Widget comments"},"history":{"button":"History","title":"Version history","intro":"Checkpoints are saved automatically while you edit (at most one every 10 minutes). Restoring brings the dashboard back to a saved state — widgets it lacks are archived, never deleted.","saveLabelPlaceholder":"Label this version…","save":"Save version","saving":"Saving…","autoLabel":"Auto checkpoint","beforeRestoreLabel":"Before restore","layoutBadge":"Layout","dataBadge":"Data","widgetsSuffix":"widgets","restore":"Restore","restoring":"Restoring…","restoreConfirm":"Restore this version? Current widgets it lacks will be archived (restorable from the Archive tray).","viewSnapshot":"View snapshot","empty":"No versions yet — they are saved automatically as you edit.","compare":"Compare to current","diffAdded":"added since","diffRemoved":"removed since","diffChanged":"changed since","diffIdentical":"Identical to the current dashboard.","error":"Something went wrong."},"snapshots":{"take":"Snapshot data now","taking":"Snapshotting…","taken":"Data snapshot saved.","banner":"Snapshot of","exit":"Back to live","notCaptured":"Not captured in this snapshot."},"templates":{"saveButton":"Save as template","panelTitle":"Save as a template","panelIntro":"Publishes this dashboard layout (and copies of its chart definitions) to the org template gallery.","nameLabel":"Template name","namePlaceholder":"e.g. Sales weekly review","descriptionLabel":"Description","save":"Save template","saving":"Saving…","saved":"Template saved to the gallery.","galleryTitle":"Dashboard templates","galleryIntro":"Reusable dashboards saved by your team. Using a template creates a brand-new dashboard with independent copies of every chart.","use":"Use template","creating":"Creating…","empty":"No templates yet — open a dashboard, enter Edit and choose \"Save as template\".","workspaceLabel":"Workspace","newNameLabel":"New dashboard name","newNamePlaceholder":"Defaults to the template name","widgetsSuffix":"widgets","openGallery":"Templates","by":"by"},"export":{"menu":"Export","csv":"Download CSV","png":"Download PNG","print":"Print / PDF","noData":"No data to export.","pngFailed":"Could not render this widget to PNG."},"print":{"print":"Print","close":"Close","hint":"Use your browser print dialog to save as PDF.","generated":"Generated"}},"ayva":{"ask":{"heroTitle":"Ask Ayva about your data","heroHint":"Plain-language question in, live chart out. Nothing is saved until you say so.","placeholder":"e.g. Which technician closed the most tickets this month?","allDatasets":"All my datasets","askButton":"Ask","asking":"Asking…","followUpHint":"Follow-ups keep the previous answer in mind.","clearContext":"New topic","answeredFrom":"From dataset","saveAsChart":"Save as chart","saving":"Saving…","savedToast":"Chart saved to its dataset.","chartNamePlaceholder":"Chart name…","addToDashboard":"Add to dashboard…","addButton":"Add","adding":"Adding…","addedToast":"Added to the dashboard.","pickDashboard":"Choose a dashboard…","noDashboards":"No dashboards you can edit yet.","error":"Ayva could not answer that.","askAyva":"Ask Ayva"},"explain":{"action":"Explain","title":"Explain this widget","loading":"Reading the data…","note":"Based only on the data currently shown.","empty":"No explanation returned.","close":"Close"},"summary":{"addButton":"Add AI summary","creating":"Creating…","placeholder":"AI summary — generating…","regenerate":"Regenerate summary","regenerating":"Summarizing…","title":"AI summary","badge":"AI"},"sql":{"assistTitle":"Ayva SQL assist","promptPlaceholder":"Describe the query — e.g. revenue by customer for 2026, top 20","generate":"Generate SQL","generating":"Generating…","explain":"Explain this SQL","explaining":"Explaining…","explanationTitle":"What this SQL does","pickConnection":"Pick a connection first.","needSql":"Write or generate SQL first."},"joins":{"suggest":"Suggest joins","suggesting":"Asking Ayva…","title":"Suggested joins","apply":"Add","needsTable":"Add one of these tables first","none":"No safe join suggestions for this schema.","confidence":"confidence"},"quality":{"button":"Quality scan","running":"Scanning…","title":"Data quality report","rows":"rows","column":"Column","nonNull":"Non-null","nulls":"Nulls","distinct":"Distinct","probeFailed":"probe failed","ruleFindings":"Rule-based findings","aiFindings":"Ayva findings","aiUnavailable":"Ayva narrative unavailable — showing deterministic stats only.","healthy":"No issues found by the rules.","skippedSuffix":"columns skipped (scan caps at 20)","close":"Close"},"doctor":{"button":"Doctor","running":"Examining…","title":"Dashboard doctor","widgets":"widgets","errorsLabel":"errors","emptyLabel":"empty","slowLabel":"slow","healthy":"Everything looks healthy.","fix":"Ask AI to fix","fixing":"Fixing…","aiUnavailable":"Ayva suggestions unavailable — showing rule-based findings.","severityHigh":"High","severityMedium":"Medium","severityLow":"Low","close":"Close","rescan":"Re-scan"}},"boardWidget":{"tab":"Insights AI","intro":"Ask Ayva to build a dashboard from this board — then pin it as a view of the board.","sources":"Data sources","sourceSelf":"This board","includeConnected":"Include connected boards ({n})","noConnected":"Nothing else is connected to this board yet. Connect-Board columns and installed apps add sources here automatically.","promptLabel":"What do you want to see?","promptPlaceholder":"e.g. Status overview, workload by owner, overdue items by group…","generate":"Generate dashboard","generating":"Ayva is building your dashboard…","generated":"Dashboard ready — pin it below.","generateFailed":"Generation failed","viewName":"View name","defaultViewName":"AI Dashboard","pin":"Pin as board view","pinning":"Pinning…","pinned":"Pinned — open the “{name}” view tab.","repinned":"View updated — “{name}”.","existing":"AI dashboards from this board","none":"No AI dashboards yet — generate the first one above.","open":"Open in Insights","disabled":"Insights AI for boards is turned off.","missing":"This dashboard no longer exists. Pin another one from the Insights AI panel."},"sources":{"connectTitle":"Connect a database","connectBody":"External Postgres and MySQL sources are connected in Data Studio (Connector & Data for on-prem, Connections for cloud) and appear here as dataset sources.","title":"Data connections","registryAgent":"Agent","registryCloud":"Cloud","datasetsSuffix":"datasets","browseTables":"Browse tables","manage":"Manage in Data Studio"},"chartTemplates":{"title":"Templates","subtitle":"Reusable charts, themes and dashboard layouts.","tierChart":"Chart templates","tierChartHint":"One chart’s options and the columns it needs.","tierTheme":"Themes","tierThemeHint":"Colours, fonts and chrome — applied to a whole dashboard.","tierDashboard":"Dashboard templates","tierDashboardHint":"A whole layout: containers, filter row and theme.","starterBadge":"Starter","empty":"No templates yet","emptyBody":"Save a chart or a dashboard as a template and it appears here.","usedBy":"Used by","usedByOne":"Used by 1 surface","usedByNone":"Not used yet","usedBySuffix":"surfaces","version":"Version","versionHistory":"Version history","versionCurrent":"Current","noChanges":"No changes","diffPaletteSlot":"palette slot","diffChanged":"changed","diffAxisFont":"axis font","diffOption":"option","diffAdded":"added","diffRemoved":"removed","diffLayout":"layout","diffContainers":"containers","updateTo":"Update to","scope":"Share","scopePrivate":"Private","scopePrivateHint":"Only you can see this.","scopeTeam":"Team","scopeTeamHint":"Everyone on your team can apply it.","scopeOrg":"Organization","scopeOrgHint":"Everyone in the organization can apply it.","scopeForbidden":"You need the Administer Insights permission to share beyond yourself.","saveAsTemplate":"Save as template…","saveChartTitle":"Save this chart as a template","saveDashboardTitle":"Save this dashboard as a template","nameLabel":"Name","namePlaceholder":"e.g. Weekly revenue trend","descriptionLabel":"Description","descriptionPlaceholder":"What is this for?","save":"Save template","saving":"Saving…","saved":"Template saved","requiresLabel":"This template will need","kindTemporal":"date","kindTemporalPlural":"dates","kindMetric":"number","kindMetricPlural":"numbers","kindDimension":"category","kindDimensionPlural":"categories","apply":"Apply","applying":"Applying…","applied":"Template applied","preview":"Preview","previewHint":"Hover a template to preview it here. Apply commits the change.","undo":"Undo","incompatibleTitle":"This board is missing some columns","incompatibleBody":"The template still applies — the binding section below opens with the missing kinds highlighted so you can choose the columns yourself.","missingKind":"Missing","missingNeeds":"needs","missingHas":"has","compatible":"Fits this board","rename":"Rename","duplicate":"Duplicate","archive":"Archive","archived":"Template archived","archiveConfirm":"Archive this template? It stops appearing in the picker. Nothing built from it changes.","setDefault":"Set as org default","isDefault":"Org default","cancel":"Cancel"}},"ayvaAttention":{"assign":"Assign to Ayva","openTicket":"Open a Redsis One Ticket","pickedUp":"Ayva picked this up","pickedUpDetail":"— she's on this item; ask her anything below."},"ayvaTalk":{"title":"Talk to Ayva","modelDefault":"Ayva","status":{"listening":"Listening","thinking":"Thinking","speaking":"Speaking","paused":"Paused","transcribing":"Transcribing"},"caption":{"prompt":"Ask me anything","interrupt":"Tap to interrupt","resume":"Tap to talk","ignoredOther":"Ignored another voice — listening for you"},"mode":{"idle":"Idle","thinking":"Thinking","speaking":"Speaking"},"controls":{"mute":"Mute","unmute":"Unmute","end":"End","switchToText":"Switch to text"},"unsupported":{"body":"Voice capture isn’t supported in this browser — try Chrome, Edge or Safari.","back":"Back to typing"}},"askAyvaBar":{"chatPlaceholder":"Ask Ayva anything…","chatAria":"Ask Ayva","tourPlaceholder":"Ask Ayva — e.g. “how do I change my password?”","tourAria":"Ask Ayva how to do something","tourNotSure":"Not sure exactly — did you mean one of these?","tourNotFound":"I couldn’t find that. Try a feature name like “announcements” or “password”.","tourNetwork":"Network hiccup — pick a suggestion below.","tourError":"Something went wrong. Please try again.","tourEmptyHint":"Type what you want to do — like “invite a user” or “exchange rates”.","micStop":"Stop dictation","micStart":"Dictate to Ayva","micListening":"Listening… click to stop","micSpeak":"Speak your question"},"ayvaRail":{"title":"Ayva","ask":"Ask Ayva","openFull":"Open full Ayva","chats":"Chats","hideChats":"Hide chats","newChat":"New chat","newFolder":"New folder","knowledge":"Knowledge — memory & documents","talkMode":"Talk to Ayva","back":"Back","close":"Close Ayva","locationLabel":"Your location","unavailable":"Ayva is unavailable right now.","loading":"Loading…","moduleOff":"Ayva isn’t turned on yet.","accountOff":"Ayva is turned off for your account.","searchChats":"Search chats","startFirstChat":"Start your first chat","noChatsMatch":"No chats match “{q}”.","pin":"Pin","unpin":"Unpin","rename":"Rename","delete":"Delete","deleteConfirm":"Delete?","widgetSubtitle":"Here’s where I can help right now.","widgetAsk":"Ask Ayva anything…","widgetOpen":"Open Ayva","quickFocus":"What should I focus on?","quickSummarize":"Summarize my day","quickBoard":"How do I create a board?","quickHelp":"What can you help with?"},"ayvaKnowledge":{"title":"Ayva Knowledge","description":"Everything you’ve asked Ayva to remember — facts, notes, documents and board notes — plus the knowledge your team has shared with you.","tabs":{"all":"All","facts":"Facts","documents":"Documents","vault":"Vault","board":"Board notes","shared":"Shared"},"yourKnowledge":"Your knowledge","sharedWithYou":"Shared with you","source":"Source","sourceChat":"You told Ayva","captured":"Captured","landedOn":"Landed on","filtersAria":"Knowledge filters","search":{"placeholder":"Search your knowledge…","aria":"Search Ayva knowledge","clear":"Clear search","noResults":"No matches for “{query}”.","clearAndSee":"Clear the search to see everything."},"emptyTab":{"title":"Nothing here yet","hint":"Tell Ayva to “remember…” or “save this,” and it’ll show up here."},"emptyShared":"No team or company knowledge has been shared with you yet.","onboarding":{"title":"Ayva hasn’t learned anything from you yet","body":"Tell her something to remember in any chat, and it shows up here — with the source, when she learned it, and where it landed. You can edit or forget anything, any time.","examplesTitle":"Try saying…","example1":"“Remember that our Q3 kickoff is August 4th.”","example2":"“Save this as a note for the team: …”","example3":"“Add this to the Redsis board.”","example4":"“Share this with the whole company: …”","cta":"Open Ayva"},"badge":{"fact":"Fact","document":"Document","vault":"Vault","board":"Board","shared":"Shared"},"actions":{"edit":"Edit","forget":"Forget","rescope":"Re-scope","cancel":"Cancel","save":"Save","saving":"Saving…","open":"Open"},"edit":{"titleLabel":"Title","contentLabel":"Content","contentLockedDocument":"Document content can’t be edited in place — forget this and save it again to change it.","contentLockedBoard":"This note lives in the board’s own text. Renaming here only relabels it in your list — open the board to change the actual text."},"forget":{"confirm":"Forget this? Ayva will no longer know it.","confirmButton":"Forget it","forgetting":"Forgetting…","boardNote":"Removed from your list. The note is still in the board’s About text — open the board to edit or remove it there."},"pendingApproval":{"title":"Waiting for your approval","description":"New company-wide knowledge goes live only after an admin approves it.","approve":"Approve","reject":"Reject","changed":"This item changed or was already decided. Check what is there now."},"rescope":{"title":"Who can see this","company":"Whole company","department":"Department","team":"Team","pickOne":"Choose one","unsupported":"This kind of entry can’t be re-scoped.","promoted":"Shared — this is now visible to others.","applying":"Updating…"},"errors":{"generic":"Something went wrong. Try again."}},"boardApprovals":{"tab":"Approvals","empty":"No approvals on this item yet.","request":"Request approval","requestTitle":"New approval request","titleLabel":"Title","titlePlaceholder":"What needs approval?","noteLabel":"Note (optional)","approversLabel":"Approvers","addApprover":"Add approver","ruleLabel":"Decision rule","ruleUnanimous":"Everyone must approve","ruleAnyOne":"Any one approves","ruleNofM":"A set number approve","thresholdLabel":"Approvals needed","sequentialLabel":"Ask approvers in order (one at a time)","allowSelfLabel":"Allow me to approve my own request","mirrorColumnLabel":"Also set a status column","mirrorNone":"Don’t set a column","dueLabel":"Due date (optional)","linkProofLabel":"Approve a specific proof version (optional)","submit":"Send request","submitting":"Sending…","cancel":"Cancel","cancelRequest":"Cancel request","reopen":"Re-open","approve":"Approve","reject":"Reject","requestChanges":"Request changes","decisionComment":"Add a comment (optional)","yourTurn":"Your decision is needed","waiting":"Waiting for their turn","requestedBy":"Requested by {name}","roundLabel":"Round {n}","auditTrail":"Audit trail","state_pending":"Pending","state_approved":"Approved","state_rejected":"Rejected","state_changes_requested":"Changes requested","state_cancelled":"Cancelled","decision_pending":"Pending","decision_approve":"Approved","decision_reject":"Rejected","decision_request_changes":"Requested changes","event_requested":"requested approval","event_approve":"approved","event_reject":"rejected","event_request_changes":"requested changes","event_reopened":"re-opened the request","event_cancelled":"cancelled the request","close":"Close","errorGeneric":"Could not complete that action.","needApprover":"Add at least one approver."},"requestCenter":{"pageEyebrow":"My Hub","pageTitle":"Requests","pageDescription":"Every company request you opened, and where it is right now.","newRequest":"New request","zoneTitle":"My requests","zoneActive":"active","zoneAwaitingMe":"waiting on me","zoneDrafts":"drafts","tabActive":"Active","tabDrafts":"Drafts","tabCompleted":"Completed","tabAll":"All","colRequest":"Request","colType":"Type","colStatus":"Status","colWaitingOn":"Waiting on","colAmount":"Amount","colNeededBy":"Needed by","colUpdated":"Updated","colRequester":"Requester","searchPlaceholder":"Search by number, title or type","filterAllTypes":"All types","filterAllStatuses":"All statuses","exportCsv":"Export CSV","emptyTitle":"No requests yet","emptyBody":"Ask for what you need — a purchase, equipment, a letter, an advance, a trip. It goes straight to the right approver.","emptyDraftsTitle":"No drafts","emptyCompletedTitle":"Nothing completed yet","emptyFilteredTitle":"Nothing matches","providerUnavailable":"Some sources could not be loaded right now: {sources}.","overdue":"Overdue","waitingOnYou":"you","waitingOnApprover":"approver","waitingOnFulfillment":"fulfilment","statusDraft":"Draft","statusInReview":"In review","statusNeedsCorrection":"Needs changes","statusApproved":"Approved","statusInFulfillment":"In progress","statusFulfilled":"Ready","statusClosed":"Closed","statusRejected":"Rejected","statusCancelled":"Cancelled","catalogTitle":"What do you need?","catalogDescription":"Pick a request type. You will see who approves it and how long it usually takes before you start.","catalogStart":"Start","catalogTypicalDays":"~{days} business days","catalogApprovedBy":"Approved by","catalogOpensIn":"Opens in its own module","categoryTravel":"Travel","categoryHr":"People & HR","categoryFinance":"Finance","categoryIt":"IT & systems","categoryProcurement":"Purchasing","categoryGeneral":"Other","formTitle":"New {type}","formSaveDraft":"Save draft","formSubmit":"Submit for approval","formSubmitting":"Submitting…","formSaving":"Saving…","formDraftSaved":"Draft saved","formRoutingTitle":"Who will approve this","formRoutingLoading":"Working out the approval route…","formRoutingNone":"No approver could be resolved yet — an administrator will be assigned when you submit.","formRoutingStep":"Step {n}","formRoutingUnresolved":"nobody yet","formOnBehalf":"On behalf of","formOnBehalfHelp":"Leave empty when the request is for you.","formOnBehalfSelf":"Myself","formEntity":"Company (legal entity)","formDepartment":"Department","formPriority":"Priority","formNeededBy":"Needed by","formAttachments":"Attachments","formAttach":"Add file","formUploading":"Uploading…","formRequired":"Required","formFixIssues":"Please fix the highlighted fields.","formOptional":"Optional","priorityLow":"Low","priorityNormal":"Normal","priorityHigh":"High","priorityUrgent":"Urgent","formCurrency":"Currency","formAmount":"Amount","formSelectPlaceholder":"Choose…","formUserPlaceholder":"Search a person…","formDateFrom":"From","formDateTo":"To","formNone":"None","formYes":"Yes","formNo":"No","recordBack":"All requests","recordRequester":"Requester","recordOnBehalf":"For","recordEntity":"Company","recordDepartment":"Department","recordAmount":"Amount","recordUsdEquivalent":"USD equivalent","recordFxPending":"FX rate pending","recordNeededBy":"Needed by","recordPriority":"Priority","recordSubmitted":"Submitted","recordDetails":"Details","recordChain":"Approval chain","recordChainNone":"The approval chain is built when the request is submitted.","recordTimeline":"Timeline","recordAttachments":"Attachments","recordNoAttachments":"No attachments.","recordComment":"Add a comment","recordCommentPlaceholder":"Write a note for the requester or the approvers…","recordPost":"Post","recordNotFound":"This request does not exist or you cannot see it.","recordSla":"Due","recordFxRate":"Rate {rate} ({source}, {date})","actionSubmit":"Submit for approval","actionEdit":"Edit","actionCancel":"Cancel request","actionResubmit":"Resubmit","actionApprove":"Approve","actionReject":"Reject","actionRequestChanges":"Request changes","actionStartFulfillment":"Start working on it","actionFulfil":"Mark as fulfilled","actionClose":"Close","actionUpload":"Upload","panelRejectTitle":"Reject request","panelChangesTitle":"Request changes","panelCancelTitle":"Cancel request","panelFulfilTitle":"Mark as fulfilled","panelReason":"Reason","panelNote":"Note (optional)","panelReasonRequired":"A reason is required.","panelConfirm":"Confirm","panelClose":"Back","stepPending":"Pending","stepActive":"Active","stepApproved":"Approved","stepRejected":"Rejected","stepChangesRequested":"Changes requested","stepSkipped":"Skipped","decisionPending":"pending","decisionApproved":"approved","decisionRejected":"rejected","decisionChangesRequested":"asked for changes","viaDelegate":"delegate for {name}","ruleAnyOne":"any one approves","ruleUnanimous":"everyone must approve","ruleNOfM":"{n} approvals needed","eventCreated":"created the request","eventSubmitted":"submitted for approval","eventResubmitted":"resubmitted with changes","eventStepActivated":"step {n} activated: {label}","eventApprovedStep":"approved","eventApproved":"final approval — request approved","eventRejected":"rejected","eventRequestChanges":"requested changes","eventCancelled":"cancelled the request","eventFulfillmentStarted":"started working on it","eventFulfilled":"marked it fulfilled","eventClosed":"closed the request","eventComment":"commented","eventAttachmentAdded":"attached a file","eventReminderSent":"reminder sent to the pending approvers","eventEscalated":"escalated","eventHelpdeskTicketCreated":"opened a Helpdesk ticket","eventHelpdeskTicketFailed":"could not open a Helpdesk ticket","eventGeneric":"event: {kind}","eventSystem":"System","teamTitle":"Team requests","teamDescription":"Requests from the people who report to you and from your department.","teamEmpty":"Nobody on your team has an open request.","fulfillmentTitle":"Fulfilment queue","fulfillmentDescription":"Approved requests waiting for your team to deliver.","fulfillmentEmpty":"Nothing to fulfil right now.","insightsTitle":"Request insights","insightsDescription":"Volumes, cycle times and spend across every entity.","insightsTotal":"Total requests","insightsOpen":"Open","insightsOverdue":"Overdue","insightsSpend90":"Approved spend, last 90 days (USD)","insightsByType":"By type","insightsByEntity":"By company","insightsByStatus":"By status","insightsCycle":"Submit → decision, median hours","insightsStepTimes":"Time in each approval step, median hours","insightsMedianHours":"Median hours","insightsDecided":"Decided","insightsCount":"Count","insightsUsd":"USD","insightsFxPending":"requests waiting for an FX rate","insightsNoData":"No data yet.","settingsTitle":"Request Center settings","settingsDescription":"Request types, approval routing, delegations and the manager import.","settingsTypes":"Request types","settingsRules":"Routing rules","settingsDelegations":"Delegations","settingsManagers":"Manager import","typesTitle":"Request types","typesDescription":"What people can ask for, the form they fill in, who fulfils it and the SLA.","typeKey":"Key","typeName":"Name","typeCategory":"Category","typeProvider":"Where it lives","typeProviderEngine":"Request Center","typeActive":"Active","typeInactive":"Inactive","typeSla":"SLA (hours)","typeFulfillment":"Fulfilled by (capability)","typeEntities":"Available in","typeEntitiesAll":"All companies","typeFields":"Form fields","typeSave":"Save type","typeSaved":"Type saved","typeNew":"New type","typeArchive":"Archive","typeFormJson":"Form definition (JSON)","typeFormJsonHelp":"An ordered list of fields: key, type (text, textarea, number, money, date, date_range, select, multiselect, user, department, entity, checkbox, email, url, file, section), label {en, es, pt}, required, options.","typeFormJsonInvalid":"The form definition is not valid JSON or has an invalid field.","typeRequiresAmount":"Requires an amount","typeHelpdeskQueue":"Helpdesk queue id (opens a ticket on submit)","typeTypicalDays":"Typical turnaround (business days)","typeDescription":"Description","typeIcon":"Icon (lucide name)","rulesTitle":"Approval routing","rulesDescription":"Who approves what. The highest-priority rule that matches the type, company and amount wins; a step that resolves to nobody falls back to the designated approver, the department head, the entity head, then the approver pool.","ruleName":"Rule name","ruleType":"Request type","ruleTypeAll":"Every type","ruleEntity":"Company","ruleEntityAll":"Every company","ruleAmountMin":"From amount (USD)","ruleAmountMax":"Up to amount (USD)","rulePriority":"Priority (higher wins)","ruleSteps":"Steps, in order","ruleStepKind":"Who","ruleStepLabel":"Label","ruleStepRule":"Decision rule","ruleStepMinAmount":"Only from amount (USD)","ruleStepSla":"Step SLA (hours)","ruleStepCapability":"Capability","ruleStepUser":"User id","ruleStepLevels":"Levels up","ruleAddStep":"Add step","ruleRemoveStep":"Remove","ruleSave":"Save rule","ruleSaved":"Rule saved","ruleNew":"New rule","ruleArchive":"Archive","ruleActive":"Active","ruleEdit":"Edit","ruleTestTitle":"Test a route","ruleTestDescription":"See exactly who would approve a request for a given person, type and amount.","ruleTestUser":"Requester","ruleTestType":"Type","ruleTestAmount":"Amount (USD)","ruleTestRun":"Preview route","ruleTestResult":"Resolved route","ruleTestRule":"Matched rule","ruleTestNoRule":"No rule matched — company default applied.","kindManager":"Direct manager","kindManagerChain":"Manager's manager (N levels up)","kindDeptHead":"Department head","kindEntityHead":"Company (entity) head","kindCapability":"Anyone with a capability","kindUser":"A named person","delegationsTitle":"Delegations","delegationsDescription":"Cover an approver while they are away: the delegate sees and decides their items, recorded as a delegated decision.","delegationFrom":"Approver","delegationTo":"Delegate","delegationType":"Request type","delegationTypeAll":"Every type","delegationUntil":"Until","delegationReason":"Reason","delegationAdd":"Add delegation","delegationRevoke":"Revoke","delegationNone":"No active delegations.","delegationOpenEnded":"open-ended","myDelegationsTitle":"My delegations","myDelegationsDescription":"Let someone decide on your behalf while you are out.","managersTitle":"Manager import","managersDescription":"Approval routing starts with the direct manager. Pull managers from Microsoft 365 for everyone who has none.","managersCoverage":"{with} of {total} people have a manager set.","managersPreview":"Preview from Microsoft 365","managersPreviewing":"Reading Microsoft 365…","managersApply":"Apply {n} changes","managersOverwrite":"Also replace managers that differ from Microsoft 365","managersNotConfigured":"Microsoft 365 is not configured on this platform, so nothing can be imported.","managersColPerson":"Person","managersColCurrent":"Current manager","managersColGraph":"Microsoft 365 manager","managersColAction":"Action","managersActionSet":"Set","managersActionChange":"Change","managersActionKeep":"Already correct","managersActionNoManager":"No manager in Microsoft 365","managersActionNotInPortal":"Manager not in Redsis One","managersActionError":"Error","managersApplied":"{n} managers updated.","managersNoChanges":"Nothing to change.","errorGeneric":"Something went wrong. Please try again.","forbidden":"You do not have access to this.","savedOk":"Saved","loading":"Loading…","confirmArchive":"Archive this? It stays in history but cannot be used any more."},"approvalsInbox":{"typeLabels":{"ayva_worker":"Ayva worker","board_item":"Board approval","proofing":"Proof review","ai_team_agent":"Agent action","access_request":"Access request","request":"Company request","account_two_person":"Security co-sign","budget":"Budget","campaign":"Campaign","dual_control":"Dual-control","expense":"Expense","expense_justification":"Expense report","fs_intake":"Field-service intake","hr_shift_swap":"Shift swap","logistics_intake":"Logistics intake","marketing_enrichment":"Contact enrichment","parts_request":"Parts request","personal_request":"Personal request","so_draft":"Sales-order draft","social":"Social post","tech_access_request":"Technician access request","timesheet":"Timesheet","travel":"Travel request","warranty_claim":"Warranty claim"},"pageEyebrow":"My work","pageTitle":"Approvals","pageDescription":"Every request awaiting your decision, across the whole platform. Some are approved here and others, like parts requests, are approved on their own screen. What you decide writes straight back to the source.","emptyEyebrow":"Approvals","caughtUpTitle":"You’re all caught up","caughtUpBody":"Nothing is waiting on your decision right now. When a request needs your approval — travel, expenses, a board item, and more — it shows up here.","tabAwaitingMe":"Awaiting me","tabRequestedByMe":"Requested by me","tabAll":"All","filterAllTypes":"All types","overdue":"Overdue","emptyRequestedTitle":"No pending requests of your own","emptyAllTitle":"No pending approvals","emptyFilteredTitle":"Nothing matches these filters","emptyRequestedBody":"When you submit something that needs approval, you can track its status here.","emptyFilteredBody":"Try clearing the filters above.","panelRejectTitle":"Reject request","panelEscalateTitle":"Escalate request","panelDetailTitle":"Request detail","escalatedToYou":"Escalated to you","review":"Review","approve":"Approve","reject":"Reject","open":"Open","escalateTooltip":"Escalate to another approver","ageJustNow":"just now","overdueSuffix":"overdue","fieldRequester":"Requester","fieldAmount":"Amount","fieldContext":"Context","fieldAge":"Age","openSource":"Open source","close":"Close","rejecting":"Rejecting","reasonLabel":"Reason","optional":"(optional)","rejectPlaceholder":"Why is this being rejected?","cancel":"Cancel","reassign":"Reassign","reassignTail":"to another approver. They’ll be notified and it moves into their inbox.","approverLabel":"Approver","loadingApprovers":"Loading eligible approvers…","loadApproversError":"Could not load approvers.","noEligibleApprover":"No other eligible approver is available for this item.","searchPlaceholder":"Search by name or email…","noMatch":"No match.","noteLabel":"Note","escalatePlaceholder":"Why are you escalating?","escalate":"Escalate","actionFailed":"Action failed."},"ayvaWorkerCard":{"eyebrow":"Approvals / Ayva worker","backToInbox":"Back to approvals","kinds":{"lead_reply":"Lead reply","repeat_order":"Repeat order","quote":"Quote"},"status":{"pending":"Awaiting decision","approved":"Approved","rejected":"Rejected"},"fixtureNotice":"Fixture data: this card was built from test records, not from Redix.","decidedBy":"Decided by","outcome":{"draft_filed":"The reply was filed as a draft in your Outlook mailbox. It was not sent.","approved_no_mailbox":"Approved. No Microsoft 365 mailbox is connected, so the draft stays on this card.","approved":"Approved. A person keys it into Redix; nothing was written to a system of record.","rejected":"Rejected."},"approve":"Approve","reject":"Reject","rejectReason":"Reason","rejectPlaceholder":"Why is this being rejected?","working":"Saving...","lead":{"from":"From","received":"Received","source":"Source","sources":{"fixture_mailbox":"Mailbox","fixture_form":"Web form","text":"Pasted text"},"message":"The lead","matched":"Matched catalog lines","unmatched":"Words that matched nothing","confidence":"Confidence","deal":"Deal created","openDeal":"Open the deal","reply":"Drafted reply (waiting for your approval)","to":"To","subject":"Subject","estimated":"Estimated total at list price"},"repeat":{"customer":"Customer","lastOrder":"Last order","period":"Period","pricedAsOf":"Prices as of","lines":"Lines at today's prices","part":"Part","description":"Description","qty":"Qty","last":"Last price","today":"Today","delta":"Difference","unchanged":"unchanged","changedCount":"{n} line(s) changed","lastTotal":"Last order total","todayTotal":"Today's total","totalDelta":"Total difference"},"quote":{"number":"Quote","customer":"Customer","issued":"Issued","validUntil":"Valid until","lines":"Lines at our margins","part":"Part","description":"Description","qty":"Qty","cost":"Unit cost","margin":"Margin","rule":"Rule","price":"Unit price","total":"Line total","subtotal":"Subtotal","unknown":"Parts not in the catalog","terms":"Terms","download":"Download the PDF","marginRules":"Margin rules {version}, floor {floor}%"}},"boardProofing":{"tab":"Proofing","empty":"No proofs on this item yet.","newProof":"New proof","upload":"Upload file","uploading":"Uploading…","dropHint":"Drop an image or PDF, or click to upload","onlyImagesPdf":"Only images and PDFs can be proofed.","open":"Open","openWorkspace":"Open proofing workspace","back":"Back to board","versions":"Versions","version":"Version {n}","addVersion":"Upload new version","compare":"Compare","compareOff":"Exit compare","status_in_review":"In review","status_approved":"Approved","status_changes_requested":"Changes requested","tools":"Markup","tool_pin":"Pin","tool_rect":"Box","tool_arrow":"Arrow","tool_freehand":"Draw","tool_highlight":"Highlight","comment":"Comment","commentPlaceholder":"Add your feedback…","firstCommentPlaceholder":"Describe what you’re marking…","reply":"Reply","replyPlaceholder":"Reply…","send":"Send","resolve":"Resolve","reopenThread":"Re-open","resolved":"Resolved","openThreads":"{n} open","delete":"Delete","subitemToggle":"Also create a subitem for this comment","page":"Page","pageOf":"Page {n} of {total}","prevPage":"Previous page","nextPage":"Next page","decide":"Your decision","decision_approved":"Approve","decision_changes_requested":"Request changes","reviewers":"Reviewers","noAnnotations":"No comments on this version yet. Pick a tool and click the file to start.","threadEmpty":"No comments yet.","zoomIn":"Zoom in","zoomOut":"Zoom out","zoomReset":"Reset zoom","close":"Close","errorGeneric":"Could not complete that action.","notFound":"This proof could not be found."},"ayvaItem":{"title":"Ayva","thisItem":"this item","groundedIn":"Grounded in {item} on {board}","intro":"Ask me anything about “{item}” — I’ll answer from the real data.","clear":"Clear conversation","placeholder":"Ask about this item…","send":"Send","thinking":"Ayva is thinking…","hint":"Enter to send · Shift+Enter for new line","errorUnavailable":"AI unavailable — please try again later.","errorReach":"Could not reach the AI service. Please try again.","starterSummarize":"Summarize this item.","starterUpdates":"What updates are needed?","starterAssignee":"Who should be assigned?","starterOnTrack":"Is this on track?"},"ayvaChart":{"failed":"This chart couldn't be drawn.","empty":"No data to chart.","fallbackValue":"Value","untitled":"Chart"},"ayvaChat":{"newChat":"New chat","newFolder":"New folder","searchChats":"Search chats","searchHint":"Search","startFirstChat":"Start your first chat","compareModels":"Compare models","scheduledPrompts":"Scheduled prompts","knowledge":"Knowledge","knowledgeSub":"Memory & documents","groupPinned":"Pinned","groupChats":"Chats","justNow":"now","pin":"Pin","unpin":"Unpin","rename":"Rename","delete":"Delete","deleteConfirm":"Delete?","chatsMenu":"Chats","openChatsMenu":"Open chats menu","closeMenu":"Close menu","moduleOff":"Ayva isn't turned on yet. Check back soon.","accountOff":"Ayva is turned off for your account. An admin can enable it in Admin → Ayva.","talkFullscreen":"Talk to Ayva","exportChat":"Export chat","chatSettings":"Chat settings","stateActing":"acting","receiptLabel":"From the company brain","receiptSourceOne":"source","receiptSourcesMany":"sources","receiptStampVerified":"verified","receiptStampSeen":"seen","receiptStampUnproven":"unproven","receiptStampTitle":"This answer is only as proven as its weakest source:","receiptAudienceTitle":"The narrowest label among the sources: what a reader had to hold to be shown this","receiptAlarm":"previous version","receiptAlarmTitle":"The brain served its previous version: the current one did not verify","receiptCopyCite":"Copy the citation","receiptWhy":"Why?","receiptWhyTitle":"Why she said it: the full trace of this answer","receiptVersion":"brain","receiptVersionTitle":"The brain version that answered","welcomeGreeting":"Hi, I'm {name}.","welcomeHint":"Ask me anything, or try one of these:","starterBoard":"How do I create a board in One Boards?","starterFocus":"Summarize what I should focus on today.","starterTimesheet":"Where do I submit my timesheet?","starterHelp":"What can you help me with?","thinking":"{name} is thinking…","thinkingA11y":"{name} is thinking","working":"Working on it…","lookingUp":"Looking that up…","almostThere":"Almost there…","copy":"Copy","copied":"Copied","readAloud":"Read aloud","goodReply":"Good reply","badReply":"Bad reply","regenerate":"Regenerate","branch":"Branch from here","edit":"Edit","editResendA11y":"Edit and resend","reply":"Reply","replyingTo":"Replying to {name}","react":"React","addReaction":"Add reaction","reactionA11y":"Reaction {emoji}, {n}","pinned":"Pinned","pinnedCount":"{n} pinned","jumpToSource":"Jump to message","editMessage":"Edit message","saveEdit":"Save","cancelEdit":"Cancel","deleteMessage":"Delete","deleteMessageConfirm":"Delete again to confirm","edited":"edited","you":"You","messageActions":"Message actions","messagePlaceholder":"Message {name}…","composerHint":"Shift+Enter for a new line · /save to save a prompt","send":"Send","stop":"Stop","dictate":"Dictate","stopDictation":"Stop dictation","attachImage":"Attach image","removeImage":"Remove image","savedPrompts":"Saved prompts","moreControls":"More","contextGrounded":"grounded context","model":"Model","tierAuto":"Auto","tierAutoHint":"{name} picks the right model for each message.","tierSwift":"Ayva Swift","tierCore":"Ayva Core","tierMax":"Ayva Max","tierSwiftHint":"Fast & light — quick answers.","tierCoreHint":"Balanced — the everyday default.","tierMaxHint":"Most capable — deep work.","tierSingle":"Ayva","effort":"Effort","effortQuick":"Quick","effortBalanced":"Balanced","effortDeep":"Deep","effortQuickHint":"Short, to-the-point answers.","effortBalancedHint":"Balanced detail — the default.","effortDeepHint":"Detailed, step-by-step answers.","consultOnly":"Consult only","consultOnlyOnHint":"Consult-only is on: Ayva answers and looks things up but changes nothing. Click to let her act again.","consultOnlyOffHint":"Ayva may act with her tools. Click for consult-only: answers only, no changes.","usageA11y":"Ayva background usage","tokensToday":"{n} tokens today","noCap":"no cap","usageWindowTip":"{used} / {cap} tokens this {window}","usageChipTip":"{used} of {cap} tokens","toolActivity":"Tool activity","toolActivityA11y":"Ayva tool activity","stepCount":"{n} steps","stepCountOne":"1 step","usedTools":"Used {n} tools","usedToolsOne":"Used 1 tool","selfCorrected":"· self-corrected {n} step","selfCorrectedMany":"· self-corrected {n} steps","running":"Running","done":"Done","failed":"Failed","retrying":"Retrying…","expandTimeline":"Show steps","collapseTimeline":"Hide steps","showStepDetails":"Show details","hideStepDetails":"Hide details","argsLabel":"Arguments","resultLabel":"Result","proposalActMode":"act mode","proposalConfirm":"Confirm & apply","proposalCancel":"Cancel","proposalApplying":"Applying…","proposalReversible":"Reversible for {hours}h","proposalNoChanges":"No changes made","proposalDraftsKept":"drafts preserved","proposalConfirmTitle":"Confirm action","actionDoneA11y":"Action complete","actionLedgerNote":"Logged to the action ledger","actionReversibleNote":"reversible for {hours}h","undo":"Undo","undoing":"Undoing…","reverted":"Reverted — nothing was changed.","retryFailed":"Ayva couldn't respond just now. Check your connection and try again.","retry":"Retry","showMeWhere":"Show me where: {title}","guidedWalkthrough":"Run a guided, click-by-click walkthrough","voice":"Voice","voiceChat":"Voice chat (hands-free)","endVoice":"End voice chat","autoSpeak":"Toggle auto-speak","autoSpeakOn":"Auto-speak replies: on","autoSpeakOff":"Auto-speak replies: off","voiceOptions":"Voice options","listeningLang":"Language Ayva listens for","voiceSelect":"Ayva's voice","voiceDefault":"Voice: default","voiceSpeed":"Voice speed","speedNormal":"Speed: normal","noSavedPrompts":"No saved prompts yet. Type one below and click the bookmark to save it.","deletePrompt":"Delete prompt"},"requests":{"vacationTitle":"Vacation Requests","vacationSubtitle":"Request time off and track your approvals.","specialTitle":"Special Requests","specialSubtitle":"Medical leave, late arrivals, and other accommodations.","reportsTitle":"My Reports","reportsSubtitle":"Summaries of your own activity — filter, export, and print.","newVacation":"New vacation request","newSpecial":"New special request","type":"Type","date":"Date","startDate":"Start date","endDate":"End date","hoursLate":"Hours late","multipleDays":"Multiple days","halfDay":"Half day","reason":"Reason","reasonPlaceholderVacation":"A short note for your manager…","reasonPlaceholderSpecial":"Describe the accommodation you need…","submit":"Submit request","submitted":"Request submitted.","reasonRequired":"Please add a reason.","myVacation":"My vacation requests","mySpecial":"My special requests","emptyVacation":"No vacation requests yet. Submit one above.","emptySpecial":"No special requests yet. Submit one above.","cancel":"Cancel","note":"Note","reviewNotePlaceholder":"Optional note for the requester","confirmDeny":"Confirm deny","teamQueue":"Team requests awaiting your decision","allCaughtUp":"Nothing pending. You’re all caught up.","approve":"Approve","deny":"Deny","someone":"Someone","statusPending":"Pending","statusApproved":"Approved","statusDenied":"Denied","statusCancelled":"Cancelled","subPaid":"Paid time off","subUnpaid":"Unpaid leave","subMedical":"Medical leave","subLateArrival":"Late arrival","subSchedule":"Schedule change","subOther":"Other","kind":"Kind","status":"Status","all":"All","vacation":"Vacation","special":"Special","exportCsv":"Export CSV","print":"Print","total":"Total","daysSummary":"Days (appr+pend)","colDates":"Dates","colReason":"Reason","colSubmitted":"Submitted","noMatch":"No requests match these filters.","companyReports":"Company Reports portal","companyReportsDesc":"Daily end-of-day reports and attached dashboards.","errSubmit":"Could not submit request.","errCancel":"Request can no longer be cancelled.","errDecide":"Request is no longer pending."},"oneBoards":{"teams":{"sectionTeams":"Teams","sectionPeople":"People","addTeams":"Add teams","searchTeams":"Search teams…","noTeams":"No teams yet.","noTeamMatches":"No matching teams.","teamsRestricted":"This column only accepts people from its allowed list, so teams cannot be assigned here.","chipLabel":"Team {name}, {count} members","membersTitle":"Members of {name}","noVisibleMembers":"No members you can see.","memberCount":"{count} members","close":"Close","addTeam":"Add team {name}","removeTeam":"Remove team {name}","exportPrefix":"Team","panelTitle":"People","done":"Done","assigned":"Assigned","assignedCount":{"one":"{n} assigned","other":"{n} assigned"},"nobodyAssigned":"Nobody assigned yet.","unknownUser":"(unknown user)","remove":"Remove","addPeople":"Add people","searchPeople":"Search people…","noPeopleMatches":"No matches.","addPerson":"Add {name}","removePerson":"Remove {name}"},"createForms":{"workspaceName":"Name","workspaceNamePlaceholder":"e.g. Marketing, Q3 Launch, Vendor Portal","createWorkspace":"Create workspace","creating":"Creating…","nameFirst":"Enter a name to continue.","boardNamePlaceholder":"Board name","createBoard":"Create board","importFromFile":"Import from file"},"workspaceHome":{"allWorkspaces":"All workspaces","eyebrow":{"workspace_one":"Shared","home":"Home","department":"Department","custom":"Workspace"},"typeBadge":{"open":"Open to everyone in the company","home":"Personal workspace","private":"Private — members only"},"boardsOne":"{n} board","boardsMany":"{n} boards","settings":"Settings","system":"System","newBoard":"New board","addDescription":"Add a description","editDescription":"Edit description","descriptionLabel":"Workspace description","save":"Save","saving":"Saving…","cancel":"Cancel","saveError":"Could not save. Try again.","customize":"Customize","customizeTitle":"Workspace appearance","colorLabel":"Color","automatic":"Automatic","automaticHint":"A color picked for this workspace","iconLabel":"Icon","iconPlaceholder":"One emoji, e.g. 🚀","iconHint":"Leave empty to show the first letter of the name.","iconInvalid":"Use a single emoji.","close":"Close","swatches":{"redsis":"Redsis blue","blue":"Blue","indigo":"Indigo","violet":"Violet","fuchsia":"Fuchsia","pink":"Pink","red":"Red","orange":"Orange","lime":"Olive","green":"Green","teal":"Teal","slate":"Slate"},"currentColor":"Current color","currentColorHint":"Not in the palette. Pick a color to replace it.","errorColor":"Pick one of the palette colors.","errorDescription":"Keep the description to 500 characters or fewer.","errorDenied":"You can’t customize this workspace.","membersLabel":"Members","viewMembers":"View members ({n})","tabsLabel":"Workspace sections","tabs":{"recent":"Recent","content":"Content","updates":"Updates"},"recentTitle":"Recently updated","recentEmptyTitle":"Nothing here yet","recentEmptyBody":"Boards and dashboards appear here, most recently updated first.","recentEmptyReadOnly":"No boards or dashboards yet. Ask an admin to create one for you.","newBoardHint":"Start from a blank board","fromTemplate":"From a template","fromTemplateHint":"Start from a ready-made structure","updatedAgo":"Updated {when}","kindBoard":"Board","kindDashboard":"Dashboard","seeAllContent":"See all content","boards":"Boards","noBoardsYet":"No boards yet.","createFirstBelow":"Create your first board below","askAdmin":"Ask an admin to create one for you","orAddExisting":", or add an existing one above.","ws1Title":"Workspace One holds shared boards","ws1BodyDisabled":"Boards shared company-wide appear here.","ws1BodyCanAdd":"Use “Add existing board” above to share a board into Workspace One — everyone in the company will see it here.","ws1BodyOwner":"Boards added here are shared company-wide. Add a board you own with “Add existing board”.","dashboards":"Dashboards","dashboardsOne":"{n} dashboard","dashboardsMany":"{n} dashboards","newDashboard":"New dashboard","noDashboardsYet":"No dashboards yet.","createFirstDashboard":"Create your first dashboard above.","askAdminDashboard":"Ask an admin to create one for you.","cover":{"change":"Change cover","title":"Cover","tabsLabel":"Cover source","tabColors":"Colors","tabGallery":"Gallery","tabUpload":"Upload","automatic":"Automatic","automaticHint":"A gradient of the workspace color.","colorsLabel":"Solid colors","gradientsLabel":"Gradients","gradientOption":"{name} gradient","currentCover":"Current cover","currentCoverHint":"No longer offered — pick another one to change it.","currentCoverOption":"{name} (current cover)","galleryLabel":"RedsisOne covers","gradients":{"ocean":"Ocean","sunset":"Sunset","forest":"Forest","night":"Night","coral":"Coral","aurora":"Aurora","desert":"Desert","storm":"Storm","cherry":"Cherry","arctic":"Arctic","redsis":"Redsis gold","rose":"Rose"},"gallery":{"redsis-mesh":"Redsis network","circuit-blue":"Blue circuit","dot-grid-indigo":"Indigo dots","waves-teal":"Teal waves","blueprint-slate":"Blueprint","aurora-violet":"Violet aurora","rings-orange":"Orange rings","contour-green":"Green contours","prism-fuchsia":"Fuchsia prism","constellation-night":"Night sky","stripes-sky":"Sky stripes","sunrise-coral":"Coral sunrise"},"uploadCta":"Choose an image","uploadReplace":"Replace image","uploadHint":"JPG, PNG or WebP, up to 5 MB. Wide images work best (about 1600 × 400).","uploading":"Uploading…","uploaded":"Image uploaded.","reposition":"Reposition","repositionHint":"Move the image up or down inside the cover.","positionTop":"Top","positionBottom":"Bottom","save":"Save","saving":"Saving…","cancel":"Cancel","close":"Close","errorDenied":"You cannot change this cover.","errorTooLarge":"The image is larger than 5 MB.","errorNotImage":"That file is not a JPG, PNG or WebP image.","errorDecode":"The image could not be read. Try another file.","errorStorage":"The image could not be saved. Try again.","errorGeneric":"The cover could not be saved. Try again."}},"workspaceUpdates":{"title":"Updates","postsOne":"{n} post","postsMany":"{n} posts","composerLabel":"Share an update with this workspace","placeholder":"Share an update with this workspace…","footnote":"Posts here stay at the workspace — they don’t post into a board.","post":"Post","posting":"Posting…","empty":"No updates yet.","beFirst":"Be the first to post.","error":"Could not post the update."},"workspaceAside":{"members":"Members","manage":"Manage","noMembers":"No members yet.","more":"+{n} more","recentActivity":"Recent activity","noActivity":"No activity yet across your boards here.","someone":"Someone","actions":{"board.created":"created the board","board.renamed":"renamed the board","board.archived":"archived the board","board.deleted":"deleted the board","board.shared":"shared the board","board.unshared":"unshared the board","group.created":"added a group","group.renamed":"renamed a group","group.archived":"archived a group","group.restored":"restored a group","group.deleted":"deleted a group","item.created":"added an item","item.renamed":"renamed an item","item.moved":"moved an item","item.deleted":"deleted an item","item.restored":"restored an item","item.home_added":"added an item to a board","item.home_removed":"removed an item from a board","item.home_promoted":"made a board an item’s primary","column.created":"added a column","column.renamed":"renamed a column","column.config_changed":"changed a column","column.deleted":"deleted a column","column.restored":"restored a column","column.type_changed":"changed a column type","value.changed":"changed a value","automation.created":"added an automation","automation.run":"ran an automation","permission.granted":"granted access","permission.revoked":"revoked access","file.uploaded":"uploaded a file","file.deleted":"deleted a file","view.created":"created a view","view.updated":"updated a view","view.deleted":"deleted a view"},"roles":{"owner":"Owner","editor":"Editor","viewer":"Viewer"}},"workspaceBoardCard":{"open":"Open →","openAria":"Open {name}","actionsFor":"Actions for {name}","addFavorite":"Add to favorites","removeFavorite":"Remove from favorites","copyId":"Copy ID","copied":"Copied","rename":"Rename","saveName":"Save name","cancelRename":"Cancel rename","openNewTab":"Open in new tab","removeFromWorkspace":"Remove from this workspace","linkedFrom":"linked from {workspace}","linked":"linked","sharedFrom":"Shared from {workspace}","sharedInto":"Shared into this workspace","removeConfirmPrefix":"Remove","removeConfirmSuffix":"from this workspace?","removeHintFrom":"This only removes the link — the board stays in {workspace}.","removeHintHome":"This only removes the link — the board stays in its home workspace.","remove":"Remove","removing":"Removing…","removedPrefix":"Removed","removedSuffix":"from this workspace","addExisting":"Add existing board","searchPlaceholder":"Search boards to add…","searchLabel":"Search boards to add","close":"Close","addedPrefix":"Added","addedSuffix":"to this workspace.","noneAvailable":"No boards available to add. You can add boards you own or manage.","noMatch":"No boards match “{query}”.","adding":"Adding…"},"viewKinds":{"table":"Table","dashboard":"Dashboard","kanban":"Kanban","calendar":"Calendar","timeline":"Timeline","gantt":"Gantt","chart":"Chart","pivot":"Pivot","workload":"Workload","parques":"Parqués race","cards":"Cards","form":"Form","map":"Map","files_gallery":"Files Gallery","files_library":"Files Library","backlog":"Backlog","sla":"SLA","whiteboard":"Whiteboard","project_timeline":"Project Timeline","report":"Report","summary":"Summary","embed":"Embed","activity":"Activity","activity_ribbon":"Activity Ribbon","mindmap":"Mind Map","triage":"Triage","doc":"Doc","split":"Split"},"nav":{"home":"One Boards home","newWorkspace":"New workspace","newWorkspaceFolder":"New workspace folder","noWorkspaces":"No workspaces yet.","noBoards":"No boards yet.","loading":"Loading…","loadFailed":"Couldn’t load workspaces.","openOneBoards":"Open One Boards","sharedWithMe":"Shared with me","sharedLoadFailedRetry":"Couldn’t load shared boards. Retry","allWorkspaces":"All workspaces ({n} more)","emptyFolderHint":"Empty — drag a workspace here.","dropToRemoveFromFolder":"Drop here to remove from folder","folderNamePlaceholder":"Folder name","createFolder":"Create folder","cancel":"Cancel","couldNotCreateFolder":"Could not create folder.","open":"Open","openInNewTab":"Open in new tab","rename":"Rename","newBoard":"New board","newBoardFolder":"New board folder","newFolderDefaultName":"New folder","moveToFolder":"Move to folder","moveUp":"Move up","moveDown":"Move down","archiveWorkspace":"Archive workspace","archiveFolder":"Archive folder","archiveBoard":"Archive board","deleteFolder":"Delete folder","noFolderTopLevel":"No folder (top level)","workspaceRoot":"Workspace root","saveName":"Save name","cancelRename":"Cancel rename","renameFailed":"Rename failed.","renameFailedRetry":"Rename failed. Try again.","confirm":"Confirm","actionFailed":"Something went wrong. Try again.","deleteFailed":"Delete failed.","deleteFailedRetry":"Delete failed. Try again.","dismiss":"Dismiss","expand":"Expand","collapse":"Collapse","actionsFor":"Actions for {name}","moveTo":"Move to","cancelMove":"Cancel move","newFolderNamePlaceholder":"New folder name","createAndMove":"Create and move","newFolderInline":"New folder…","moveFailed":"Move failed.","switcherHeading":"Workspace","switcherActions":"Workspace actions","switcherSearchContent":"Search in this workspace","switcherSearchContentPlaceholder":"Filter boards and dashboards","switcherOpen":"Switch workspace — {name}","switcherSearchPlaceholder":"Search for a workspace","switcherRecent":"Recent workspaces","switcherMine":"My workspaces","switcherBrowseAll":"Browse all","switcherAddWorkspace":"Add workspace","switcherNoMatches":"No workspaces match “{q}”.","switcherCurrent":"Current","switcherClose":"Close","switcherCreateIn":"Create in {name}","switcherContent":"Content","switcherContentActions":"Content actions","switcherExpandAll":"Expand all","switcherCollapseAll":"Collapse all","switcherNewDashboard":"New dashboard","switcherOpenWorkspace":"Open {name}","switcherNoContentMatches":"Nothing matches “{q}”.","switcherClearSearch":"Clear search","switcherContentLoadFailedRetry":"Couldn’t load this workspace’s content. Retry"},"itemLifecycle":{"reparent":{"tab":"Convert","title":"Convert item","isTopLevel":"This is a top-level item.","isSubitem":"This is a subitem.","readOnly":"You don’t have permission to change this item’s nesting.","promote":"Promote to top-level item","makeSubitem":"Make it a subitem of…","selectParent":"Choose a parent item…","noTargets":"No eligible parent items on this board.","loading":"Loading…","apply":"Convert","working":"Converting…","errorGeneric":"Could not convert this item."}},"itemCard":{"deleted":"deleted","close":"Close","dependencies":{"tab":"Dependencies","blockedBy":"Blocked by","blocking":"Blocking","noBlockedBy":"This item isn’t blocked by anything.","noBlocking":"Nothing depends on this item.","add":"Add a dependency","addPlaceholder":"Search items on this board…","searchEmpty":"No matching items","remove":"Remove dependency","noColumn":"This board has no Dependency column yet. Add one from the column menu to link predecessors.","loading":"Loading dependencies…","loadError":"Could not load dependencies.","retry":"Retry"},"related":{"tab":"Related","empty":"No linked items yet.","add":"Link an item","addPlaceholder":"Search items…","searchEmpty":"No matching items","remove":"Remove link","noColumn":"This board has no Connect-items column yet. Add one from the column menu to link related items.","loading":"Loading related items…","loadError":"Could not load related items.","retry":"Retry"},"backlinks":{"tab":"Backlinks","empty":"No other items reference this one.","viaConnect":"Linked from","viaDependency":"Depends on this","loading":"Loading backlinks…","loadError":"Could not load backlinks.","retry":"Retry"}},"views":{"report":{"subtitle":"{total} items, by {pivot}","filteredNote":"filtered","print":"Print","empty":"Nothing to report — this board has no items matching the current filter.","none":"None.","unset":"Unset","captionNone":"None","itemColumn":"Item","untitled":"Untitled","pivotLabel":"Group the report by","captionLabel":"Breakdown caption","captionNoneOption":"No breakdown","showTiles":"Show summary tiles","showEmptySections":"Show values with no items","settings":"Report settings","needsColumn":"The Report view needs a Status or Dropdown column.","captionHint":"Adds a per-section line like “2 open · 16 closed”."},"summary":{"filteredNote":"Filtered — figures reflect the current toolbar filter, not the whole board.","totalItems":"Items","dueSoon":"Due soon","overdue":"Overdue","recentChanges":"Recent changes","byStatus":"By status","noStatus":"No status column on this board.","noStatusLabel":"No status","byPerson":"By person","noPeople":"No people assigned.","unknownPerson":"Unknown","recentActivity":"Recent activity","noActivity":"No activity yet."},"embed":{"prompt":"Embed an external page — a document, dashboard, or design — right inside this board.","placeholder":"https://…","urlLabel":"Embed URL","invalid":"Enter a valid https:// URL.","saveViewFirst":"Save this as a view first to store the embed URL.","save":"Embed","noUrlReadonly":"No page has been embedded yet.","openInNewTab":"Open","editUrl":"Edit URL","frameTitle":"Embedded page"},"activity":{"empty":"No activity on this board yet.","created":"created","renamed":"renamed","moved":"moved","archived":"archived","restored":"restored","changed":"changed"},"activityRibbon":{"title":"Activity Ribbon","measureLabel":"Measure","windowLabel":"Window","groupByLabel":"Compare by","statusColumnLabel":"Status column","measures":{"status":"Status over time","throughput":"Throughput","automations":"Automations"},"windows":{"today":"Last 24h","7d":"Last 7 days","30d":"Last 30 days","quarter":"Last quarter"},"groups":{"board":"Board","item":"Item","person":"Person","group":"Group"},"legend":{"reachedDone":"reached Done","hitStuck":"hit Stuck","completed":"completed","created":"created","runFired":"run fired","runFailed":"run failed","noStatus":"no status"},"empty":"No activity in this window yet.","loading":"Loading activity…","error":"Could not load the ribbon. Try again.","notices":{"no-status-column":"Add a Status column to this board to see time-in-status bands.","history-truncated":"Showing a capped slice of a very long history.","rows-capped":"Showing the busiest rows; narrow the window or group differently to see more.","no-person-column":"Add a Person column to group this ribbon by assignee.","no-assignees":"No items are assigned yet, so there is nothing to group by person."}}}},"columnLabels":{"title":"Labels","dragToReorder":"Drag to reorder","changeColor":"Change colour","namePlaceholder":"Label name","deleteLabel":"Delete label","billingClassProtected":"This label is a billable service type: its name and billing are changed in Service types. Nothing was saved.","duplicateOptionKey":"Two labels ended up with the same key. Reload the column and try again. Nothing was saved.","translations":{"heading":"Translations","hint":"The base text you type above is English. Add Spanish and Portuguese so forms show the column name and options in the visitor’s language. Leave blank to fall back to the base text.","columnName":"Column name","option":"Option","localeEs":"Spanish","localePt":"Portuguese","placeholder":"Translation"}},"savedViews":{"mainTable":"Main Table","saveAsNew":"Save as new view…","namePlaceholder":"View name…","save":"Save","options":"View options","rename":"Rename","renamePlaceholder":"New name…","makeShared":"Make shared","makePrivate":"Make private","privateOn":"Private — only you will see this view","privateOff":"Shared — everyone on the board sees this view","setDefault":"Set as board default","clearDefault":"Clear board default","defaultBadge":"Default","delete":"Delete","archive":"Archive","archiveHint":"Move to archived views — you can restore it later.","archiveDefaultBlocked":"Clear the board default before archiving this view.","archivedViews":"Archived views","archivedTitle":"Archived views","archivedEmpty":"No archived views","archivedLoading":"Loading archived views…","restore":"Restore","sharedHint":"Shared with board members","privateHint":"Private — only visible to you","createSharedLabel":"Shared with board members","createPrivateLabel":"Private — only visible to me","saveAsView":"Save as view","saveAsHint":"Save the current filters as a new view tab","updateHint":"Save these changes into the view you are using ({name})","update":"Update","duplicate":"Duplicate","tabOptions":"Tab options","setColor":"Set color","clearColor":"No color","colorLabel":"Tab color","dragToReorder":"Drag to reorder","viewsMenu":"Views","switchView":"Switch view","newItemsBadge":"{count} new items","notifyNewItems":"Notify me of new items","muteNewItems":"Mute new-item badge","newItemsOtherViews":"{count} new items in other views"},"subitems":{"expandAll":"Expand all","collapseAll":"Collapse all","loadOptions":"Sub-item options","loadHeading":"On load","collapseOnLoadView":"Collapse sub-items on load","collapseOnLoadViewHint":"Saved with this view (update the view to keep it).","collapseOnLoadUser":"Always collapse on load (all boards)","collapseOnLoadUserHint":"Just for you, on every board — overrides the view."},"rowHeight":{"label":"Row height","one":"1 line","two":"2 lines","three":"3 lines","four":"4 lines","auto":"Auto","hint":"Wrap long text to this many lines"},"tapes":{"title":"Progress Tape","loading":"Loading…","onlyManagers":"Only board managers can build tapes.","askAyva":"Ask Ayva for a tape","stages":"Stages","unassigned":"Unassigned","cancel":"Cancel","delete":"Delete","noTapes":"No tapes yet. Create one, or ask Ayva to suggest one after you start.","finalStage":"Final stage reached.","manageTapes":"Manage tapes","clearAnyone":"Clear — anyone can set this status","noneAvailable":"None available.","startFromTemplate":"Start from a template","purposePlaceholder":"What is this board for? (optional)","tapeNamePlaceholder":"Tape name"},"guestBoards":{"readOnly":"Read-only","viewOnly":"View only","wholeBoardNote":"You have read-only access to this board.","scopedNote":"You have read-only access to selected items on this board.","empty":"Nothing to show here yet.","landingTitle":"Shared with you","landingEmpty":"No boards have been shared with you yet.","manage":{"title":"Guests","hint":"Give an external person read-only access to this board.","emailPlaceholder":"Guest email…","invite":"Invite guest","inviting":"Inviting…","remove":"Remove","none":"No guests yet.","wholeBoard":"Whole board","scoped":"Scoped","inviteFailed":"Could not invite that guest."}},"sla":{"states":{"on_track":"On track","at_risk":"At risk","breached":"Breached","paused":"Paused","met":"Met","none":"No target"},"common":{"close":"Close","cancel":"Cancel","saving":"Saving…"},"cell":{"noSignal":"No SLA activity yet","elapsedLabel":"Elapsed","pausedLabel":"Paused (on hold)","offHoursLabel":"Outside business hours","left":"{time} left","over":"{time} over"},"config":{"title":"SLA Setup","openSetup":"Open SLA Setup","railTab":"SLA","intro":"Measure how long items take through your process — from creation through the stages you choose — against targets, with At-risk and Breached alerts.","source":"Track progress from","sourceStatus":"A status column","sourceTape":"A Progress Tape","statusColumn":"Status column","tape":"Tape","choose":"Choose…","noTapes":"No tapes on this board yet — build one from the item panel, or track a status column instead.","doneStates":"Done states","doneStatesHint":"Reaching one of these stops the clock and marks the SLA Met.","pauseStates":"Pause states","pauseStatesHint":"Time spent in these does not count against the SLA (e.g. waiting on parts).","pickSourceFirst":"Pick a source above first.","overallTarget":"Overall target","overallTargetHint":"Total working time allowed from creation to a Done state. Leave empty for no overall target.","hours":"hours","days":"days","clockMode":"Clock","clockWall":"24/7 (wall clock)","clockBusiness":"Business hours","clockBusinessHolidays":"Business hours + holidays","calendarLabel":"Calendar (time zone + working hours)","calendarDefault":"Default ({timezone})","calendarRangeBlocked":"Check the working hours: a range is incomplete or backwards ({days}). Saving it like this leaves that day not counting.","timezoneGroupCommon":"Our locations","timezoneGroupAll":"All time zones","calendarDefaultHint":"With no calendar picked, the SLA counts in {timezone}, Mon–Fri 9:00–17:00.","createCalendar":"Create a calendar","editCalendar":"Edit","duplicateCalendar":"Duplicate","calendarEmptyMember":"No working-hours calendars yet. They are created by someone who can administer boards.","createForbidden":"Creating or editing calendars needs the administer-boards permission.","calendarUsage":"Used by {columns} columns across {boards} boards and {policies} policies.","backToSla":"Back to SLA setup","calendarArchivedSuffix":"(archived)","calendarArchivedHint":"This calendar was archived, so it is no longer offered in the list — but the SLA keeps counting with it. Pick another one to change that.","dayCountsZero":"This day is on but has no valid range: it will count ZERO.","calendarAllClosed":"Every day is closed. Configured like this the SLA clock never runs and no item can ever breach.","holidaysNotApplied":"Not applied — these are not YYYY-MM-DD dates, so the clock does NOT skip those days: {dates}","doneAndPauseOverlap":"These states are marked as both Done and Pause: {states}. Done wins — the clock stops and the SLA is recorded as met. Remove them from one of the two lists.","warnAt":"Warn at","warnAtHint":"Flip to At risk when this much of the target is used.","dateAnchors":"Date source (optional)","dateAnchorsHint":"By default the clock runs from item creation until a Done state. Pick date columns to anchor either end instead — items with that date empty fall back to the default.","startDate":"Start date","startDateAuto":"Automatic (item creation)","endDate":"Close date","endDateAuto":"Automatic (Done state)","sameAnchorError":"Start and close cannot use the same column.","targetSource":"Targets from a column (optional)","targetSourceHint":"The system always measures the elapsed time itself. These columns only say what the target is, per item — use them when each customer has its own commitment (e.g. 2 h to respond, 24 h to resolve). An empty or non-numeric cell means no target for that item.","responseTargetColumn":"Response target column","resolutionTargetColumn":"Resolution target column","targetSourceNone":"Not used","targetSourceNoColumns":"This board has no number or mirror columns yet — add one with the target per item to use this.","targetSourceMirrorHint":"If you pick a mirror, it must point at a number column on the other board and the item must be linked to exactly one row. Otherwise that item gets no target.","targetSourceUnit":"Those numbers are in","targetSourceUnitHint":"Declared here on purpose: the number column’s own unit is free text, so it is never guessed.","minutes":"minutes","save":"Save SLA setup","saveFailed":"Could not save the SLA setup. Please try again.","doneRequired":"Pick at least one Done state — the SLA can never be Met without one.","suggested":"Suggested","createStatusColumn":"Create a status column","createStatusHint":"This board has no status column yet — create one to drive the SLA.","createTapeCta":"Create a Progress Tape","createTapeHint":"This board has no tape yet. Create a starter tape (To do → In progress → Done), then tailor its stages.","creating":"Creating…","advanced":"Advanced","advancedHint":"Progress-tape binding, business-hours calendar, date sources, at-risk threshold and reusable policy.","sourceTypeHint":"Most SLAs track a status column; switch to a Progress Tape for multi-stage lifecycles.","policyOverride":"While a policy is selected it governs the targets, calendar and Done/Pause states below.","preview":"Live preview","previewOf":"{sampled} of {total} items","previewEmpty":"No items on this board yet to preview.","previewError":"Preview unavailable right now.","calendarTitle":"Business-hours calendar","calendarHint":"The clock only runs during these hours, in this timezone.","calendarDefaultWarn":"Using the default Mon–Fri 9–5 (America/Bogotá). Set the timezone and hours below so the clock matches your team.","hoursSource":"Where the working hours come from","hoursSourceShared":"A shared calendar","hoursSourceOwn":"Hours set on this column only","hoursSourceHint":"A shared calendar is edited in one place and every column using it follows. Hours set here live only on this column. Only one of the two governs — switching is reversible until you save.","governs":"Governs the number: {what}.","governsShared":"the shared calendar {name}","governsOwn":"the hours set on this column ({timezone})","governsDefault":"the default calendar ({timezone}, Mon–Fri 9:00–17:00)","governsConflict":"This column has BOTH saved: a shared calendar and its own hours. The shared calendar is what counts; the hours saved here are only used if that calendar stops existing. Saving now discards them.","governsDropsShared":"Saving releases the shared calendar: this column will count with the hours set here.","warnTitle":"Before you save","warnRed":"{breached} of your {evaluated} items land in red ({pct}%).","warnReality":"Their real time is {elapsed} median; your target is {target}.","warnClockNeverStops":"None of your items ever reached a state that stops the clock — with this setup the SLA can never read Met.","warnScopeExact":"Measured on all {total} items on this board.","warnScopeSample":"Measured on {evaluated} of the {total} items on this board.","warnAsk":"Is that what you expected? Saving is not blocked.","timezone":"Timezone","weeklyHours":"Weekly hours","holidays":"Holidays","holidaysHint":"Comma-separated dates the clock skips (YYYY-MM-DD).","starterTapeName":"Process","starterStageTodo":"To do","starterStageDoing":"In progress","starterStageDone":"Done","weekdays":{"mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat","sun":"Sun"}},"view":{"title":"SLA view","compliance":"{pct}% within SLA","suggestPaths":"Ayva: suggest paths","suggesting":"Analyzing…","suggestFailed":"Path analysis failed. Try again.","noData":"no data yet","target":"target {time}","empty":"No items yet — items appear here with their process tape as they move through the board.","noActivity":"No movement yet"},"tape":{"chooseBranch":"Choose the next step","timelineTitle":"SLA timeline","noEvents":"No events recorded yet — the timeline starts with the first status change."},"module":{"title":"SLA","subtitle":"Service-level policies, business-hours calendars & the breach dashboard","tabs":{"breaches":"Breaches","policies":"Policies","calendars":"Calendars","queue":"Queue"},"degraded":{"message":"Some data could not load. It was left out; retry to reload.","retry":"Retry","dismiss":"Dismiss"},"errorBoundary":{"title":"SLA couldn't load","body":"The SLA data couldn't be fetched. This is usually transient. Try again.","retry":"Try again"},"summary":{"open":"Open breaches","acknowledged":"Acknowledged","resolved30":"Resolved (30d)","mttr":"Mean time to resolve"},"filters":{"status":"Status","priority":"Priority","board":"Board","all":"All"},"breach":{"item":"Item","board":"Board","scope":"Scope","priority":"Priority","target":"Target","actual":"Actual","over":"Over by","breachedAt":"Breached","overall":"Overall","status":{"open":"Open","acknowledged":"Acknowledged","resolved":"Resolved"},"acknowledge":"Acknowledge","resolve":"Resolve","resolveTitle":"Resolve breach","resolveNote":"Resolution note (optional)","none":"No breaches — everything is within SLA.","ackedBy":"Acknowledged"},"policy":{"name":"Name","description":"Description","clockMode":"Clock","calendar":"Calendar","warnAt":"Warn at (%)","priorityColumn":"Priority column","targets":"Targets (status × priority)","overall":"Overall","addTarget":"Add target","newPolicy":"New policy","editPolicy":"Edit policy","deletePolicy":"Archive policy","noPolicies":"No SLA policies yet. Create one to set priority-aware targets.","clockWall":"Wall clock (24/7)","clockBusiness":"Business hours","clockBusinessHolidays":"Business hours + holidays"},"calendar":{"name":"Name","timezone":"Timezone","weekly":"Weekly hours","holidays":"Holidays","holidaysHint":"YYYY-MM-DD dates, comma separated. Only skipped when the clock has the holidays box ticked.","addRange":"Add range","removeRange":"Remove range","rangeInvalid":"The closing time must be later than the opening time","openTime":"opens","closeTime":"closes","newCalendar":"New calendar","editCalendar":"Edit calendar","deleteCalendar":"Archive calendar","noCalendars":"No calendars yet. Add one to run SLAs on business hours.","addHoliday":"Add holiday","saveFailed":"Could not save the calendar. Please try again.","usageShared":"Editing it changes the maths for all of them.","duplicateAndEdit":"Duplicate and edit","editAnyway":"Edit anyway","duplicateSuffix":"(copy)","days":{"mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday","sun":"Sunday"}},"widget":{"title":"SLA breaches","openCount":"{count} open","viewAll":"View all","none":"No open breaches"},"column":{"policyLabel":"SLA policy","policyNone":"Inline config (no policy)","policyHint":"Attach a reusable, priority-aware policy — or keep the inline target below."}}},"serviceBoards":{"title":"Service Boards","subtitle":"Your service boards, service-first — SLA lanes, process tapes, one-click workflows.","disabled":"The Service Boards module is turned off. An administrator can enable it under Admin → Modules.","empty":{"body":"No service boards yet. Boards with an SLA column appear here automatically — or add any board manually."},"summary":{"compliance":"{pct}% within SLA"},"lanes":{"unmeasured":"No SLA signal"},"queue":{"searchPlaceholder":"Search items…","anyAssignee":"Any assignee","noItems":"Nothing matches — clear the filters or pick another board.","openBoard":"Open board","openOnBoard":"Open on the board","openTicket":"Open the linked ticket","buttonFired":"Button fired.","buttonFailed":"The button action failed.","showingOf":"{loaded} of {total}","loadMore":"Load {n} more","loadMoreFailed":"Could not load more items."},"actionBar":{"ran":"Workflow queued — running now.","runFailed":"Could not run the workflow.","runHint":"Run this workflow now","disabledHint":"This automation is disabled on the board."},"bulk":{"selected":"{n} selected","select":"Select item","setStatus":"Set status…","assign":"Assign…","applied":"Applied to the selected items.","failed":"Bulk update failed.","clear":"Clear selection"},"rail":{"itemTitle":"Item","status":"Status","noStatus":"No status","assignee":"Assignee","unassigned":"Unassigned","editFailed":"Could not save the change."},"workflows":{"title":"Workflows","open":"Workflows","intro":"Buttons and workflows here are real board automations — everything you create is also visible and editable on the board itself.","boardAutomations":"Board automations","none":"This board has no automations yet — create one below.","pin":"Pin to the Action Bar","unpin":"Unpin from the Action Bar","pinFailed":"Could not update the pin.","confirmRun":"Run \"{name}\" on {n} matching item(s)?","irreversible":"This workflow includes actions that cannot be undone.","runNow":"Run now","recipes":"Service workflow presets","recipesHint":"One-click service workflows, wired to this board’s real columns.","recipeNames":{"escalate_breach":"Escalate when an SLA breaches","dispatch":"Dispatch to me","close_out":"Notify on close-out"},"create":"Create","created":"Workflow created — it now lives on the board.","createFailed":"Could not create the workflow.","missing":"Missing on this board","missingParts":{"sla_column":"an SLA column","status_column":"a status column","person_column":"a person column","done_label":"a done-type status label"}},"settings":{"title":"Module settings","addBoard":"Add board","addHint":"Boards with an SLA column appear automatically. Add any other board you can access.","pickBoard":"Pick a board…","add":"Add","added":"Board added to Service Boards.","addFailed":"Could not add the board.","currentBoard":"Current board","removeHint":"Remove \"{name}\" from the Service Boards roster (the board itself is untouched).","remove":"Remove from module","removed":"Board removed from the roster.","removedButAuto":"Removed — but it still appears automatically because it has an SLA column.","removeFailed":"Could not remove the board.","managersOnly":"Board managers only."}},"marketingAnalytics":{"title":"Analytics","description":"Email engagement, funnel, attribution and deliverability across the Marketing Hub","tabs":{"overview":"Overview","funnel":"Funnel","attribution":"Attribution","campaigns":"Campaigns","deliverability":"Deliverability","settings":"Settings"},"range":{"last7":"Last 7 days","last30":"Last 30 days","last90":"Last 90 days","label":"Range"},"kpi":{"sends":"Sends","delivered":"Delivered","openRate":"Open rate","clickRate":"Click rate","bounceRate":"Bounce rate","complaintRate":"Complaints","unsubRate":"Unsubscribes","ctor":"Click-to-open","vsPrev":"vs previous period","noPrev":"no prior data"},"overview":{"sendsOverTime":"Sends over time","sendsOverTimeHint":"Delivered vs bounced by day.","recordsByBoard":"Records by board","recordsByBoardHint":"Everything the Marketing Hub manages, live from One Boards.","volume":"Volume","inFlight":"In flight","suppressed":"Suppressed","failed":"Failed","totalOpens":"Total opens","totalClicks":"Total clicks","avgLatency":"Avg. delivery time","seconds":"{n}s"},"heatmap":{"title":"Best send times","hint":"Open + click density by weekday and hour — where your audience engages."},"funnel":{"title":"Lead funnel","hint":"Conversion between pipeline stages, live from the Leads board.","leadsByGroup":"Leads by group","conversion":"Conversion","lost":"Lost","ofFirst":"of first","empty":"No staged leads yet. Generate or import leads to see the funnel."},"attribution":{"leadsBySource":"Leads by source","leadsBySourceHint":"Which channel each lead came from (Apollo, events, web, manual…).","method":"First-touch, source-of-record","methodNote":"Attribution is first-touch: each lead is credited to its source-of-record. Multi-touch / UTM attribution is a Phase 5 follow-up (needs web-analytics ingestion the platform does not have yet).","campaignConversion":"Campaign → pipeline","campaignConversionHint":"Where a campaign email matched a lead by address.","sentOpenedLeads":"{sent} sent → {opened} opened → {leads} leads","empty":"No source data yet. Sources are stamped as leads arrive from each connected platform."},"campaigns":{"title":"Campaign performance","hint":"Per-campaign engagement. Select a campaign for its detail.","col":{"campaign":"Campaign","sent":"Sent","delivered":"Delivered","openRate":"Open %","clickRate":"Click %","bounceRate":"Bounce %","unsubRate":"Unsub %"},"detail":"Campaign detail","selectHint":"Select a campaign from the table to see its time series, top domains and send-time heatmap.","topDomains":"Top recipient domains","empty":"No campaign sends in this range yet. Campaigns stamp metadata.campaignId on each send."},"deliverability":{"title":"Deliverability","reputation":"Mailbox reputation","reputationHint":"Per sending mailbox, from Apollo — polled and cached.","warmup":"Warm-up","warmupOn":"Warming","warmupOff":"Off","dailyLimit":"Daily limit","verification":"Address verification","verificationHint":"Valid / risky / invalid / catch-all from Apollo.","bounceLogs":"Bounce logs","bounceLogsHint":"Real Resend-side bounces from the email ledger. Apollo-sent bounces open in Apollo.","openInApollo":"Open bounce logs in Apollo","domainProtection":"Domain protection","domainProtectionHint":"SPF / DKIM / DMARC posture for {domain} — the “never get blocked” cockpit.","checkManually":"Check manually","lastPolled":"Last polled {when}","neverPolled":"Not polled yet — enable the deliverability sync to start.","engineOff":"No deliverability engine configured. Connect Apollo in Admin → Platforms.","bounceCol":{"address":"Address","kind":"Type","reason":"Reason","when":"When","source":"Source"},"kind":{"hard":"Hard","soft":"Soft","unknown":"Unknown"},"noBounces":"No bounces in this range — good news.","noMailboxes":"No mailbox snapshots yet. Run the deliverability sync (or enable its cron) to populate reputation."},"actions":{"export":"Export CSV","exporting":"Exporting…","repoll":"Refresh from Apollo","repolling":"Refreshing…","verifyAddress":"Verify address","verifying":"Verifying…","verifyPlaceholder":"name@example.com","repollDone":"Deliverability refreshed from Apollo.","repollUnavailable":"Apollo is not configured — nothing to refresh.","verifyUnavailable":"Address verification is not available from the current engine."},"notes":{"opensCeiling":"Opens are a ceiling: Apple Mail Privacy Protection auto-loads the tracking pixel, so open counts overstate real reads. Clicks are the reliable engagement signal.","unsubMissing":"Unsubscribe tracking lands with the Campaigns phase (suppression list). Until then this reads 0 — not a real 0%."},"common":{"noData":"No data for this range yet.","close":"Close"}},"common":{"appName":"Redsis One","appShortName":"Redsis One","newTab":"New tab","loading":"Loading…","save":"Save","cancel":"Cancel","search":"Search","seeAll":"See all","new":"New","comingSoon":"coming soon","none":"—","signOut":"Sign out","back":"Back","close":"Close","closeTab":"Close tab","closeOthers":"Close other tabs","closeToRight":"Close tabs to the right","duplicateTab":"Duplicate tab","copyLink":"Copy link","pinTab":"Pin tab","reopenTab":"Reopen closed tab","reloadTab":"Reload tab","tabLimitReached":"Tab limit reached — close a tab to open a new one.","tabLoadError":"Failed to load","retryLoad":"Retry","openInNewTab":"Open in new tab","openHere":"Open here","splitView":"Split view","closeSplit":"Close split","popOut":"Pop out","suspendTab":"Suspend tab","resumeTab":"Resume tab","tabAutoClosed":"Tab closed","undo":"Undo"},"menuFavorites":{"favorites":"Favorites","recent":"Recent","addFavorite":"Add to favorites","removeFavorite":"Remove from favorites"},"nav":{"pinnedHere":"Pinned here","backTo":"Back to {title}","dashboard":"Dashboard","settings":"Settings","admin":"Admin","modules":"Modules","appsAndTools":"Apps & Tools","pinned":"Pinned","pinnedHint":"Hover an item below and click the pin to add it here.","shortcuts":{"addToMenu":"Add to menu","menus":"Menus","hubs":"Hubs","added":"Added to menu","addError":"Could not add to menu — please try again.","removed":"Removed from menu","myShortcuts":"My shortcuts","myShortcutsHint":"Boards, views and dashboards you pinned to a menu. Remove or reorder them here.","empty":"No shortcuts yet.","remove":"Remove","board":"Board","view":"View","dashboard":"Dashboard"},"home":"Home","myWork":"My Work","myViews":"My Views","filterPlaceholder":"Filter modules and apps…","filterShortcut":"Press / to focus this","clearFilter":"Clear filter","noMatches":"No matches.","noMatchesTitle":"Nothing matches your filter","noMatchesHint":"No modules or apps contain \"{q}\".","collapseSidebar":"Collapse sidebar","expandSidebar":"Expand sidebar","allApps":"All apps","noPinsTitle":"No pinned apps yet","noPinsHint":"Open All apps to pin your favorites here.","pin":"Pin","unpin":"Unpin","launcherHint":"Pin the apps you use most for one-tap access.","ebayOrders":"Orders","ebayInventory":"Inventory","ebayFinances":"Finances","ebayMessages":"Messages","dataStudio":"Data Studio","migrationCenter":"Migration Center","integrationManagement":"Integration Management","aiStudio":"AI Studio","sourceStudio":"Source Studio","sectionWork":"Work","sectionCompany":"Company Modules","sectionInnovations":"Innovations","sectionIT":"IT","sectionPortalAdmin":"Portal Administration"},"sourceStudio":{"description":"Search design files & product info across every connected source.","searchPlaceholder":"Search parts, 3D models, CAD, datasheets…","search":"Search","searching":"Searching…","empty":"Search across your connected sources to begin.","noResults":"No results found.","freeOnly":"Free only","allTypes":"All types","viewSource":"View source","open":"Open","sources":"Sources","needsSetup":"Needs setup","error":"Something went wrong. Please try again.","results":"results","tabSearch":"Search","tabLibrary":"Library","save":"Save","saved":"Saved","remove":"Remove","emptyLibrary":"Your saved items appear here."},"marketing":{"prospecting":{"eyebrow":"Marketing · Prospecting Engine","title":"Prospecting Engine","description":"Autonomous lead generation: Apollo company search → Claude scoring → contact enrichment → optional Apollo sequence enrollment. The daily run is driven by n8n (POST /api/prospecting/run); use the test below to see live output.","notConfigured":"is not set — runs will fail. Configure it in Setup Center (Admin → Platforms → Apollo).","testRunTitle":"Test run","testRunHint":"Runs a small 2-company slice for one category × country so you can see scoring + enrichment live. The full ICP (4 categories × 3 countries) runs on the n8n schedule.","howTitle":"How the scheduled run works (Hybrid)","howBody1":"n8n owns the schedule, retries and observability. On its daily trigger it calls POST /api/prospecting/run with an Authorization: Bearer CRON_SECRET header.","howBody2":"That endpoint runs the same engine as the button above across the full ICP, applies credit guardrails, and (when configured) enrolls qualified contacts into an Apollo sequence. It returns the structured result n8n can route onward.","howBody3":"Phase 2 adds persistence + cross-run dedup + the Prospect Inbox; Phase 3 adds push-to-Redix (pending the Redix leads write API) and draft-email outreach.","category":"Category","country":"Country","runButton":"Run test (2 companies)","running":"Running…","runHint":"Live call — spends a few Apollo lead credits + one Claude call per company.","runTooltip":"Runs a small 2-company test (uses Apollo + Claude credits)","requiresRun":"Requires prospecting.run","colCompanies":"Companies","colContacts":"Contacts","colCoSearches":"Co. searches","colEnrichments":"Enrichments","noResults":"No companies cleared the score threshold this run.","colName":"Name","colTitle":"Title","colEmail":"Email","colConfidence":"Confidence","nextLabel":"Next:"}},"orgMatrix":{"title":"Org & Identity Matrix","subtitle":"Compose and govern every person’s org attributes — job function, role, team, cost center, hierarchy and de-identification policy.","tabMatrix":"Matrix","tabJobFunctions":"Job functions","tabCostCenters":"Cost centers","tabTeams":"Teams","tabDimensions":"Dimensions","searchPeople":"Search people…","selected":"selected","bulkSetJobFunction":"Set job function…","bulkApplied":"Applied to","colPerson":"Person","colJobFunction":"Job function","colRole":"Role","colCostCenter":"Cost center","colTeams":"Teams","colDepartment":"Department","colActions":"Actions","override":"override","recompose":"Recompose from source modules","recomposed":"Profile recomposed","noPeople":"No people match your search.","newJobFunction":"New job function","editJobFunction":"Edit job function","noJobFunctions":"No job functions yet.","newCostCenter":"New cost center","editCostCenter":"Edit cost center","noCostCenters":"No cost centers yet.","noParent":"— None —","newTeam":"New team","editTeam":"Edit team","noTeams":"No teams yet.","noCostCenter":"— None —","fieldName":"Name","fieldCode":"Code","fieldDescription":"Description","fieldParent":"Parent","fieldCostCenter":"Cost center","saved":"Saved","archived":"Archived","dimensionsHelp":"Each attribute carries a disclosure level. Public attributes are stamped onto Ayva signals; aggregated only at team/cost-center level; sealed (identity) is never carried and needs a 2-key to re-link.","disclosurePublic":"Public","disclosureAggregated":"Aggregated","disclosureSealed":"Sealed","disclosureSaved":"Disclosure updated","system":"system","readOnly":"Read-only"},"ayvaEvals":{"introBody":"The golden eval harness is readiness gate G1 — it must be live and green before Ayva autonomy (Stage 4) can be enabled. It scores five categories at a fixed pass bar of 100%: any sub-100 category is a real regression. This admin run never calls a live model — it scores the checked-in cassettes and the real deterministic guards/router. The authoritative, engine-driven gate is CI.","recordModeArmed":"Record mode is armed","recordModeHint":"re-baselining cassettes from the live provider runs offline","category":"Category","cases":"Cases","passRate":"Pass rate","threshold":"Threshold","status":"Status","recentRuns":"Recent runs","when":"When","source":"Source","assertions":"Assertions","result":"Result"},"ayvaBuildJobs":{"planeOn":"Builder plane is ON.","planeOff":"Builder plane is OFF (recommended in prod).","selectJob":"Select a job to see its detail.","goal":"Goal","requester":"Requester","worker":"Worker","toolShape":"Tool shape","result":"Result","output":"Output"},"ayvaControlCenter":{"failingCases":"Failing cases","tab":"Control Center","intro":"One view of Ayva — her switches, what she costs, what she does, and what she is allowed to do. The actual controls live in the other tabs; this is the at-a-glance summary.","statusTitle":"Status & kill switch","statusHint":"The master switches that govern Ayva. Click any switch to jump to Configuration, where you change it.","on":"On","off":"Off","master":"Ayva (master switch)","masterHint":"Turns the whole assistant on or off for everyone.","tools":"System tools","toolsHint":"Lets Ayva look things up in the platform — always within the user’s own permissions.","writeTools":"Write actions","writeToolsHint":"Lets Ayva create or change things (e.g. add an item). Needs this switch AND the user’s opt-in permission.","webAccess":"Web access","webAccessHint":"Lets Ayva search the web for answers.","continuity":"Continuity & memory","continuityHint":"Ayva remembers durable facts and works through multi-step tasks.","defaultModel":"Default model","defaultModelHint":"Used when a person hasn’t picked their own model.","change":"Change","usageTitle":"Usage & cost","tokens30":"Tokens (30 days)","cost30":"AI cost (30 days)","activeUsers30":"Active users (30 days)","viewUsage":"View full usage","activityTitle":"Activity & audit","turns24":"Turns (24h)","blocked24":"Blocked / refused (24h)","activeUsers24":"Active users (24h)","tokens24":"Tokens (24h)","viewActivity":"View activity","grantsTitle":"What Ayva can do","grantsHint":"Every tool Ayva can use, and the permission that gates each. Write tools also need the “Write actions” switch above. Ayva can never do anything the person using her couldn’t.","grantsTotal":"tools","grantsRead":"read","grantsWrite":"write","colTool":"Tool","colDoes":"What it does","colGatedBy":"Gated by","write":"Write","read":"Read","optIn":"Opt-in","optInHint":"Granted per person only — never on by default.","noTools":"No tools are registered.","writeOffNote":"Write actions are currently OFF — Ayva can read but cannot change anything until the “Write actions” switch is on."},"aiStudio":{"svcCreateAccountTitle":"New service account","svcCreateAccountHint":"A service account is a NEW account that never signs in. It must already exist in Central One. Pick a non-admin role; the account can only be granted tokens while it holds no sensitive permission.","svcEmail":"E-mail","svcDisplayName":"Name","svcRole":"Role","svcCreateAccount":"Create service account","svcAccountCreated":"Service account created. You can now issue it a token below.","svcTitle":"Service accounts","svcIntro":"Tokens for accounts that never sign in, such as the identity Claude seats use to write board rows. A token acts with that account’s own permissions and must expire within {days} days.","svcFreshTitle":"Token for {account} — store it now","svcFreshShown":"Shown once. Expires {date}. For Claude seats run","svcFreshAfter":"in a terminal and paste it at the hidden prompt. Never paste it into a chat.","svcTokenField":"New service-account token","svcDismiss":"Dismiss","svcEmpty":"No service accounts yet. Create one above.","svcAccount":"Service account","svcTokenName":"Token name (where it is used)","svcExpiresIn":"Expires in","svcDays":"{n} days","svcWritePerms":"Write permissions (default: read-only)","svcWorking":"Working…","svcCreate":"Create service-account token","svcColAccount":"Account","svcColName":"Name","svcColCreated":"Created","svcColLastUsed":"Last used","svcColExpires":"Expires","svcNever":"never","svcRevoke":"Revoke","svcYesRevoke":"Yes, revoke","svcRevokeFailed":"Revoke failed","newTokenField":"New token","retryTitle":"Couldn’t load {what} right now.","retryHint":"This is usually a momentary hiccup — reload the page to try again.","retryWhatTokens":"MCP tokens","retryWhatOverview":"the Ayva overview","retryWhatClaudeDashboard":"the Claude dashboard","retryWhatProviderKeys":"provider keys","retryWhatUserAccess":"user access","retryWhatMonitoring":"monitoring data","retryWhatUsage":"usage data"},"header":{"searchPlaceholder":"Search…","openMenu":"Open menu","theme":"Theme","language":"Language","dateFormat":"Date format","timezoneTitle":"Active timezone: {zone}. Click to change.","openSidePanel":"Open side panel","closePanel":"Close panel","hideWidgetsPanel":"Hide widgets panel","showWidgetsPanel":"Show widgets panel","widgetsEdgeTab":"Widgets"},"shellDock":{"showTools":"Show tools","tools":"Tools","showAssistant":"Show Ayva","assistant":"Ayva"},"focusMode":{"enter":"Focus mode","exit":"Exit focus mode","enterHint":"Hide panels for distraction-free editing (F)","exitHint":"Show panels again (F)"},"navigation":{"back":"Back","backTo":"← {label}"},"notFound":{"title":"Page not found","body":"This page doesn't exist or may have moved.","back":"Go back","home":"Back to home","searchPlaceholder":"Search boards, apps and settings…","searchHint":"Tip: press ⌘K inside the app to search from anywhere."},"pwa":{"install":"Install app","installAria":"Install Redsis One as an app","installed":"Redsis One installed","iosTitle":"Install Redsis One","iosStep1":"Tap the Share button in Safari","iosStep2":"Tap \"Add to Home Screen\"","safariTitle":"Install Redsis One","safariStep1":"In the menu bar, open the File menu","safariStep2":"Choose \"Add to Dock…\"","chromeTitle":"Install Redsis One","chromeStep1":"Click the install icon at the right of the address bar","chromeStep2":"Or open the browser menu → \"Install Redsis One\"","offlineTitle":"You're offline","offlineBody":"{app} will reconnect automatically when your connection returns.","offlineRetry":"Try again","offlineCheckConnection":"Check your Wi-Fi or mobile data, then tap Try again.","offlineBack":"Back","dismiss":"Dismiss","a2hsDefaultAppName":"this app","a2hsAria":"Install this app","a2hsTitle":"Add {app} to your home screen","a2hsBodyInstall":"Install the app for one-tap access and a full-screen experience — no browser bar.","a2hsBodyIos":"Tap the Share icon below, then Add to Home Screen to install this app."},"webPush":{"chatTitle":"New message from {name}","ticketStatusTitle":"Ticket update","ticketStatusBody":"{ticket}: {status}","ticketStatus":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"},"announcementTitle":"New announcement","stopAssignedTitle":"New stop assigned","stopAssignedBody":"You were assigned: {ticket}","stopAssignedBodyGeneric":"A new stop was added to your route.","stopRemovedTitle":"Stop removed from your route","stopRemovedBody":"Removed: {ticket}","stopRemovedBodyGeneric":"A stop was removed from your route.","ticketReturnedTitle":"Ticket returned: {ticket}","ticketReturnedTitleGeneric":"A ticket was returned to you","ticketReturnedBody":"Coordinator: {reason}","ticketReturnedBodyGeneric":"The coordinator returned a completed ticket for another visit.","routePublishedTitle":"Your route is ready","routePublishedBody":"Your route is published with {count} stops.","routePublishedBodyGeneric":"Your route for the day has been published.","partsApprovedTitle":"Parts request approved","partsApprovedBody":"Approved: {part}","partsApprovedBodyGeneric":"Your parts request was approved.","partsDeclinedTitle":"Parts request declined","partsDeclinedBody":"Declined: {part}","partsDeclinedBodyGeneric":"Your parts request was declined.","partsDispatchedTitle":"Part dispatched","partsDispatchedBody":"Dispatched: {part}","partsDispatchedBodyGeneric":"Your part was dispatched.","partReturnClosedTitle":"Part return closed","partReturnClosedBody":"Return received: {ticket}","partReturnClosedBodyGeneric":"A coordinator received your returned part.","enableTitle":"Turn on notifications","enableBody":"Get notified the moment something needs your attention — don't rely on having the tab open.","enableButton":"Turn on notifications","enabling":"Turning on…","enabledLabel":"Notifications are on","disableButton":"Turn off","disabling":"Turning off…","dismiss":"Not now","blockedNotice":"Notifications are blocked in your browser settings. Enable them there to turn this on.","unsupportedNotice":"Push notifications aren’t supported in this browser.","unavailableNotice":"Push notifications aren’t set up yet.","errorNotice":"Something went wrong turning that on. Try again in a moment.","iosInstallTitle":"Install first for notifications","iosInstallBody":"On iPhone/iPad, add this app to your Home Screen first — Safari only allows notifications for installed apps.","settingsTitle":"Push notifications","settingsHint":"Get browser notifications for updates, even when this tab isn’t open.","techEnRouteTitle":"Your technician is on the way","techEnRouteBody":"On the way — about {min} min out. Tap to track live.","techEnRouteBodyGeneric":"Your technician is on the way. Tap to track live."},"customerComms":{"sms":{"enRouteWithEta":"Your technician {name} is on the way — about {min} min out. Track live: {url}","enRouteNoEta":"Your technician {name} is on the way. Track live: {url}","enRouteWithEtaNoName":"Your technician is on the way — about {min} min out. Track live: {url}","enRouteNoEtaNoName":"Your technician is on the way. Track live: {url}"},"dispatch":{"notifyTitle":"Tech: {kind}","body":"{tech} flagged “{kind}” on {ticket}.","bodyWithNote":"{tech} flagged “{kind}” on {ticket}: {note}","aTech":"A technician","kinds":{"running_late":"Running late","on_my_way":"On my way","need_access":"Needs site access","has_part":"I have the part"}},"track":{"heading":"Track your technician","poweredBy":"Live tracking by Redsis One","inactive":"This tracking link is no longer active.","notTracking":"Your technician isn’t on the way right now. This page updates automatically.","arrived":"Your technician has arrived.","arrivedNamed":"{name} has arrived.","enRoute":"Your technician is on the way.","enRouteNamed":"{name} is on the way.","locationSoon":"Live location will appear shortly.","etaLine":"Arriving around {time}","distanceLine":"{km} km away","updatedLine":"Updated {time}","viewOnMap":"View on map","destinationLine":"Destination: {label}","loadingMap":"Loading map…"},"text":{"heading":"Text customer","placeholder":"Message the on-site contact…","send":"Send text","sending":"Sending…","sent":"Text sent","error":"Could not send the text.","errSendLimit":"Too many texts were sent for this ticket today. Try again later or call the customer.","errInvalidDestination":"The phone number on file cannot receive texts from the app. Ask the office to check it."},"notify":{"heading":"Notify dispatch","notePlaceholder":"Add a note (optional)…","running_late":"Running late","on_my_way":"On my way","need_access":"Need access","sent":"Dispatch notified: {kind}","error":"Could not notify dispatch."}},"pwaAdmin":{"title":"App features","subtitle":"Turn Redsis One app (PWA) features on or off for everyone.","soon":"Soon","features":{"installButton":{"label":"Install button","description":"Show the \"Install app\" button so people can install Redsis One on their device."},"offline":{"label":"Offline & instant load","description":"Load instantly and show a friendly offline page when there is no connection."},"notificationBadge":{"label":"Icon badge count","description":"Show an unread count on the app icon, like Mail."},"pushNotifications":{"label":"Push notifications","description":"Send alerts to the lock screen even when Redsis One is closed."},"cameraScanning":{"label":"Camera scanning","description":"Scan barcodes and QR codes with the device camera."}}},"theme":{"light":"Light","dark":"Dark","system":"System"},"userMenu":{"role":"Role","departments":"Departments","lastLogin":"Last login","firstVisit":"first visit","profile":"Profile","settings":"Settings","admin":"Admin","developerTools":"Developer Tools","redixIntegrations":"Redix Integrations","signOut":"Sign out","accounts":"Accounts","addAccount":"Add another account","signOutAll":"Sign out of all accounts","switchError":"Couldn't switch account. Try again.","viewingAs":"Viewing as","viewAs":"View as","viewAsPreviewNote":"Preview only — your writes still use your admin permissions.","exit":"Exit"},"viewAsBanner":{"viewingAsRole":"Viewing as {role}","previewOnlyWritesAs":"Preview only — your writes still use {role}.","exitViewAs":"Exit view-as"},"roles":{"admin":"Admin","member":"Member","viewer":"Viewer"},"home":{"greetingMorning":"Good morning","greetingAfternoon":"Good afternoon","greetingEvening":"Good evening","welcomeFallback":"Welcome","subtitle":"Here is what is happening across your workspace.","firstVisit":"Welcome to the portal","lastSeenToday":"You were here earlier today","lastSeenYesterday":"You were here yesterday","lastSeenDays":"Last visit was {days} days ago","newSinceTitle":"New since you were here: {title}","quickActions":"Quick actions","quickStats":"Quick stats","statModules":"Modules","statModulesCtx":"available to you","statApps":"Apps","statAppsCtx":"in your launcher","statAnnouncements":"Announcements","statAnnouncementsCtx":"to read","statDaysSinceLogin":"Days since","statDaysSinceLoginCtx":"your last login","recentModules":"Your modules","openModule":"Open","noModules":"No modules are available to you yet. Ask an administrator to grant your department access.","featuredAnnouncementTitle":"Latest announcement","activityTitle":"Your recent activity","activityNone":"Nothing yet — your activity will show here.","activityActions":{"actionLogin":"Signed in","actionLogout":"Signed out","actionMfaEnabled":"Enabled two-factor sign-in","actionMfaDisabled":"Disabled two-factor sign-in","actionPasswordChanged":"Changed password","actionProfileUpdated":"Updated profile","actionInvited":"Invited a teammate","actionGeneric":"Account activity"},"whatsNew":{"eyebrow":"Activity","title":"What's new","subtitleWithUnread":"{n} new since you last looked","subtitleAllRead":"You're all caught up","markAllRead":"Mark all read","openLabel":"Open","unreadAriaLabel":"{title} — unread","audienceTooltip":"Who this update is primarily for","live":"Live","liveHint":"Updates automatically through the day","latest":"Latest: {date}","filter":{"all":"All","unread":"Unread","foryou":"For you"},"category":{"portal":"Portal","module":"Module","feature":"Feature","fix":"Fix","admin":"Admin","infra":"Behind the scenes"},"audience":{"everyone":"Everyone","admin":"Admin","editor":"Editor","external":"External","developer":"Developer"},"emptyAll":"Nothing has shipped yet.","emptyUnread":"You're all caught up.","footer":"New ships appear here automatically. Click any row to open it and mark it read."},"whatsNewSpotlight":{"eyebrow":"What's new","titleN":"{n} new since you were here","openCta":"Check it out","seeAll":"See all","dismiss":"Dismiss","toastTitle":"New since your last visit","toastBody":"{n} new features are waiting — take a look."},"commsHome":{"title":"Communications","myDashboard":"My Dashboard","switchToDashboard":"Switch to your customizable dashboard","sources":"Sources","overview":"Overview","today":"Today","messages":"Messages","mail":"Mail","gmail":"Gmail","microsoft365":"Microsoft 365","ayva":"Ayva","connectYourInbox":"Connect your inbox","connectYourCalendar":"Connect your calendar"},"overviewTab":{"customWidgets":"Custom Widgets","nothingAssigned":"Nothing assigned right now"}},"whatsNewPage":{"welcomeEyebrow":"What's new","welcomeTitle":"Welcome back, {name}","welcomeTitleNoName":"Here's what's new","welcomeSubtitleN":"{n} new since you were here — take a look.","welcomeSubtitleZero":"You're all caught up. Here's the latest.","browseTitle":"What's New","browseSubtitle":"Everything we've shipped, newest first.","openCta":"Check it out","continueCta":"Continue to the portal","seeAll":"See everything","dontShowAgain":"Don't show this at sign-in again","dontShowAgainHint":"You can turn it back on under Settings → Notifications.","backHome":"Back to home","empty":"Nothing new yet — check back soon."},"widgets":{"myWorkTitle":"My Work","catalog":{"collect-scan":{"title":"Barcode / QR collector","description":"Scans (hardware scanner or camera) write straight into a board column — new item per scan, or one item updated."},"collect-signature":{"title":"Signature pad","description":"Draw a signature (mouse, touch or pen) and save it straight into a signature column — signer and timestamp stamped server-side."},"collect-rating":{"title":"Rating input","description":"Tap a star to write a rating into a board column — new rated record per tap, or re-rate one item."},"collect-photo-ocr":{"title":"Photo + OCR","description":"Snap a photo, extract its text on-device (where the browser supports it), review, and write it into a text column."},"collect-quick-add":{"title":"Quick add","description":"One-line item capture — type a title, press Enter, it lands in your chosen board group. Jot now, classify later."},"ayva-chat":{"title":"Ayva","description":"Chat with Ayva — streaming replies, voice, memory, and live token counts."},"comms":{"title":"Communications","description":"Unread mail, recent messages across every platform, and today’s meetings."},"printing":{"title":"Printing","description":"Quick-print a label template to a network printer, plus printer status."},"number-kpi":{"title":"Number","description":"A single metric — count, sum, or average — from any board."},"status-battery":{"title":"Status breakdown","description":"Distribution of a status column as a battery bar."},"board-table":{"title":"Board table","description":"A board's rows in a compact table."},"board-list":{"title":"Item list","description":"A board's items as a compact list, optionally ranked by a column."},"board-gauge":{"title":"Gauge","description":"A metric as a gauge against a min/max range."},"board-progress":{"title":"Goal progress","description":"A metric as progress toward a target."},"board-recent":{"title":"Recent activity","description":"A board's most recently updated items."},"board-group-counts":{"title":"Items by group","description":"How a board's items split across its groups."},"board-people-load":{"title":"Workload by person","description":"How a board's items (or summed load) split across assignees."},"board-stat-compare":{"title":"Comparison","description":"Two metrics from a board side by side, with the delta."},"board-bar-chart":{"title":"Bar chart","description":"Items grouped by a column, as bars (count or a reduced value)."},"board-pie-chart":{"title":"Pie chart","description":"Share of items across a column, as a pie (count or a reduced value)."},"board-line-chart":{"title":"Line chart","description":"A number column plotted over a date (or numeric) column."},"board-area-chart":{"title":"Area chart","description":"A number column plotted over time, with the area filled."},"unifi-network":{"title":"UniFi network","description":"Fleet overview — sites online, devices online/offline, last sync."},"unifi-sites":{"title":"UniFi sites","description":"Per-site list — status, device counts, internet issues."},"unifi-access":{"title":"UniFi door access","description":"Door access activity — granted/denied totals + recent events."},"fs-kpi-tile":{"title":"Service KPI","description":"A field-service resolution metric (MTTR, FTF, SLA, …) for a window."},"fs-kpi-trend":{"title":"Service KPI trend","description":"Daily trend of a field-service metric, from nightly snapshots."},"fs-kpi-leaderboard":{"title":"Tech leaderboard","description":"Service providers ranked by completions, with MTTR and first-time-fix."},"fs-kpi-aging":{"title":"Ticket aging","description":"Open field-service tickets bucketed by how long they’ve been open."},"fs-kpi-client-health":{"title":"Client health","description":"Per-client service health — SLA, open/at-risk work, MTTR."},"quickbooks-activity":{"title":"QuickBooks activity","description":"Everything sent to QuickBooks from Redsis One, in plain words — with retry and export."}},"clock":{"title":"Clock","description":"Current time, optional timezone"},"custom":{"title":"Custom widget","description":"A widget designed in the Widget Builder","pickWidget":"Pick a custom widget in settings.","pickerLabel":"Custom widget","pickerPlaceholder":"Choose a widget…","noneAvailable":"No custom widgets are available to you yet.","loading":"Loading…","dataError":"Could not load data.","noAccess":"This widget is not available to you.","archived":"This widget was archived.","unknownElement":"Unsupported element","brokenElement":"This element could not render.","unbound":"Bind this element to data in the builder.","noData":"No data yet.","needsSeries":"Pick an X column and a numeric column.","pickCategory":"Pick a category column.","itemColumn":"Item","emptyText":"Add text…","emptyImage":"Add an image URL","button":"Button","pickSdkWidget":"Pick a widget to embed."},"stickyNote":{"title":"Sticky note","description":"A quick free-text note"},"linkTile":{"title":"Link tile","description":"Pin a shortcut to any page or URL"},"weather":{"title":"Weather","description":"Current conditions for a place you choose"},"ayva":{"title":"Ayva","description":"Launch the guided in-portal assistant"},"ayvaWorkspace":{"title":"Ayva AI","description":"Your personal AI assistant — many chats, your memory, your documents","newChat":"New chat","empty":"No chats yet — start one below.","placeholder":"Message Ayva…","send":"Send","back":"Back","loading":"Loading…","off":"Ayva is turned off for your account. An admin can enable it in Admin → Ayva.","moduleOff":"Ayva is not turned on yet. Check back soon.","rename":"Rename","delete":"Delete","model":"Model","newFolder":"New folder","ungrouped":"Chats","thinking":"Ayva is thinking…","you":"You","chats":"Chats","knowledge":"Knowledge","memory":"Memory","memoryHint":"Teach Ayva facts to always remember about you or your work.","memoryPlaceholder":"e.g. I manage the Bogotá warehouse; always use 24h time.","addMemory":"Remember","documents":"Documents","docsHint":"Add notes or paste text Ayva can reference in your chats.","docTitlePlaceholder":"Document title","docBodyPlaceholder":"Paste text here…","addDoc":"Add document","remove":"Remove","docsLimit":"{count} of {max} documents"},"chat":{"title":"Chat","description":"Message your team — one place for all your chats","empty":"No conversations yet","newChat":"New chat","startConversation":"Start a conversation","noPeople":"No one in your group to chat with yet","messagePlaceholder":"Write a message…","send":"Send","back":"Back","loading":"Loading…","failed":"Couldn’t load chat","you":"You","teamsUnavailable":"Teams is unavailable — reconnect in Microsoft settings.","search":"Search conversations","noMatches":"No matches","ayva":"Ayva","videoCall":"Video call","teamsVideo":"Teams meeting","edit":"Edit","deleteMessage":"Delete","edited":"edited","save":"Save","cancel":"Cancel","deleteConfirm":"Delete this message?","reply":"Reply","replyingTo":"Replying to","forward":"Forward","forwardTo":"Forward to…","messageResults":"Messages","pin":"Pin","unpin":"Unpin","pinned":"Pinned","star":"Save","unstar":"Unsave","saved":"Saved","savedEmpty":"No saved messages yet"},"reHomed":{"companyNews":"Company news","shortcuts":"Shortcuts","calendar":"Calendar","todo":"To-do","adminShortcuts":"Admin shortcuts","modules":"Modules","fx":"Exchange rates","whatsNew":"What's new"},"boardsRecent":{"title":"Recent boards","description":"Your recently updated boards across your workspaces","viewAll":"All workspaces","updated":"Updated {when}","justNow":"just now","empty":"No boards yet — browse all workspaces to get started.","error":"Couldn’t load your boards.","loading":"Loading boards…"},"boardsActivity":{"title":"Boards activity","description":"Recent changes across the boards you can see","empty":"New changes in your boards will appear here as you work.","error":"Couldn’t load activity.","loading":"Loading activity…","justNow":"just now","you":"You","someone":"Someone","actions":{"item_created":"created item","item_updated":"updated item","item_deleted":"archived item","item_restored":"restored item","item_moved":"moved item","column_value_changed":"changed cell","group_created":"created group","group_updated":"updated group","group_deleted":"archived group","column_created":"added column","column_updated":"updated column","column_deleted":"removed column","board_updated":"updated board","board_created":"created board"}},"myBugReports":{"title":"My bug reports","description":"Your reported bugs — open count and latest updates","openReports":"Open My reports","open":"open","total":"total","empty":"You haven’t reported any bugs. Use the Report a Bug widget when something breaks.","error":"Couldn’t load your reports.","loading":"Loading reports…","openTicket":"Open →","status":{"working":"Working on it","done":"Done","stuck":"Stuck","blocked":"Blocked","on_hold":"On hold"}},"claude":{"title":"Claude","description":"Open the Claude assistant"},"chatgpt":{"title":"ChatGPT","description":"Open the ChatGPT workspace"},"ollama":{"title":"Ollama","description":"Open local LLM tools"},"teamsChat":{"title":"Teams chat","description":"Jump to your Microsoft Teams chats"},"announcementsTitle":"Announcements","announcementsEmpty":"No announcements right now.","activityTitle":"Recent activity","activityEmpty":"Nothing yet.","notifications":{"title":"Notifications","viewAll":"View all","empty":"You're all caught up.","fromAyva":"From Ayva","snooze":"Snooze","dismiss":"Dismiss","actionFailed":"Couldn’t save that — try again.","cta":{"item":"Open the item","myWork":"Open My Work","ayva":"Open Ayva","email":"Open the email","generic":"Open in Redsis One"}},"sessionTitle":"Session","sessionLastLogin":"Last login","sessionFrom":"from","sessionRole":"Role","sessionFirstVisit":"This is your first visit.","companyNewsTitle":"Company news","companyNewsEmpty":"No company news right now.","companyNewsManageHint":"Posted from the Monday \"Company News\" board.","companyNewsReadMore":"Read more","companyNewsUnconfigured":"Company News is not connected yet. An administrator can set the MONDAY_NEWS_BOARD_ID env var to enable this.","shortcutsTitle":"Your shortcuts","shortcutsEmpty":"No shortcuts yet — add apps in Settings → Links.","shortcutsManage":"Manage shortcuts","shortcutsKeyboardHint":"Keyboard shortcuts are active — press ? to see them all","calendarTitle":"Your calendar","calendarSubtitle":"Microsoft 365","calendarPlaceholderTitle":"Connect your Microsoft calendar","calendarPlaceholderBody":"Once your account is connected, today and upcoming events will appear here automatically.","calendarPlaceholderCta":"Connect Microsoft account","calendarComingSoonBadge":"Coming soon","calendarNewEvent":"New event","calendarNothingLeftToday":"Nothing left on your calendar today.","todoTitle":"My to-do list","todoAddPlaceholder":"Add a task and press Enter","todoAdd":"Add","todoEmpty":"Nothing to do — add your first task above.","todoRemaining":"{count} left","todoAllDone":"All done!","todoClearCompleted":"Clear completed","todoSyncError":"Couldn't save — check your connection and try again.","todoDelete":"Delete task","todoToggle":"Toggle task","adminShortcuts":{"title":"Admin shortcuts","subtitle":"Jump straight to the admin surfaces you use most.","links":{"pmDashboard":"PM Dashboard","teamStatus":"Team Status","users":"Users","audit":"Audit log","roles":"Roles","security":"Cyber Security"}}},"modules":{"viewerEmpty":"Select a module from the left to get started.","notWired":"This prototype has no component wired up yet."},"apps":{"noTools":"No tools configured yet.","personalizeLinks":"Personalize my links","noLinkSet":"No link set — add one in Settings → Links"},"categories":{"Internal":"Internal","Productivity":"Productivity","Development":"Development","AI":"AI","Design & 3D":"Design & 3D","Infrastructure":"Infrastructure","Other":"Other"},"commandPalette":{"triggerLabel":"Open command palette","triggerPlaceholder":"Search…","title":"Command palette","placeholder":"Search boards, items, people, pages…","empty":"No matches for \"{q}\".","searching":"Searching…","navigate":"Navigate","select":"Select","opensInNewTab":"Opens in a new tab","detailSettings":"Settings","detailAdmin":"Admin","groupRecent":"Recent","groups":{"boards":"Boards","items":"Items","people":"People","docs":"Docs","modules":"Modules","apps":"Apps","settings":"Settings","admin":"Admin","ayva":"Ayva","actions":"Actions"},"actions":{"createBoard":"Create board","openSettings":"Open settings","viewNotifications":"View notifications","searchAllBoards":"Search all boards","askAyva":"Ask Ayva…","askAyvaQuery":"Ask Ayva: \"{q}\"","newAyvaChat":"New Ayva chat","openAyva":"Open Ayva","catchMeUp":"Catch me up on my inbox","askYourInbox":"Ask your inbox"}},"login":{"addingAccount":"Adding another account — your other accounts stay signed in.","title":"Sign in to Redsis One","subtitle":"Your central hub for everything Redsis.","email":"Email","password":"Password","signIn":"Sign in","signingIn":"Signing in…","mfaLabel":"Authenticator code","mfaHint":"Enter the 6-digit code from your authenticator app.","phonePasswordlessButton":"Sign in with a text message","phonePasswordlessTitle":"Text-message sign-in","phonePhoneLabel":"Mobile number","phonePhoneHint":"Include your country code, e.g. +1 555 123 4567.","phoneSendCode":"Send code","phoneCodeLabel":"Verification code","phoneCodeHint":"Enter the 6-digit code we texted you.","phoneVerifySignIn":"Verify and sign in","phoneBack":"Back","phoneSmsSecondFactorPrompt":"Prefer a text? Send the code by SMS","phoneSmsSent":"We texted a code to your phone.","phoneSmsVerify":"Verify code","phoneInvalid":"Enter a valid mobile number including the country code.","phoneCodeRequired":"Enter the code we texted you.","phoneSendError":"We couldn't send the code. Try again.","phoneVerifyError":"That code didn't verify. Please try again.","phoneSmsSendError":"We couldn't text your code. Try your authenticator app.","trustDeviceLabel":"Trust this device for 90 days","trustDeviceHint":"You won't be asked for a code on this device for 90 days. Don't use this on a shared or public computer.","verify":"Verify","accountNotActive":"Your account is not active. Contact an administrator.","accountLockedBanner":"Your account has been locked due to too many failed sign-in attempts. Try again later or use the forgot-password link.","accountLocked":"Account locked due to too many failed attempts. Try again in {minutes} minutes, or use Forgot password.","passwordResetSuccess":"Password reset. Sign in with your new password.","invalidCredentials":"Invalid email or password","loginFailed":"Login failed","mfaFailed":"MFA failed","microsoftSignIn":"Sign in with Microsoft","microsoftSigningIn":"Redirecting to Microsoft…","centralOneSignIn":"Sign in with Central One","centralOneSigningIn":"Redirecting to Central One…","centralOneDenied":"Central One has not granted you access to Redsis One. Ask an administrator to grant you this platform in Central One, then sign in again.","microsoftSignInFailed":"Couldn't start Microsoft sign-in. Try again, or use email + password.","microsoftSsoDivider":"or sign in with email","mustUseSso":"Your Redsis account signs in with Microsoft. Use the Sign in with Microsoft button above — there’s no portal password for this email.","mustUseSsoHint":"Your Redsis account uses Microsoft sign-in. Use the Sign in with Microsoft button above — you don’t have a portal password to enter here.","rateLimited":"Too many sign-in attempts. Try again in {seconds} seconds.","forgotPassword":"Forgot your password?","banner":{"intro":"This system is restricted to authorized Redsis personnel, service providers, and clients. Activity is logged for security and compliance purposes.","acceptance":"By signing in you accept our","acceptableUse":"Acceptable Use Policy","and":"and","privacy":"Privacy Notice"}},"forgotPassword":{"title":"Reset your password","subtitle":"Enter your work email. If it matches an active account, we will send a reset link valid for 30 minutes.","email":"Email","submit":"Send reset link","sending":"Sending…","successBody":"If that email is registered, a reset link is on its way. Check your inbox (and spam folder).","errorFallback":"Could not send the reset link. Try again in a moment.","backToLogin":"← Back to sign in","mustUseSsoHint":"Your Redsis account doesn’t have a portal password — sign in via Microsoft instead."},"resetPassword":{"title":"Pick a new password","subtitle":"Once saved, you will be signed in everywhere with the new password.","newPassword":"New password","confirmPassword":"Confirm new password","passwordHint":"Minimum 12 characters. Use a passphrase of several words.","passwordTooShort":"Password must be at least 12 characters.","passwordMismatch":"Passwords do not match.","submit":"Save new password","saving":"Saving…","errorFallback":"Could not save your new password.","invalidTitle":"Link expired or invalid","invalidBody":"This reset link is not valid. It may have already been used, or expired after 30 minutes. Request a new one.","requestNewLink":"Request a new link","backToLogin":"← Back to sign in"},"forcePasswordChange":{"title":"Set a new password","subtitle":"An administrator reset your password. Pick a new one to continue.","signedInAs":"Signed in as","currentPassword":"Temporary password","currentPasswordHint":"The temporary password the administrator just shared with you.","newPassword":"New password","newPasswordHint":"Minimum 12 characters. Use a passphrase of several words.","confirmPassword":"Confirm new password","submit":"Save and continue","saving":"Saving…","passwordTooShort":"Password must be at least 12 characters.","passwordMismatch":"Passwords do not match.","errorFallback":"Could not save the password change.","signOut":"Sign out instead"},"mfaChallenge":{"title":"Verify your identity","subtitle":"One more step to finish signing in.","subtitleWithEmail":"Signed in as {email}. One more step.","checkingSession":"Checking your session…","codeLabel":"Authenticator code","codeHint":"Enter the 6-digit code from your authenticator app.","resyncPrompt":"Code not working?","widerWindowLabel":"Try with a wider time window (±60s)","backupCodeLabel":"Backup code","backupCodeHint":"Each backup code can only be used once.","useBackupCode":"Use a backup code instead","useAuthenticatorCode":"Use an authenticator code instead","verify":"Verify","verifying":"Verifying…","verifyFailed":"Verification failed.","invalidCode":"That code didn't verify. Please try again.","invalidBackupCode":"That backup code didn't work. Try another one.","lostAuthenticatorHint":"Lost your authenticator? Ask an administrator to reset your MFA.","rateLimited":"Too many attempts. Wait a minute and try again.","notEnrolled":"You don't have two-factor authentication set up yet. Contact an administrator.","trustThisDevice":"Trust this device","trustDeviceLabel":"Trust this device for 90 days","trustDeviceHint":"You won't be asked for a code on this device for 90 days. Don't use this on a shared or public computer.","trustDeviceStepUpHint":"Enter a code from your authenticator app (or a backup code) to trust this device for 90 days.","trustDeviceConfirm":"Verify and trust","cancel":"Cancel","deviceTrusted":"This device is now trusted.","deviceTrustFailed":"The code was right, but this device couldn't be saved. Try again.","trustDeviceNotEnrolled":"Turn on two-step verification above to be able to trust this device.","unavailable":"Verification is temporarily unavailable. Try again in a minute.","replayed":"Wait for the next code from your app."},"legal":{"backToSignIn":"Back to sign in","privacy":{"title":"Privacy Notice","lastUpdated":"Last updated: 20 May 2026","intro":"Redsis is a group of companies operating in the United States, Colombia, Mexico, Brazil, and Ecuador. Personal data you provide in this portal is processed by the Redsis entity that engaged you (your employer, your client agreement, or your service-provider contract), in accordance with that entity’s corporate Privacy Policy.","entitiesHeading":"Find the policy that applies to you:","entities":{"usa":"Redsis USA","colombia":"Redsis Colombia","mexico":"Redsis México","brazil":"Redsis Brasil","ecuador":"Redsis Ecuador"},"collectsHeading":"What this portal specifically collects","collects":{"identity":"Identity data: your name, work email, role, and the organization you are associated with.","activity":"Activity data: logins, actions you perform inside the portal, audit logs, and timestamps.","device":"Device data: IP address, browser, and similar information needed to operate and secure the portal."},"whyHeading":"Why we process this data","why":"To authenticate you, operate and secure the portal, meet regulatory and audit obligations, and support the contractual relationship under which you access it. Activity is logged for security and compliance.","rightsHeading":"Your rights","rights":"Where local law applies (including Ley 1581 in Colombia, the LFPDPPP in Mexico, the LGPD in Brazil, the LOPDP in Ecuador, and applicable U.S. state laws), your rights of access, correction, deletion, objection, and portability are exercised through the Redsis entity that processes your data — see the corporate Privacy Policy linked above for the relevant contact."},"terms":{"title":"Terms of Use","lastUpdated":"Last updated: 20 May 2026","p1":"Access to this portal is granted under a separate agreement between you (or your organization) and Redsis.","governingHeading":"Your use of this portal is governed by:","governing":{"agreement":"The agreement under which you access Redsis services (employment agreement, service-provider contract, or client master agreement, as applicable).","aup":"The Acceptable Use Policy for this portal.","privacy":"The Privacy Notice for this portal and the corporate Privacy Policy of the Redsis entity that processes your data."},"conflictHeading":"Order of precedence","conflict":"If there is a conflict between these terms and the separate written agreement between you (or your organization) and Redsis, the separate written agreement controls."},"acceptableUse":{"title":"Acceptable Use Policy","lastUpdated":"Last updated: 20 May 2026","intro":"This portal is provided to authorized Redsis personnel, service providers, and clients for the sole purpose of carrying out work related to Redsis services.","rulesHeading":"By using this portal you agree to:","rules":{"authorized":"Use the portal only for legitimate, authorized business purposes.","credentials":"Keep your credentials confidential. Do not share your account, password, or authenticator with anyone.","confidential":"Treat information you access through the portal as confidential to Redsis and its clients, and handle it in accordance with your contractual confidentiality obligations.","noCircumvent":"Not attempt to circumvent security controls, access data you are not authorized to see, copy data in bulk, or interfere with the portal’s normal operation.","report":"Report suspected security incidents, lost devices, or misuse to the security contact below."},"misuse":"Misuse may result in suspension of access and, where applicable, action under your employment, service-provider, or client agreement with Redsis, including legal action where the conduct is unlawful.","monitoring":"Activity in this portal is logged for security and compliance purposes.","contactHeading":"Security contact","contactBody":"Report suspected security incidents or misuse to {email}."},"portal":{"eyebrow":"Legal & Compliance","dashTitle":"Legal & Compliance","dashDesc":"Versioned legal policies, acknowledgement tracking, and compliance coverage.","bannerTitleOne":"You have {n} policy to acknowledge","bannerTitleMany":"You have {n} policies to acknowledge","bannerBody":"Please review and acknowledge the current version of each policy that applies to you.","upToDate":"You’re up to date — all policies that apply to you are acknowledged.","statPolicies":"Policies","statPublishedVersions":"Published versions","statOrgCoverage":"Org coverage","statOrgCoverageHint":"of required acknowledgements","statOutOfCompliance":"Out of compliance","statOutOfComplianceHint":"policies below 100%","coverageCardTitle":"Policies & acknowledgement coverage","managePolicies":"Manage policies","viewAll":"View all","view":"View","noPoliciesYet":"No policies yet.","actionNeeded":"Action needed","noPublishedVersion":"No published version","recentAcks":"Recent acknowledgements","noAcksYet":"No acknowledgements recorded yet.","acknowledgedVerb":"acknowledged","colPolicy":"Policy","colCategory":"Category","colCurrent":"Current","colEffective":"Effective","colCoverage":"Coverage","colAudience":"Audience","colVersions":"Versions","colVersion":"Version","colStatus":"Status","colPublished":"Published","colAcks":"Acks","colAcknowledged":"Acknowledged","colPending":"Pending","ackTitle":"Acknowledgements","ackDesc":"Track who has accepted which policy version.","statTotalAcks":"Total acknowledgements","coverageByPolicy":"Coverage by policy","noneRequireAck":"No policies currently require acknowledgement.","policiesYouNeed":"Policies you need to acknowledge","yourAcks":"Your acknowledgements","youHaventAcked":"You haven’t acknowledged any policies yet.","superseded":"superseded","policiesTitle":"Policies","policiesDesc":"Versioned legal & policy documents and their acknowledgement coverage.","createFirst":" Create the first one above.","draftOnly":"Draft only","backPolicies":"Policies","statCurrentVersion":"Current version","coverageNA":"N/A","usersFraction":"{ack}/{eligible} users","noAckRequired":"no ack required","currentVersionTitle":"Current version — v{version}","ackRequired":"Acknowledgement required","effectiveOn":"Effective {date}","publishedOn":"Published {date}","youHaventAckedVersion":"You haven’t acknowledged this version yet.","noPublishedVersionBody":"This policy has no published version.","addPublishAbove":" Add and publish one above.","versionHistory":"Version history","noVersionsYet":"No versions yet.","ackedCurrentTitle":"Acknowledged the current version","noOneAcked":"No one has acknowledged this version yet.","acknowledge":"Acknowledge","acknowledged":"Acknowledged","publish":"Publish","failedPublish":"Failed to publish.","somethingWrong":"Something went wrong.","notRequired":"Not required","cancel":"Cancel","newPolicy":"New policy","createPolicy":"Create policy","fldTitle":"Title","fldSlug":"Slug","fldCategory":"Category","fldAudience":"Audience","fldDescription":"Description","phPolicyTitle":"Code of Conduct","phDescription":"Short summary of what this policy covers","requiresAckLabel":"Users must acknowledge the published version","newVersion":"New version","fldVersionLabel":"Version label","fldEffectiveDate":"Effective date","fldChangeSummary":"Change summary","phChangeSummary":"What changed","fldPolicyBody":"Policy body (Markdown)","publishImmediately":"Publish immediately (supersedes the current version — everyone must re-acknowledge)","addPublish":"Add & publish","saveDraft":"Save draft"}},"footer":{"copyright":"© {year} Redsis","privacy":"Privacy","terms":"Terms","acceptableUse":"Acceptable Use"},"invite":{"title":"Set up your account","invitedAs":"Invited as {email} ({role}).","fullName":"Full name","newPassword":"New password","confirmPassword":"Confirm password","passwordHint":"Minimum 12 characters. Use a passphrase of several words.","create":"Create account","creating":"Creating account…","passwordMismatch":"Passwords do not match.","passwordTooShort":"Password must be at least 12 characters.","acceptFailed":"Could not accept invite","invalidTitle":"Invitation not valid","invalidHint":"This invitation has expired, been revoked, or already been used. Contact your administrator to request a fresh invite."},"hubHome":{"overview":"Hub overview","zone":{"customize":"Customize","title":"Customize this zone","description":"Choose what shows at the top of this hub, and drag to reorder.","done":"Done","reset":"Reset","close":"Close","dragToReorder":"Drag to reorder","moveUp":"Move up","moveDown":"Move down","allHidden":"Everything is hidden. Switch an item back on to fill this zone."}},"dashboard":{"kicker":"Home","title":"Dashboard","subtitle":"Build your own home — add, move, resize, and remove widgets.","edit":"Edit","done":"Done","addWidget":"Add widget","addTab":"Add tab","reset":"Reset","emptyTitle":"Your dashboard is empty","emptyBody":"Click Edit, then Add widget to start building your home.","saved":"Saved","sizeLabel":"Size","styleLabel":"Style","appearanceLabel":"Appearance","accentClear":"Default","softLabel":"Soft background","tintLabel":"Solid background","accentNames":{"blue":"Blue","green":"Green","yellow":"Yellow","orange":"Orange","slate":"Slate","gold":"Gold"},"badgeLabel":"Activity badge","badgeShow":"Show a count of new activity","categories":{"productivity":"Productivity","communication":"Communication","info":"Info & feeds","finance":"Finance","ai":"AI","launchers":"Launchers","utility":"Utility"}},"operationsHome":{"heroTitle":"Run every operation from one place","heroSubtitle":"Service, warehouse, and logistics — your whole operation, one hub.","links":{"dashboard":{"label":"Operations Dashboard","hint":"Cross-area overview — service, warehouse & logistics"},"service":{"label":"Service Desk","hint":"Ticket Central — every client ticket"},"warehouse":{"label":"Inventory","hint":"Stock, parts & equipment"},"logistics":{"label":"Logistics","hint":"Inbound monitor — lanes, on-time %, late SOs"}}},"settings":{"title":"Settings","subtitle":"Manage your profile, security, and active sessions.","tabs":{"profile":"Profile","security":"Security","sessions":"Sessions","links":"Links","integrations":"Integrations","notifications":"Notifications","attendance":"Attendance","personalize":"Personalize","voice":"Voice & Language","tokens":"API Tokens","api-keys":"API Keys","sign-in":"Sign-in"},"voiceLang":{"title":"Voice & Language","subtitle":"Choose what language Ayva listens for and the language she replies in.","listenTitle":"Listening language","listenDesc":"Ayva can listen in English, Spanish and Portuguese (Brazil). Leave it on Auto-detect and she figures out which one you're speaking — or pick one to make it more reliable.","langLabel":"Language Ayva listens for","autoNote":"Auto-detect uses the server speech engines. The on-device browser fallback can only use one language per session — it uses your pick, or your app language on Auto.","replyTitle":"Reply language","replyDesc":"Which language Ayva answers in (text and voice).","replyMirror":"Match the language I spoke","replyFixed":"Always my chosen language","replyUi":"Follow the app language","offNote":"Multi-language listening isn't enabled for your account yet. An admin can turn it on in Admin → Ayva — your preference here applies once it is.","saved":"Saved","saveError":"Couldn't save — please try again.","enroll":{"title":"Voice recognition","desc":"Teach Ayva your voice so she only listens to you and ignores other people nearby. Your voiceprint stays on this device.","offNote":"Voice recognition isn't enabled for your account yet. An admin can turn it on in Admin → Ayva.","modelLoading":"Preparing the on-device voice model…","unavailable":"The on-device voice model couldn't load in this browser, so voice recognition isn't available here. Try Chrome or Edge on desktop.","start":"Set up voice recognition","recordStep":"Recording {n} of {total} — read the phrase out loud","record":"Record","recording":"Listening…","computing":"Learning your voice…","phrase1":"Hey Ayva, this is my voice speaking.","phrase2":"Please listen only to me.","phrase3":"I am the one talking with you right now.","enrolled":"Your voice is enrolled on this device.","isolationOn":"Only listen to my voice","syncLabel":"Also keep an encrypted copy so it works on my other devices","reenroll":"Re-record my voice","remove":"Remove my voiceprint","removed":"Voiceprint removed from this device.","failed":"Couldn't capture your voice — please try again.","notEnrolled":"Not set up on this device yet."}},"personalize":{"title":"Personalize","subtitle":"Choose how Redsis One looks for you. Changes apply instantly and only to your account.","themeLabel":"Theme","accentLabel":"Accent color","fontLabel":"Font","densityLabel":"Density","comfortable":"Comfortable","compact":"Compact","darkGroup":"Dark","lightGroup":"Light","brandDefault":"Brand default","presetsLabel":"Presets","livePreviewLabel":"Live preview","save":"Save","reset":"Reset to default","saved":"Appearance saved","resetDone":"Reset to the default look","saveError":"Could not save — please try again","previewNote":"Preview updates live as you pick. Brand yellow stays locked.","lockedNote":"Your organization limits some of these options.","cozy":"Cozy","modeLabel":"Editing","customFlavor":"Custom","customColorsLabel":"Custom colors","customColorsHint":"Pick any color for any surface. Each applies to the mode shown above; switch the toggle to style the other mode.","surfaceBackground":"Background","surfaceCard":"Cards & panels","surfaceText":"Text","surfaceMutedText":"Secondary text","surfaceBorder":"Borders","surfaceMenu":"Menus & dropdowns","panelsLabel":"Panel colors","panelsHint":"Tint each panel independently. Text auto-adjusts for contrast if you set only a background.","panelNav":"Left panel","panelRail":"Right panel","panelHeader":"Header","bgField":"Background","textField":"Text","customFontLabel":"Custom font","customFontPlaceholder":"Google font name (e.g. Inter)","radiusLabel":"Corner radius","radiusSharp":"Sharp","radiusDefault":"Default","radiusRounded":"Rounded","radiusPill":"Pill","autoLabel":"Auto","clearLabel":"Clear","a11yLabel":"Accessibility","colorblindLabel":"Colorblind mode","gridLabel":"Background grid","lowVisionLabel":"Low Vision Mode","lowVisionDesc":"A high-legibility view: magnification, maximum-contrast theme, thick focus outlines, the Atkinson Hyperlegible font, larger controls, underlined links, and a decluttered layout. Turn it on and Save to make it your default.","lowVisionOn":"Enable Low Vision Mode","lvZoomLabel":"Magnification","lvContrastLabel":"Contrast","lvFocusLabel":"Focus outline"},"attendance":{"title":"Office attendance","subtitle":"Your first entry and last exit at the office front doors, by day.","firstEntry":"First entry","lastExit":"Last exit","noExit":"No exit recorded","noEvents":"No office access this day.","noEventsMonth":"No office door activity recorded this month.","prevMonth":"Previous month","nextMonth":"Next month","today":"Today","door":"Door","connectingTitle":"Connecting your office access","connectingBody":"Door entry and exit times come from the office UniFi Access controller through the on-prem connector. This tab will start showing your daily arrivals and departures once that connection is switched on.","errorTitle":"Could not reach the office access system","errorBody":"The connector did not respond. This is usually temporary — try again shortly."},"notifications":{"sectionTitle":"Notifications","sectionDescription":"Choose how you want to be notified for each topic. In-app, email, and email cadence are tunable; admin can disable channels for specific topics.","topicTitle":"Topic","topicDescription":"Description","topicChannelInApp":"In-app","topicChannelEmail":"Email","topicChannelSms":"SMS","topicCadenceLabel":"Email cadence","cadenceImmediate":"Immediate","cadenceHourly":"Hourly digest","cadenceDaily":"Daily digest","cadenceComingSoon":"(coming soon)","topicSaveButton":"Save","topicSavedToast":"Preferences updated","muted":"Muted","emptyAll":"No topics available — your administrator has not opened any yet.","delivery":{"title":"Notification delivery","description":"Choose how often you receive notification emails. Immediate sends each one as it happens; a digest bundles them into a single email. A specific topic can still override this default in its own settings below.","emailEnabledLabel":"Enable email delivery","criticalOverrideNote":"Critical security alerts will email you regardless of this setting.","modeImmediate":"Immediate — email me as things happen","modeHourly":"Hourly digest","modeDaily":"Daily digest","modeWeekly":"Weekly digest","hourLabel":"Send at","dayLabel":"On","scheduleNote":"Daily/weekly digests send at this local time ({tz}).","saveButton":"Save delivery","dayMon":"Monday","dayTue":"Tuesday","dayWed":"Wednesday","dayThu":"Thursday","dayFri":"Friday","daySat":"Saturday","daySun":"Sunday"},"userSettings":{"title":"Quiet hours & SMS","description":"Set a Do-Not-Disturb window to defer email + SMS overnight (in-app notifications keep arriving); opt into SMS for high-severity topics.","dndEnableLabel":"Enable Do-Not-Disturb","quietStartLabel":"From","quietEndLabel":"To","quietTzNote":"Times are in your timezone ({tz}).","smsEnableLabel":"Send me SMS for opted-in topics","smsPhoneLabel":"Phone (E.164)","saveButton":"Save settings"},"whatsNew":{"title":"What's New welcome","description":"Show a quick welcome page with the latest features when you sign in. Turn it off to go straight to the portal.","toggleLabel":"Show the What's New welcome when I sign in"}},"profile":{"sectionTitle":"Your profile","email":"Email","role":"Role","status":"Status","displayName":"Display name","save":"Save","saving":"Saving…","saved":"✓ saved","errorSave":"Could not save","passwordTitle":"Change password","passwordIntro":"Minimum 12 characters. Changing your password signs you out of all other devices.","currentPassword":"Current password","newPassword":"New password","confirmPassword":"Confirm new password","change":"Change password","changing":"Changing…","passwordChanged":"✓ password changed; other sessions signed out","passwordMismatch":"New password and confirmation do not match.","passwordTooShort":"New password must be at least 12 characters.","errorChangePassword":"Could not change password","avatar":{"uploadButton":"Upload photo","replaceButton":"Replace photo","syncButton":"Use Microsoft 365 photo","removeButton":"Remove","hint":"JPEG, PNG, WebP or GIF, up to 5 MB.","uploaded":"✓ photo updated","synced":"✓ photo pulled from Microsoft 365","removed":"✓ photo removed","noMicrosoftPhoto":"No photo found on your Microsoft 365 profile.","microsoftNotConfigured":"Microsoft 365 is not connected.","errorGeneric":"Could not update your photo. Please try again."},"moreDetails":"More details (contact & emergency)","preferencesTitle":"Preferences"},"profileMeta":{"identityDescription":"Your name and how you appear in the portal.","unnamed":"Unnamed"},"personal":{"title":"Personal info","intro":"Visible across the portal. Phone numbers help colleagues reach you and feed our directory sync.","preferredName":"Preferred name","workPhone":"Work phone","workMobile":"Work mobile","emergencyTitle":"Emergency contact","emergencyHint":"Only visible to admins. Helpful for the security / IT team during an incident.","emergencyContactName":"Contact name","emergencyContactPhone":"Contact phone","centralOne":{"contactDescription":"Your company contact details. Edited once, in Central One, and shown everywhere.","managedBanner":"Your contact details are managed in Central One and sync to every Redsis platform.","lastSynced":"Last synced {date}.","editButton":"Edit in Central One","notSet":"Not set","extension":"Extension","office":"Office"},"save":"Save personal info","saving":"Saving…","saved":"✓ saved","errorSave":"Could not save","hrTitle":"HR record","hrIntro":"Read-only here. Ask an admin if any of this needs to change.","mustChangeTitle":"Password change required.","mustChangeBody":"An admin has asked you to set a new password. Use the form below."},"security":{"title":"Two-factor authentication (TOTP)","phoneTitle":"Phone / SMS","phoneSectionDescription":"Add a mobile number to sign in by text and receive two-factor codes by SMS.","phoneDescription":"Add a mobile number so you can sign in with a texted code and receive two-factor codes by SMS.","phoneInputLabel":"Mobile number","phoneInputHint":"Include the country code, e.g. +1 555 123 4567.","phoneSendCode":"Send code","phoneCodeLabel":"Verification code","phoneVerifyButton":"Verify","phoneCancel":"Cancel","phoneChangeButton":"Change number","phoneRemoveButton":"Remove phone","phoneVerifiedBadge":"Verified","phoneSentHint":"We texted a 6-digit code to {phone}.","phoneEnrolledTitle":"Text-message sign-in is on","phonePasswordlessNote":"You can sign in without a password using a texted code.","phone2faNote":"With two-factor on, you can also get your login code by text.","phoneInvalid":"Enter a valid mobile number including the country code.","phoneSendError":"We couldn't send the code. Check the number and try again.","phoneVerifyError":"That code didn't verify. Please try again.","phoneRemoveError":"We couldn't remove your phone. Try again.","phoneCodeRequired":"Enter the code we texted you.","description":"Protects your account with a 6-digit code from any authenticator app (Authy, Google Authenticator, Bitwarden, etc.).","adminRequiredSuffix":" As an admin, enrollment is required before you can access admin pages.","enabledLabel":"✓ enabled","enabledHint":"Your account requires a 6-digit code at sign-in.","password":"Password","disable":"Disable MFA","disableErrorFallback":"Could not disable MFA","enrollIntro":"Scan this QR code with your authenticator app, then enter the 6-digit code it shows.","qrAlt":"TOTP QR code","cantScan":"Can't scan? Show the setup key","backupCodesTitle":"Save these backup codes now","backupCodesHint":"Each code works once if you lose your authenticator. This is the only time they are shown.","sixDigitCode":"6-digit code","confirmEnable":"Confirm & enable","verifyErrorFallback":"Verification failed","enrollPasswordLabel":"Confirm your password to start enrollment","enable":"Enable MFA","enableErrorFallback":"Could not enable MFA","startErrorFallback":"Could not start MFA","noTotpUri":"Server did not return a TOTP URI","invalidCode":"Invalid code","ssoSetupTitle":"Set up two-factor authentication","ssoSetupHint":"You are already signed in with Microsoft, so no password needed here. Click below to see the QR code, then scan it with your authenticator app.","ssoVerifyButton":"Verify with Microsoft","ssoStepUpOkTitle":"✓ Identity verified","ssoStepUpOkHint":"You have 5 minutes to scan the code and enter a 6-digit code from your authenticator.","ssoStepUpExpired":"Verification expired. Please verify with Microsoft again.","ssoStepUpError":"We could not verify with Microsoft. Please try again — or contact IT if the problem persists.","ssoStartEnrollButton":"Set up two-factor","ssoStartEnrollErrorFallback":"Could not start two-factor setup.","ssoConfirmErrorFallback":"Could not enable two-factor.","ssoDisableWithCodeTitle":"Disable with your authenticator code","ssoDisableWithCodeHint":"Enter the current 6-digit code from your authenticator, or one of your backup codes, to turn off two-factor.","ssoDisableCodeLabel":"Authenticator or backup code","lostAuthenticatorTitle":"Lost your authenticator?","lostAuthenticatorHint":"Turn it off above with one of your backup codes. If you have no backup codes left, you can't do it yourself with Microsoft sign-in alone.","adminResetRequired":"Ask an administrator to reset your MFA.","stepUpPrompt":"You already have two-factor sign-in. Enter a code from your authenticator app (or a backup code) to continue.","stepUpCodeLabel":"Authenticator or backup code","stepUpContinue":"Verify and continue","stepUpCancel":"Cancel","stepUpInvalid":"That code didn't verify. Try again.","stepUpRateLimited":"Too many attempts. Wait a minute and try again.","requiredNoticeTitle":"Two-factor authentication is now required","requiredNoticeBody":"To keep using Redsis One you need to set up two-factor authentication. Finish the quick setup below to sign back in.","graceExpiredNoticeTitle":"Finish setting up two-factor authentication","graceExpiredNoticeBody":"Your setup grace period has ended. Enroll below to regain full access."},"securityMeta":{"overviewTitle":"Security overview","overviewDescription":"A quick view of what is protecting your account.","passwordItem":"Password","passwordDetail":"Required at every sign-in.","mfaItem":"Two-factor sign-in","mfaEnabledDetail":"You enter a 6-digit code each time you sign in.","mfaDisabledDetail":"Optional today — adds a second step at sign-in.","mfaAdminRequiredDetail":"Required for admin access. Enable it below.","statusOn":"On","statusOff":"Off","statusActionNeeded":"Action needed"},"sessions":{"deviceColumn":"Device / user agent","ipColumn":"IP","lastActiveColumn":"Last active","expiresColumn":"Expires","thisBrowser":"this browser","revoke":"Revoke","working":"Working…","errorRevoke":"Could not revoke","signOutOthers":"Sign out all other sessions and the mobile app"},"sessionsMeta":{"activeTitle":"Active sessions","activeDescription":"Devices and browsers currently signed in to your account.","signOutTitle":"Sign out everywhere else","signOutDescription":"You have {count} other active sessions besides this one (mobile app included).","signOutEmpty":"No other sessions are signed in right now.","signOutHint":"This ends every session except the one you are using now — including the RedsisOne mobile app, which will ask you to sign in again. Use it if a device was lost or shared."},"links":{"title":"Your app links","intro":"Each tool on your dashboard opens a default link. Override any of them with your own — for example point Monday at your personal board view, or Jira at your team's project. Leave a field blank to use the company default. Hide tools you don't use.","defaultPrefix":"default:","noDefault":"no company default","hide":"Hide","save":"Save","saving":"…","saved":"✓ saved","errorSave":"Could not save","placeholderUrl":"https://…"},"timezone":{"title":"Timezone","description":"Controls how every date and time across the portal is shown. Your choice is saved with your account — IP location is never used. Pick a zone below and the clock above will switch instantly.","activeLabel":"Active timezone","preview":"Right now","notSet":"Not set","quickPickLabel":"Quick pick","pickLabel":"Or type a different zone","manualHint":"Any IANA identifier works (e.g. Europe/Madrid, America/Argentina/Cordoba).","useBrowser":"Use my browser zone","browserMismatchTitle":"Your browser's timezone is different","browserMismatchHint":"Browser reports {zone}. Click 'Use my browser zone' to switch, or pick a different one below.","saved":"Timezone saved.","travelTitle":"Looks like you have traveled","travelHint":"Your device is now in {device}, but Redsis is showing your times in {current}. Update your timezone to {device}?","travelSwitch":"Switch to {device}","travelKeep":"Keep {current}"},"tokens":{"sectionTitle":"Personal API Tokens","sectionDescription":"Tokens let you call the Redsis MCP server from Claude Desktop or any local tool. Each token inherits only the scopes you choose — your account permissions still apply.","empty":"No active tokens. Create one below to get started.","colName":"Name","colScopes":"Scopes","colCreated":"Created","colLastUsed":"Last used","colExpires":"Expires","readOnly":"Read-only","neverUsed":"Never","noExpiry":"No expiry","create":{"toggle":"New token","nameLabel":"Token name","namePlaceholder":"e.g. My MacBook Claude Desktop","expiresLabel":"Expires","expiresHint":"Leave blank for no expiry.","scopesLabel":"Write permissions","readOnlyHint":"Tokens are read-only by default. Check a scope to grant write access.","submit":"Create token","working":"Creating…","cancel":"Cancel","error":"Could not create token"},"once":{"banner":"Copy your token now","warning":"This is the only time you will see the full token. Store it somewhere safe — we can't show it again.","copy":"Copy","copied":"Copied","dismiss":"I have copied it"},"revoke":{"label":"Revoke","confirm":"Sure?","working":"Revoking…","error":"Could not revoke"},"usageTitle":"How to use","usageBody":"Set the token as your Authorization header when calling the MCP server.","usageExample":"Authorization: Bearer <your-token>"}},"itAdmin":{"title":"Technology Hub","subtitle":"Operate the company technology estate — network, printers, domains, platforms, identity and security.","platformVsItTitle":"Platform Admin vs Technology Hub","platformVsItBody":"Configuring the portal (for example, registering a printer into the print feature) is Platform Admin and lives in the admin portal. Operating the technology itself (for example, the printers on the network) is the Technology Hub and lives here.","securityNote":"Admin-only, and protected by an extra layer: two-factor authentication is required to use this module.","open":"Open","tabs":{"overview":"Overview","infrastructure":"Infrastructure","platforms":"Platforms","identity":"Identity","security":"Security"},"groups":{"infrastructure":"Infrastructure","platforms":"Platforms & Ops","identity":"Identity","security":"Security"},"status":{"updated":"Updated","notConnected":"Not connected","unavailable":"Unavailable","printers":{"label":"Printers","hint":"online of total configured"},"unifi":{"label":"UniFi sites","hint":"sites up"},"domains":{"label":"Domains","hint":"expiring within 30 days"},"platforms":{"label":"Platform connections","hint":"failing"},"security":{"label":"Security incidents","hint":"open"}},"attention":{"title":"Needs attention","allClear":"All systems normal — nothing needs attention right now.","printersOffline":"Printers offline","printersUnreachable":"Print servers unreachable","unifiSitesDown":"UniFi sites down","domainsExpiring":"Domains expiring within 30 days","domainsExpired":"Domains already expired","connectionsFailing":"Platform connections failing","securityCritical":"Critical security incidents open","securityHigh":"High-severity security incidents open"},"rail":{"title":"Recent events","empty":"No recent platform or security events.","securityBadge":"Security","platformBadge":"Platform"},"identityStats":{"totalLinks":"Linked identities","peopleLinked":"People linked","errors":"Sync errors"},"sections":{"platformsTitle":"Connected Platforms","platformsBody":"Fleet monitoring and consoles for every connected platform — Monday, Microsoft, GitHub, Vercel, Neon, Cloudflare, and more.","domainsTitle":"Domains","domainsBody":"Domains, DNS, and registrars across Vercel, Cloudflare, and GoDaddy.","printersTitle":"Network Printers","printersBody":"Print servers (CUPS) and the printers on each office network — drivers and per-printer settings.","printingTitle":"Printing","printingBody":"Portal print management — printers, jobs, counters, and label templates.","networkTitle":"Network (UniFi)","networkBody":"UniFi controllers, switches, access points, and access records.","vpnTitle":"VPN / Tailnet","vpnBody":"The company Tailscale tailnet and its connected devices.","emailOpsTitle":"Email Operations","emailOpsBody":"Delivery log and analytics for everything the platform sends.","identityTitle":"Identity Directory","identityBody":"Cross-platform identity links — One accounts ↔ Monday, Jira, Microsoft, and more.","accessTroubleshooterTitle":"Access Troubleshooter","accessTroubleshooterBody":"Diagnose why a user can or cannot reach a page, module, or record.","securityTitle":"Security Console","securityBody":"Security operations and monitoring. Policy settings stay in Portal Administration.","reportsTitle":"Reports Portal","reportsBody":"Org reporting console — filed reports across teams and systems.","dashboardsTitle":"Charts & Dashboards","dashboardsBody":"Cross-user dashboard administration.","equipmentTitle":"Equipment & Assets","equipmentBody":"Physical hardware registry (related module)."}},"dbWriteLock":{"allowWrites":"Allow writes","lockNotice":"Platform write-lock is active — every write is blocked platform-wide, even when \"Allow writes\" is enabled on a connection."},"dataStudioConnections":{"title":"All connections","subtitle":"Every database this portal can query — the built-in app database, direct connections, and databases reached through the connector agent.","countLabel":"connections","builtinSection":"Built-in","directSection":"Direct connections","agentSection":"Via connector agent","testSection":"Test connections","hiddenSection":"Hidden duplicates","transportBuiltin":"Built-in","transportDirect":"Direct","transportAgent":"Via agent","duplicateOf":"Duplicate — the same database is already listed above","agentManagedNote":"Managed on the connector agent — credentials stay on the agent and never reach the cloud.","agentLink":"Open Connector Agent","agentUnreachable":"The connector agent did not answer, so agent connections are not shown right now.","manageDirectHeading":"Manage direct connections","empty":"No connections yet.","kindDataHeading":"Data connections","kindConnectorHeading":"Connectors","kindPlatformHeading":"Platform data sources","kindDataHint":"Databases connected directly — on our network or external cloud.","kindConnectorHint":"On-prem databases reached through a server agent.","kindPlatformHint":"Data pulled from a connected platform (Monday, Jira, Superset).","kindPlatformEmpty":"No platform data sources yet."},"dataStudioConnect":{"newConnection":"New connection","chooseType":"What are you connecting?","typeDirect":"Direct database","typeDirectHint":"A database on our own network.","typeCloud":"Cloud database","typeCloudHint":"An external database over the internet (Neon, RDS, Supabase, and more).","typeAgent":"Via connector agent","typeAgentHint":"An on-prem database reached through a server agent — managed on the Connector Agent.","engine":"Engine","enginePostgres":"PostgreSQL","engineMysql":"MySQL","name":"Name","description":"Description","optional":"optional","host":"Host","port":"Port","database":"Database","username":"Username","password":"Password","passwordKeep":"Leave blank to keep the current password.","sslMode":"SSL mode","sslRequire":"Require (encrypted)","sslVerify":"Verify server certificate","sslDisable":"Disable (local / no-SSL servers only)","sslCa":"CA certificate (PEM)","sslCaHint":"Paste the private CA certificate to verify the server against.","cloudSslNote":"Cloud databases should keep SSL on.","test":"Test connection","testing":"Testing…","testOk":"Connected","testFail":"Could not connect","save":"Save connection","saving":"Saving…","saved":"Connection saved.","updated":"Connection updated.","cancel":"Cancel","edit":"Edit","remove":"Delete","removeConfirm":"Delete this connection? Saved queries and the audit log keep their record.","required":"Please fill in the required fields."},"developerHub":{"title":"Developer Hub","subtitle":"Build on Redsis One — data tooling, integrations and migration, the API surface, quality dashboards, and platform-meta consoles.","open":"Open","groups":{"build":"Build & Ship","integrate":"Integrate & Migrate","operate":"Operate & Observe","quality":"Quality","aiData":"AI & Data Config"},"cards":{"dataStudioTitle":"Data Studio","dataStudioBody":"Query, browse, and analyze every connected database — with AI assistance.","apiDocsTitle":"API Docs","apiDocsBody":"The Redsis One API reference — Scalar, OpenAPI, and Postman collections.","apiKeysTitle":"API Keys","apiKeysBody":"Scoped, revocable keys for programmatic access to Redsis One.","developersTitle":"Developers","developersBody":"Developer mode, the page directory, and developer onboarding.","designSystemTitle":"Design System","designSystemBody":"The Redsis design system — components, tokens, and usage rules.","manualTitle":"User Manual","manualBody":"The platform user manual, section by section.","integrationsTitle":"Integrations","integrationsBody":"The unified integration hub — catalog, connections, bindings, and sync.","redixTitle":"Redix Integrations","redixBody":"The Redix control plane — playground, connection, and workflow nodes.","migrationCenterTitle":"Migration Center","migrationCenterBody":"Account-to-account migrators — Monday, Jira, and more.","portalBoardsTitle":"Portal Boards","portalBoardsBody":"Monday-synced board exposure — My Work, My Views, and external surfaces.","webhooksTitle":"Webhooks","webhooksBody":"Outgoing webhooks — endpoints, deliveries, and signing.","cronMonitorTitle":"Cron Monitor","cronMonitorBody":"Every scheduled job, its runs, and its health.","migrationsTitle":"DB Migrations","migrationsBody":"Database migration history and preview.","teamStatusTitle":"Team Status","teamStatusBody":"The agent and chat fleet — what every session is working on.","autoTrackingTitle":"Auto-Tracking","autoTrackingBody":"Context-log poller health and processing budget.","platformMapTitle":"Platform Map","platformMapBody":"The generated map of every admin surface.","platformScorecardTitle":"Platform Scorecard","platformScorecardBody":"Cross-platform footprint and value scorecard.","platformExplorerTitle":"Platform Explorer","platformExplorerBody":"Explore the platform inventory interactively.","greenoneTitle":"GreenOne","greenoneBody":"The build & deploy pipeline — live deploy status, release history, rollback & controls. Opens the GreenOne dashboard.","qaDashboardTitle":"QA Dashboard","qaDashboardBody":"Live bug-report rollup from the QA board.","qaReportsTitle":"QA Reports","qaReportsBody":"Filed QA reports with severity rollups.","pmDashboardTitle":"PM Dashboard","pmDashboardBody":"Project-management cockpit for the build fleet.","aiProvidersTitle":"AI Providers","aiProvidersBody":"Platform-level API keys for Anthropic, OpenAI, Gemini, and Ollama.","insightsModelsTitle":"Insights AI Models","insightsModelsBody":"Per-tier model policy for the AI dashboard builder.","supersetTitle":"Superset Registry","supersetBody":"Registered Superset dashboard embeds.","pageDirectoryTitle":"Page Directory","pageDirectoryBody":"Every page in the portal, with working links plus an orphan + placement audit."},"tabs":{"overview":"Overview","console":"Console","platformInsights":"Platform Insights","quality":"Quality"},"liveBand":{"deployLabel":"Deploy","deployedPrefix":"Deployed","builtPrefix":"Built","notDeployed":"No deployed SHA — local/dev build.","viewDeployments":"View deployments →","ciLabel":"CI","ciNotConnected":"Not connected","ciSuccess":"Passing","ciFailure":"Failing","ciPending":"Pending","ciRequiredRed":"Required red: {names}","ciWaitingFor":"Waiting for: {names}","ciNoneReported":"No required check has reported yet","ciOtherRed":{"one":"{n} red check is not required","other":"{n} red checks are not required"},"ciNotJudgedByProtection":"Not judged by main's branch protection","ciAndMore":"{names} and {n} more","ciOpenRun":"Open the failing run on Git One","webhooksLabel":"Webhooks","webhooksActiveOfTotal":"active","failingCronsLabel":"Failing crons","failingCronsNone":"None failing","unscheduledCronsLabel":"Unscheduled crons","unscheduledCronsNone":"All scheduled","errorRateLabel":"Error rate","notConnected":"Not connected","errorRateHint":"No error-rate telemetry source is wired yet.","lastDeployPrefix":"Last deploy","outcomeSuccess":"clean","outcomeFailed":"failed","outcomeRolledBack":"rolled back","outcomeStalled":"stalled","outcomeInProgress":"in progress"},"crons":{"title":"Crons","subtitle":"Every job in crons.config.json, its schedule, and its last run. Routes that exist on disk with no schedule anywhere are flagged — they will never run in production.","configuredLabel":"configured","instrumentedLabel":"with run history","unscheduledLabel":"never scheduled","neverScheduledBadge":"Never scheduled","neverScheduledHint":"This route exists but has no schedule in crons.config.json — it will never run in production.","allowlistPrefix":"Temporarily exempt:","viewFullMonitor":"Open the full Cron Monitor →","runHistoryError":"Could not load run history right now — showing schedules only.","noHistoryYet":"No run history yet","empty":"No crons configured.","colPath":"Cron","colSchedule":"Schedule","colLastRun":"Last run","colStatus":"Status"},"quality":{"title":"Quality","subtitle":"QA reporting, outgoing webhooks, and the full page directory."}},"admin":{"badge":"Portal Administration","backToPortal":"← Back to portal","mfaNudgeTitle":"Two-factor authentication isn't set up.","mfaNudgeBody":"As an admin you should enable it — it protects every account you can manage from here.","enableMfa":"Enable MFA","nav":{"users":"Users","externalUsers":"External users","identity":"Identity","roles":"Roles","rolesMatrix":"Permission Matrix","departments":"Departments","companySetup":"Company Setup","groups":"Groups","apps":"Modules","externalApps":"External apps","pwa":"App features","permissions":"Permissions","chatAccess":"Chat Access","accessTroubleshooter":"Access troubleshooter","audit":"Audit log","security":"Cyber Security","accountSecurity":"Account Security","centralOneSso":"Central One identity","approvals":"Approvals","incidents":"Incident management","emailLog":"Email log","emailTest":"Email test","emailAdmin":"Email config","emailKillSwitch":"Email kill-switch","mondaySync":"Monday sync","monday":"Monday","jira":"Jira","platformExplorer":"Platform Explorer","jiraSync":"Jira sync","supersetEmbed":"Superset (embed)","connector":"Connector Agent","platforms":"Platforms","printServers":"Print Servers","labelPrinters":"Label Printers","printing":"Printing","webhooks":"Webhooks","mondayMigrator":"Monday Migrator","jiraMigrator":"Jira Migrator","platformsStatus":"Platform status","openai":"OpenAI Platform","chatgpt":"ChatGPT","anthropic":"Anthropic","cloudflare":"Cloudflare","twilio":"Twilio","resend":"Resend","neon":"Neon","github":"GitHub","vercel":"Vercel","supabase":"Supabase","tailscale":"Tailscale","n8n":"n8n","microsoft":"Microsoft 365","ebay":"eBay","salesHub":"Online Sales Hub","ebayMarketing":"Marketing & Promotions","ebayStore":"Store Manager","ebayShipping":"Shipping Portal","ebayPaymentPolicies":"Payment Policies","ebayReturnPolicies":"Return Policies","ebayInventoryLocations":"Inventory Locations","ebayAccount":"Seller Account","ebayAnalytics":"eBay Analytics","ebayDisputes":"Dispute Manager","ebayFeedback":"Feedback","redix":"Redix","unifi":"UniFi","unifiUsers":"UniFi users","unifiAccessRecords":"UniFi access records","superset":"Superset","myViews":"Portal Boards","fieldService":"Field Service","inventory":"Inventory","equipment":"Equipment","travelRequest":"Travel Request","developers":"Developer Hub","apiDocs":"API Reference","apiKeys":"API Keys","featureFlags":"Feature Flags","cronMonitor":"Cron Monitor","migrations":"Migrations","noteTaker":"AI Note Taker","playground":"Playground","pmDashboard":"PM Dashboard","teamStatus":"Team status","designSystem":"Design system","platformMap":"Platform Map","platformScorecard":"Platform Scorecard","brandStandards":"Brand standards","readiness":"Prod Readiness","notifications":"Notifications","announcements":"Announcements","qaReports":"Bug reports","itHub":"IT Management Hub","claude":"Claude","boards":"Boards","labels":"Labels","automations":"Automations","fx":"Exchange rates","manual":"Help & Manual","ayva":"Ayva AI","reports":"Reports Portal","waitlist":"Waitlist CRM"},"manual":{"title":"Admin manual","intro":"How every admin tool works — one chapter per sidebar section, one article per page. The table of contents is generated from the navigation, so it can never drift from what the portal actually has.","overview":"Overview","askAyva":"Ask Ayva to show me","back":"Back to manual","documents":"Covers the page at","pending":"Documentation pending","pendingBody":"This article hasn’t been written yet. The page it documents still works — its walkthrough is on the way."},"navGroups":{"peopleAccess":{"title":"People & Access","description":"Users, roles, departments, and what each person can see or do."},"appsTools":{"title":"Apps & Platform","description":"Module registry, external apps, PWA, One Boards governance, feature flags, and brand standards."},"communications":{"title":"Communications","description":"Notification, announcement, and email configuration — how the portal talks to people."},"securityGovernance":{"title":"Security & Governance","description":"Account security, two-person approvals, and the audit log — the sensitive, access-gated panels."},"pinned":{"title":"Pinned","description":"Your personal platform shortcuts, pinned from Connected Platforms."},"activityMonitoring":{"title":"Activity & Monitoring","description":"Audit log, email delivery, and team status — see what happened and when."},"integrations":{"title":"Integrations","description":"Connections to Monday and other external platforms feeding the portal."},"operations":{"title":"Operations","description":"Field Service and Travel Request: dispatch, service providers, travel approvals, and per-diem rates."},"developer":{"title":"Developer","description":"Internal tools: SQL playground, design system, and project dashboards."}},"dashboard":{"navLabel":"Dashboard","greeting":"Welcome back, {name}","subtitle":"Here's the state of your platform at a glance. Anything red or amber wants your attention.","sectionsHeading":"Areas","openSection":"Open","counters":{"pendingInvites":"Pending invites","pendingInvitesHint":"Invitations sent but not accepted yet. If email didn't arrive, copy the link directly from the user row.","lockedAccounts":"Locked or suspended","lockedAccountsHint":"Accounts that can't sign in right now — reinstate from the Users page.","adminsNoMfa":"Admins missing MFA","adminsNoMfaHint":"Required-MFA admins without an enrolled authenticator. High-priority security gap."},"actionItems":{"heading":"Needs your attention"},"cards":{"seeAll":"See all","adminsNoMfa":{"title":"Admins missing MFA","description":"Required-MFA admins without an enrolled authenticator. Highest-priority security gap — reset and re-enroll.","empty":"Every required-MFA admin has an authenticator enrolled.","itemSecondary":"Last login {lastLogin}","neverLoggedIn":"never"},"locked":{"title":"Locked or suspended accounts","description":"Accounts that can't sign in right now. Reinstate suspended ones or unlock failed-login lockouts from the user page.","empty":"No accounts are locked or suspended.","statusLocked":"Locked (failed logins)","statusSuspended":"Suspended by admin"},"invitesExpiring":{"title":"Invites expiring in 24h","description":"Pending invitations about to expire. If email didn't arrive, copy the link directly or reissue.","empty":"No invites are about to expire.","itemSecondary":"expires in {hours}h"},"emptyRoles":{"title":"Roles with no users","description":"Custom roles that no longer have any members. Cleanup candidates — delete if no longer needed.","empty":"Every custom role has at least one user."},"failedLogins":{"title":"Failed-login spikes (24h)","description":"Actors with more than 5 failed sign-ins in the last 24 hours. Possible brute-force or stale-password device.","empty":"No suspicious sign-in patterns in the last 24 hours.","itemSecondary":"{count} failed attempts","unknownActor":"Unknown actor"}},"inbox":{"heading":"Your inbox","viewAll":"Open inbox →","empty":"You're all caught up. New notifications will land here."},"recent":{"heading":"Recent activity","subtitle":"Latest admin actions across the platform. Full history is in the audit log.","viewAll":"View full audit log →","empty":"Nothing yet — activity will appear here as you and your team work.","unknownActor":"System"}},"notifications":{"title":"Notifications","description":"Topic catalogue — every notifyable event in the portal. Enable or disable per channel, set per-role defaults, and edit message templates.","bellAria":"Open notifications inbox","bellTitle":"Notifications","catalogue":{"topicsHeading":"Topics","emptyAll":"No topics yet — they appear after the engine seeds them.","rowDescriptionLabel":"Description","rowChannelsLabel":"Default channels","rowSubscribersLabel":"Subscribers","rowSubscribersCount":"{n} user","rowSubscribersCountPlural":"{n} users","rowEnableLabel":"Enabled","rowDisableLabel":"Disabled","rowEditAction":"Edit","rowPlaceholderBadge":"placeholder","toggleEnabled":"Topic enabled","toggleDisabled":"Topic disabled","toggleError":"Could not change topic state."},"widget":{"title":"Edit topic: {name}","close":"Close","tabChannels":"Channels","tabRoleDefaults":"Role defaults","tabTemplates":"Templates","tabAudit":"Audit","channelInApp":"In-app","channelEmail":"Email","channelSms":"SMS","channelsBlurb":"Channels enabled here are the fallback for users who have not set a personal preference. Per-role defaults override these; per-user subscriptions override role defaults.","roleDefaultsBlurb":"Set the default channels each role receives. Empty = role does NOT receive this topic by default. Individual users can override below.","templatesBlurb":"Edit the rendered message per channel + locale. Click a variable chip to insert it as {{var}}. English is required; other locales fall back to English at render time.","templateSubjectLabel":"Subject","templateBodyLabel":"Body","templatePreviewHeading":"Preview","templateSave":"Save template","templateSaved":"Template saved.","variableChipHint":"Insert variable","auditEmpty":"No audit entries yet for this topic.","auditActorSystem":"System","actionNames":{"notification.topic_toggled":"Toggled enabled state","notification.role_default_changed":"Changed role defaults","notification.template_changed":"Edited template"},"saveChannelsButton":"Save channels","saveRoleDefaultsButton":"Save role","rolesEmpty":"No roles configured."},"inbox":{"title":"Inbox","description":"Your inbox. Alerts, system events, and notices addressed to you. Mark them read as you handle them, or jump straight to the related page.","unreadBadge":"{n} unread","allReadBadge":"All read","filters":{"all":"All","unread":"Unread","attention":"Critical & warning"},"empty":{"all":"Nothing here yet. When something needs your attention, it'll show up in your inbox.","unread":"You're all caught up — nothing unread.","attention":"No critical or warning notifications right now."},"markRead":"Mark read","markAllRead":"Mark all as read","markingRead":"Marking…","saveFailed":"Couldn't update — please try again.","severityLabels":{"critical":"Critical","warning":"Warning","info":"Info","success":"Success"}}},"users":{"title":"Users","pageDescription":"Internal team members and pending invitations. Invite new people, manage roles and departments, suspend or unlock accounts, and reset MFA.","inviteAction":"Invite user","inviteEyebrow":"New invitation","help":{"title":"What is this page for?","body":"This is your master list of everyone with access to the portal — both people who have accepted an invite and those still pending.","bulletsLabel":"Common things you can do","bullets":["Invite a new teammate by email and pick their role + departments.","Suspend, unlock, or reset MFA for any existing user.","Bulk-change roles or add several people to a department at once.","Copy a fresh invite link if the email never arrived."],"tip":"If you don't see who you're looking for, check the status filter chips at the top — pending invitees won't show under 'Active'."},"inviteSectionTitle":"Invite a user","colEmail":"Email","colName":"Name","colRole":"Role","colStatus":"Status","colDepartments":"Departments","colLastLogin":"Last login","invite":{"email":"Email","role":"Role","roleHint":"Admins bypass app gates; MFA is required. Members see apps granted to their departments. Viewers are read-only.","departments":"Departments","department":"Department","noDepartmentOption":"— No department —","noDepartments":"No departments yet. Create one first on","send":"Send invite","sending":"Creating invite…","errorFallback":"Could not invite user","errorDuplicateEmail":"{email} is already on the platform. Find them on the Users list and update their role or department instead.","errorNoOrganization":"No organization is set up yet, so we can't create invitations. An administrator needs to run the initial seed before users can be invited.","errorUnauthenticated":"Your session is no longer valid. Refresh the page and sign in again to send this invite.","errorSignInAgain":"Sign in again","createdTitle":"Invitation created.","emailSent":"Email sent to the invitee.","emailNotSent":"Email not sent ({reason}). Share this link directly:","emailNoProvider":"no email provider configured","copyLink":"Copy link","linkLabel":"Invite link","copyAlwaysHint":"Always copy and save this link as a backup — email delivery isn't guaranteed (spam filters, server blocks) and the original URL can't be recovered later.","tabOne":"One person","tabMany":"Many people","batchEmailsLabel":"Email addresses","batchEmailsPlaceholder":"one per line or comma-separated\nalice@example.com, bob@example.com\ncarol@example.com","batchSummary":"{valid} valid · {invalid} look invalid · {total} total","batchSend":"Send {n} invitations","batchErrorEmpty":"Add at least one email address.","batchResultHeader":"{success} sent · {fail} failed","batchColEmail":"Email","batchColStatus":"Status","batchColAction":"Action","batchStatusSent":"sent","batchStatusCreated":"created"},"log":{"title":"Invitation log","description":"Tokens are stored hashed, so the original link can't be recovered. Use Reissue to generate a fresh link for a pending invite.","filters":{"all":"All","pending":"Pending","expired":"Expired","accepted":"Accepted","revoked":"Revoked"},"statusBadge":{"pending":"Pending","expired":"Expired","accepted":"Accepted","revoked":"Revoked"},"columns":{"email":"Email","status":"Status","role":"Role","departments":"Departments","invitedBy":"Invited by","sent":"Sent","expires":"Expires","actions":"Actions"},"cell":{"acceptedOn":"Accepted {date}","revokedOn":"Revoked {date}"},"actions":{"reissue":"Reissue link","reissueAndEmail":"Reissue + email","revoke":"Revoke","working":"Working…","reissueTitle":"Generate a new link without sending an email","reissueAndEmailTitle":"Generate a new link and re-send the email"},"confirmRevoke":"Revoke this invitation? The recipient will no longer be able to accept it.","empty":"No invitations to show.","errors":{"reissue":"Could not reissue invite","revoke":"Could not revoke invite"},"fresh":{"title":"Fresh invite link generated.","dismiss":"Dismiss","expires":"Expires {date}.","emailSent":"Email was re-sent to the invitee.","emailNotSent":"Email not sent ({reason}).","noResend":"Email was not re-sent — share this link directly."}}},"departments":{"title":"Departments","pageDescription":"Organize people into departments and grant access to modules department by department. A user can belong to several.","newAction":"New department","newEyebrow":"Create department","help":{"title":"What is this page for?","body":"Departments are how access to apps and Monday boards is granted in bulk. Instead of granting access user-by-user, you grant it once to a department and add people in.","bulletsLabel":"Common things you can do","bullets":["Create a new department and give it a name and short description.","See how many people and modules are linked to each department.","Click a department to manage its members or the modules it can access."],"tip":"A person can belong to several departments at once — access is the union of all their memberships."},"newSectionTitle":"New department","noOrgHint":"No organization exists. Run npm run db:seed.","searchPlaceholder":"Search departments…","countLabel":"{n} departments","colName":"Name","colSlug":"Slug","colDescription":"Description","colCreated":"Created","colMembers":"Members","colModules":"Modules","colActions":"Actions","empty":"No departments yet.","edit":"Edit","save":"Save","saving":"Saving…","cancel":"Cancel","delete":"Delete","deleting":"Deleting…","descriptionPlaceholder":"Optional description","viewMembersTitle":"See members of this department","viewModulesTitle":"See modules granted to this department","errorSave":"Could not save","errorDelete":"Could not delete","confirmDelete":"Delete department \"{name}\"? This cannot be undone.","confirmForceDelete":"\"{name}\" still has {members} member(s) and {modules} module grant(s). Removing it will revoke those grants and detach those members. Continue?","form":{"name":"Name","slug":"Slug","slugOptional":"(optional)","slugPlaceholder":"auto from name","description":"Description","create":"Create department","creating":"Creating…","errorFallback":"Could not create"}},"apps":{"title":"Prototype apps","pageDescription":"Modules and prototype apps available from the portal launcher. Control who sees each one by department or by named user.","consoleTitle":"Modules","consoleDescription":"Every module in one console — switch it on or off, decide who sees it (departments, users, groups), watch usage, and jump straight in.","newAction":"Register module","newEyebrow":"New module","help":{"title":"What is this page for?","body":"Every module shown in the portal's launcher lives here. From this page you decide which departments and which named users can see each one.","bulletsLabel":"Common things you can do","bullets":["Register a new module by name + slug; it appears in the launcher right after.","Mark a module Admin-only so only admins see it.","Grant a module to one or more departments — everyone in those departments will see it.","Hide or archive a module without deleting it."],"tip":"If you don't want to use departments, you can also grant a module to specific named users from each module's detail page."},"newSectionTitle":"Register a new app","colName":"Name","colSlug":"Slug","colStatus":"Status","colAdminOnly":"Admin only","colDepartments":"Departments","yes":"yes","no":"no"},"modules":{"searchPlaceholder":"Search modules, slugs, departments…","showingCount":"{shown} of {total}","selectAll":"Select all","selectRow":"Select {name}","selectedCount":"{n} selected","empty":"No modules match.","noDepartments":"No departments yet.","adminOnlyYes":"Admin only","adminOnlyNo":"Open to all","cycleStatusTitle":"Click to cycle: active → hidden → archived","usersThisWeek":"{n} users / 7d","footnoteUsage":"\"Usage\" shows unique audit-log actors per module. Once /m/[slug] starts emitting a \"module.opened\" event the count gets sharper — for now it reflects admin edits + permission changes.","filterLabels":{"all":"All","active":"Active","hidden":"Hidden","archived":"Archived"},"statusLabels":{"active":"Active","hidden":"Hidden","archived":"Archived"},"cols":{"name":"Module","moduleSwitch":"On / Off","status":"Status","adminOnly":"Admin only","departments":"Departments","access":"Who can see","usage":"Usage","lastOpened":"Last activity","actions":"Actions"},"flag":{"on":"On","off":"Off","alwaysOn":"Always on","alwaysOnHint":"No on/off switch is wired for this module in code — it is always available to whoever the grants allow.","defaultHint":"default","toggleTitle":"Turn {name} on or off"},"row":{"open":"Open","edit":"Edit","fields":"Fields"},"bulk":{"setStatus":"Set status → {status}","adminOnlyOn":"Admin only: on","adminOnlyOff":"Admin only: off","grantDept":"Grant department","revokeDept":"Revoke department","grantUser":"Grant a user","revokeUser":"Revoke a user","clear":"Clear selection"},"perUserHint":"No specific users yet","perUserPlaceholder":"Add a user…","perGroupAdd":"+ group","perGroupHint":"No groups yet","perGroupPlaceholder":"Search groups…","noGroups":"No groups defined — create them in Admin → Groups.","confirmBulkStatus":"Change {n} modules to {status}?","errors":{"row":"Action failed","bulk":"Bulk action failed"}},"modulesV2":{"tabs":{"modules":"Modules","platformFlags":"Platform flags"},"organize":{"groupBy":"Group by","groupHub":"Hub","groupStatus":"Status","groupOnOff":"On / Off","groupNone":"None","filterHub":"Hub","filterOnOff":"On/Off","filterAdminOnly":"Admin only","onOffAll":"All","adminYes":"Admin only","adminNo":"Everyone","clearFilters":"Clear filters","sortBy":"Sort by {col}","turnOn":"Turn on","turnOff":"Turn off","confirmBulkFlag":"Turn {n} modules {state}? ({skipped} always-on skipped)","confirmBulkFlagsOnly":"Turn {n} flags {state}?","yes":"Yes","dragHint":"Drag to reorder","reorderDisabled":"Clear search, filters and sorting to reorder","selectGroup":"Select all in {group}","expand":"Expand {group}","collapse":"Collapse {group}","flagsSearchPlaceholder":"Search flags…","flagsOrg":{"groupBy":"Group","byArea":"Area / module","byCategory":"Category","byOwner":"Owner","byOnOff":"On / Off","byNone":"None","category":"Category","area":"Area","role":"Role","owner":"Owner","all":"All","ownerModule":"Module-owned","ownerPlatform":"Platform","roleEveryone":"Everyone","catModule":"Module","catShell":"App shell","catEngine":"Engine","catAyva":"Ayva","catSafety":"Safety","catLegacy":"Legacy","ownedBadge":"Module","collapseAll":"Collapse all","expandAll":"Expand all","on":"On","off":"Off"}},"readiness":{"col":"Readiness","groupBy":"Readiness","filterLabel":"Readiness","filterAll":"All","buckets":{"live":"Live","dark":"Dark","needs-attention":"Needs attention","na":"n/a"},"panel":{"title":"Readiness — why is this visible or dark?","fullDiagnostic":"Full diagnostic (per user) →","loading":"Checking every gate…","error":"Could not run the readiness check: {message}","allClear":"Every gate passes — this module is visible and reachable.","fix":"Fix"}},"platformFlagsIntro":"Every feature flag in RedsisOne, grouped by the module or area it works in. Module-owned flags also appear on their module’s Features tab — toggling here changes the same switch.","cols":{"module":"Module","hub":"Hub","onOff":"On / Off","status":"Status","access":"Access","usage":"Usage / 7d","version":"Version"},"noHub":"Top level","accessEveryone":"Everyone","accessSummary":"{depts} depts · {groups} groups · {users} users","openDetail":"Open {name} settings","detail":{"back":"All modules","openModule":"Open module","tabs":{"overview":"Overview","access":"Access","features":"Features","settings":"Settings","version":"Version & updates","activity":"Activity","advanced":"Advanced"},"overview":{"identityTitle":"Identity","nameLabel":"Name","descriptionLabel":"Description","slugLabel":"Slug","routeLabel":"Route","save":"Save changes","saved":"Saved","statusTitle":"Status","statusHint":"Active shows the module to everyone its access allows. Hidden removes it from menus but keeps direct URLs working for admins. Archived retires it (never deleted).","adminOnlyLabel":"Admin only","adminOnlyHint":"When on, only admin-tier users can see this module.","placementTitle":"Placement","placementHub":"Hub","placementKeepCode":"Default (code-defined)","placementIcon":"Icon","placementIconDefault":"Default icon","placementPosition":"Position in Hub","placementPositionAuto":"Automatic","placementPositionN":"Position {n}","placementReset":"Reset to defaults","placementHint":"Overrides apply to everyone immediately — no deploy needed. Reset returns the module to its code-defined placement.","statsTitle":"At a glance","statsUsage7d":"Users / 7 days","statsUsage30d":"Users / 30 days","statsLastOpened":"Last activity","statsCreated":"Registered","statsVersion":"Current version","masterSwitchTitle":"Master switch"},"access":{"title":"Who can see this module","intro":"Access is additive: a user sees the module through ANY grant below. With no grants at all, every internal user sees it.","departments":"Departments","groups":"Groups","users":"Specific users","openMatrix":"Cross-module access matrix","previewTitle":"Check a user’s access","previewPick":"Pick a user…","previewVisible":"{name} CAN see this module","previewHidden":"{name} can NOT see this module","previewReasons":{"admin":"Admin-tier users see every module.","admin_only_blocked":"The module is admin-only and this user is not an admin.","user_grant":"They are granted directly (specific users list).","department_grant":"One of their departments is granted.","group_grant":"One of their groups is granted.","default_allow":"The module has no grants, so every internal user sees it.","external_no_grant":"External users only see modules explicitly granted to them.","scoped_no_grant":"The module is scoped to grants this user does not match.","inactive":"The account is not active."},"rolesSoon":"Per-role show/hide is specced and lands here once the role-visibility change ships."},"features":{"title":"Features in this module","intro":"Each switch controls one capability of this module. “Who” scopes a feature to role tiers — empty means everyone who can see the module.","masterBadge":"Master switch","masterHint":"Turning the master off hides the whole module for everyone except the Owner.","noFlags":"This module has no wired feature switches — it is always fully on for everyone who can see it.","envKillSwitch":"Env kill-switch: {name}","whoLabel":"Who","everyone":"Everyone"},"settings":{"title":"Module settings","intro":"Platform settings this module reads. Values are managed in Setup Center — flags flip here directly.","editInSetup":"Edit in Setup Center","sourceDb":"Set in UI","sourceEnv":"From environment","sourceUnset":"Not set","noSettings":"This module has no platform settings mapped to it.","adminPagesTitle":"Module admin pages","adminPagesIntro":"Dedicated configuration surfaces for this module."},"version":{"title":"Version & updates","current":"Running version","noReleases":"No stamped releases yet for this module — versions appear after the next release stamping.","historyTitle":"Release history","changes":"{n} changes","monolithNote":"All modules ship together in one platform build — a module version records what changed for it in each deploy. Individual modules cannot skip a platform deploy.","shippedIn":"shipped in {sha}","switchesTitle":"Version switches","noSwitches":"This module has no switchable version right now."},"activity":{"title":"Activity","intro":"Every audited change to this module — configuration, access and placement.","filterAll":"All events","actionLabels":{"app.created":"Registered","app.updated":"Settings changed","app.archived":"Archived","app.permission_changed":"Access changed"},"by":"by {name}","system":"system","loadMore":"Load older events","empty":"No recorded activity yet."},"advanced":{"title":"Advanced","fieldsTitle":"Fields","fieldsIntro":"Structured fields for prototype (form-built) modules, with per-department and per-role view/edit permissions.","fieldsOpen":"Open fields manager","dangerTitle":"Danger zone","archiveLabel":"Archive this module","archiveHint":"Archiving removes the module from every menu and list. Nothing is deleted — restore it any time by setting status back to Active.","archiveButton":"Archive module","archiveConfirm":"Archive {name}? It disappears from menus for everyone.","archived":"This module is archived.","restoreButton":"Restore to Active"},"errors":{"save":"Could not save — try again."}}},"audit":{"title":"Audit log","subtitle":"Append-only record of every security-relevant action. Filter on the left, click a row to see the full metadata, export the current view to CSV, or flip Live to refresh every 15s.","colWhen":"When","colActor":"Actor","colAction":"Action","colTarget":"Target","colIp":"IP","empty":"No audit entries match these filters.","showingCount":"Showing {n} entries","moreAvailable":"older entries available","loadMore":"Load older","liveMode":"Live","exportCsv":"Export CSV","openFiltersBtn":"Filters","openFilters":"Open the filter widget","activeLabel":"Filtering by","widgetFiltersTab":"Filters","widgetClose":"Close widget","applyFilters":"Apply filters","resetFilters":"Reset","quickFilters":"Quick filters","quickFilterLabels":{"failedLogins":"Failed logins","roleChanges":"Role changes","mfaResets":"MFA resets","permissions":"Permission changes","invitations":"Invitations"},"userAgentLabel":"User agent","filters":{"actor":"Actor","actorPlaceholder":"email or id","targetType":"Target type","targetTypeAny":"Any","date":"Date range","from":"From","to":"To","action":"Action","searchActions":"Search actions…"}},"emailLog":{"title":"Email log","description":"Every transactional email the portal has sent through Resend. Status updates live as Resend's webhook delivers events. Use this when a user reports they didn't receive an invite or password reset.","help":{"title":"What is this page for?","body":"Anytime the portal sends an email (invite, password reset, MFA reset, alert), a row lands here. The status starts as 'queued' and updates as the email provider tries to deliver it.","bulletsLabel":"How to use this page","bullets":["Filter by status to see only failed or bounced messages.","Search by recipient email to debug \"I didn't get the invite\" reports.","Click a row to see the full payload, error message, and delivery timeline.","If a row shows Failed or Bounced, the invite link is still valid — share it directly from the user row."],"tip":"Failed delivery doesn't mean the user can't be invited — copy the invite link from the user row and share it via another channel."}},"emailTest":{"title":"Email test","description":"Fire a transactional email and watch the engagement events flow back in real time. Use this any time you need to verify the email pipeline end-to-end (Resend send → webhook → email_log) without going through the invite flow.","formTitle":"Send a test email","formHint":"The recipient defaults to your own email. Subject and body are pre-filled with a timestamped template — change anything you want, then click Send.","recipientLabel":"Recipient","subjectLabel":"Subject","bodyLabel":"Body (HTML)","bodyHint":"HTML is allowed. The pre-filled body includes one trackable link so you can verify click tracking.","sendButton":"Send test email","sendingButton":"Sending…","sendSuccess":"Sent — watch the feed on the right for delivered / opened / clicked events.","sendFailed":"Send failed: {reason}","feedTitle":"Recent test sends","feedHint":"The most recent test emails you've triggered, newest first. Status updates live as Resend's webhook delivers events.","feedEmpty":"No test sends yet. Fill out the form on the left and click Send.","colWhen":"When","colRecipient":"Recipient","colSubject":"Subject","colStatus":"Status","colOpens":"Opens","colClicks":"Clicks","refreshingLive":"Live refresh","refreshingIdle":"Idle refresh","defaultSubject":"Redsis One — Email System Test ({when})","defaultBody":"<p>This is a test email from Redsis One to verify the email system is working end-to-end.</p><p>Click this <a href=\"https://one.redsis.app/admin/email/test\">trackable link</a> so we can confirm click tracking is firing.</p><p>Sent at {when}.</p>","help":{"title":"What is this page for?","body":"A dedicated surface for verifying the transactional email pipeline. Every send writes an email_log row, hits Resend, and triggers webhook events (sent, delivered, opened, clicked, bounced, complained). The feed on the right reflects every transition.","bulletsLabel":"How to use this page","bullets":["Click Send with the defaults — the recipient pre-fills to your own email.","Watch the feed: a row appears immediately at \"sent\", then transitions to \"delivered\" within seconds.","Open the email in Gmail (loads tracking pixels) to see the \"opened\" event. Click the link to see \"clicked\".","If the row stays at \"sent\" past 2 minutes, something is wrong with the Resend → webhook round-trip — check /m/email-log for the full record."],"tip":"This page is the fastest way to confirm the email system works after any infra change (new Resend key, new From address, webhook re-registration)."}},"emailAdmin":{"title":"Email module config","description":"Provider OAuth status, Email V2 feature flags, and connected-account analytics for the multi-provider mail engine.","tabConfig":"Provider config","tabFlags":"Feature flags","tabAnalytics":"Analytics","providerConfig":{"title":"OAuth provider status","description":"Read-only status of each provider's OAuth client credentials. \"Set\" means both keys are in the environment and the Connect button works. \"Needs setup\" means at least one key is missing — follow the OAuth setup guide to register the app and add the keys.","setupGuideLink":"OAuth setup guide","colProvider":"Provider","colClientId":"Client ID","colClientSecret":"Client secret","colStatus":"Status","statusSet":"Set","statusMissing":"Needs setup","statusAppPassword":"App password (no OAuth key needed)"},"accountSummary":{"title":"Connected accounts","totalConnected":"Total connected mailboxes","distinctUsers":"Users with mailboxes","needsReconnect":"Need reconnect","perProvider":"By provider","noAccounts":"No mailboxes connected yet."},"flags":{"title":"Email V2 feature flags","description":"Toggle Email V2 features org-wide without a redeploy. Each flag enables a slice of the Email V2 rollout. Flags default to off in production — flip them once the slice is verified.","colKey":"Flag key","colDescription":"Description","colStatus":"Status","colLastUpdated":"Last updated","enabled":"Enabled","disabled":"Disabled","enableConfirm":"Enable {key}","disableConfirm":"Disable {key}","saveError":"Failed to update flag: {reason}","empty":"No feature flags found. Run a migration to seed the default flags.","never":"Never updated"},"analytics":{"title":"Connected-account analytics","description":"Read-only counts from the email_account table. Refresh the page for the latest numbers.","totalConnected":"Total mailboxes","distinctUsers":"Distinct users","needsReconnect":"Needs reconnect","providerBreakdown":"Provider breakdown","noData":"No mailbox data yet."}},"emailKillSwitch":{"title":"Email kill-switch","description":"Break-glass ops control. Suppress ALL outbound system email, or pause emails from specific source modules, BEFORE the transport call. Every suppressed send is logged. Owner is NOT bypassed — this is an operational safety net, not a permission gate.","backToEmail":"Back to Email config","status":{"active":"ARMED — email is being suppressed","activePauses":"Pauses active — some modules are suppressed","idle":"Idle — no email is being suppressed","killLabel":"Master kill switch","pauseLabel":"Per-module pauses","expiresLabel":"Expires","expiresNever":"No expiry (manual clear)","reasonLabel":"Reason","reasonNone":"—","updatedByLabel":"Last updated by","updatedAtLabel":"Last updated","pausedNone":"None"},"kill":{"panelTitle":"Kill ALL outbound email","panelHelp":"Suppresses every outbound system email — transactional, notification, digest, everything. In-app, SMS, and push channels are NOT affected. Use for an active incident (false-alert storm, provider breach, mistaken broadcast).","armButton":"PAUSE ALL EMAIL","armingButton":"Arming…","disarmButton":"Disarm — resume email","disarmingButton":"Disarming…","ttlLabel":"Auto-expire","reasonPlaceholder":"Reason (short note for the audit log)","armSuccess":"Kill switch armed. Outbound email is now suppressed.","armFailure":"Failed to arm kill switch: {reason}","disarmSuccess":"Kill switch disarmed. Outbound email will resume.","disarmFailure":"Failed to disarm kill switch: {reason}"},"pause":{"panelTitle":"Pause specific source modules","panelHelp":"Suppress emails from selected source modules (e.g. `boards_automation`, `invitations`, `security`) without killing everything. Matches on `notif_topics.source_module` for engine sends and on the `sourceModule` parameter for direct `sendEmail()` callers.","selectAll":"Select all","selectNone":"Clear selection","currentlyPausedLabel":"Currently paused","applyButton":"Save pause list","applyingButton":"Saving…","clearButton":"Clear all pauses","clearingButton":"Clearing…","ttlLabel":"Auto-expire","reasonPlaceholder":"Reason (short note for the audit log)","applySuccess":"Pause list updated.","applyFailure":"Failed to update pause list: {reason}","clearSuccess":"All module pauses cleared.","clearFailure":"Failed to clear pause list: {reason}","noneAvailable":"No known source modules yet — nothing to pause."},"ttl":{"off":"No expiry","h1":"1 hour","h4":"4 hours","h12":"12 hours","h24":"24 hours"},"confirm":{"armTitle":"Arm the email kill switch?","armBody":"This suppresses EVERY outbound system email until disarmed or the TTL expires. Type PAUSE to confirm.","pauseTitle":"Update paused source modules?","pauseBody":"These source modules will stop sending email until unpaused or the TTL expires. Type PAUSE to confirm.","typePauseLabel":"Type PAUSE to confirm","typePausePlaceholder":"PAUSE","cancelButton":"Cancel","confirmButton":"Confirm"},"recent":{"title":"Recently suppressed sends","description":"Last {hours}h — up to {max} most recent email_log rows with status=killed. If this list is empty and the switch is armed, no email has tried to send.","empty":"No suppressed sends in the last {hours}h.","colWhen":"When","colTo":"Recipient","colSubject":"Subject","colTemplate":"Template","colSource":"Source module","colReason":"Reason"}},"security":{"title":"Cyber Security & Resilience","subtitle":"Internal SOC dashboard — alerts, integration health, backups, attack surface, and access reviews across one.redsis.app and every connected platform.","subNavLabel":"Cyber Security sections","phaseLabel":"Phase","foundationNotice":"Foundation shipped — schema, RBAC, feature flag, and shell are live. Live counts wire in starting Phase 30 (Identity & Access).","comingInPhase":"Wires in during Phase {phase}.","kpiAlertsOpen":"Open alerts","kpiIntegrationsHealthy":"Integrations healthy","kpiBackupsVerified":"Backups verified","kpiAttackSurfaceIssues":"Attack surface issues","dashboardLive":{"posture":"Posture score","postureLabels":{"healthy":"Healthy","fair":"Fair","attention":"Needs attention","critical":"Critical"},"kpiAlertsOpen":"Open alerts","kpiIntegrations":"Integrations","kpiBackups":"Backups verified","kpiAttackSurface":"Attack surface","kpiCerts":"Certs expiring","kpiRulesFired":"Rules fired","silent":"no recent runs","certsHeading":"Certificates expiring within 30 days","recentTitle":"Recent events","recentHint":"The 20 most recent alerts across every detector + integration probe + resilience check.","recentEmpty":"No events yet. The first alert lands here once a rule trips, a probe fails, or a cert is detected expiring.","colSeverity":"Severity","colStatus":"Status","colTitle":"Title","colSource":"Source","colCount":"Count","colLastSeen":"Last seen","generatedAt":"Snapshot taken","reviewLink":"Review","headlineAllClear":"Everything looks good. No critical alerts open, all integrations healthy, certs valid, backups verified. The platform is operating cleanly.","headlineCriticalAlerts":"{n} critical alert(s) open. Acknowledge or resolve them — each one represents a real event that requires attention.","headlineIntegrationDown":"{n} integration(s) are DOWN. Probes can't reach them — either the upstream service is impaired or our credentials expired.","headlineCertExpiring":"The TLS certificate for {domain} expires in {days} day(s). Renew it before then or the site will go offline.","headlineAttackSurface":"{n} critical attack-surface finding(s). These are exposures that could be exploited — review and remediate.","headlineBackupsSilent":"Backups have been silent recently. Verify the backup cron is running and reaching the backup provider."},"compliance":{"exportsTitle":"Compliance exports","exportsHint":"CSVs for SOC2 / ISO 27001 reviewers. Every download is audit-logged via `settings.changed` so the export itself shows up in the audit trail.","exportAccessReview":"Access review (CSV)","exportAudit90":"Privileged actions, 90d (CSV)","exportAudit365":"Privileged actions, 365d (CSV)","digestTitle":"Weekly digest","digestHint":"Sent every Monday at 08:00 UTC to {count} subscriber(s). Covers alerts, integration uptime, backups, attack-surface deltas, and cert expiries.","digestSendNow":"Send now","digestSending":"Sending…","digestSent":"Digest sent — {sent} delivered, {skipped} skipped.","digestFailed":"Digest send failed. Check server logs.","digestKpiAlerts":"Alerts","digestKpiAlertsHint":"opened / acked / resolved","digestKpiIntegrations":"Integrations","digestKpiAttackSurface":"Attack surface","digestKpiCerts":"Cert expiries","digestKpiCertsHint":"within 30 days","digestPeriod":"Period","rbacTitle":"RBAC visualizer — who can do what","viewMatrix":"User × capability matrix","viewReverse":"Capability → users reverse","matrixLegend":"Legend: ✓ = granted by tier default · ★ = granted by per-role override (in addition to tier).","searchUserPlaceholder":"Search users / role…","searchCapPlaceholder":"Search capabilities…","colUser":"User","colTier":"Tier","colRole":"Role","colCapability":"Capability","colGroup":"Group","colLabel":"Label","colGrantedTo":"Granted to","colGrantedToSuffix":"user(s)"},"attackSurface":{"scanTitle":"Run attack-surface scan","scanHint":"Crawls every route file looking for missing auth gates, inventories every process.env reference, scans source files for leaked credentials, and queries Vercel firewall.","scanNow":"Scan now","scanning":"Scanning…","scanResult":"Scan complete — {routes} routes ({unflagged} unflagged) · {secrets} secret findings · {envVars} env vars · {created} alerts created.","scanFailed":"Scan failed. Check server logs.","kpiUnflagged":"Unflagged public routes","kpiSecrets":"Secret findings","kpiClientVars":"NEXT_PUBLIC_ vars","kpiTotalVars":"Total env vars","firewallTitle":"Vercel firewall","firewallHint":"Top blocked IPs + 24h blocked-request count, when the project is on a plan with firewall enabled.","firewallNotConfigured":"VERCEL_TOKEN not set — firewall data not visible.","firewallUnavailable":"Firewall not enabled on this plan","firewallBlocked":"Blocked in last 24h","firewallTopIps":"Top blocked IPs","routesTitle":"Routes without auth gates","routesHint":"Pages and API routes that do NOT call requireAdmin / requireCapability / requireUser. Add a gate or list the route in the KNOWN_PUBLIC array in route-crawler.ts.","routesAllGated":"All routes have an auth gate or are in the intentional-public list. Nice.","gatedRoutesTitle":"Routes with auth gates ({count})","secretsTitle":"Secrets found in source files","secretsHint":"Pattern-based static scan for leaked credentials in the current working tree. NOT a substitute for the GitHub Action that scans git history (see .github/workflows/security-secret-scan.yml).","secretsEmpty":"No secret patterns matched. Continue to run the GH Action against git history.","envTitle":"Environment variables in code","envHint":"Every process.env.X reference in the codebase. NEXT_PUBLIC_ vars are highlighted — those ship to the client bundle. A NEXT_PUBLIC_ var with \"secret/key/token/password\" in its name fires a critical alert.","envEmpty":"No env vars found in source. Did the scan run?","publicLabel":"public","serverOnlyLabel":"server-only","kindApi":"api","kindPage":"page","colRoute":"Route","colFile":"File","colKind":"Kind","colGate":"Gate","colCapability":"Capability","colSeverity":"Severity","colPattern":"Pattern","colExcerpt":"Excerpt","colVarName":"Variable","colReferences":"Refs","colFiles":"Files","colVisibility":"Visibility"},"resilience":{"scanTitle":"Run resilience scan","scanHint":"Runs all five checks: TLS cert expiry, DNS records, backup verification, CVE scan, Vercel deploy feed. Cron runs daily; manual scan is for after fixing an issue.","scanNow":"Scan now","scanning":"Scanning…","scanResult":"Scan complete — {certs} certs · {dns} DNS · {backups} backups · {cves} CVEs · {created} alerts created.","scanFailed":"Scan failed. Check server logs.","certsTitle":"TLS certificates","certsHint":"Expiry watcher for every watched domain. Alerts fire 14 days out and 1 day out (critical).","certsEmpty":"No certificates checked yet. Run a scan to populate.","backupsTitle":"Backups","backupsHint":"Daily verification of Neon and Supabase backup metadata. Failed verifications page subscribers.","backupsEmpty":"No backup checks yet. Run a scan to populate.","dnsTitle":"DNS records","dnsHint":"Baseline + change detection on A / AAAA / MX / NS / TXT for every watched domain. Unexpected changes are a hijack signal.","dnsEmpty":"No DNS snapshots yet. Run a scan to populate.","cvesTitle":"Dependency CVEs","cvesHint":"Known vulnerabilities in the resolved dependency tree from the npm advisory API. High and critical findings page subscribers.","cvesEmpty":"No CVE findings — your dependencies look clean.","dependabotTitle":"Dependabot alerts","dependabotSource":"GitHub Dependabot","dependabotHint":"Open vulnerability alerts from GitHub Dependabot for this repository. Read live from the GitHub API — no scan required.","dependabotUnavailable":"Dependabot alerts unavailable.","dependabotEmpty":"No open Dependabot alerts — repository is clean.","dependabotLabelCritical":"Critical","dependabotLabelHigh":"High","dependabotLabelModerate":"Moderate","dependabotLabelLow":"Low","dependabotTotal":"{n} open alerts","dependabotViewOnGitHub":"View on GitHub","dependabotColPackage":"Package","dependabotColAdvisory":"Advisory / CVE","dependabotColVulnRange":"Affected versions","dependabotColPatched":"Fixed in","deploysTitle":"Recent Vercel deploys","deploysHint":"Last 10 builds with state + duration. Flapping ERROR states are a CI/CD issue worth investigating.","deploysEmpty":"No deploys returned.","deploysNotConfigured":"Vercel deploys not visible — set VERCEL_TOKEN + VERCEL_PROJECT_ID.","colDomain":"Domain","colExpires":"Expires","colDaysLeft":"Days left","colIssuer":"Issuer","colStatus":"Status","colSource":"Source","colBackupTaken":"Backup taken","colVerifiedAt":"Verified","colSize":"Size","colError":"Error","colRrType":"Record","colRecords":"Values","colLastSeen":"Last seen","colSeverity":"Severity","colPackage":"Package","colCve":"CVE","colInstalled":"Installed","colPatched":"Patched in","colTitle":"Detail","colWhen":"When","colState":"State","colTarget":"Target","colDuration":"Duration","colCommit":"Commit"},"integrations":{"probeNowTitle":"Probe all integrations","probeNowHint":"Runs every registered probe once and refreshes the status board. The 1-minute cron does this automatically — manual probe is for fixing-and-verifying.","probeNow":"Probe now","probing":"Probing…","probeResult":"Probe complete — {probed} probed · {healthy} healthy · {degraded} degraded · {down} down · {skipped} skipped.","probeFailed":"Probe failed. Check server logs.","tokenExpiryTitle":"Tokens expiring soon","boardTitle":"Status board","boardHint":"Cards sorted worst-to-best so anything broken jumps out. Skipped means the integration is not yet configured.","eventsTitle":"Recent events","eventsHint":"Last 40 probe results across all integrations.","eventsEmpty":"No probe events yet. Hit \"Probe now\" or wait for the cron tick.","lastCheck":"Last check","lastOk":"Last OK","tokenExpires":"Token expires","colWhen":"When","colIntegration":"Integration","colStatus":"Status","colLatency":"Latency","colError":"Error","freshnessTitle":"Data freshness","freshnessLastScan":"Last scan","freshnessNeverScanned":"never — run \"Probe now\" or wait for the 1-minute cron","freshnessRealData":"Every status above is the result of a real API call made from the server. No mock data, no cached marketing numbers — each probe authenticates with the configured env-var credentials and reads a real endpoint.","freshnessProbeHeader":"What each probe actually does","probeEnvVars":"Reads","probeHits":"Calls","probeMethodHeader":"Method"},"alerts":{"empty":"No alerts match the current filter. Run a scan from the Threats section to populate.","filters":{"open":"Open","acknowledged":"Acknowledged","resolved":"Resolved","all":"All"},"channelStripTitle":"Channel routing","channelStripHint":"Severity floor per channel — alerts below the floor stay silent on that channel. Subscribers add the per-user filter on top.","ack":"Acknowledge","resolve":"Resolve","falsePositive":"False positive","addNote":"Add note","notePlaceholder":"Add a triage note…","firstSeen":"First seen","ackedAt":"Acknowledged","resolvedAt":"Resolved","systemActor":"system","working":"Working…"},"threats":{"kpi24h":"Alerts / 24h","kpi7d":"Alerts / 7d","kpiGeo":"Geo-IP provider","geoOn":"Configured","geoOff":"Not configured","scanNowTitle":"Run a scan now","scanNowHint":"Replays the last 60 minutes of login_history through every enabled rule. Phase 32 will wire this into a 1-minute cron driver.","scanNow":"Scan now","scanning":"Scanning…","scanComplete":"Scan complete — {scanned} events scanned, {created} new alerts, {updated} existing alerts updated.","scanFailed":"Scan failed. Check server logs for details.","rulesTitle":"Detection rules","rulesHint":"Built-in detectors that produce alerts from login_history. Disable one to stop it firing without losing its history.","ruleEnabled":"Enabled","ruleDisabled":"Disabled","paramsHeading":"Tunable parameters","paramsSave":"Save parameters","paramsResetDefaults":"Reset to defaults","paramsNoneTunable":"This rule has no tunable parameters.","paramsExpand":"Tune ▾","paramsCollapse":"Hide ▴","recentAlertsTitle":"Recent alerts","recentAlertsHint":"The 20 most recently active alerts across every detector. Acknowledge / resolve actions land in Phase 32.","recentAlertsEmpty":"No alerts yet. Run a scan to populate.","colRule":"Rule","colSeverity":"Severity","colFired24h":"Fired / 24h","colFired7d":"Fired / 7d","colActions":"State","colSource":"Source","colTitle":"Title","colCount":"Count","colLastSeen":"Last seen","working":"Working…"},"identity":{"kpiActiveSessions":"Active sessions","kpiDormantAccounts":"Dormant ≥ {days}d","kpiRbacChanges":"RBAC changes / 24h","activeSessionsTitle":"Active sessions","activeSessionsHint":"Every signed-in user across every device. Click force-logout to revoke a single session — the user must sign in again to continue.","activeSessionsEmpty":"No active sessions.","dormantTitle":"Dormant accounts","dormantHint":"Active accounts whose last login is older than {days} days. Force-logout clears any lingering sessions; suspend flips the account inactive AND clears every session.","dormantEmpty":"No dormant accounts.","rbacFeedTitle":"Recent access changes","rbacFeedHint":"Role / department / suspension / app-permission changes from the last 30 days. Driven by the existing audit_log — drilldown via /admin/audit.","rbacFeedEmpty":"No access changes in the last 30 days.","colUser":"User","colIp":"IP","colUserAgent":"Device","colStarted":"Started","colExpires":"Expires","colRole":"Role","colMfa":"MFA","colLastLogin":"Last login","colDaysDormant":"Idle","colActions":"Actions","colWhen":"When","colAction":"Action","colActor":"Actor","colTarget":"Target","colMetadata":"Detail","forceLogout":"Force logout","logoutAll":"Log out all","suspend":"Suspend","currentSessionTag":"(this session)","confirmYes":"Yes, force logout","confirmYesSuspend":"Yes, suspend","confirmCancel":"Cancel","working":"Working…","mfaOn":"On","mfaOff":"Off","neverLoggedIn":"Never","refusedOwner":"Not suspended: this account is an Owner. Owners can never be suspended or removed — take the Owner role away first.","refusedSelf":"Not suspended: you cannot suspend your own account.","refusedOther":"Not done: {reason}","sessions":{"privacyNotice":"For account security only. Lookups are recorded.","tabSessions":"Sessions & access","tabLogins":"Sign-in history","tabsLabel":"Identity views","title":"Who is signed in","hint":"One row per person with a live session on the web or in the mobile app. Expand a person to see each session and close it.","cookieWindow":"Closing a web session can take up to {n} minute to take effect in that browser. The mobile app is signed out on its next request.","searchLabel":"Search","searchPlaceholder":"Name, email or IP","kindLabel":"Type","kindAll":"Web and mobile","kindWeb":"Web only","kindMobile":"Mobile app only","applyFilters":"Apply","clearFilters":"Clear","colPerson":"Person","colSessions":"Sessions","colActivity":"Activity","countWeb":"{n} web","countMobile":"{n} app","typeWeb":"Web","typeMobile":"Mobile app","activityJustNow":"active just now","activityMinutes":"active {n} min ago","activityHours":"active {n} h ago","activityDays":"active {n} d ago","activityApprox":"approximate (±15 min)","browserRedsisApp":"RedsisOne app","deviceDesktop":"Desktop","deviceMobile":"Mobile","deviceTablet":"Tablet","deviceUnknown":"Unknown","appVersion":"v{v}","labelIp":"IP","labelStarted":"Started","labelLastActivity":"Last activity","labelExpires":"Expires","expand":"Show sessions","collapse":"Hide sessions","loading":"Loading sessions…","loadFailed":"Could not load the sessions. Try again.","closeSession":"Close","confirmClose":"Yes, close this session","closeAll":"Close all","confirmCloseAll":"Yes, close all {n}","closeAllSelfNote":"Your current session stays open.","cancel":"Keep it","working":"Closing…","currentSession":"This session","closed":"Closed","refusedNotFound":"That session had already ended.","refusedProtected":"Not closed: this is a protected account (Owner). Only that person can sign their own sessions out.","refusedOwnSession":"You cannot close your own current session here — use Sign out.","noSessions":"Nobody has a live session right now.","noMatches":"No live sessions match these filters.","noUserSessions":"No live sessions.","nextPage":"Next {n} people","firstPage":"Back to the first page","loginsTitle":"Sign-in history","loginsHint":"Every sign-in attempt, newest first. Read-only.","colWhen":"When","colResult":"Result","colMfa":"MFA","colDevice":"Device","resultAll":"Any result","resultSuccess":"Success","resultFailed":"Failed","resultLocked":"Locked","resultMfaRequired":"MFA required","fromLabel":"From","toLabel":"To","personSearchLabel":"Person, email or IP","personFilterActive":"Only {name}","clearPerson":"Show everyone","filterByPerson":"Only this person","mfaYes":"Yes","mfaNo":"No","unknownAccount":"Unknown account","loginsEmpty":"No sign-ins recorded yet.","loginsNoMatches":"No sign-ins match these filters.","nextLogins":"Next {n}","profileSessionsTitle":"Sessions","profileLoginsTitle":"Last 20 sign-ins","profileOpenHistory":"Open the full history","kpiLiveSessions":"Live sessions (web + app)"}},"sections":{"dashboard":{"label":"Dashboard","description":"At-a-glance posture: open alerts, integration health, backup status, attack-surface issues."},"alerts":{"label":"Alerts","description":"Open / acknowledge / resolve security alerts. Severity drives routing across email, SMS, in-app, and Slack/Teams."},"identity":{"label":"Identity & access","description":"Active sessions, dormant accounts, RBAC change feed, credential-leak checks."},"threats":{"label":"Threat detection","description":"Anomaly engine on login_history: impossible travel, brute force, off-hours, new device."},"integrations":{"label":"Integrations health","description":"Probe status per dependency (Monday, Microsoft, UniFi, Superset, Resend, Supabase, Vercel, Redix). Token-expiry warnings."},"resilience":{"label":"Resilience","description":"Backup verification, SSL cert expiry, DNS-change detection, dependency CVE scan."},"attack-surface":{"label":"Attack surface","description":"Public endpoint inventory, env-var changes, git-history secret scan, WAF/rate-limit insights."},"compliance":{"label":"Compliance & reports","description":"Quarterly access-review CSV, \"who can see what\" matrix, weekly digest, audit-log retention enforcement."},"unifi":{"label":"UniFi (enterprise IT)","description":"Real-time read-only view of every UniFi-managed site across the company: WAN status, devices online, alerts, location."},"validation":{"label":"System check","description":"Live inventory of every security capability — what powers it, what it depends on, and whether it is actually working right now. For the Head of IT to validate the platform end-to-end."},"soc":{"label":"Office SOC","description":"On-prem Wazuh SIEM + EDR running on the office Proxmox cluster. Manager status, agent inventory, and detection rule catalog — pulled live via Cloudflare Tunnel + Access from 192.168.50.122."},"actions":{"label":"Corrective actions","description":"Assigned remediation tasks from any security source — alerts, Wazuh detections, CVEs, attack-surface findings. Track owner, due date, and status in one place."},"audit":{"label":"Codebase audit","description":"Daily snapshot of open security findings across CVEs, exposed secrets, unprotected routes, and env-var issues — with day-over-day and week-over-week deltas."},"incidents":{"label":"Incidents","description":"Canonical incident lifecycle — promote a security alert or Wazuh detection to a named incident, assign an owner, track status through investigation → resolution, and link a post-mortem."},"vuln-alerts":{"label":"Vulnerability Alerts","description":"Dependabot, code-scanning, and secret-scanning alerts from GitHub — triaged, acknowledged, and resolved in one place."}},"actions":{"title":"Corrective Action Queue","col_severity":"Severity","col_title":"Title","col_source":"Source","col_assignee":"Assignee","col_due":"Due","col_status":"Status","status":{"all":"All","open":"Open","in_progress":"In progress","resolved":"Resolved","wont_fix":"Won't fix"},"filter_severity":"Severity","filter_status":"Status","filter_source":"Source","filterBy":"Filter:","sourceLabel":{"alert":"Alert","wazuh":"Wazuh","cve":"CVE","attack_surface":"Attack surface","manual":"Manual"},"unassigned":"— Unassigned","unknownUser":"Unknown","dueLabel":"Due","createdLabel":"Created","sourceIdLabel":"Source ID","notesPlaceholder":"Add notes or context…","saveNotes":"Save","saved":"Saved.","saveError":"Could not save — try again.","empty":"No corrective actions match the current filter.","newAction":"+ New action","newFieldTitle":"Title","newFieldTitlePlaceholder":"e.g. Patch CVE-2024-XXXXX on prod servers","newFieldNotes":"Notes (optional)","newFieldNotesPlaceholder":"Context, steps, links…","newCreate":"Create action","saving":"Saving…","cancel":"Cancel"},"audit":{"title":"Daily Codebase Audit","runNow":"Run audit now","running":"Running…","runSuccess":"Audit snapshot captured.","runError":"Could not run the audit — try again.","lastRun":"Last run: {at}","neverRun":"No snapshots yet — run the audit to capture a baseline.","noData":"No snapshot data yet. Click \"Run audit now\" to generate the first baseline.","openFindings":"open findings","sev_critical":"Critical","sev_high":"High","sev_moderate":"Moderate","sev_low":"Low","sev_info":"Info","deltaUp":"+{n}","deltaDown":"−{n}","deltaFlat":"—","historyTitle":"7-day history","historyEmpty":"No history rows match the current filter.","filterBy":"Filter:","col_captured_at":"Captured at","col_source":"Source","col_severity":"Severity","col_open":"Open","col_closed":"Closed","col_new":"New"},"broadcasters":{"title":"Broadcasters","topTitle":"Top broadcasters — last 7 days","blockedTitle":"Blocked emits — last 24 hours","pausesTitle":"Active pauses","emptyTop":"No broadcasts recorded in the last 7 days.","emptyPauses":"No live pauses.","col_author":"Author","col_source":"Source","col_emits":"Emits","col_recipients":"Recipients","col_blocked":"Blocked","col_lastEmit":"Last emit","col_actions":"Actions","col_when":"When","col_status":"Status","col_reason":"Reason","col_scope":"Scope","col_target":"Target","col_until":"Until","col_pausedBy":"Paused by","col_since":"Since","pauseSourceLabel":"Pause source module","reasonOptional":"Reason (optional)","observeMode":"Observe-only mode","enforcementOn":"Enforcement is ON"},"incidents":{"title":"Incidents","promoteBtn":"Promote to incident","alreadyPromoted":"Already an incident","working":"Working…","empty":"No incidents yet. Use \"Promote to incident\" in the Alerts or Office SOC sections.","col_title":"Title","col_severity":"Severity","col_status":"Status","col_source":"Source","col_assigned":"Assigned to","col_created":"Created","col_resolved":"Resolved","unassigned":"Unassigned","sourceLabel":{"security_alert":"Security alert","wazuh":"Wazuh","status":"Status page","endpoint":"Endpoint","manual":"Manual"},"status":{"investigating":"Investigating","identified":"Identified","monitoring":"Monitoring","resolved":"Resolved"},"severity":{"minor":"Minor","major":"Major","critical":"Critical"},"detailTitle":"Incident detail","detailSource":"Source","detailAssignee":"Assignee","detailPostmortem":"Post-mortem","detailUpdates":"Timeline","resolveBtn":"Resolve incident","resolveNote":"Mark as resolved","postmortemPlaceholder":"https://...","updatePlaceholder":"Add a status update…","addUpdate":"Post update","promoteTitle":"Incident title","promoteSeverity":"Severity","promoteTitlePlaceholder":"e.g. Brute-force login spike — investigating","promoteSeverityHint":"minor → major → critical","promoteConfirm":"Create incident","promoteCancel":"Cancel","promoted":"Incident created.","updated":"Incident updated."},"vulnAlerts":{"notConfiguredTitle":"GitHub vulnerability scanning is not configured","notConfiguredBody":"Set GITHUB_TOKEN and GITHUB_ORG in the platform environment to enable Dependabot, code-scanning, and secret-scanning alert ingestion.","kpiCritical":"Critical (open)","kpiHigh":"High (open)","kpiMedium":"Medium (open)","kpiOpen":"Open","kpiTotal":"Total","alerts":"alerts","scanNow":"Scan now","scanning":"Scanning…","scanSuccess":"Scan complete — alerts updated.","scanError":"Scan failed — try again.","filterBy":"Filter:","emptyNoAlerts":"No vulnerability alerts found. Run a scan to fetch the latest from GitHub.","emptyFiltered":"No alerts match the current filters.","colSeverity":"Severity","colTitle":"Alert","colSource":"Source","colStatus":"Status","colLastSeen":"Last seen","colActions":"Actions","working":"Working…","ack":"Acknowledge","resolve":"Resolve","falsePositive":"False positive","done":"Done","firstSeen":"First seen","lastSeen":"Last seen","acked":"Acknowledged","resolved":"Resolved","occurrences":"Occurrences","viewOnGitHub":"View on GitHub","footerNote":"Alerts are sourced from GitHub Dependabot, code-scanning, and secret-scanning APIs. Run a scan to fetch the latest."},"validation":{"summaryTitle":"System check — security capability inventory","summaryHint":"Every detection rule, integration probe, resilience check, alert channel, compliance report, cron job, and storage table — listed with its current live status. Read-only. Refresh the page for a new snapshot.","whatIsTitle":"What this page is for","whatIsBody":"A single screen that an IT lead can walk through to validate the security portal is operating as designed. Each row says what the capability does in plain English, what motor powers it (our code vs. an external service), which env vars it requires, what services it contacts, and whether it is currently live, partial, pending, or not configured. Use the Print button to capture a PDF snapshot for leadership or compliance review.","printReport":"🖨 Print report","tileLive":"Live","tilePartial":"Partial","tilePending":"Pending","tileNotConfigured":"Not configured","tileTotal":"Total checks","tileCoverage":"Coverage","generatedAt":"Snapshot taken","motorLabel":"Motor","envVarsLabel":"Required env vars","externalLabel":"External services","detailLabel":"Status","noEnvVars":"— none required","noExternal":"— none (all logic in our code)","openLink":"Open","statusLabels":{"live":"Live","partial":"Partial","pending":"Pending","not-configured":"Not configured","unknown":"Unknown"},"categories":{"detection":"Threat detection","integrations":"Integration health probes","resilience":"Resilience (backups / TLS / DNS / CVEs)","alerts":"Alert delivery channels","identity":"Identity & access","attack_surface":"Attack surface scanners","compliance":"Compliance reports","infrastructure":"Infrastructure & orchestration","storage":"Storage & feature flags"},"capabilities":{"rule-impossible-travel":{"name":"Impossible travel detection","description":"Fires when the same user signs in from two different countries within a window too short to be physically possible.","motor":"Our code + ip-api.com country lookup"},"rule-brute-force":{"name":"Brute-force lockout","description":"Fires when one email is hit by many failed logins in an hour, OR when one IP produces many failed logins across accounts. Thresholds are admin-tunable.","motor":"Our code — SQL over login_history"},"rule-off-hours-admin":{"name":"Off-hours admin login","description":"Fires when an admin signs in during a UTC hour they have never used before in their 90-day baseline. Requires a built-up baseline first.","motor":"Our code — per-user baseline math"},"rule-new-device":{"name":"New device sign-in","description":"Fires when a successful login comes from a user-agent fingerprint not present in the 90-day baseline.","motor":"Our code — user-agent fingerprinting"},"rule-new-country":{"name":"New country sign-in","description":"Fires when a successful login comes from a country not present in the 90-day baseline. Requires geo-IP signal.","motor":"Our code + ip-api.com country lookup"},"hibp-credential-leak":{"name":"Credential-leak check (HaveIBeenPwned)","description":"Checks user passwords against the global breach corpus using k-anonymity (the password itself never leaves our server — only the first 5 chars of its SHA-1 hash).","motor":"Our helper + api.pwnedpasswords.com"},"cert-watcher":{"name":"TLS certificate expiry watcher","description":"Daily check of every watched domain — opens a TLS handshake, reads the peer certificate, alerts at 14 / 7 / 1 day before expiry. Catches \"the cert expired and the site is now broken\".","motor":"Node built-in: node:tls"},"dns-watcher":{"name":"DNS-change detection","description":"Snapshots A/AAAA/MX/NS/TXT records for each watched domain via Cloudflare's public resolver. Diffs against the baseline; any change fires an alert — could be a legit admin change or a hijack signal.","motor":"Node built-in: node:dns + Cloudflare 1.1.1.1 resolver"},"backup-neon":{"name":"Neon Postgres backup verification","description":"Daily check that the Neon primary branch has been updated within 26h (silent backups = suspect). PITR window is read for the retention figure.","motor":"Neon Management API"},"backup-supabase":{"name":"Supabase backup verification","description":"Daily check that Supabase reports recent backups via its Management API.","motor":"Supabase Management API"},"cve-scan":{"name":"Dependency CVE scan (npm audit)","description":"Nightly run of `npm audit` parsed into the attack-surface inventory. High + critical findings fire alerts.","motor":"Node built-in: npm audit"},"vercel-deploys":{"name":"Vercel deploy feed","description":"Surfaces the recent deployment history — any ERROR or CANCELED deploy gets flagged so you know if the production pipeline is jammed.","motor":"Vercel REST API"},"channel-email":{"name":"Email channel (Resend)","description":"Critical alerts emailed to security subscribers. Body includes signed ack links so you can acknowledge from the email without logging in.","motor":"Resend API (existing Email-chat infrastructure)"},"channel-sms":{"name":"SMS channel (Twilio)","description":"Critical alerts SMSed to security subscribers. Reply with the signed code to ack from your phone.","motor":"Twilio REST API"},"channel-in-app":{"name":"In-app banner","description":"Critical alerts (or high-severity unacked for > 1h) render as a red banner on every /admin page.","motor":"Our React server component"},"channel-slack":{"name":"Slack channel (webhook)","description":"Alerts POST to a Slack Incoming Webhook URL. Channel-specific severity floor.","motor":"Slack Incoming Webhooks (HTTP POST, no SDK)"},"channel-teams":{"name":"Teams channel (webhook)","description":"Alerts POST to a Microsoft Teams Incoming Webhook URL.","motor":"Teams Incoming Webhooks (HTTP POST, no SDK)"},"ack-tokens":{"name":"Signed ack links (HMAC tokens)","description":"The \"click to acknowledge\" links in alert emails / SMS / Slack messages are cryptographically signed with the portal's auth secret. 7-day TTL. No login required — the token IS the auth.","motor":"Node built-in: node:crypto (HMAC-SHA256)"},"sessions":{"name":"Active sessions surface","description":"Lists every signed-in user with device + IP + last-seen. Admins can force-logout any session.","motor":"SQL on Better-Auth session table"},"dormant":{"name":"Dormant account detector","description":"Flags active accounts whose last login is older than 60 days. Daily cron rebuild keeps the list fresh.","motor":"SQL on user.last_login_at"},"rbac-feed":{"name":"RBAC change feed","description":"Audit-log view filtered to role / department / permission changes over the last 30 days. Who promoted whom, when.","motor":"SQL on audit_log"},"route-crawler":{"name":"Public-route auth-gate crawler","description":"Walks every page.tsx in the repo to confirm it calls requireCapability / requireAdmin / requireUser. Pages without a gate are flagged unless explicitly marked public.","motor":"Node built-in: fs.readdir + regex"},"env-var-inventory":{"name":"Env-var inventory + change tracker","description":"Lists every process.env.X reference in the codebase + last git commit that changed it. Surfaces accidental dependencies + drift between code and Vercel.","motor":"Node built-in: fs + git log"},"secret-scan":{"name":"Git-history secret scanner","description":"One-shot scan on every deploy + continuous scan on every push via the gitleaks GitHub Action. Catches API keys / JWTs / DB DSNs / private keys committed by accident.","motor":"Our regex patterns + gitleaks (GitHub Actions)"},"firewall-insights":{"name":"Vercel firewall insights","description":"Surfaces blocked IPs + rate-limit hits from Vercel's edge firewall.","motor":"Vercel REST API"},"access-review":{"name":"Quarterly access review export","description":"CSV export of every user × role × department × app grant for SOC2 / ISO 27001 reviewers. Every download is audit-logged.","motor":"SQL aggregation, no external service"},"audit-export":{"name":"Privileged-action audit export","description":"CSV export of all security-sensitive audit-log entries over a configurable date range (default 90 days).","motor":"SQL on audit_log"},"rbac-matrix":{"name":"Who-can-do-what matrix","description":"Visualizer of every user × capability combination, plus reverse lookup (\"which users have this capability\").","motor":"In-memory cross-product, no external service"},"weekly-digest":{"name":"Weekly security digest","description":"Monday 08:00 UTC email summarising the week's alerts, integration uptime, backup status, attack-surface deltas, and cert expiries.","motor":"Our composer + Resend"},"cron-driver":{"name":"1-minute scan cron","description":"Vercel Cron hits /api/cron/security/scan every minute. Runs integration probes + threat scan + (daily) baseline rebuild.","motor":"Vercel Cron + our endpoint"},"cron-resilience":{"name":"Daily resilience cron","description":"Vercel Cron hits /api/cron/security/resilience at 06:00 UTC. Runs cert + DNS + backup + CVE checks.","motor":"Vercel Cron + our endpoint"},"cron-attack-surface":{"name":"Daily attack-surface cron","description":"Vercel Cron hits /api/cron/security/attack-surface at 06:30 UTC. Runs route crawler + env inventory + secret scan + firewall insights.","motor":"Vercel Cron + our endpoint"},"cron-digest":{"name":"Weekly digest cron","description":"Vercel Cron hits /api/cron/security/digest Monday 08:00 UTC. Sends the weekly digest email to email subscribers.","motor":"Vercel Cron + our endpoint"},"storage-tables":{"name":"security_* tables (Neon Postgres)","description":"10 dedicated tables in your own Neon database: alerts, alert_rules, alert_notes, alert_subscribers, channel_config, integration_health, integration_health_events, backup_checks, anomaly_baselines, attack_surface.","motor":"Drizzle ORM on your Neon Postgres"},"storage-portal-flag":{"name":"Feature flag","description":"SECURITY_PORTAL_ENABLED env-var gates the entire portal. Defaults ON in development, OFF in production until explicitly set.","motor":"Env-var check"},"probe-neon":{"name":"Neon Postgres (primary DB)","description":"SELECT 1 every minute against the actual database connection. Fastest signal that the platform is up at all.","motor":"Drizzle ORM (no external API call)"},"probe-supabase":{"name":"Supabase","description":"Hits the project REST API root with the anon key. Verifies the project is reachable and accepting auth.","motor":"Supabase REST endpoint"},"probe-resend":{"name":"Resend (email transport)","description":"Lists verified domains. Authoritative signal that the API key is valid and the service is reachable.","motor":"Resend REST API"},"probe-vercel":{"name":"Vercel (host)","description":"Queries the deployments endpoint. We are running ON Vercel — this probe confirms our deploy pipeline is in a known state.","motor":"Vercel REST API"},"probe-monday":{"name":"Monday.com","description":"GraphQL `me` query. Verifies the token + that Monday is reachable.","motor":"Monday GraphQL API"},"probe-microsoft":{"name":"Microsoft 365 (Graph)","description":"Mints a Graph token via OAuth client-credentials grant and queries the organization endpoint. Token expiry surfaces as a \"rotate soon\" warning.","motor":"Microsoft Graph API"},"probe-unifi":{"name":"UniFi (Ubiquiti)","description":"Lists every UniFi-managed site. Powers the enterprise-IT dashboard.","motor":"Ubiquiti Site Manager API"},"probe-redix":{"name":"Redix","description":"Configurable health-path probe against the internal Redix API.","motor":"Redix API"},"probe-superset":{"name":"Apache Superset","description":"Probes the /health endpoint of the Superset embed.","motor":"Superset HTTP"}},"integrationProbePrefix":"Integration probe","statusDetails":{"ruleEnabled":"rule enabled","ruleDisabled":"rule disabled","alwaysLive":"always live (uses our own DB)","hibpPending":"helper code shipped; auth-flow wire-in pending Portal-upgrade chat coordination","certCronRuns":"runs in daily resilience cron","backupNoChecks":"no checks in the last 48h — first run pending","backupCounts":"{verified} verified · {failed} failed in last 48h","vercelConfigured":"configured","vercelMissing":"set VERCEL_TOKEN + VERCEL_PROJECT_ID to enable","emailSubscribers":"{n} subscriber(s) on the email channel","emailMissing":"set RESEND_API_KEY to enable","twilioPending":"creds set; pending A2P 10DLC carrier registration before US delivery works","twilioMissing":"set TWILIO_* env vars to enable","ackKeyConfigured":"signing key configured","ackKeyMissing":"BETTER_AUTH_SECRET missing — ack links cannot be signed","cronNeverTicked":"Cron has never ticked. Set CRON_SECRET and ensure crons.config.json is present and gen:cron has been run.","cronLastTick":"last tick {age}","cronLastTickPartial":"last tick {age} — should be ≤ 5min","cronLastTickStopped":"last tick {age} — cron may have stopped","cronSecretSet":"cron secret set","cronSecretMissing":"CRON_SECRET not set","routeFindings":"{n} open findings","storageTracked":"{rules} rules · integrations tracked","storageNoIntegrations":"{rules} rules · no integrations tracked yet","portalFlagOn":"explicitly enabled in this environment","portalFlagDefault":"using default behavior (ON in dev, OFF in production)","probeSkipped":"env vars not set — probe is skipped","probeHealth":"{healthy}/{total} integrations healthy globally","webhookMissing":"channel row missing — seed not yet run","webhookDisabled":"channel disabled","webhookNoUrl":"webhook URL not pasted yet","webhookConfigured":"webhook configured ({host})","webhookMalformed":"webhook URL malformed"},"agoLabels":{"never":"never","seconds":"{n}s ago","minutes":"{n}m ago","hours":"{n}h ago","days":"{n}d ago"}},"soc":{"headerTitle":"Office SOC — live Wazuh data","headerBody":"Pulled live from the Wazuh manager running on redsis-soc (192.168.50.122) via Cloudflare Tunnel + Access. Snapshot taken:","notConfiguredTitle":"SOC not configured yet","notConfiguredBody":"The Vercel env vars WAZUH_API_URL, WAZUH_API_USERNAME, WAZUH_API_PASSWORD, CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET need to be set for this section to come alive. Once they are, this page surfaces real-time SIEM data.","errorTitle":"Could not reach the SOC","errorHint":"The portal hit the Cloudflare tunnel but the Wazuh API behind it responded unexpectedly. Check that the redsis-soc VM is running and the wazuh.manager container is healthy.","managerTitle":"Wazuh manager","managerVersion":"Version","managerStatus":"Status","managerHostname":"Hostname","managerOs":"Container OS","managerRuleFiles":"Rule files loaded","managerStartedAt":"Started at","managerEmpty":"No manager data yet.","agentsTitle":"Agent counts","agentsEmpty":"No agent data yet.","countActive":"Active","countDisconnected":"Disconnected","countPending":"Pending","countNeverConnected":"Never connected","countTotal":"Total","agentsListTitle":"Agents","agentsListHint":"Every endpoint reporting into this Wazuh manager. The manager itself is agent 000.","agentsListEmpty":"No agents enrolled yet. Once endpoint agents are deployed (Defender ingest + Wazuh agents on laptops), they appear here.","colId":"ID","colName":"Name","colStatus":"Status","colOs":"OS","colIp":"IP","colVersion":"Version","colLastKeepalive":"Last keepalive","rulesTitle":"High-severity detection rules","rulesHint":"Top-10 highest-level rules loaded in the manager. These are the catalog entries — when an event matches, it surfaces in the alerts feed.","ruleId":"Rule ID","ruleLevel":"Level","ruleDescription":"Description","alertsTable":{"title":"Recent alerts","window":"Last {window}","hint":"Live events from the Wazuh OpenSearch indexer, newest first. Each row shows the plain-English title, what it means, and what to do — Wazuh rule descriptions are translated by the lookup table managed below.","empty":"No alerts in the last 24 hours. Quiet is good news — Wazuh is reachable but nothing on the watched endpoints tripped a rule.","notConfiguredTitle":"Indexer not configured yet","notConfiguredBody":"The Vercel env vars WAZUH_INDEXER_URL, WAZUH_INDEXER_USERNAME and WAZUH_INDEXER_PASSWORD need to be set. The portal already reaches the Wazuh manager (you can see it above) but the alerts stream lives in a separate OpenSearch indexer behind the same Cloudflare Access app — point those three vars at it and the table goes live.","errorTitle":"Could not reach the indexer","colSeverity":"Severity","colWhen":"When","colAgent":"Agent","colWhatHappened":"What happened","colSrcIp":"Source IP","rulePrefix":"rule ","actionPrefix":"Do:","rawToggle":"Show raw Wazuh description","badgeNeedsTranslation":"No translation","badgeNeedsReview":"Needs review","showSuppressedOn":"Showing suppressed — click to hide","showSuppressedOff":"Show suppressed","groupedBadge":"+{n} similar","groupedTitle":"Multiple fires of this rule from the same machine were rolled up into one row, per the translation rollup window.","actions":{"triage":"Triage","triagedBadge":"Triaged","justNow":"just now","lockUser":"Lock account","confirmLockShort":"Click again to lock","lockRefusedOwner":"Not locked: this account is an Owner. Owners can never be suspended or removed — take the Owner role away first.","lockRefusedSelf":"Not locked: you cannot lock your own account.","suppress":"Suppress this rule","confirmSuppressShort":"Click again to suppress","emailDraft":"Draft email"},"severityLabels":{"critical":"Critical","high":"High","medium":"Medium","low":"Low","info":"Info"}},"translations":{"title":"Rule translations (admin)","hint":"Every Wazuh rule ID maps to a plain-English title, explanation and recommended action through this table. New rules start as drafts — approve them so they appear in the live alerts feed above. Set suppress to hide a noisy rule entirely.","addNew":"Add translation","empty":"No translations match the current filter.","filterAll":"All ({n})","filterDraft":"Drafts ({n})","filterApproved":"Approved ({n})","filterSuppressed":"Suppressed ({n})","edit":"Edit","actionPrefix":"Do:","statusLabels":{"draft":"Draft","approved":"Approved","suppressed":"Suppressed"},"suppressedBadge":"Suppress on","rollupBadge":"Rollup","editorCreateTitle":"Add translation","editorEditTitle":"Edit translation","fieldRuleId":"Wazuh rule ID","fieldRuleIdHint":"The rule.id value Wazuh emits — e.g. 5712 for \"multiple failed passwords\".","fieldHumanTitle":"Human title","fieldHumanExplanation":"Plain-English explanation (2-3 sentences)","fieldRecommendedAction":"Recommended action (one sentence)","fieldStatus":"Status","fieldSeverityOverride":"Severity override","fieldSeverityOverrideHint":"Force a severity floor for this rule. Leave on Default to use the Wazuh-level → severity mapping.","severityDefault":"Default (from Wazuh level)","fieldSuppress":"Suppress","fieldSuppressHint":"When enabled, alerts for this rule never appear in the SOC table and never page anyone, regardless of severity.","suppressToggleLabel":"Suppress all fires of this rule","fieldRollup":"Rollup","fieldRollupHint":"When enabled, batch repeat fires from the same agent within the window into one row in the SOC table.","rollupWindowSuffix":"min window","fieldNotes":"Notes (admin-only)","fieldNotesHint":"Free-form context. Why we set the severity this way, links to internal runbooks, etc.","save":"Save","saving":"Saving…","cancel":"Cancel","delete":"Delete","errorRuleIdRequired":"Rule ID is required.","errorFieldsRequired":"Title, explanation and recommended action are all required."},"statusLabels":{"active":"Active","disconnected":"Disconnected","never_connected":"Never connected","pending":"Pending","degraded":"Degraded"},"provenanceTitle":"How this page gets its data","provenanceBody":"The Vercel server calls https://wazuh-api.redsis.ai with our Cloudflare Access service token. Cloudflare verifies the token at the edge and forwards through the redsis-soc tunnel to 192.168.50.122:55000 — the Wazuh manager on your office Proxmox. Auth then happens a second time at the Wazuh layer (JWT issued from username + password). No mock data; every field above is the live API response."},"unifi":{"overviewTitle":"Enterprise overview","snapshotAt":"Snapshot taken","refresh":"Refresh","refreshing":"Refreshing…","tileSites":"Sites","tileHealthy":"Healthy","tileDegraded":"Degraded","tileOffline":"Offline","tileWanDown":"WAN down","tileDevices":"Devices","tileDevicesOffline":"Devices offline","tileAlerts":"Alerts","sitesTitle":"Sites","sitesHint":"One card per UniFi console. Sorted worst-first so anything broken jumps out.","notConfiguredTitle":"UniFi integration not configured","notConfiguredHint":"Set UNIFI_API_KEY (or UNIFI_SITE_MANAGER_API_KEY) in Vercel to enable. The probe uses the Ubiquiti Site Manager API at api.ui.com.","noSitesYet":"No sites returned. Either the API key is for an empty account or the request was filtered out at the host side.","wanUp":"Internet up","wanDown":"Internet down","wanUnknown":"unknown","devicesLabel":"Devices","alertsLabel":"Alerts","lastSeen":"Last seen","statusLabels":{"healthy":"Healthy","degraded":"Degraded","offline":"Offline","unknown":"Unknown"}},"provisioning":{"title":"Provisioning checklist","hint":"What's configured vs. still needs setup. Missing required items mean the cron/dispatch can't run.","allRequiredDone":"All required configured","requiredMissing":"{n} required missing","required":"required","notConfigured":"not configured","configured":"configured","categories":{"core":"Core","channels":"Notification channels","backups":"Backup verification","integrations":"Integrations","misc":"Other"}},"subscribers":{"title":"Alert subscribers","hint":"Who gets paged when an alert fires. Each subscriber sets a severity floor + which channels they want.","empty":"No subscribers yet. Add yourself below — otherwise nobody gets paged when something fires.","addTitle":"Add a subscriber","addUser":"Admin user","addUserPlaceholder":"— pick a user —","addSeverity":"Severity floor","addChannels":"Channels","add":"Add","adding":"Adding…","smsHint":"SMS number (E.164, e.g. +15551234567)","colUser":"User","colSeverity":"Floor","colChannels":"Channels","colSms":"SMS","colEnabled":"Enabled","colActions":"Actions","on":"on","off":"off","save":"Save","remove":"Remove","confirmRemove":"Confirm remove","cancel":"Cancel","working":"…"},"channels":{"title":"Channel routing","hint":"Per-channel severity floor + the webhook URLs that Slack / Teams need. SMS + email also need the matching env vars set (see the dashboard).","colChannel":"Channel","colFloor":"Severity floor","colWebhook":"Webhook URL","colProvider":"Provider","colEnabled":"Enabled","colActions":"Actions","on":"on","off":"off","save":"Save","working":"…"},"sectionMeta":{"poweredBy":"Powered by","triggerLabel":"Trigger","statusLabel":"Status","statusOnline":"Online","statusStale":"Stale","statusOffline":"Offline","motorOurs":"Our engine","motorExternal":"External system","motorHybrid":"Ours + external","triggerCron":"Scheduled","triggerEvent":"Event-triggered","triggerOnRender":"On page load","detailNeverRun":"never run","detailLastRunAgo":"last run {age}","detailLastSampleAgo":"newest sample {age}","detailMissingCreds":"credentials not set","detailRowsCount":"{n} live row(s)","detailFetchFailed":"live fetch failed","detailNoChannels":"no channels enabled — alerts cannot dispatch","detailNoRules":"no detection rules enabled","detailPortalDisabled":"portal feature flag is OFF","agoMinutes":"{n}m ago","agoHours":"{n}h ago","agoDays":"{n}d ago"},"sectionInfo":{"dashboard":{"oneLiner":"Single-glance security health for the whole platform — a posture score, six KPI tiles, and a feed of the most recent security events.","motor":"Our aggregator over the security tables","trigger":"Computed live on every page load"},"validation":{"oneLiner":"An auditor-friendly catalog of every security check the platform runs — what it does, what powers it, what env vars it needs, and whether it is working right now.","motor":"Our capability inventory","trigger":"Computed live on every page load"},"soc":{"oneLiner":"Office SOC monitor — the Wazuh manager running in the Redsis office watches every enrolled endpoint (laptops, servers, network gear) for intrusions and policy violations.","motor":"Wazuh manager via Cloudflare Tunnel + Access","trigger":"Pulled live from the manager on every page load"},"alerts":{"oneLiner":"Triage queue for every security event — open / acknowledge / resolve workflow with dispatch to email, SMS, in-app banner, Slack and Teams.","motor":"Our alert pipeline (5 channels)","trigger":"Created by detectors and dispatched immediately"},"integrations":{"oneLiner":"Live health board for every external service the platform depends on — Neon, Supabase, Resend, Vercel, Monday, Microsoft 365, UniFi, Superset, Twilio and Redix. Each one is probed on a schedule, and an outage auto-creates an alert.","motor":"10 probe modules (one per external service)","trigger":"Cron every 1 minute"},"resilience":{"oneLiner":"Long-running trust signals — TLS certificate expiry, DNS integrity, daily backup verification, package CVEs from the npm advisory feed, and recent Vercel deploys.","motor":"Node TLS / DNS probes + Neon, Supabase, Vercel and npm advisory APIs","trigger":"Cron daily at 06:00 UTC"},"unifi":{"oneLiner":"Enterprise IT view — every UniFi-managed site we operate, its WAN status, device counts, and active alert counts, pulled live from the Ubiquiti Site Manager.","motor":"Ubiquiti Site Manager API (api.ui.com)","trigger":"Pulled live on every page load"},"identity":{"oneLiner":"Who is signed in right now, accounts that have gone quiet for 60+ days, and a feed of every recent permission / role change.","motor":"Our database (sessions, users, audit_log)","trigger":"Computed live on every page load"},"threats":{"oneLiner":"Five detection rules that flag unusual login behavior — impossible travel between countries, brute-force attempts, off-hours admin logins, new devices, and new countries.","motor":"Our detection engine + ip-api.com for geo lookups","trigger":"Cron every 1 minute (scans the last 5 minutes of logins)"},"attackSurface":{"oneLiner":"What an attacker would see — unprotected routes, exposed env vars, hardcoded secrets in source code, and Vercel firewall block counts.","motor":"Our scanners (route crawler, env inventory, regex secret scan) + Vercel Firewall API","trigger":"Cron daily at 06:30 UTC"},"compliance":{"oneLiner":"Role-based access matrix for auditors, downloadable CSV exports, and a preview of next Monday’s weekly security digest email.","motor":"Our database queries + Resend (for the digest email)","trigger":"Live on page load; digest emailed Mondays at 08:00 UTC"},"audit":{"oneLiner":"Day-over-day snapshot of open security findings -- CVEs, exposed secrets, unprotected routes, and env-var issues -- aggregated from the existing scanner outputs.","motor":"Our aggregator over security_attack_surface","trigger":"Manual trigger (v1); daily cron in v2"},"incidents":{"oneLiner":"Canonical incident record for every significant security event — promotes alerts and Wazuh findings into tracked, assignable, post-mortemed incidents with a full status timeline.","motor":"Our incidents table + alert/Wazuh FK model","trigger":"Created via \"Promote to Incident\" in Alerts or SOC sections"},"vuln-alerts":{"oneLiner":"Dependabot, code-scanning, and secret-scanning vulnerability alerts pulled directly from the GitHub API and persisted in security_alerts for triage.","motor":"GitHub REST API + security_alerts table (source=github_vuln)","trigger":"Manual \"Scan now\" trigger; daily cron in v2"}}},"externalApps":{"title":"External apps","intro":"The company-wide launcher catalog. The default URL here is what every user sees on their dashboard unless they set a personal override. Drag cards to reorder. Click a card to edit. Toggle the chip to turn one on or off instantly.","help":{"title":"What is this page for?","body":"External apps are the third-party tools your team launches from the portal — Slack, Google Drive, Notion, Figma, anything with a URL. This is the master catalog.","bulletsLabel":"Common things you can do","bullets":["Add a new app with its URL, category, and icon.","Drag cards to reorder how they appear on every user dashboard.","Toggle apps on or off without deleting their record.","Set a default URL — users can still override it with a personal one from Settings → Links."],"tip":"For company-wide standardization, pick a brand color and icon — every user sees the same visual identity for that app."},"searchPlaceholder":"Search apps, URLs, category…","showingCount":"{shown} of {total}","showInactive":"Show inactive","addApp":"Add app","uncategorized":"Uncategorized","emptyCategory":"No apps in this category.","close":"Close","cancel":"Cancel","saving":"Saving…","saveCta":"Save","createCta":"Create app","delete":"Delete","placeholderName":"New app","drawerNewTitle":"New app","drawerEditTitle":"Edit app","errorFallback":"Could not save","errorDelete":"Could not delete","confirmDelete":"Delete \"{name}\"? Personal overrides linking to it will also be removed.","fields":{"name":"Display name","key":"Key","keyHint":"Stable slug used in URLs and APIs. Lowercase letters, numbers, dash, underscore. Cannot change after creation.","category":"Category","categoryPlaceholder":"e.g. Productivity (type to create new)","defaultUrl":"Default URL","defaultUrlHint":"Company-wide default; users can override per-account.","brandColor":"Brand color","iconSlug":"Icon slug","iconSlugHint":"Optional. simple-icons name (e.g. \"monday\"). Used when no logo file is set.","iconPath":"Logo path","iconPathHint":"Optional. Path to a logo under /public, e.g. \"/app-logos/monday.svg\".","active":"Active (visible on dashboards)"}},"permissions":{"title":"Permissions","intro":"Who can see each app and each page in the portal. Resources are open to everyone by default — flip individual cards or use the bulk bar to restrict them to specific roles or departments. Admins always keep access.","help":{"title":"How permissions work","body":"Every app and nav page is \"open to everyone\" until you restrict it. Restrict by role (Admin/Member/Viewer), by department, or by both. Admins always keep access regardless of what you set here.","bulletsLabel":"How to use the matrix","bullets":["Click a card to flip it from \"Everyone\" to \"Restricted\".","When restricted, pick the roles and/or departments that keep access.","Select several cards with the checkbox and use the bulk bar to apply the same rule to all of them.","Use the preview at the bottom to confirm what a specific user would see before publishing."],"tip":"Changes are saved when you click Save. The preview reflects unsaved changes so you can confirm before publishing."},"navNote":"Note: admin pages are already restricted to admins, so gating them here has no extra effect. The useful targets are the dashboard and the settings tabs that regular users see.","tabs":{"apps":"Apps","nav":"Pages"},"viewToggle":{"list":"List","matrix":"Matrix"},"preview":{"label":"Preview as","none":"— pick a user —","banner":"Previewing as {name}","bannerHint":"{visible} of {total} visible to them","exit":"Exit preview"},"list":{"searchPlaceholder":"Search resources…","showingCount":"{shown} of {total}","empty":"No resources match.","manage":"Manage","restrictedPrefix":"Visible to:","selectAllInView":"Select all in view","selectRow":"Select {name}","selectedCount":"{n} selected","adminAlwaysHint":"Admins always keep access.","previewHiddenTooltip":"Not visible to the previewed user","filterLabels":{"all":"All","open":"Open","admin":"Admins only","restricted":"Restricted"},"statusLabels":{"open":"Open","admin":"Admins only","restricted":"Restricted"},"bulk":{"openAll":"Open to all","adminsOnly":"Admins only","grantRole":"Grant role","grantDept":"Grant department","noDepts":"No departments yet.","clear":"Clear selection"}},"drawer":{"eyebrow":"Permissions for","close":"Close","quickHeading":"Quick presets","presetOpenTitle":"Open to everyone","presetOpenHint":"Anyone signed in can see this resource. Default for new resources.","presetAdminsTitle":"Admins only","presetAdminsHint":"Hidden from members and viewers. Useful for admin-only tools.","rolesHeading":"Roles","rolesHint":"Tick a role to add it to the allow list. Combine with departments below.","deptsHeading":"Departments","deptsHint":"Tick a department to allow its members to see this resource.","noDepartments":"No departments exist yet. Create them in Departments first.","usersHeading":"Specific users","usersHint":"Add individual people who should see this resource even if their role or department is not on the lists above. Click a chip to revoke.","usersSearch":"Search a user by name or email…","adminFootnote":"Admins bypass these rules. To take an admin out of access, change their role first."},"errors":{"update":"Could not update","bulk":"Bulk update failed"},"matrix":{"resource":"Resource","status":"Status","empty":"No resources match.","cellAria":"Grant or revoke {subject} on {resource}","statusTitle":"Click to toggle: open ↔ admins-only","colMenuAdd":"Grant to all visible rows","colMenuRemove":"Revoke from all visible rows"}},"userProfile":{"title":"Profile","intro":"Source-of-truth fields. Downstream providers (Microsoft, UniFi, Redix) sync from here.","preferredName":"Preferred name","jobTitle":"Job title","manager":"Manager","managerNone":"— none —","employmentStatus":"Employment status","employmentStatusNone":"— not set —","employmentStatusOptions":{"employee":"Employee","contractor":"Contractor","intern":"Intern","vendor":"Vendor","service_account":"Service account"},"hireDate":"Hire date","terminationDate":"Termination date","terminationDateHint":"Read-only here. HR records the last day in the HR Hub directory (/m/hr/directory); Central One reads it from there.","employeeId":"Employee ID","officeLocation":"Office location","workPhone":"Work phone","workMobile":"Work mobile","emergencyTitle":"Emergency contact","emergencyHint":"Visible to admins only. Used for incident response — please keep current.","emergencyContactName":"Contact name","emergencyContactPhone":"Contact phone","save":"Save profile","saving":"Saving…","saved":"✓ saved","errorSave":"Could not save profile"},"identities":{"title":"Linked identities","intro":"one.redsis.app is the master record. Linking maps this person to their account in an external system — used by directory sync, access provisioning, and the per-user \"Apply now\" sync button.","managedByCentralOne":"Central One is the identity root (D19). These links are a read mirror; \"Apply now\" reads the person's state from Central One and otherwise reports \"managed by Central One\". Removals are driven from Central One.","providerLabels":{"microsoft":"Microsoft 365 / Entra ID","unifi":"UniFi","redix":"Redix","monday":"Monday.com","jira":"Jira","auth0":"Auth0"},"cols":{"provider":"Provider","externalId":"External ID","externalEmail":"Email","linkedAt":"Linked","lastSync":"Last sync","actions":"Actions"},"neverSynced":"never synced","link":"Link","linking":"Linking…","unlink":"Unlink","confirmUnlink":"Unlink this user from {provider}?","placeholderExternalId":"{provider} user id","placeholderExternalEmail":"email (optional)","placeholderExternalDisplayName":"display name (optional)","errorLink":"Could not link","errorUnlink":"Could not unlink","errorSync":"Sync failed","sync":"Sync now","syncing":"Syncing…","syncTitle":"Re-sync this identity (push portal data, pull external metadata)","syncNotConfigured":"Provider not configured yet — see env vars.","autoMatch":"Auto-match","autoMatchTitle":"Try to auto-discover this user in the provider by email","notConfigured":"not configured"},"userGrants":{"title":"Module, tile and page access","intro":"Modules, app tiles and pages opened to this person directly — on top of anything their role or departments already give them.","empty":"No direct module, tile or page access yet. This person sees what their role and departments allow.","grantedAt":"granted {when}","manage":"Manage","footnote":"Role-based and department-based access is managed on the user form above. This panel only lists module, tile and page access added directly to this person.","kindLabels":{"module":"Module","external_app":"App tile","nav_item":"Page"}},"userCapabilityGrants":{"title":"Individual permissions","intro":"Capabilities granted to this person only, on top of everything their roles give them. Removing one never changes their roles.","empty":"No individual permissions. This person has only what their roles give them.","grantedBy":"Granted by {who} · {when}","grantedAt":"Granted {when}","viaAccessRequest":"from an access request","remove":"Remove","confirmRemove":"Remove “{label}” from this person?","confirmRemoveYes":"Yes, remove","cancel":"Cancel","add":"Add permission","closeAdd":"Done","searchLabel":"Search permissions","searchPlaceholder":"Search by name or key…","noMatches":"No permission matches “{q}”.","grant":"Grant","granted":"Granted","viaRole":"Already has it through a role","optIn":"Sensitive","cannotGrantUnheld":"Not for yourself unless you already have it","readOnly":"Only administrators can change individual permissions.","externalNotice":"External users (clients and vendors) never receive individual permissions.","ownerNotice":"This person is the Owner and already has every permission.","count":{"one":"{n} permission","other":"{n} permissions"},"errors":{"invalid_input":"That request was incomplete. Reload the page and try again.","not_found":"That person no longer exists or is outside what you can see.","unknown_capability":"That permission does not exist.","owner_reserved":"Only the Owner can grant or remove that permission.","external_target":"External users cannot receive individual permissions.","self_escalation":"You cannot grant yourself a permission you do not already have.","failed":"The change could not be saved. Try again."}},"userEdit":{"aliases":{"eyebrow":"Email aliases","title":"Email aliases","description":"Alternate emails that resolve to this user. Primary login: {primary}","empty":"No aliases yet. Add one if this user appears under a different email in Monday, the email log, or another integration.","emailLabel":"Alias email","emailPlaceholder":"old.email@redsis.com","noteLabel":"Note","noteOptional":"(optional)","notePlaceholder":"e.g. legacy Monday email","add":"Add alias","adding":"Adding…","remove":"Remove","added":"Added {email}","removed":"Removed {email}","confirmRemove":"Remove the alias {email}? Integrations will stop mapping that email to this user.","addedOn":"Added {date}","errorFallback":"Could not save alias"},"back":"← back to users","noName":"— no name set —","displayName":"Display name","role":"Role","cantChangeOwnRole":"You can't change your own role.","developerAccess":"Developer access","developerAccessHint":"Can open developer-only tools like the Page Directory (/developer). Admins always have this.","status":"Status","statusActive":"active","statusInvited":"invited","statusSuspended":"suspended","statusLocked":"locked","statusSelfNote":"You can't suspend yourself.","statusOthersNote":"Suspending clears all their sessions immediately.","departments":"Departments","saveChanges":"Save changes","saving":"Saving…","saved":"✓ saved","errorSave":"Could not save","dangerZone":"Danger zone","dangerIntro":"Security actions and account removal. All recorded in the audit log.","resetMfa":"Reset MFA","revokeSessions":"Revoke all sessions","deleteUser":"Delete user","working":"Working…","deleting":"Deleting…","cantDeleteSelf":"You can't delete your own account.","confirmResetMfa":"Reset MFA for this user? They will have to re-enroll.","confirmRevokeSessions":"Revoke ALL sessions for this user? They will be signed out everywhere.","confirmDelete":"Delete {email}? This starts a two-person Dual-Control approval. On approval the account is deactivated and anonymized — its boards, authored content, and audit history are kept.","deleteDualBody":"Deleting a user takes two people. Pick a second approver — they (and you) each turn a key in Dual-Control. One of the two must be an Owner.","deleteApproverLabel":"Second approver","deleteApproverPlaceholder":"Select an Admin or Owner…","deleteApproverHint":"They are notified to turn the other key. You turn yours in the console after this.","deleteNoApprovers":"No eligible second approver is available — add another Admin or Owner first.","requestDeletion":"Request deletion","requestingDeletion":"Sending to Dual-Control…","deleteApproverRequired":"Select a second approver first.","errorResetMfa":"Could not reset MFA","errorRevokeSessions":"Could not revoke sessions","errorDelete":"Could not delete user","resetPassword":"Reset password","resetPasswordArmTitle":"Generate a temporary password?","resetPasswordArmBody":"A strong temporary password will be generated and shown once. The user will be forced to change it on next sign-in, and all their existing sessions will be signed out.","resetPasswordConfirm":"Yes, generate","resetPasswordResultTitle":"Temporary password — copy now","resetPasswordResultBody":"This is the only time it will be shown. Share it with the user over a secure channel (Signal, in person — not email or chat). They'll be required to change it when they sign in.","errorResetPassword":"Could not reset password","copy":"Copy","copied":"Copied ✓","dismiss":"Dismiss","cancel":"Cancel","unblockAccess":"Unblock access","unblockStatusTitle":"Two-factor runway","unblockBadgeBlocked":"Locked out now","unblockBadgeEnrolled":"Two-factor active","unblockBadgeExempt":"Not subject to the runway","unblockBadgeInGrace":"Inside the runway","unblockStatusBlocked":"The two-factor runway ran out, so every page redirects this person to the security settings. Unblocking gives them {days} more days and works on their very next click — no new sign-in.","unblockStatusEnrolled":"They have an active second factor, so the runway no longer applies to them.","unblockStatusExempt":"This account is exempt from the client two-factor runway (internal realm, admin tier, or a managed mailbox).","unblockStatusInGrace":"Still inside the runway. They can sign in normally; the countdown is running.","unblockHistory":"Grace extended {n} time(s)","unblockHistoryLast":"last: {date}","unblockHistoryBy":"by: {who}","unblockHistoryReason":"reason: {reason}","unblockSoftLimitNote":"Past {limit} extensions. It still works — but a person who keeps needing one probably cannot enroll at all, which is worth solving.","unblockArmTitle":"Unblock this person?","unblockArmBody":"Pushes their two-factor deadline {days} days out. They get in on their next click, without signing in again. Recorded in the audit log.","unblockReasonLabel":"Why (required)","unblockReasonPlaceholder":"e.g. client cannot enroll until IT ships their phone","unblockReasonHint":"At least {min} characters. Stored in the audit log next to your name.","unblockReasonRequired":"Write why you are unblocking this person.","unblockStepUpHint":"You will need a fresh proof of identity: sudo mode (your password) or a current authenticator code.","unblockConfirm":"Yes, unblock","unblockDone":"Unblocked — {days} more days, extension #{n}. They can browse again on their next click.","unblockError":"Could not unblock this person","unblockErrForbidden":"You need the “Edit users” permission to unblock someone. Ask an administrator for it.","unblockErrSelfTarget":"You cannot extend your own two-factor runway. Ask another user manager to do it.","unblockErrNotFound":"That user no longer exists."},"appCreate":{"displayName":"Display name","slug":"Slug","slugOptional":"(optional)","slugPlaceholder":"auto from name","slugHint":"Opens at /m/{slugPreview} — leave blank to generate from the name.","description":"Description","adminOnly":"Admin-only (hidden from everyone else)","grantTitle":"Grant access to departments","register":"Register app","creating":"Creating…","errorFallback":"Could not create app"},"appEdit":{"back":"← back to apps","fieldsTeaser":"Want per-field access (view/edit per department or role)?","manageFields":"Manage fields →","displayName":"Display name","status":"Status","statusActive":"active — visible on user dashboards","statusHidden":"hidden — admin can see, users cannot","statusArchived":"archived — soft-deleted, audit preserved","description":"Description","adminOnly":"Admin-only (hidden from all non-admin users regardless of department)","departmentsWithAccess":"Departments with access","saveChanges":"Save changes","saving":"Saving…","saved":"✓ saved","errorSave":"Could not save"},"fields":{"backTo":"← back to {name}","title":"Field governance — {name}","intro":"Register the named fields this app exposes, then set who can view and edit each one. If an app has no fields declared, everyone with app-level access sees everything (backwards-compat). Once fields are declared, sensitive ones are hidden by default until explicitly granted.","emptyState":"No fields declared yet. Until at least one field is registered, this app operates in \"no-governance\" mode — all data is visible to any user with app-level access.","addSectionTitle":"Add a field","key":"Key","label":"Label","dataType":"Data type","description":"Description","sensitive":"Sensitive (hidden by default until granted)","addField":"Add field","adding":"Adding…","errorAdd":"Could not add field","sensitiveBadge":"sensitive","delete":"Delete","confirmDelete":"Delete field \"{key}\"? All permissions on it will be removed.","colSubject":"Subject","colView":"View","colEdit":"Edit","sectionRole":"Role","sectionDepartment":"Department","cancel":"Cancel","footerNote":"Admins always bypass. Edit implies view (checking edit auto-enables view). Unchecking both removes the grant for that subject. For non-sensitive fields the default is view=true, so unchecking view does nothing until the field is marked sensitive."},"people":{"searchPlaceholder":"Search by email, name, role, department…","showingCount":"Showing {shown} of {total}","exportCsv":"Export CSV","selectAll":"Select all","selectRow":"Select {email}","selectedCount":"{n} selected","empty":"No matching people.","mfaOn":"on","mfaOff":"off","expiresShort":"expires {when}","filterLabels":{"all":"All","active":"Active","pending":"Pending invite","expired":"Expired","suspended":"Suspended","locked":"Locked","revoked":"Revoked"},"statusLabels":{"active":"Active","pending":"Pending invite","expired":"Expired","suspended":"Suspended","locked":"Locked","revoked":"Revoked"},"cols":{"email":"Email","name":"Name","status":"Status","role":"Role","departments":"Departments","department":"Department","mfa":"MFA","lastLogin":"Last login","actions":"Actions"},"badges":{"forcePwChange":"Must change pw"},"bulk":{"role":"Set role","addDept":"Add to department","removeDept":"Remove from department","setDept":"Set department","clearDept":"Clear department","actions":"Actions","inviteActions":"Invite actions","suspend":"Suspend","reinstate":"Reinstate","resetMfa":"Reset MFA","revokeSessions":"Revoke sessions","reissue":"Reissue links","reissueEmail":"Reissue + email","revokeInvites":"Revoke invites","clear":"Clear selection"},"row":{"activity":"Activity","activityTitle":"View recent audit + login history","edit":"Edit","suspend":"Suspend","reinstate":"Reinstate","unlock":"Unlock","resetMfa":"Reset MFA","revokeSessions":"Revoke sessions","forcePwChange":"Force password change","clearForcePwChange":"Clear force password change","changeRole":"Change role","reissue":"Reissue link","reissueEmail":"Reissue + email","revokeInvite":"Revoke invite","more":"More","copyLink":"Copy link","copyLinkTitle":"Generate a fresh invite link and copy it to your clipboard — use this when the email didn't arrive","unblockAccess":"Unblock access","unblockAccessHint":"(two-factor runway)","unblockReasonLabel":"Why are you unblocking them? (required)","unblockReasonPlaceholder":"e.g. cannot enroll until IT ships their phone","unblockReasonHint":"At least {min} characters. Stored in the audit log next to your name.","unblockDone":"{email} can browse again — {days} more days on their two-factor runway."},"activity":{"heading":"Recent activity","close":"Close","loading":"Loading…","empty":"No activity yet.","invitationNote":"This person hasn’t accepted their invitation yet.","errorLoad":"Could not load activity"},"freshLink":{"title":"Fresh invite link generated.","copiedTitle":"Fresh invite link copied to clipboard.","dismiss":"Dismiss","expires":"Expires {when}.","emailSent":"Email was re-sent to the invitee.","emailNotSent":"Email was not re-sent — share this link directly.","copyLink":"Copy link"},"confirmRowSuspend":"Suspend {email}? They will be signed out everywhere.","confirmRowResetMfa":"Reset MFA for {email}? They will have to re-enroll.","confirmRowRevokeSessions":"Revoke all sessions for {email}? They will be signed out everywhere.","confirmRowUnblock":"Unblock {email}? They get more two-factor runway and can browse again on their next click.","confirmYes":"Yes, do it","confirmCancel":"Cancel","confirmRevokeInvite":"Revoke this invitation? The recipient will no longer be able to accept it.","confirmBulkSuspend":"Suspend {n} users? They will all be signed out everywhere.","confirmBulkRole":"Change role of {n} users to {role}?","confirmBulkResetMfa":"Reset MFA for {n} users? They will all have to re-enroll.","confirmBulkRevokeSessions":"Revoke sessions for {n} users? They will all be signed out everywhere.","confirmBulkRevokeInvites":"Revoke {n} invitations? Recipients will no longer be able to accept.","errors":{"bulk":"Bulk action failed","row":"Action failed","notSuspended":"Only a suspended account can be reinstated here. This account is not suspended; ask an administrator.","bulkNotSuspended":"Nothing was reinstated: the selection includes accounts that are not suspended. Only suspended accounts can be reinstated here; remove the others and run it again.","privilegedTarget":"Nothing was changed: the selection includes an administrator or the Owner, and only an administrator can act on them. Remove them from the selection and run it again."}},"invitations":{"sectionTitle":"Invitation log","sectionHint":"Tokens are stored hashed, so the original link can’t be recovered. Use Reissue to generate a fresh link for a pending invite.","filterAll":"all","statusPending":"pending","statusExpired":"expired","statusAccepted":"accepted","statusRevoked":"revoked","colEmail":"Email","colStatus":"Status","colRole":"Role","colDepartments":"Departments","colInvitedBy":"Invited by","colSent":"Sent","colExpires":"Expires","colActions":"Actions","none":"No invitations to show.","acceptedPrefix":"Accepted {when}","revokedPrefix":"Revoked {when}","reissue":"Reissue link","reissueTitle":"Generate a new link without sending an email","reissueEmail":"Reissue + email","reissueEmailTitle":"Generate a new link and re-send the email","revoke":"Revoke","working":"Working…","errorReissue":"Could not reissue invite","errorRevoke":"Could not revoke invite","confirmRevoke":"Revoke this invitation? The recipient will no longer be able to accept it.","freshTitle":"Fresh invite link generated.","freshExpires":"Expires {when}.","freshEmailSent":"Email was re-sent to the invitee.","freshEmailNotSent":"Email not sent ({reason}).","freshEmailNotResent":"Email was not re-sent — share this link directly.","dismiss":"Dismiss","copyLink":"Copy link"},"centralOneSso":{"observedSignIns":"Central One sign-ins seen","existingUsersCannotLink":"Only people who do not already have a RedsisOne account can sign in through Central One right now. Turn on \"Link existing accounts\" (central_one_link_existing) so the central-one provider row is trusted to link a sign-in to the existing account with the same @redsis.com address. Until then existing staff get account_not_linked and the entry gate cannot be promoted, because a window only new users can reach proves nothing about everyone else.","rowRemovedWhileOff":"Central One sign-in is off, so no provider row exists and the SSO endpoint cannot be used. Turning the flag on registers it again from Setup Center.","title":"Central One identity","description":"The trust relationship with Central One, the identity root: which issuer this portal trusts, and whether the entry gate is observing or enforcing.","providerTitle":"Provider","notConfigured":"Central One is not configured on this instance. Add the issuer, client id and client secret in Setup Center; until then the provider stays absent and nothing changes.","issuer":"Issuer","clientId":"Client id","registered":"Provider row","yes":"Registered","no":"Not registered","reconcile":"Reconcile from Setup Center","callbackTitle":"Register this exact callback on the Central One client","callbackHelp":"This is the redirect URI this instance will use. It must replace the wildcard on the redsis-one client in Central One, or the sign-in fails with invalid_redirect_uri.","lastSignIn":"Last Central One sign-in","noSignInYet":"Nobody has signed in through Central One yet.","linkedAccounts":"Accounts linked to a Central One person","tenantSsoNote":"Per-organization SSO providers and login policy live separately, at","flagsTitle":"Flags","flagsHelp":"Turn these on in this order. Everything ships off, so an instance behaves exactly as it did before until you start here.","flagOidc":"Central One sign-in","flagOidcHelp":"Shows the \"Sign in with Central One\" button and registers the provider. Does not decide who may enter.","flagLinkExisting":"Link existing accounts","flagLinkExistingHelp":"Trusts the central-one provider row to link a Central One sign-in to the EXISTING account with the same address on the configured domain (redsis.com). Tenant providers are unaffected: a database rule makes a trusted tenant row impossible. This is a trust expansion into every staff account, including the Owner's, so it is Mike's call.","linkTrust":"Links existing accounts","linkTrustOn":"Yes, for @{domain} addresses","linkTrustOff":"No (flag off)","linkTrustPending":"Flag on, row not reconciled yet - press Reconcile","flagIdentity":"Entry gate","flagIdentityHelp":"Evaluates every Central One sign-in and every invite against the app.enter grant. On its own it only observes and records.","flagRolesApi":"Roles endpoint","flagRolesApiHelp":"Lets Central One read this platform's role vocabulary with a roles:read API key.","flagRosterApi":"Roster endpoint","flagRosterApiHelp":"Lets Central One read the internal user roster with a users:read API key, which is how it finds orphan accounts.","flagHrApi":"HR record endpoint","flagHrApiHelp":"Lets Central One read ONE employee record (status, hire and termination dates, onboarding state) with an hr:read API key, which is how its HR gate refuses to create anyone who is not an active, onboarded employee here.","flagPush":"Push receiver","flagPushHelp":"Accepts signed grant, revoke and disable_orphan pushes from Central One. On its own it verifies and records without writing.","flagHrLeaver":"Client mode + HR leaver report","flagHrLeaverHelp":"Makes the identity module a client of Central One (D19): external-platform offboarding steps are handed to Central One instead of run here, the console reads Central One's state, and an HR leaver (termination date set, leaver workflow completed) is evaluated for Central One's remove-everywhere. On its own it only records; Promote sends the signed call.","leaverGateTitle":"HR leaver report - impact","flagNotSeeded":"No flag row on this instance yet. It is off, and the row appears the next time the flags console loads.","identityGateTitle":"Entry gate — impact","pushGateTitle":"Push receiver — impact","window":"Shadow window","expected":"Expected","unexpected":"Unexpected","total":"Total","colWhen":"When","colSubject":"Subject","colReason":"Reason","colImpact":"Impact","promote":"Promote to enforce","promoteRule":"Needs 72 hours of shadow traffic with zero unexpected events. Checked again on the server when you press it.","promoteFailed":"The promotion was refused.","rollback":"Roll back to shadow","on":"On","off":"Off","saved":"Saved.","saveFailed":"That change could not be saved."},"unifiModule":{"title":"UniFi","description":"Every UniFi console across all offices in one place — hardware, devices, Wi-Fi clients, cameras. Drill into any site for the full picture.","notConfiguredTitle":"UniFi not configured","notConfiguredHint":"Set the org-wide UniFi Site Manager API key in Vercel. Once set, this page will list every console you own.","noConsoles":"No UniFi consoles visible to this API key. Confirm the key was created by the org owner.","consolesTitle":"Consoles","snapshotAt":"Snapshot at","tileConsoles":"Consoles","tileHealthy":"Healthy","tileDegraded":"Degraded","tileOffline":"Offline","tileDevices":"Devices","offlineSuffix":"offline","appNetwork":"Network","appProtect":"Protect","appAccess":"Access","appTalk":"Talk","rowHardware":"Hardware","rowDevices":"Devices","rowWanIssues":"WAN issues (5 min)","backToAll":"Back to all consoles","tabInfo":"Info","tabDevices":"Devices","tabClients":"Clients","tabCameras":"Cameras","cardHardware":"Hardware & Firmware","cardConnectivity":"Connectivity","cardApps":"Installed apps","cardLocation":"Location","fieldHardware":"Model","fieldFirmware":"Firmware","fieldHostId":"Host ID","fieldDirectConnect":"Direct connect","fieldCloud":"Cloud","fieldWanIp":"WAN IP","fieldLastSeen":"Last state change","fieldWanIssues":"WAN issues (5 min)","online":"Online","offline":"Offline","unknown":"Unknown","yes":"Yes","no":"No","colName":"Name","colType":"Type","colModel":"Model","colState":"State","colIp":"IP","colMac":"MAC","colFirmware":"Firmware","colConnectedAt":"Connected at","colMic":"Mic enabled","noDevices":"No devices reported on this console.","noClients":"No connected clients reported by Network on this console.","noCameras":"No cameras reported by Protect on this console.","noNetworks":"No networks (VLANs) configured on this console.","noWans":"No WAN uplinks reported by this console.","noAclRules":"No ACL rules configured on this console.","noDeviceTags":"No device tags defined on this console.","noNvrs":"No Protect NVRs found on this console.","errorTitle":"Upstream call failed","tabUsers":"Users","tabNetworks":"Networks","tabWans":"WANs","tabSecurity":"Security","tabNvrs":"NVRs","tabIot":"IoT & misc","usersUlpTitle":"Identity (UID) users","usersUlpHint":"Cross-app accounts from UniFi's identity layer — status drives access across Network / Protect / Access / Talk.","usersUlpEmpty":"No UID-managed users on this console.","usersProtectTitle":"Protect users","usersProtectHint":"Local Protect-only accounts (per-console). Usually shorter list than UID.","usersProtectEmpty":"No local Protect users on this console.","usersWriteNote":"Activate / deactivate isn't exposed by Ubiquiti's cloud API yet (May 2026 roadmap). Open UniFi to flip the toggle there — the change reflects here on the next refresh.","fieldTimezone":"Timezone","tzNotSet":"not set","appsApiNote":"Access + Talk apps are installed locally but their cloud integration API is still 403 — included here for inventory only.","colPurpose":"Purpose","colVlan":"VLAN","colSubnet":"Subnet","colEnabled":"Enabled","colInterface":"Interface","colAction":"Action","colIpVersion":"IP version","colColor":"Color","colId":"ID","colLayout":"Layout","colDefault":"Default","colEmail":"Email","colStatus":"Status","colUcoreId":"Identity ID","colSource":"Source","colConsole":"Console","colActions":"Actions","securityAclTitle":"ACL rules","securityTagsTitle":"Device tags","iotSensors":"Sensors","iotLights":"Lights","iotAlarmHubs":"Alarm hubs","iotSirens":"Sirens","iotSpeakers":"Speakers","iotChimes":"Chimes","iotViewers":"Viewers","iotFobs":"Key fobs","iotBridges":"Bridges","iotRelays":"Relays","iotLinkStations":"Link stations","iotArmProfiles":"Arm profiles","iotLiveViews":"Live views","iotEmptySensors":"No sensors installed.","iotEmptyLights":"No lights installed.","iotEmptyAlarmHubs":"No alarm hubs installed.","iotEmptySirens":"No sirens installed.","iotEmptySpeakers":"No speakers installed.","iotEmptyChimes":"No chimes installed.","iotEmptyViewers":"No viewers installed.","iotEmptyFobs":"No key fobs paired.","iotEmptyBridges":"No bridges installed.","iotEmptyRelays":"No relays installed.","iotEmptyLinkStations":"No link stations installed.","iotEmptyArmProfiles":"No arm profiles configured.","iotEmptyLiveViews":"No saved live views.","fleetUsersTitle":"UniFi users — fleet view","fleetUsersDescription":"Every user across every console in one table. Filter by source (identity vs Protect-local), status, or console.","fleetUsersEmpty":"No users found matching the current filters.","fleetUsersPartialError":"Some consoles failed to report:","totalUsers":"Total users","statusActive":"Active","statusPending":"Pending","statusDisabled":"Disabled","filter":"Filter","filterAllSources":"All sources","filterAllStatuses":"All statuses","filterAllConsoles":"All consoles","openInUnifi":"Open in UniFi","refresh":"Refresh","refreshing":"Refreshing…","syncedRows":"Synced {rows} rows in {ms}ms","syncFailed":"Sync failed","lastSynced":"Last synced","never":"never"},"openaiModule":{"title":"OpenAI","description":"Manage the company's OpenAI organization — users, projects, invites, and the models available to portal integrations.","keyProject":"Project / standard key","keyProjectHint":"Used to call models (chat, embeddings) and list models this key can access.","keyAdmin":"Admin key","keyAdminHint":"Required for org-level management — users, projects, invites, usage. Issue at platform.openai.com/settings/organization/admin-keys.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to OpenAI failed:","tileUsers":"Org users","tileProjects":"Active projects","tileInvites":"Pending invites","tileModels":"Models","usersTitle":"Organization users","noUsers":"No users returned by OpenAI.","projectsTitle":"Projects","noProjects":"No active projects.","invitesTitle":"Pending invites","modelsTitle":"Available models","noModels":"No models accessible to this key.","colName":"Name","colEmail":"Email","colRole":"Role","colStatus":"Status","colCreatedAt":"Created","colInvitedAt":"Invited","colAction":"Action","actionRemove":"Remove from org","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed from org","actionFailure":"Failed: {error}"},"cloudflareModule":{"title":"Cloudflare","description":"Manage the company's Cloudflare account — DNS zones, Workers, R2 storage, KV namespaces, and the people with access.","envAccountId":"Account ID","envAccountIdHint":"The 32-character account identifier. Used in every API path. Not secret.","envApiToken":"API token","envApiTokenHint":"Account-scoped bearer token (cfat_…). Treat like a password — rotate periodically.","configured":"Configured","notConfigured":"Not set","tokenActive":"Token active","tokenStatus":"Token status","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to Cloudflare failed:","tileMembers":"Members","tileZones":"Zones","tileWorkers":"Workers","tileR2":"R2 buckets","tileKv":"KV namespaces","pendingSuffix":"pending","activeSuffix":"active","membersTitle":"Account members","noMembers":"No members visible to this API token.","zonesTitle":"Zones (domains)","noZones":"No zones on this account.","workersTitle":"Workers scripts","noWorkers":"No Workers scripts deployed.","r2Title":"R2 buckets","noR2":"No R2 buckets.","kvTitle":"KV namespaces","noKv":"No KV namespaces.","colName":"Name","colEmail":"Email","colRole":"Role","colStatus":"Status","colTwoFactor":"2FA","colDomain":"Domain","colType":"Type","colCreatedAt":"Created","yes":"Yes","no":"No"},"anthropicModule":{"title":"Anthropic","description":"Manage the company's Anthropic (Claude) organisation — workspaces, members, API keys, and the models available to portal integrations.","keyStandard":"Standard API key","keyStandardHint":"Used to call Claude models (chat, completions) and list models this key can access. Available on every plan.","keyAdmin":"Admin API key","keyAdminHint":"Required for org-level management — workspaces, members, invites, API keys. Available on Team or Enterprise plans. Generate at console.anthropic.com → Settings → Admin Keys.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","organization":"Organization","partialData":"Partial data — some calls to Anthropic failed:","tileWorkspaces":"Workspaces","tileOrgUsers":"Org users","tileInvites":"Pending invites","tileApiKeys":"API keys","tileModels":"Models","workspacesTitle":"Workspaces","noWorkspaces":"No workspaces yet.","active":"Active","archived":"Archived","usersTitle":"Organization users","noUsers":"No users returned by the Anthropic API.","invitesTitle":"Pending invites","apiKeysTitle":"Active API keys","noApiKeys":"No active API keys.","modelsTitle":"Available models","noModels":"No models accessible to this key.","colName":"Name","colEmail":"Email","colRole":"Role","colStatus":"Status","colCreatedAt":"Created","colInvitedAt":"Invited","colHint":"Key hint"},"chatgptModule":{"title":"ChatGPT","description":"Manage the company workspace on chat.openai.com — workspace members, seats, audit log. Distinct from OpenAI Platform (the API side).","unifiedTitle":"Admin via OpenAI Platform","unifiedBody":"ChatGPT and OpenAI Platform share the same organisation admin key. Member management, projects, and usage are all handled at /admin/platforms/openai. This page exists to document what each ChatGPT plan exposes separately.","openOpenAiPlatform":"Open OpenAI Platform admin","statusTitle":"Plan tier detection — manual for now","statusBody":"Programmatic management depends on the company's ChatGPT plan. Confirm the plan below, then we'll wire the right surface.","tiersTitle":"What each ChatGPT plan exposes","tierPlusDescription":"Personal subscription. No admin panel for the company; no public API. Manage your seat at chat.openai.com.","tierTeamDescription":"Workspace member management exists in chat.openai.com → Workspace Admin. No documented public REST API; subscriptions managed via OpenAI billing.","tierEnterpriseDescription":"Full SCIM 2.0 for member sync + audit log API + compliance API. Generate a SCIM token from Workspace Admin to wire programmatic management.","apiNone":"No API","apiLimited":"Limited","apiFull":"Full SCIM + audit","actionsTitle":"Open the relevant Workspace surfaces","openWorkspaceAdmin":"Open ChatGPT Workspace Admin","compareTiers":"Compare ChatGPT plans","nextStepsTitle":"To enable the full module","nextStep1":"Confirm which ChatGPT plan the company uses.","nextStep2":"If Enterprise, generate a SCIM token at Workspace Admin → SCIM Provisioning and add it as CHATGPT_SCIM_TOKEN.","nextStep3":"Tell the integration chat which plan to wire — Team uses workspace endpoints, Enterprise uses SCIM."},"twilioModule":{"title":"Twilio","description":"Manage the company's Twilio account — sub-accounts, phone numbers, recent messages, usage, and billing health.","userMgmtTitle":"Console user management","userMgmtBody":"Twilio's API doesn't expose console-member management. Add or remove the humans who log into Twilio directly in the Twilio console.","envAccountSid":"Account SID","envAccountSidHint":"Your Twilio account identifier (AC…). Not secret.","envAuthToken":"Auth token","envAuthTokenHint":"Treat like a password — rotate periodically. Required to make any API call.","envFromNumber":"Default sender number","envFromNumberHint":"Used by the security-alerts SMS channel. Optional — set if you want SMS notifications wired up.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","account":"Account","partialData":"Partial data — some calls to Twilio failed:","tileStatus":"Status","tileType":"Type","tileSubAccounts":"Sub-accounts","tilePhoneNumbers":"Phone numbers","tileFailures":"Recent failures","tileInactiveSubs":"Inactive subs","subAccountsTitle":"Sub-accounts","noSubAccounts":"No sub-accounts on this account.","phoneNumbersTitle":"Phone numbers","noPhoneNumbers":"No phone numbers on this account.","usageTitle":"Last-month usage","noUsage":"No usage recorded for last month.","messagesTitle":"Recent messages","noMessages":"No recent messages.","colName":"Name","colType":"Type","colStatus":"Status","colSid":"SID","colPhoneNumber":"Number","colFriendlyName":"Label","colCapabilities":"Capabilities","colCreatedAt":"Created","colCategory":"Category","colCount":"Count","colUsage":"Usage","colPrice":"Cost","colSent":"Sent","colDirection":"Direction","colFrom":"From","colTo":"To"},"resendModule":{"title":"Resend","description":"Manage Resend — the company's transactional email transport. Domains, API keys, audiences. For per-message delivery logs see the Email Log.","userMgmtTitle":"Console user management","userMgmtBody":"Resend's API doesn't expose team-member management. Invite or remove people who log into Resend directly in resend.com settings.","deliveryFeedHint":"Per-message delivery logs (sent / opened / clicked / bounced) live in the Email Log.","openEmailLog":"Open Email Log","keyLabel":"API key","keyHint":"Bearer key used to send transactional email. Rotate periodically; the email-log webhook secret is separate.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to Resend failed:","tileDomains":"Domains","tileVerified":"Verified","tileBroken":"Broken","tileApiKeys":"API keys","domainsTitle":"Sending domains","noDomains":"No sending domains yet.","apiKeysTitle":"API keys","noApiKeys":"No API keys.","audiencesTitle":"Audiences","colName":"Name","colDomain":"Domain","colStatus":"Status","colRegion":"Region","colCreatedAt":"Created"},"marketingAudiences":{"title":"Audiences","eyebrow":"Marketing Hub","description":"One deduped contact store — synced from Apollo, your boards, the waitlist, and CSV. Build segments, manage consent, and feed Campaigns.","tabOverview":"Overview","tabContacts":"Contacts","tabSegments":"Segments","tabConsent":"Consent","tabSync":"Sync","tabSettings":"Settings","kpiContacts":"Contacts","kpiOptedIn":"Opted in (email)","kpiSuppressed":"Suppressed","kpiSegments":"Segments","kpiLastSync":"Last sync","sourceBreakdown":"By source","never":"Never","searchPlaceholder":"Search name, email, or company…","filterStage":"Lifecycle stage","filterSource":"Source","allStages":"All stages","allSources":"All sources","colContact":"Contact","colCompany":"Company","colStage":"Stage","colConsent":"Consent","colSource":"Source","colUpdated":"Updated","noContacts":"No contacts yet","noContactsHint":"Run a sync or import a CSV to fill your audience.","showing":"Showing","of":"of","prev":"Previous","next":"Next","detailFields":"Fields","detailSources":"Sources","detailConsent":"Consent","detailEngagement":"Engagement","firstName":"First name","lastName":"Last name","email":"Email","jobTitle":"Title","company":"Company","domain":"Company domain","phone":"Phone","country":"Country","linkedin":"LinkedIn","tags":"Tags","save":"Save","saved":"Saved","edit":"Edit","cancel":"Cancel","erase":"Erase (GDPR)","eraseConfirm":"Type ERASE to permanently scrub this contact’s personal data. A tombstone + suppression are kept.","erased":"Contact erased","export":"Export CSV","sends":"Sends","opens":"Opens","clicks":"Clicks","bounces":"Bounces","lastSeen":"Last seen","consentUnknown":"Unknown","consentOptedIn":"Opted in","consentPending":"Pending opt-in","consentOptedOut":"Opted out","newSegment":"New segment","segmentName":"Segment name","segmentDescription":"Description","segmentType":"Type","dynamic":"Dynamic","static":"Static","targetChannel":"Target channel","matchAll":"Match ALL","matchAny":"Match ANY","addRule":"Add rule","addGroup":"Add group","remove":"Remove","field":"Field","comparator":"Condition","value":"Value","preview":"Preview","previewCount":"contacts match","saveSegment":"Save segment","recompute":"Recompute","members":"Members","lastMaterialized":"Last computed","noSegments":"No segments yet","noSegmentsHint":"Build a filter to save your first segment.","suppressionList":"Suppression list","addSuppression":"Add to suppression","emailToSuppress":"Email address","reason":"Reason","scope":"Scope","global":"Global","channel":"Channel","removeSuppression":"Remove","noSuppressions":"Nothing suppressed","consentAudit":"Consent audit log","reasonUnsubscribe":"Unsubscribe","reasonHardBounce":"Hard bounce","reasonSpam":"Spam complaint","reasonManual":"Manual","reasonGdpr":"GDPR erasure","reasonInvalid":"Invalid","runNow":"Run now","running":"Running…","lastRun":"Last run","created":"created","merged":"merged","scanned":"scanned","errors":"errors","sourceApollo":"Apollo Inbox","sourceLeads":"Leads board","sourceWaitlist":"Waitlist","sourceCsv":"CSV import","apolloReadonly":"Read-only — spends no Apollo credits.","csvUpload":"Upload CSV","csvMap":"Map columns","csvImport":"Import","csvImported":"Imported","boardMapping":"Board column mapping","genericError":"Something went wrong.","noPermission":"You don’t have permission for this."},"neonModule":{"title":"Neon","description":"Manage the company's Neon (Postgres) projects — branches, recent operations, storage health. The primary project is where production data lives.","envApiKey":"API key","envApiKeyHint":"Bearer key with project read/write scope. Required to see anything here. Treat like a password.","envProjectId":"Primary project ID","envProjectIdHint":"Optional. When set, that project surfaces first and its operations drive critical alerts (it's the production DB).","configured":"Configured","notConfigured":"Not set","optional":"Optional","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to Neon failed:","tileProjects":"Projects","tileBranches":"Branches","tileFailedOps":"Failed ops","primaryLabel":"PRIMARY","region":"Region","branchLimit":"Branch limit","colName":"Name","colState":"State","colSize":"Size","colFlags":"Flags","colUpdatedAt":"Updated","recentOpsTitle":"Recent operations","colAction":"Action","colStatus":"Status","colCreatedAt":"Created","membersTitle":"Organization members","noMembers":"No members visible.","colMemberName":"Name","colMemberEmail":"Email","colMemberRole":"Role","colMemberAction":"Action","actionRemove":"Remove from org","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}"},"githubModule":{"title":"GitHub","description":"Manage the company's GitHub organisation — members, 2FA status, teams, repos, and soft-suspend access without removing people from the org.","envToken":"API token","envTokenHint":"Fine-grained PAT scoped to the org. Treat like a password — rotate periodically and set GITHUB_TOKEN_EXPIRES so the expiration tracker pings you.","envOrg":"Organisation slug","envOrgHint":"Exact org slug (case-sensitive). Same string as in the github.com URL.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","organization":"Organisation","plan":"Plan","partialData":"Partial data — some calls to GitHub failed:","policyTitle":"Policy: read-only + soft-suspend","policyBody":"This portal can view everything and remove a member from all teams (soft suspend). It will never remove someone from the org or invite new members — do that in GitHub directly.","tileMembers":"Members","tileAdmins":"Org admins","tileNo2fa":"No 2FA","tileOrg2fa":"Org 2FA","tileTeams":"Teams","enforced":"Required","notEnforced":"Off","membersTitle":"Members","noMembers":"No members.","invitesTitle":"Pending invitations","teamsTitle":"Teams","noTeams":"No teams yet.","reposTitle":"Recently updated repos","noRepos":"No repos visible.","colLogin":"Login","colRole":"Role","colTwoFactor":"2FA","colTeams":"Teams","colAction":"Action","colInvitee":"Invitee","colInviter":"Invited by","colCreatedAt":"Created","colName":"Name","colSlug":"Slug","colPrivacy":"Privacy","colDescription":"Description","colVisibility":"Visibility","colDefaultBranch":"Default branch","colPushedAt":"Last push","yes":"Yes","no":"No","actionSuspend":"Suspend access","actionSuspending":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed from {n} teams","actionFailure":"Failed: {error}","actionNoTeams":"Not on a team"},"vercelModule":{"title":"Vercel","description":"Manage the company's Vercel team — members, projects, recent deployments, and prod-build health.","envToken":"API token","envTokenHint":"Bearer token from vercel.com/account/tokens. Treat like a password — rotate periodically.","envTeam":"Team ID","envTeamHint":"Scopes every call to your team instead of personal account.","envProject":"Primary project ID","envProjectHint":"When set, that project is highlighted and a prod-deploy failure becomes critical.","configured":"Configured","notConfigured":"Not set","optional":"Optional","snapshotAt":"Snapshot at","team":"Team","plan":"Plan","partialData":"Partial data — some calls to Vercel failed:","tileMembers":"Members","tileOwners":"Owners","tilePending":"Pending invites","tileProjects":"Projects","tileFailures":"Recent failures","membersTitle":"Team members","projectsTitle":"Projects","noProjects":"No projects.","deploymentsTitle":"Recent deployments","noDeployments":"No recent deployments.","domainsTitle":"Primary project domains","primaryLabel":"PRIMARY","statusConfirmed":"Active","statusPending":"Pending","colName":"Name","colEmail":"Email","colRole":"Role","colStatus":"Status","colFramework":"Framework","colRepo":"Repo","colLatestDeploy":"Latest deploy","colUpdatedAt":"Updated","colCreatedAt":"Created","colProject":"Project","colTarget":"Target","colBranch":"Branch","colCreator":"Author","colState":"State","colDomain":"Domain","colVerified":"Verified","colExpiresAt":"Expires","yes":"Yes","no":"No","colAction":"Action","actionRemove":"Remove from team","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}","tileTraffic":"Web Analytics","tileCrons":"Cron jobs","tileFunctions":"Functions","tileDomainsCount":"Domains","projectHealthTitle":"Project health","phNode":"Node.js","phBuildCmd":"Build command","phDevCmd":"Dev command","phRootDir":"Root directory","phBranch":"Production branch","phEnvCount":"Environment variables","phDefault":"default","trafficTitle":"Traffic & Web Vitals","trafficApiNote":"Vercel doesn't expose Web Analytics or Speed Insights numbers through its API — these open the live dashboards.","waLabel":"Web Analytics","siLabel":"Speed Insights","statusEnabled":"Enabled","statusOff":"Off","statusCollecting":"Collecting data","statusNoData":"No data yet","openDashboard":"Open dashboard →","cronsTitle":"Cron jobs","cronsOn":"Enabled","cronsOff":"Disabled","colSchedule":"Schedule (UTC)","colPath":"Path","noCrons":"No cron jobs defined.","buildLogTitle":"Latest production build","buildTime":"Build time","buildRegions":"Regions","buildFunctions":"Functions","noBuildLog":"No build log available.","openInspector":"Inspect →","logTruncated":"Showing last {n} lines","activityTitle":"Recent activity","noActivity":"No recent activity.","colWhen":"When","colWho":"Who","colEvent":"Event","aliasesTitle":"Production aliases","colAlias":"Alias","colPointsTo":"Points to","noAliases":"No aliases.","accountDomainsTitle":"Account domains","colRenew":"Auto-renew","noAccountDomains":"No domains on the account.","firewallTitle":"Firewall / WAF","fwManaged":"Managed DDoS","fwManagedOn":"Always on","fwCustomRules":"Custom rules","fwIpBlocks":"IP blocks","fwRecentActions":"Actions (recent)","fwNote":"Vercel's DDoS mitigation is always on. Custom WAF rules and blocked-request actions appear here.","envTitle":"Environment variables","envNote":"Names, targets and type only — values are never read or displayed.","envProd":"Production","envPreview":"Preview","envDev":"Development","colKey":"Key","colType":"Type","colTargets":"Targets","envMoreCount":"+{n} more"},"supabaseModule":{"title":"Supabase","description":"Manage the company's Supabase organisations + projects via the Management API. Distinct from per-table operations.","envAccessToken":"Access token","envAccessTokenHint":"Org-scoped management API token from supabase.com/account/tokens.","envProjectRef":"Primary project ref","envProjectRefHint":"When set, that project is highlighted and its health drives critical alerts.","configured":"Configured","notConfigured":"Not set","optional":"Optional","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to Supabase failed:","tileOrgs":"Organisations","tileProjects":"Projects","tileUnhealthy":"Unhealthy","tileServiceCount":"Services","orgsTitle":"Organisations","projectsTitle":"Projects","noProjects":"No projects.","healthTitle":"Primary project — service health","primaryLabel":"PRIMARY","colName":"Name","colRef":"Ref","colRegion":"Region","colStatus":"Status","colCreatedAt":"Created","membersTitle":"Organization members","noMembers":"No members visible.","colMemberName":"Name","colEmail":"Email","colRole":"Role","col2fa":"2FA","colAction":"Action","yes":"Yes","no":"No","actionRemove":"Remove from org","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}"},"tailscaleModule":{"title":"Tailscale","description":"Manage the company's Tailscale tailnet — devices, users, ACL tags, and auth keys.","envApiKey":"API key","envApiKeyHint":"Bearer token from login.tailscale.com/admin/settings/keys. Set TAILSCALE_API_KEY_EXPIRES so the expiry tracker pings you.","envTailnet":"Tailnet","envTailnetHint":"Explicit tailnet name (org domain or owner email).","envTailnetDefault":"Defaults to '-' (the key's own tailnet).","usingDefault":"Default","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","tailnet":"Tailnet","partialData":"Partial data — some calls to Tailscale failed:","tileDevices":"Devices","tileUsers":"Users","tileUnauthorized":"Unauthorized","tileExpiring":"Expiring","tileStale":"Stale","devicesTitle":"Devices","noDevices":"No devices.","usersTitle":"Users","keysTitle":"Auth keys","keysHint":"Auth keys used for ephemeral nodes / device enrolment — distinct from the TAILSCALE_API_KEY itself.","yes":"Yes","no":"No","expiryDisabled":"Disabled","colName":"Name","colUser":"User","colOs":"OS","colAuthorized":"Auth","colLastSeen":"Last seen","colExpires":"Expires","colTags":"Tags","colLogin":"Login","colRole":"Role","colStatus":"Status","colDescription":"Description","colId":"ID","colCreated":"Created","colAction":"Action","actionRemove":"Remove from tailnet","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}"},"n8nModule":{"title":"n8n","description":"Manage every n8n instance the company runs — self-hosted, Cloud, and per-office. Each instance shows its own health, users, workflows, and execution feed. The editor at /m/automations targets the primary instance.","openEditor":"Open workflow editor","configured":"Configured","notConfigured":"Not set","envHint":"Set both env vars in Vercel. Get the API key in the n8n instance: Settings → API → Create API key.","snapshotAt":"Snapshot at","noInstances":"No n8n instances configured. Add at least N8N_URL + N8N_API_KEY in Vercel.","statusHealthy":"Healthy","statusDown":"Down","tileWorkflows":"Workflows","tileActive":"Active","tileUsers":"Users","tileFailures":"Recent failures (24h)","usersUnavailable":"This instance doesn't expose the users API (Community edition). Open the instance directly to manage users.","noUsers":"No users on this instance.","noWorkflows":"No workflows on this instance.","noExecutions":"No recent executions.","workflowsTitle":"Workflows","executionsTitle":"Recent executions","colEmail":"Email","colName":"Name","colRole":"Role","colStatus":"Status","colAction":"Action","colUpdatedAt":"Updated","colStartedAt":"Started","colWorkflow":"Workflow ID","colMode":"Mode","statusActive":"Active","statusInactive":"Inactive","statusPending":"Pending","actionRemove":"Remove user","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}"},"microsoftModule":{"title":"Microsoft 365","description":"See the company's Entra tenant — users, license assignments, group membership and recent sign-ins — and request account suspensions.","envTenant":"Tenant ID","envTenantHint":"Entra (Azure AD) tenant GUID. From the Entra portal → Overview.","envClientId":"Client ID","envClientIdHint":"Application (client) ID of the app registration that holds the Graph permissions.","envClientSecret":"Client secret","envClientSecretHint":"App-registration secret. Treat like a password; set MS_GRAPH_CLIENT_SECRET_EXPIRES to track expiry.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","tenant":"Tenant","partialData":"Partial data — some calls to Microsoft Graph failed:","policyTitle":"Policy: view here, suspend only with two keys (no permanent delete)","policyBody":"This page never changes a Microsoft 365 account by itself. \"Request suspension\" files a request in Identity → Dual-Control; it runs only after two people approve it, one of them holding the owner key, and protected owner accounts can never be suspended. When Central One manages identity, accounts are suspended there. Permanent deletion happens in the Entra portal.","policyConsoleLink":"Open Identity → Dual-Control","tileUsers":"Users","tileDisabled":"Disabled","tileDisabledLicensed":"Disabled + licensed","tileLicensed":"Licensed seats","tileUtilisation":"License utilisation","licensesTitle":"License SKUs","noLicenses":"No license SKUs visible.","colSku":"SKU","colConsumed":"Consumed","colEnabled":"Purchased","colUtilisation":"Utilisation","usersTitle":"Users","noUsers":"No users in this tenant.","colDisplayName":"Name","colUpn":"UPN","colDepartment":"Department","colLicenses":"Licenses","colStatus":"Status","colAction":"Action","statusEnabled":"Enabled","statusDisabled":"Disabled","actionSuspend":"Request suspension","actionSuspending":"Filing request…","actionConfirm":"Click again to confirm","actionSuccess":"Request filed: approve it in Dual-Control","actionFailure":"Not filed: {error}","actionAlreadySuspended":"Already suspended","actionManagedByCentralOne":"Managed by Central One","actionNotLinked":"Not linked to a Redsis One person","refusals":{"invalid_id":"Invalid Microsoft account id.","managed_by_central_one":"Microsoft 365 accounts are managed by Central One. Suspend the account there.","not_linked":"This Microsoft account is not linked to a Redsis One person, so it cannot be suspended from here.","protected_principal":"This is a protected owner account and cannot be suspended.","self_target":"You cannot suspend your own account."},"showingFirst":"Showing first {n} of {total}.","signInsTitle":"Recent sign-ins","colWhen":"When","colUser":"User","colApp":"App","colLocation":"Location","colSignInStatus":"Status","signInOk":"OK"},"supersetModule":{"title":"Apache Superset","description":"Manage the Superset instance — users, dashboards, datasets. The embed/guest-token flow stays in the existing Superset chat scope.","envBaseUrl":"Base URL","envBaseUrlHint":"The Superset instance root, e.g. https://superset.redsis.app.","envUsername":"Admin username","envUsernameHint":"A Superset admin account. Used to mint API tokens server-side.","envPassword":"Admin password","envPasswordHint":"Admin password for the username above.","configured":"Configured","notConfigured":"Not set","snapshotAt":"Snapshot at","partialData":"Partial data — some calls to Superset failed:","tileUsers":"Users","tileAdmins":"Admins","tileInactive":"Inactive","tileDashboards":"Dashboards","usersTitle":"Users","noUsers":"No users.","colUsername":"Username","colEmail":"Email","colRoles":"Roles","colStatus":"Status","colLastLogin":"Last login","colAction":"Action","statusActive":"Active","statusInactive":"Inactive","actionRemove":"Remove user","actionRemoving":"Removing…","actionConfirm":"Click again to confirm","actionSuccess":"Removed","actionFailure":"Failed: {error}","dashboardsTitle":"Recent dashboards","noDashboards":"No dashboards.","colTitle":"Title","colUpdatedAt":"Updated","datasetsTitle":"Datasets","colTable":"Table","colDatabase":"Database","colSchema":"Schema"},"redixModule":{"title":"Redix","description":"Health view of the company's internal commercial portal. Full user-management lights up once the Redix team documents the API surface.","envBase":"API base URL","envBaseHint":"Redix API root. Health check hits {base}{REDIX_HEALTH_PATH}.","envToken":"API token","envTokenHint":"Service-account token used as Bearer auth. Treat like a password.","envHealth":"Health path","envHealthHint":"Optional. Defaults to '/health'.","configured":"Configured","notConfigured":"Not set","statusTitle":"Admin via Redix portal","statusBody":"Until Redix exposes user-management endpoints, manage Redix users from inside the Redix portal directly. This page surfaces health + a link out.","openPortal":"Open Redix portal","healthTitle":"Health probe","healthOk":"Reachable","healthDown":"Unreachable","nextStepsTitle":"To wire user management","nextStepsBody":"Once the Redix team documents user endpoints (list, suspend, remove), tell me the path shape and auth headers — I'll add the users table here with a two-click remove button like the other platforms."},"mondaySync":{"title":"Monday Sync","subtitle":"Phase 1 — infrastructure health. Board configuration arrives in Phase 2.","ok":"All systems go","issues":"Issues detected","connections":"Connections","checkMonday":"Monday.com API","checkSupabase":"Supabase database","checkTables":"Mirror tables","webhookTitle":"Webhook receiver","webhookIntro":"When boards are registered in Phase 2, Monday will send change events to this URL. The endpoint already responds to Monday’s challenge handshake and stores events for processing.","recentTitle":"Recent events","recentEmpty":"No webhook events yet. Expected until Phase 2 registers a board with Monday.","colWhen":"When","colEvent":"Event","colDirection":"Direction","colStatus":"Status","userMatch":{"title":"User mapping","intro":"Match portal users to Monday accounts by email. Required before items show up in any user’s My Work page.","run":"Match users by email","running":"Matching…","lastRun":"Last run","never":"never","unmappedCount":"{count} portal user(s) not yet linked to Monday.","allMapped":"All portal users are linked to Monday.","resultMatched":"Newly matched: {count}","resultUnchanged":"Already correct: {count}","resultMissing":"No Monday match (no enabled account with that email): {count}","unmatchedHeader":"Users without a Monday match","error":"User matching failed: {message}"},"boardDepartments":{"title":"Visible to departments","intro":"Members of these departments will see this board’s items in their My Work. Admins always see every board. Save with no departments selected to keep the board admin-only.","save":"Save","saving":"Saving…","saved":"Saved.","empty":"No departments yet — create one in Admin → Departments first.","notice":"A board with no departments is admin-only — no regular user will see its items in My Work."}},"platformMap":{"title":"Platform Map","description":"Interactive diagram of how the admin portal is wired. Click any node to trace what it connects to, and use the toggles to surface structural issues — orphan pages, off-standard headers, and consoles missing a vendor back-link."},"brandStandards":{"title":"Brand standards","intro":"Authorize which themes, accent colors, and fonts users may choose, and set the org-wide default look. Brand yellow stays locked per the brand manual.","authorizedThemes":"Authorized themes","authorizedAccents":"Authorized accent colors","authorizedFonts":"Authorized fonts","allowDensity":"Let users choose density","defaultLook":"Default look for new users","defaultTheme":"Default theme","defaultAccent":"Default accent","defaultFont":"Default font","defaultDensity":"Default density","comfortable":"Comfortable","compact":"Compact","darkGroup":"Dark","lightGroup":"Light","save":"Save brand standards","saved":"Brand standards saved","saveError":"Could not save — please try again","atLeastOne":"Authorize at least one option in each group.","defaultMustBeAuthorized":"The default must be one of the authorized options.","perRoleTitle":"Per-role default looks","perRoleIntro":"Give a role its own starting look (e.g. Field Service in compact, office staff comfortable). Users still personalize from there. Roles left unchecked inherit the org default above.","inheritOrgDefault":"inherits org default","externalBadge":"ext","cozy":"Cozy","featureTogglesTitle":"Personalization features","allowRadius":"Let users choose corner radius","allowCustomColors":"Let users pick custom colors (full spectrum)","allowPanelTints":"Let users tint individual panels","allowCustomFont":"Let users load a custom font","defaultDarkTheme":"Default dark theme","defaultLightTheme":"Default light theme","defaultRadius":"Default radius","radiusSharp":"Sharp","radiusDefault":"Default","radiusRounded":"Rounded","radiusPill":"Pill"},"designSystem":{"title":"Redsis Design System","intro":"Live reference for every token and primitive available in the portal. Toggle the theme in the top bar to verify both modes.","statusBoard":"Status board","deployHealth":"Deploy health"},"pmDashboard":{"navLabel":"PM Dashboard","pageTitle":"Project Management Dashboard","description":"Live status across the system: progress by area, work in flight, recent activity. Refreshes automatically.","progress":{"title":"System progress","asOf":"As of","overall":"overall","nextMilestone":"Next milestone","groups":{"foundation":"Foundation","integrations":"Integrations","modules":"Modules","external-access":"External access"},"status":{"shipped":"shipped","on-track":"on track","at-risk":"at risk","blocked":"blocked","planned":"planned"}},"actions":{"refresh":"Refresh","openInNewTab":"Open full view","help":"What am I looking at?","closeHelp":"Close help","lastUpdated":"Updated","justNow":"just now","minutesAgo":"{n} min ago","hoursAgo":"{n} h ago","daysAgo":"{n} d ago","unknown":"Updated time unknown"},"help":{"title":"Reading this dashboard","intro":"A plain-English guide to what each section means and how to read the colours and percentages.","qWhat":"What is this page?","aWhat":"A combined view of where the Redsis ops portal stands: which areas are done, which are mid-build, and which are still on the runway. The progress strip is hand-curated; the dashboard below is auto-generated.","qChats":"What does \"chat\" mean here?","aChats":"A chat is one AI session working on a specific feature — think of it as a teammate dedicated to one slice of the project. Each chat has its own scope (Monday integration, RBAC, troubleshooter, etc.) and ships commits when its work is ready.","qColors":"What do the colours mean?","aColors":"Green dot = on track or shipped. Amber = at risk (active concerns). Red = blocked. Grey = planned but not started. Percentage is a \"how far is this area towards being usable in production\" estimate.","qFreshness":"How fresh is this data?","aFreshness":"The progress strip is updated when a meaningful change happens (you can see the \"as of\" date in the header). The dashboard area below refreshes automatically whenever an underlying log or queue file changes — typically within a couple of minutes.","qBlank":"Why does an area show 0%?","aBlank":"It has been scoped but no code exists yet. Those are usually the next areas to start — they show what is on the runway."}},"teamStatus":{"navLabel":"Team status","pageTitle":"Team status (from team-sync repo)","description":"Hourly STATUS files from every team member, aggregated from ~/redsis-ops-team-sync/ on Mike’s machine. Add-on to the PM Dashboard — use both when the two views disagree.","refresh":"Refresh","openInNewTab":"Open full view","lastUpdated":"Updated","justNow":"just now","minutesAgo":"{n} min ago","hoursAgo":"{n} h ago","daysAgo":"{n} d ago","unknown":"Updated time unknown","missingSnapshot":"No snapshot found at /admin-team-status.html. Run scripts/install-team-status-publisher.sh on Mike’s machine, then refresh.","kpi":{"rosterSize":"Roster","workedToday":"Worked today","activePeople":"Active people","placeholders":"Awaiting first refresh","stale":"Stale (>3d)","progress":"Progress","inFlight":"In flight","shipped":"Shipped","blocked":"Blocked","branch":"Branch","worktrees":"Worktrees","stateShipping":"Shipped today","stateActive":"Working today","stateIdle":"Idle","stateStale":"No update in 3+ days","statePlaceholder":"Awaiting first refresh","noActivity":"No activity recorded yet.","emptyFlight":"Nothing in flight.","emptyShipped":"Nothing shipped since last refresh.","sortLabel":"Sort","sortByActivity":"Activity","sortByName":"Name","sortByRecency":"Recency","filterAll":"All","filterActive":"Active","filterStale":"Stale","filterPlaceholder":"Awaiting"}},"platformScorecard":{"navLabel":"Platform Scorecard","pageTitle":"Platform Scorecard","description":"Internal benchmark of the five owned platforms. The Strategic Value Index ranks them on capability, modern architecture, code health and momentum (Redsis One #1); the Scale & Footprint Index ranks raw size, for contrast.","tabStrategic":"Strategic Value","tabFootprint":"Scale & Footprint","openInNewTab":"Open full view"},"rolesList":{"title":"Roles","subtitle":"Three system roles are seeded and protected — every other role you create can have its own edit tier, external flag, and per-capability grants on top.","help":{"title":"What is this page for?","body":"Roles are the highest-level access tier. Each user has exactly one role. The three system roles (Admin, Member, Viewer) cover most cases — custom roles let you carve out narrower groups (e.g. \"Field Service Supervisor\" or \"External Client\").","bulletsLabel":"Common things you can do","bullets":["Create a custom role and pick its edit tier (admin / editor / viewer).","Mark a role as External so users with it land on /admin/external-users.","See at a glance how many users are in each role.","Edit the description of a system role (you can't change its tier or delete it)."],"tip":"Per-capability grants on top of a role live on each role's detail page — useful for \"Member, but can also do X\"."},"createButton":"+ Create role","colRole":"Role","colTier":"Tier","colCategory":"Category","colUsers":"Users","colActions":"Actions","systemBadge":"System","external":"External","internal":"Internal","edit":"Edit","viewEditDescription":"View / edit description","tierAdmin":"admin","tierEditor":"editor","tierViewer":"viewer"},"rosterReview":{"title":"Admin Roster Review","subtitle":"Periodic right-sizing of every admin-tier and admin-adjacent account. Record a decision per row; mutations apply when the toolkit is unlocked.","backToRoles":"Back to Roles","sectionOwner":"Owner accounts","sectionOwnerHint":"Owners bypass every capability check — including opt-in sensitive-panel caps. Keep this list very small. Removing Owner requires MFA step-up and typed-name confirmation.","sectionAdmin":"Admin-tier accounts","sectionAdminHint":"Accounts whose effective tier is admin (via their primary role or any additional role).","sectionAdjacent":"Admin-adjacent (editor tier)","sectionAdjacentHint":"Editor-tier accounts holding sensitive or cross-cutting capabilities (User Admin, Integrations, Security, Audit, Webhooks, Ayva Owner, Platform Configure, roles.review, …).","colUser":"User","colRoles":"Role(s)","colLastLogin":"Last login","colMfa":"MFA","colGrantDelta":"Grants beyond tier","colRecommendation":"Recommendation","colLastReviewed":"Last reviewed","colDecision":"Decision","decisionKeep":"Keep as-is","decisionDowngrade":"Downgrade to…","decisionSuspend":"Suspend","decisionDelete":"Delete","decisionOwnerRemoved":"Remove Owner","chipPrimary":"primary","chipAdditional":"additional","neverLoggedIn":"Never","neverReviewed":"Never","mfaYes":"Yes","mfaNo":"No","grantsSuffix":"above tier","recommendationBadge":"Recommended: {{roleName}}","recommendationTooltip":"{{rationale}}","applyDisabledTooltip":"Applying decisions is disabled in this PR. Records write to the audit trail only. Enable the \"roles_review_apply\" flag in /admin/modules once the sub-admin role targets exist.","ownerRemovalDisabledTooltip":"Owner removal requires MFA step-up + typed-name confirmation. Enabled in PR (ii).","autoSuspendCheckbox":"Auto-suspend admin-tier accounts inactive 30+ days without MFA when I close this review.","recordDecision":"Record decision","applyBatch":"Apply decisions and close review batch","previewWillDowngrade":"Will downgrade to {{roleName}}","previewWillSuspend":"Will suspend","previewWillDelete":"Will delete","previewWillRemoveOwner":"Will remove Owner (→ {{roleName}})","notesPlaceholder":"Notes (optional)","bannerTitle":"Admin roster review is due","bannerBody":"Last review: {{ago}}. Review now to keep the admin population right-sized.","bannerNever":"The admin roster has never been reviewed. Right-size it now to keep the admin population honest.","bannerCta":"Review now","lastReviewedBadge":"Last reviewed {{ago}}","neverReviewedBadge":"Never reviewed","denied":"You need the roles.review capability to run this review. Ask an Owner or User Admin to grant it."},"chatAccess":{"eyebrow":"System / People & Access","title":"Chat Access","description":"Choose who can chat with technicians and clients. No grant means no access.","flagOffNote":"Cross-role chat is currently turned off in Modules. Access you set here takes effect the moment it is switched on.","newGrantTitle":"Grant chat access","who":"Who gets access","subjectRole":"A role","subjectDepartment":"A department","subjectUser":"One person","chooseRole":"Choose a role","chooseDepartment":"Choose a department","searchUser":"Search for a person…","canChatWith":"Can chat with","techs":"Technicians","clients":"Clients","scopeAll":"All of them","scopeSpecific":"Only specific ones","pickBy":"Pick by","wholeProvider":"Service provider","specificTech":"Individual technician","wholePortal":"Client portal","specificClient":"Individual client","chooseProvider":"Choose a service provider","choosePortal":"Choose a portal","searchTech":"Search technicians…","searchClient":"Search clients…","addGrant":"Grant access","currentGrants":"Current access","noGrants":"No chat access has been granted yet.","colWho":"Who","colCanChatWith":"Can chat with","revoke":"Revoke","noResults":"No matches","selectPrompt":"Select…","needSubject":"Choose who gets access first.","needTarget":"Choose a specific technician, client, provider, or portal.","savingError":"Could not save that change. Please try again."},"roleTemplates":{"tabRoles":"Roles","tabTemplates":"Templates","introTitle":"Role templates","introBody":"Templates are curated capability presets — start a new role from one and its capabilities arrive pre-ticked. Save any role you build as a template from the role editor to reuse it later.","empty":"No templates yet.","systemBadge":"System","customBadge":"Custom","capCount":"{count} capabilities","createFromTemplate":"Create role from template","delete":"Delete","confirmDelete":"Yes, delete","deleting":"Deleting…","cancel":"Cancel","applyTitle":"Apply a template","applyHint":"Pick a template to pre-select its suggested tier and tick its capabilities. You can still adjust everything before saving.","choosePlaceholder":"Choose a template…","noneAvailable":"No templates available","saveAsTemplateButton":"Save as template","savedAsTemplate":"Saved “{name}” as a reusable template.","saveFailed":"Could not save template","deleteFailed":"Could not delete template","saving":"Saving…"},"roleNew":{"title":"Create role","back":"← Back to Roles"},"roleEdit":{"back":"← Back to Roles","systemBadge":"System","usersAssignedOne":"{count} user assigned","usersAssignedMany":"{count} users assigned","dangerZone":"Danger zone","dangerIntro":"Delete this role. You can only delete a role that has no users assigned — reassign any users on this role first.","cannotDeleteOne":"Cannot delete — {count} user is still assigned to this role.","cannotDeleteMany":"Cannot delete — {count} users are still assigned to this role.","deleteButton":"Delete role","deleting":"Deleting…","deleteConfirm":"Click again to confirm delete","deleteFailed":"Delete failed","hubVisibility":{"heading":"Hub Visibility","description":"Hide a whole Hub — and its always-on shortcut (Templates, Ayva, eBay, the Operations dashboard…) — from members of this role. Hidden removes the Hub from their launcher and 404s its shortcut. This wins over the admin tier; the Owner always sees every Hub.","defaultLabel":"Default","hiddenLabel":"Hidden","hiddenCount":"{count} hidden","hubsTotal":"{count} hubs total","hideAll":"Hide all","resetAll":"Reset all","save":"Save hubs","saving":"Saving…","saved":"Saved","unsaved":"Unsaved changes","saveFailed":"Save failed.","rowAria":"Visibility for {hub}"}},"roleForm":{"sectionBasics":"Basics","sectionCapabilities":"Capabilities","tabBasics":"Basics","tabCapabilities":"Capabilities","name":"Name","systemReadOnlySuffix":"(read-only on system roles)","description":"Description","descriptionPlaceholder":"What is this role for? (Shown to admins on the user-edit screen)","editTier":"Edit tier","tierAdminLabel":"Admin — full power across the portal","tierEditorLabel":"Editor — view + edit on granted boards","tierViewerLabel":"Viewer — read-only on granted boards","tierExternalLabel":"External (client / vendor)","externalToggle":"External user role.","externalToggleHint":"Users assigned this role appear on /admin/external-users and get the external invite copy.","capabilitiesIntro":"The tier above grants a baseline set (marked default). The checkboxes below ADD extra grants on top. They never subtract — to remove a default, change the tier instead. Per-board capabilities can be granted globally (all boards) or scoped to specific boards.","defaultForTier":"Default for {tier}","scopeBoardOpen":"Or grant for specific boards only","scopeBoardSelected":"({count} selected)","scopeBoardBadge":"per-board","searchPlaceholder":"Search capabilities…","searchEmpty":"No capabilities match this search.","clusterEmpty":"No capabilities registered in this section.","capabilitySingular":"capability","capabilityPlural":"capabilities","clusters":{"peopleAccess":"People & Access","appsTools":"Apps & Tools","activityMonitoring":"Activity & Monitoring","integrations":"Integrations","operations":"Operations","developer":"Developer","other":"Other"},"cancel":"Cancel","saving":"Saving…","createRole":"Create role","saveChanges":"Save changes","nameRequired":"Name is required","createFailed":"Create failed","updateFailed":"Update failed"},"externalUsersPage":{"title":"External users","subtitle":"Clients, vendors, contractors, and other non-internal accounts. Their access is governed by the same department→board grants as internal users — but they live here so the team list stays clean.","help":{"title":"What is this page for?","body":"Externals (clients, vendors, contractors, service providers) live on a separate list from your internal team. They use the same login, MFA, and department-based access — they just don't clutter your internal directory.","bulletsLabel":"Common things you can do","bullets":["See every external account in one place, filterable by role and status.","Click a user to suspend, reset MFA, or change their department from the same edit page used for internal users.","External invites flow through the regular Users → Invite form — just pick an external role."],"tip":"A role only appears under \"External users\" if its \"External user role\" toggle is ON. Set this when creating the role."},"backToInternal":"← Back to internal Users","noRolesIntro":"No external roles exist yet. Create one on","noRolesLink":"the Roles page","noRolesOutro":" — set \"External user role\" to ON. Then invite users into that role from the regular invite flow.","countOne":"{count} external user","countMany":"{count} external users","acrossRolesOne":"across {count} external role","acrossRolesMany":"across {count} external roles","empty":"No external users yet.","colUser":"User","colRole":"Role","colDepartments":"Departments","colStatus":"Status","colLastLogin":"Last login","tierPrefix":"Tier","editLink":"Edit →","never":"Never","statusActive":"active","statusInvited":"invited","statusSuspended":"suspended","statusLocked":"locked"},"capabilityGroups":{"approvals":"Approvals","requests":"Company requests","apps":"Modules","external_apps":"External apps","permissions":"Permissions","email_log":"Email log","platforms":"Platforms","fx":"Exchange rates","sales":"Sales sizing","my_views":"My Views","pm":"Project management","team_status":"Team status","design_system":"Design system","api_keys":"API keys","unifi":"UniFi","openai":"OpenAI","cloudflare":"Cloudflare","anthropic":"Anthropic","chatgpt":"ChatGPT","twilio":"Twilio","resend":"Resend","neon":"Neon","github":"GitHub","vercel":"Vercel","supabase":"Supabase","tailscale":"Tailscale","apollo":"Apollo","prospecting":"Prospecting","n8n":"n8n","microsoft":"Microsoft","redix":"Redix","jira":"Jira","field_service":"Field Service","inventory":"Inventory","playground":"Playground","notifications":"Notifications","updates":"Updates","security":"Security","incidents":"Incidents","portals":"Portals","chat":"Chat","domains":"Domains","vendors":"Vendors","helpdesk":"Helpdesk","my_hub":"My Hub","claude":"Claude","superset":"Superset","reports":"Reports","connector":"Connector","bridge":"Bridge","automations":"Automations","announcements":"Announcements","identity":"Identity","boards":"Boards","time":"Time tracking","equipment":"Equipment","expenses":"Expenses","quickbooks":"QuickBooks","hr":"Human resources","org_matrix":"Org & identity matrix","documents":"Documents","qa":"QA capture","ai_team":"AI Team","ayva":"Ayva","labels":"Labels","screen_builder":"Screen Builder","serials":"Serial numbers","insights":"Insights","integrations":"Integrations","brochures":"Brochures","compliance":"Compliance","legal":"Legal","webhooks":"Webhooks","sheets":"Sheets","docs":"Docs","designer":"Designer","presentations":"Presentations","viewer":"Viewer","video_studio":"Video Studio","travel":"Travel","access_request":"Access requests","dashboards":"Dashboards","budget":"Budgets","ebay":"eBay","listing_studio":"Listing Studio","sales_hub":"Sales Hub","carrier_tracking":"Carrier tracking","logistics":"Logistics","note_taker":"Note Taker","migration":"Migration","appearance":"Appearance","service_videos":"Service videos","waitlist":"Waitlist","suggestions":"Suggestions","files":"Files","it":"IT","campaign":"Campaigns","audience":"Audience","marketing":"Marketing","cms":"Website content","social":"Social media","workflow":"Workflows","mobile":"Mobile app","field_app":"Field app","widgets":"Widgets","edu":"Edu One","press":"Press One","service":"Service Hub","users":"Users","roles":"Roles","departments":"Departments","groups":"Groups","audit":"Audit","monday":"Monday"},"capabilities":{"dashboards.export":"Export dashboards to PDF and schedule PDF sends","users.view":"View users","users.invite":"Invite users","users.edit":"Edit users","roles.review":"Review the admin roster","inbox.connect":"Connect inboxes (retired)","groups.view":"View groups","groups.edit":"Create/edit/delete groups","audit.export":"Export audit log to CSV","approvals.oversight.view":"View all approvals (oversight)","requests.view_own":"See your own company requests (Request Center)","requests.create":"File company requests (Request Center)","requests.approve":"Fallback approver pool when no manager/head can decide","requests.team.view":"See your team's requests (managers see reports by relation)","requests.fulfill.it":"Fulfil approved IT requests","requests.fulfill.hr":"Fulfil approved HR requests (letters, training)","requests.fulfill.finance":"Fulfil approved finance requests (advances, cards)","requests.fulfill.procurement":"Fulfil approved purchase requisitions","requests.fulfill.general":"Fulfil approved general requests","requests.oversee":"Read every company request (oversight)","requests.insights.view":"Request Center insights (cycle times, spend by entity)","requests.admin":"Configure request types, routing rules and delegations","apps.view":"View modules registry","apps.create":"Register new modules","apps.edit":"Edit module metadata","apps.delete":"Archive modules","pwa.configure":"Configure PWA / app features","external_apps.view":"View external apps catalog","external_apps.create":"Add external app to catalog","external_apps.edit":"Edit external app entry","external_apps.delete":"Remove external app entry","permissions.view":"View permissions matrix","permissions.edit":"Edit permissions matrix","email_log.view":"View email log","email_log.export":"Export email log","email.test":"Send test emails","email.control.view":"View Email Control (configured senders, queue, history)","email.control.manage":"Manage Email Control (suppress addresses, edit user email delivery)","email.kill_switch.manage":"Arm / disarm email kill-switch + per-module pause (ops break-glass)","platforms.view":"View platforms dashboard","platforms.edit":"Configure platforms","platforms.alerts.receive":"Receive platform infrastructure alerts","platform.configure":"Configure platform variables & secrets (Setup Center)","credentials.view":"View credential vault entries (no plaintext)","credentials.manage":"Create, update, and revoke named credentials","fx.view":"View FX rates","fx.refresh":"Trigger FX refresh","fx.manual_override":"Enter manual FX rate","sales.view":"View sales sizing tool","sales.edit":"Create / edit scenarios","sales.delete":"Archive scenarios","sales.catalogs":"Edit sales catalogs (vendors, techs, warehouses, inventory, lanes, templates)","sales.status_advance":"Advance scenario status (draft→active, reopen won/lost→active)","sales.status_close":"Close scenario as won or lost","my_views.admin":"Configure My Views portal","pm.view":"View PM dashboard","team_status.view":"View team status","design_system.view":"View design system","api_keys.manage":"Manage API keys","unifi.view":"View UniFi enterprise dashboard","openai.view":"View OpenAI org dashboard","cloudflare.view":"View Cloudflare account dashboard","anthropic.view":"View Anthropic org dashboard","chatgpt.view":"View ChatGPT workspace dashboard","twilio.view":"View Twilio account dashboard","resend.view":"View Resend transport dashboard","neon.view":"View Neon Postgres dashboard","github.view":"View GitHub org dashboard","vercel.view":"View Vercel team dashboard","supabase.view":"View Supabase platform dashboard","tailscale.view":"View Tailscale tailnet dashboard","apollo.view":"View Apollo.io integration","prospecting.view":"View prospecting results","prospecting.run":"Trigger a prospecting run","prospecting.outreach":"Enroll prospects into outreach","n8n.view":"View n8n instances dashboard","microsoft.view":"View Microsoft 365 dashboard","redix.view":"View Redix dashboard","redix.call":"Execute Redix write calls from the Playground","redix.manage":"Manage the Redix connection & credentials","redix.workflow":"Add & run the Redix workflow node","redix.presales":"Run the Redix presales (quote → board) importer","jira.projects.view":"View Jira project metadata","jira.projects.register":"Register Jira projects","jira.projects.remove":"Remove (soft-delete) Jira projects","jira.projects.settings":"Edit Jira project settings","jira.issues.view":"View Jira issues","jira.issues.create":"Create Jira issues","jira.issues.edit":"Edit Jira issues (round-trip)","jira.issues.delete":"Soft-delete Jira issues","jira.accounts.register.personal":"Connect personal Jira account","field_service.view_dashboard":"View Field Service dashboard","field_service.view_map":"View live map (tickets + SPs)","field_service.view_tickets":"View tickets","field_service.view_intake":"View the Service Hub Inbox (intake cases)","field_service.view_sps":"View SP roster + locations","field_service.view_routes":"View planned routes","field_service.view_contracts":"View contracts and terms","field_service.view_reports":"View reports / analytics","field_service.view_audit":"View Field Service audit log","field_service.view_location_history":"View SP location history","field_service.export_location_data":"Export SP location data","field_service.dispatch":"Assign ticket to SP","field_service.approve_intake":"Approve service intake case","field_service.override_dispatch":"Override dispatch eligibility","field_service.build_route":"Create / edit / publish routes","field_service.reorder_route_manual":"Manually reorder published routes","field_service.approve_parts_request":"Approve parts request","field_service.escalate_ticket":"Escalate ticket","field_service.cancel_ticket":"Cancel ticket from our side","field_service.edit_ticket_severity":"Change ticket severity","field_service.claim_ticket":"Claim a ticket for dispatch","field_service.bulk_actions_tickets":"Bulk actions on tickets","field_service.resolve_ticket":"Resolve a ticket (in-house)","field_service.write_service_report":"Write a service report","field_service.broadcast_message":"Broadcast message to SPs","field_service.service_ticket":"Open/service assigned tickets","field_service.submit_service_form":"Submit service completion form","field_service.request_part":"Raise a parts request","field_service.request_help":"Raise a help request","field_service.share_location":"Stream GPS while signed in","field_service.diagnose":"Run / record diagnostic sessions","field_service.send_quote":"Send a diagnosis to a Redix quote","field_service.author_flows":"Author / publish diagnostic flows","field_service.admin_sps":"Manage SP roster / skills / loadout","field_service.tech_onboard":"Onboard technicians (tech login, access requests, activation code)","field_service.admin_contracts":"Create / edit / amend contracts","field_service.admin_rules":"Edit global rules / weights / defaults","field_service.admin_holidays_calendars":"Edit holiday calendars + business hours","field_service.sla_view":"View SLA countdown timers","field_service.sla_configure":"Configure SLA policy rules (sensitive)","field_service.override_ticket_sla":"Override a single ticket’s SLA (waive / pause — sensitive)","field_service.depot_intake":"Receive depot intake (create repair jobs)","field_service.depot_manage":"Manage depot jobs (stage moves, QC, pickup)","field_service.depot_quote":"Build / send / record depot repair quotes","field_service.lab_admin":"Lab: manage technical areas, members and repair codes","field_service.lab_qc":"Lab: run bench QC (pass / fail)","field_service.lab_cost":"Lab: see hour costs, repair prices and price snapshots","field_service.lab_approve":"Lab: decide coverage (warranty vs billable) and the abandoned outcome","field_service.lab_receive":"Lab: receive batch lines / mark not received","field_service.lab_ship":"Lab: pickup and outbound of repaired units","field_service.manage_procurement":"Manage procurement (requisitions, POs, goods receipts)","field_service.dispose_parts":"Disposition returned parts (scrap / RMA / restock / vendor-return)","field_service.manage_rma":"Manage vendor warranty / RMA claims","inventory.view":"View inventory within your granted scope","inventory.view.all":"View ALL inventory (every source / warehouse / product)","inventory.manage":"Manage warehouses / products + inventory source config","inventory.access.admin":"Manage who can see which inventory (visibility grants)","pick.view":"View pick lists within your granted scope","pick.pick":"Do the picking (scan serial + bin on assigned picks)","pick.manage":"Manage pick lists — create / assign / cancel / sources","playground.run":"Run playground queries","playground.admin":"Manage playground connections","playground.write":"Write-back (edit rows) on write-enabled connections","notifications.admin":"Manage notification topics, templates, and role defaults","notifications.view_all":"View any user's notifications (support access)","updates.moderate":"Moderate updates threads (delete any message, see admin UI)","updates.audit.view":"View updates audit log (edit history, deletion records)","security.view":"View security portal (alerts, integrations, backups, attack surface)","security.acknowledge":"Acknowledge / resolve security alerts","security.configure":"Configure detection rules, channels, subscribers","security.export":"Export security data (compliance reports, access review)","security.soc.configure":"Manage Office SOC rule translations + suppression list","incidents.view":"View operational incidents (admin)","incidents.manage":"Create, update, and resolve operational incidents","portals.view":"View the client / vendor portals registry","portals.manage":"Create, configure, and staff client / vendor portals","chat.access.manage":"Manage cross-role chat access (who can message techs / clients)","domains.view":"View the domain + DNS inventory (Vercel / Cloudflare / GoDaddy)","domains.manage":"Edit DNS records and registrar settings (auto-renew, transfer, purchase)","vendors.view":"View vendors, contracts, and parts reorder alerts","vendors.manage":"Manage vendors, contracts, and reorder rules (procurement)","helpdesk.view":"File and follow helpdesk tickets","helpdesk.manage":"Work helpdesk queues (status, assignment, notes, queues, SLAs)","personal_request.approve":"Approve or deny others’ vacation / special requests","claude.use":"Chat with Claude (in-portal panel + connect via MCP)","claude.admin":"Configure Claude integration (settings, audit, kill-switch)","claude.supervise":"Configure + view supervisor agent runs","claude.write.tickets":"Allow Claude to create / update / assign tickets","claude.write.boards":"Allow Claude to create / update One Boards items","claude.write.notifications":"Allow Claude to send notifications via the engine","claude.write.updates":"Allow Claude to post Updates / Messages","claude.write.time":"Allow Claude to log time (timers + manual entries) + submit timesheets","claude.write.requests":"Allow Claude to submit time-off / leave requests on your behalf","claude.write.calendar":"Allow Claude to draft Outlook email + create calendar events on your behalf","claude.write.expenses":"Allow Claude to log + edit your own expense reports on your behalf","claude.write.m365":"Allow Ayva to send/delete mail, write/delete files, and manage calendar/Teams on your behalf (Microsoft 365)","claude.admin.write":"Allow Claude to perform admin actions (step-up gated)","superset.view":"View embedded analytics dashboards","superset.admin":"Manage Superset dashboard registry","reports.view":"View the Reports portal (daily EOD + dashboards)","reports.admin":"Manage report days, attach dashboards, grant per-day access","connector.view":"View connector agent status and logs","connector.admin":"Manage connector agent connections and security","bridge.view":"View bridge connectors","bridge.admin":"Manage bridge connectors","board_database_tables.view":"View published Database Tables and their replication health","board_database_tables.manage":"Publish a board as a Database Table and manage its credentials","data.queries.view":"View the external-data query catalog and run history","data.queries.admin":"Author, edit and run external-data queries (on-prem)","automations.manage":"Manage automation workflows (admin surface)","automations.run":"Run automation recipes (end-user surface)","automations.view":"View automation run history","announcements.admin":"Manage announcement categories, publisher mappings, moderation","announcements.publish":"Create and publish announcements in permitted categories","announcements.publish_all":"Publish announcements to the entire company (all active users)","announcements.view":"View the Announcements module (/m/announcements)","announcements.delete_any":"Delete any announcement (moderator grant)","identity.view":"View identity console","identity.act":"Act on platform identities (disable, reset, …)","identity.lock":"Lock user out of all platforms (cross-platform)","identity.admin":"Administer identity module (registry, orphans)","boards.create":"Create boards","boards.read":"View boards (workspace + board listings, item reads)","boards.update":"Edit board structure (groups, columns, views, settings)","boards.write_data":"Add items and edit cell values (data entry)","boards.view_all_data":"View ALL One Boards data (read-only oversight)","boards.archive":"Archive boards I own","boards.archive_others":"Archive boards I don't own (admin escalation)","boards.delete":"Delete boards I own (move to Trash — recoverable 30 days)","boards.admin":"Administer One Boards (templates, recovery, quotas)","boards.share":"Share a board (add members / role grants / dept grants)","boards.export":"Export board contents (CSV / Excel)","boards.approvals.request":"Request approval on a board item","boards.proofing.review":"Create proofs & annotate attached files","boards.template_create":"Create user board templates","boards.template_admin":"Administer system board templates","boards.recovery":"Restore soft-deleted boards / items (admin recovery UI)","boards.quota_admin":"Manage per-workspace storage quotas","time.log":"Log own time (timers + manual entries)","time.view_own":"View own timesheet & time reports","time.approve":"Approve / reject submitted timesheets","time.admin":"Administer time tracking (all users, settings, exports)","equipment.view":"View the equipment / asset registry","equipment.manage":"Manage assets, maintenance, warranties and loans","expenses.submit":"Create and submit expense reports","expenses.approve":"Approve or reject submitted expense reports","quickbooks.view":"Open the QuickBooks module","quickbooks.query":"Run QuickBooks read / query actions (look up records)","quickbooks.create":"Create QuickBooks records (Add actions)","quickbooks.edit":"Modify / delete QuickBooks records (Mod/Del/Void)","quickbooks.connections.manage":"Manage QuickBooks connections (connector agents) and run health checks","quickbooks.rules.manage":"Manage QuickBooks governance/validation rules","quickbooks.classification_rules.manage":"Manage the classification rules of the accounting inbox","quickbooks.card_inbox":"Use the accounting inbox: cards and invoices","quickbooks.bank_inbox":"Use the accounting inbox: bank account statements → checks","quickbooks.agent_watch":"Get alerts when a QuickBooks connector stops responding","hr.view":"View the HR Hub, employee directory and people calendar","hr.manage":"HR-manager actions: time-off rollup, manage employee records & HR modules","hr.sensitive.view":"View sensitive HR data (compensation, benefits, payroll, documents, cases)","hr.recruiting.manage":"Connect and manage recruitment integrations","org_matrix.view":"Open the Org & Identity Matrix — read the attribute grid, job functions, cost centers, teams & dimensions","org_matrix.manage":"Manage org structure: create/edit/archive job functions, cost centers, teams & team members; override a user’s resolved profile cells","org_matrix.dimensions.manage":"Edit attribute-dimension disclosure levels (the de-identification policy)","documents.view":"View documents in a workspace","documents.create":"Create documents in a workspace","documents.edit":"Edit document content / title / tags","documents.admin":"Share or soft-delete documents (owner)","qa.capture":"Run a QA capture session on mockups (record clicks + add notes)","qa.reports.view":"View QA capture reports (/m/developer/qa-reports)","qa.reports.delete":"Delete a QA capture report","qa.admin":"Administer QA Capture settings / retention","ai_team.view":"View AI Team module (/m/ai-team)","ai_team.add_player":"Register AI or human players to the roster","ai_team.edit_instructions":"Write project master instructions","ai_team.connect_account":"Connect own AI provider account to a player","ai_team.admin":"Administer AI Team (global roster, OAuth config, audit)","ai_team.agent.use":"Run AI Team agents (chat + approve their actions)","ai_team.agent.build":"Build & configure your own AI Team agents","ai_team.agent.share":"Publish an agent as a shareable template","ai_team.agent.admin":"Administer the Agent Platform (org policy, token budgets)","ai_team.triggers.view":"View the Triggers section (definitions + run history)","ai_team.triggers.manage":"Create, edit, and archive trigger definitions","ai_team.triggers.run":"Fire triggers against own Claude accounts (spends money)","ai_team.triggers.tokens":"Create/revoke webhook fire tokens for triggers","ayva.use":"Chat with Ayva (in-portal AI assistant)","ayva.admin":"Administer Ayva (persona, company rules, models, per-user budgets)","ayva.skills.request":"Ask Ayva to build a new tool/skill (self-extension)","ayva.skills.approve":"Review + approve/reject Ayva self-built tools","ayva.owner":"Own the Ayva permission matrix (confer/revoke special powers)","ayva.monitor":"Direct Ayva to monitor employees (tenant-scoped, audited)","ayva.act_for_others":"Have Ayva act on behalf of other employees (owner delegation)","ayva.tenant_report":"Have Ayva produce tenant-wide reports across employees","ayva.autonomy.act":"Allow Ayva to act immediately (vs propose-first) for a role","ayva.knowledge.share":"Publish to company/team-shared Ayva knowledge","ayva.skills.admin":"Author + manage company-wide Ayva skills","ayva.mcp.admin":"Manage company external MCP connections for Ayva","labels.view":"View Label Maker module (/m/labels)","labels.create":"Create and edit label templates","labels.print":"Print labels via the Print Label widget","labels.admin":"Administer Label Maker (printers, counters, all jobs)","screen_builder.manage":"Open Screen Builder and author Screens (/m/screen-builder)","serials.schemes.manage":"Design and lock serial number schemes and client serial policies (/m/serials/schemes)","serials.ibm_pn.override":"Label a unit without an IBM part number (use 0000000, with a reason)","insights.view":"View the Insights BI module (/m/insights)","insights.create":"Create and edit datasets, charts and dashboards","insights.export":"Export charts, datasets and dashboards","insights.admin":"Administer Insights (data sources, RLS, all datasets)","insights.ai_generate":"Generate dashboards with AI (Build-a-dashboard)","insights.ai_html":"Use the AI raw-HTML dashboard mode (sandboxed)","insights.warehouse.manage":"Manage BI Warehouse mirrors + refresh schedules","insights.warehouse.admin":"Administer the BI Warehouse (connections, all mirrors, RLS)","insights.connections.manage":"Manage Insights data connections (add, rename, test)","integrations.view":"View the Integrations module (/m/integrations)","integrations.connect":"Connect platforms + bind them to boards / apps / modules","integrations.admin":"Administer integrations (org-wide connections, secrets)","brochures.view":"View Brochure Studio (/m/brochures)","brochures.create":"Create brochures and drafts","brochures.edit":"Edit brochure content","brochures.delete":"Archive brochures I own","brochures.duplicate":"Duplicate brochures","brochures.personalize":"Create client-personalized (co-branded) variants","brochures.publish":"Publish brochures + attach to Redix products","brochures.approve":"Approve brochures in review","brochures.template_manage":"Create / publish org brochure templates","brochures.brand_manage":"Manage brochure brand rules + locked regions","brochures.admin":"Administer Brochure Studio (all brochures, governance)","compliance.view":"View the Compliance Hub (/m/compliance)","compliance.manage":"Manage compliance records (receipts, movements, audits, CAPA)","compliance.admin":"Administer Compliance (facilities, settings, cross-facility)","legal.view":"View Legal & Compliance (/m/legal) + acknowledge policies","legal.manage":"Manage legal policies + versions + view acknowledgement coverage","webhooks.manage":"Manage outgoing webhooks (endpoints, secrets, delivery logs)","sheets.read":"View Sheets (/m/sheets)","sheets.create":"Create spreadsheets","sheets.update":"Edit spreadsheet content","sheets.share":"Share a sheet (members / role / department grants)","sheets.export":"Export spreadsheets (CSV/XLSX)","sheets.archive":"Archive sheets I own","sheets.admin":"Administer Sheets (templates, recovery, quotas)","docs.read":"View Documents (/m/docs)","docs.create":"Create documents","docs.update":"Edit document content","docs.share":"Share a document (members / role / department grants)","docs.export":"Export documents (Markdown/HTML)","docs.archive":"Archive documents I own","docs.admin":"Administer Documents (templates, recovery, quotas)","designer.read":"View Redsis One Designer (/m/designer)","designer.create":"Create designs","designer.update":"Edit design content","designer.share":"Share a design (members / role)","designer.export":"Export designs (PDF/SVG/PNG/Markdown)","designer.archive":"Archive designs I own","designer.publish":"Activate workflow designs to run on a schedule","designer.admin":"Administer Designer (templates, recovery, libraries)","presentations.read":"View Presentations (/m/presentations)","presentations.create":"Create slide decks","presentations.update":"Edit deck content","presentations.admin":"Administer Presentations (members, archive, restore)","presentations.share_external":"Publish a public client portal from a deck","presentations.write":"Allow Ayva write-tools to build/edit decks","presentations.build":"Build presentations from templates","presentations.templates.manage":"Manage presentation templates, parts and the Format","migration.monday.run":"Run Monday to One Boards account migrations","viewer.read":"View the Studio Viewer (/m/viewer)","viewer.create":"Create dashboards (upload Markdown → board view)","viewer.update":"Edit dashboard content + sources","viewer.admin":"Administer the Viewer (members, archive, restore)","video.studio.view":"View Video Studio (/m/video-studio)","video.studio.create":"Create / edit videos and run VEED AI jobs","video.studio.publish":"Publish videos (News Feed / download / YouTube / SharePoint)","travel.request":"Create and submit travel requests (SV)","travel.approve":"Approve or reject travel requests (approval stage)","travel.mgmt_assistant":"Enter ticket/hotel values (mgmt assistant stage)","travel.treasury":"Manage payment subitems (treasury stage)","travel.accounting":"Review and sign off (accounting stage)","access_request.request":"Request access to denied resources","access_request.view":"View and manage pending access requests","dashboards.view":"View dashboards in a workspace","dashboards.create":"Create dashboards","dashboards.edit":"Edit dashboards I own (containers, connectors, settings)","dashboards.edit_others":"Edit dashboards I do not own (admin escalation)","dashboards.archive":"Archive dashboards I own","dashboards.archive_others":"Archive dashboards I do not own (admin escalation)","dashboards.share":"Share a dashboard (set visibility + add members)","dashboards.admin":"Administer Charts & Dashboards (/m/developer/dashboards, audit log)","kpis.view":"View the Portal KPIs overview (/m/insights/my-dashboards)","budget.view":"View office budgets I own or am granted","budget.manage":"Create / edit office budgets (run the wizard)","budget.approve":"Approve / lock an office budget","budget.admin":"Administer ALL office budgets across the company","ebay.view":"View eBay admin pages (orders, inventory, finances, messages)","ebay.fulfill":"Mark eBay orders as shipped + run the order/inventory/tracking syncs","ebay.manage_inventory":"Create, edit, publish, and withdraw eBay inventory items","ebay.reply_messages":"Send replies to eBay buyer messages","ebay.manage_templates":"Create, edit, and delete eBay message and dispute response templates","ebay.admin":"Administer eBay — connection (OAuth/credentials), refunds, cancellations, disputes, feedback, marketing, store, policies & inventory connectors","ebay.manage_repricing":"Create, edit, and run eBay repricing rules (proposals)","listing_studio.view":"Open Listing Studio and view listing drafts & studies","listing_studio.generate":"Run Ayva part studies and generate listing drafts + marketing","listing_studio.publish":"Publish / revise / end live eBay listings from Listing Studio","listing_studio.admin":"Administer Listing Studio — default policies, markup rules, templates","sales_hub.view":"View the Online Sales Hub (channels, listings, orders, shipments, customers, messages, inventory)","sales_hub.listings.manage":"Create, edit, publish, end and cross-list marketplace listings","sales_hub.orders.fulfill":"Fulfill orders — mark shipped, upload tracking, buy labels, cancel/refund","sales_hub.messages.reply":"Reply to buyer messages and answer pre-sale questions","sales_hub.inventory.manage":"Manage Hub stock master — adjustments, safety stock, allocation, reconcile","sales_hub.pricing.manage":"Set prices and repricer rules (bounded by floor)","sales_hub.connect":"Connect / disconnect sales channels (marketplace OAuth / credentials)","sales_hub.admin":"Administer the Sales Hub — channel config, ERP write-enable, automation + danger ops","carrier_tracking.view":"View the carrier tracking board (shipments, statuses, POD)","carrier_tracking.sync":"Trigger carrier sync and edit shipment rows","carrier_tracking.admin":"Administer carrier tracking — connections/credentials + module config (PN join key)","logistics.intake.review":"Review, correct and approve/reject logistics intake cases (inbound email → feed)","logistics.cpo_inbox.review":"Work Inbox CPO cases from the Inbox SO tab (choose quotes, resolve lines, set destination, retry)","note_taker.view_own":"View own meeting transcripts and AI notes","note_taker.delete_own":"Delete own meeting transcripts and notes","note_taker.view_team":"View the team's meeting transcripts and notes (manager+)","note_taker.admin_panel":"Administer Note Taker (cross-user retention + audit log)","note_taker.record":"Submit transcripts via the Note Taker intake contract (recorders)","note_taker.view_recording":"Watch meeting recordings (own + team, signed-URL playback)","migration.jira.run":"Run Jira → One Boards project migrations","brand_standards.edit":"Set org brand standards (authorized palette + default look)","service.videos.view":"Watch service / disassembly videos","service.videos.manage":"Upload, edit + publish service videos","waitlist.view":"View Redsis One waitlist CRM (confirmed-signup opportunities)","suggestions.view":"View smart suggestions","suggestions.ai_explain":"Request AI explanations for suggestions","suggestions.author_rules":"Author org-wide suggestion rules (admin)","suggestions.admin":"Administer Smart Suggestions telemetry / settings (admin)","files.manage":"Manage files (upload, folders, rename, move, delete, share)","it.access":"Access the Company IT Admin module (network infrastructure)","campaign.view":"View marketing campaigns","campaign.create":"Create campaign drafts (incl. via the AI Campaign Agent)","campaign.edit":"Edit campaign drafts (brief, content, journey)","campaign.review":"Move a campaign into review","campaign.approve":"Approve a campaign (only a human can — never the AI)","campaign.activate":"Activate an approved campaign","campaign.send":"Send / broadcast a campaign to its audience","campaign.admin":"Full campaign management (templates, settings, audit)","audience.view":"View marketing contacts and segments","audience.manage":"Create/edit segments, edit contacts, run a sync","audience.consent.manage":"Edit consent and manage the suppression list","audience.export":"Export/download contacts (PII egress)","audience.erase":"GDPR hard-erasure of a contact (destructive)","marketing.enrich.approve":"Approve paid contact enrichment (Apollo credits)","cms.view":"View website content (within your client workspace)","cms.edit":"Create / edit website content + run imports","cms.publish":"Publish content to live public websites","cms.admin":"Manage sites, content types, redirects, members","cms.tenant.admin":"Manage ALL client tenants (cross-tenant operator)","marketing.view":"View the Marketing module (hub, customer engagement, events)","marketing.analytics.view":"View marketing analytics (funnel, engagement, attribution)","marketing.analytics.export":"Export marketing analytics (CSV)","marketing.deliverability.view":"View deliverability & bounce logs","marketing.deliverability.manage":"Run verify / re-poll deliverability actions","feature_flags.manage":"Manage feature flags (enable/disable modules without redeploy)","social.view":"Open the Social Hub module (/m/social)","social.compose":"Create/edit social drafts and submit them for approval","social.publish":"Schedule/publish posts (skip approval where a brand allows it)","social.approve":"Approve/reject social posts; publish without approval","social.inbox":"Read and reply in the unified social inbox","social.connect":"Connect/disconnect brand social accounts (OAuth)","social.admin":"Manage brands, approval policy, and Social Hub settings","email.admin":"Administer Email V2 (provider OAuth status, feature flags, analytics)","broadcast.override":"Bypass broadcast rate limits + distro rule (email fan-out)","workflow.view":"Open Workflow One; view workflows + run history","workflow.create":"Create and edit workflows on the canvas","workflow.run":"Run / test workflows","workflow.delete":"Delete workflows","mobile.view":"Open the Mobile App module (/m/mobile) — fleet, editions, push health","mobile.manage":"Manage mobile access — revoke devices/sessions, editions, app config, board connection","mobile.push_send":"Send push notifications to mobile devices (targeted or broadcast)","field_app.coordinate":"Coordinate the Field Tech app — edit per-workspace board/column bindings","widgets.build":"Build custom widgets (personal use)","widgets.publish":"Publish custom widgets to the company library","widgets.connections.manage":"Manage widget data connections & embed domain allowlist","edu.teach":"Author, submit and preview Edu One courses","edu.manage":"See team progress and the compliance matrix in Edu One","edu.admin":"Review, approve and publish courses; manage academies and settings","press.view":"Open Press One: see the sites, their deploy state and the lead ledger","press.manage":"Manage Press One sites, CRM lead routes and connections","press.leads.view":"Read website leads (names, e-mails, messages) and retry deliveries","service.triage":"Service Hub — Triage inbox (review + promote incidents)","service.tickets":"Service Hub — Tickets queue + ticket-detail workhorse","service.dispatch":"Service Hub — Dispatch / Route Builder","service.parts.approve":"Service Hub — approve parts requests off a ticket","service.close":"Service Hub — close / resolve a ticket","service.oversight":"Service Hub — Dashboards / scorecards (read)","service.admin":"Service Hub — Setup & Systems (configure the service system)","service.scope_all":"Service Hub — see all contracts (leader)","service.replace_coordinator":"Service Hub — replace a coordinator (leader)","users.suspend":"Suspend / reinstate users","users.delete":"Delete users","roles.view":"View roles","roles.create":"Create roles","roles.edit":"Edit roles","roles.delete":"Delete roles","departments.view":"View departments","departments.edit":"Edit departments","audit.view":"View audit log","monday.boards.view":"View board metadata","monday.boards.register":"Register boards","monday.boards.remove":"Remove (soft-delete) boards","monday.boards.settings":"Edit board settings","monday.items.view":"View items","monday.items.create":"Create items","monday.items.edit":"Edit items (Monday round-trip)","monday.items.delete":"Soft-delete items","field_service.import_tickets":"Import tickets from Excel (only on the contracts the person coordinates)","field_service.create_tickets":"Create tickets manually (only on the contracts the person coordinates)","field_service.client_onboarding":"Client onboarding (wizard) — only the clients the person onboards","field_service.manage_service_types":"Add and edit service types"}},"myWork":{"title":"My Work","subtitle":"Every Monday item assigned to you, across the boards your team has connected to the portal.","summary":"{count} items across {boards} boards","subitemBadge":"Sub","subitemOf":"In: {parent}","statusLabel":"Status:","dueLabel":"Due:","updatedLabel":"Updated:","openInMonday":"Open in Monday →","empty":{"notMappedTitle":"Your account is not linked to Monday yet","notMappedBody":"Ask an admin to run user matching from Admin → Monday sync. We link accounts by email — if your portal and Monday emails differ, an admin can set the Monday ID manually on your profile.","noBoardsTitle":"No connected boards available to you","noBoardsBody":"Your department has not been granted access to any synced boards yet. Ask an admin to register a board and assign it to your department in Admin → Monday sync.","nothingAssignedTitle":"Nothing assigned to you right now","nothingAssignedBody":"You don't have any open Monday items assigned to you across your accessible boards. New items appear here automatically as they're assigned to you in Monday."}},"notifications":{"groupCopy":{"one":"{count} update on {subject}","many":"{count} updates on {subject}","oneNoSubject":"{count} update","manyNoSubject":"{count} updates"},"topicCopy":{"boards.item.created":{"title":"New item created on a board","body":"A new item was added to a One Board you follow."},"microsoft.mail.new_message":{"title":"New email","body":"A new message arrived in your Microsoft inbox. Click to open the email in-portal."},"field_service.sla_warning":{"title":"SLA warning","body":"A field service ticket is approaching its SLA deadline (75% or 90% consumed)."},"field_service.sla_breach":{"title":"SLA breached","body":"A field service ticket has breached its SLA deadline."},"field_service.ticket_status_changed":{"title":"Ticket status changed","body":"A field service ticket assigned to you changed status (dispatcher or board update)."},"boards.item.status_changed":{"title":"Status changed on a board item","body":"The status of a board item you're assigned to was changed."},"boards.item.due_soon":{"title":"Board item due soon","body":"A board item assigned to you is due within 24 hours."},"boards.item.sla":{"title":"SLA at risk or breached","body":"A board item you are responsible for is at risk of missing (or has missed) its SLA target."},"field_service.ticket_part_linked":{"title":"Part linked to a ticket","body":"A part was linked to a service ticket — the warehouse should prepare/track it for that job."},"boards.item.assigned":{"title":"You were assigned to a board item","body":"Someone assigned you to an item on a One Board."},"field_service.parts_request_new":{"title":"New parts request","body":"A field tech filed a parts request (for a ticket, or to replenish their van) that needs your decision."},"field_service.ticket_assigned":{"title":"Ticket assigned to you","body":"A dispatcher assigned you a field service ticket from the Tickets board."},"field_service.contract_coverage_gap":{"title":"Contracts need coordinator coverage","body":"One or more contracts have no coordinator, no backup, tickets held by someone outside the rotation, or open tickets without a contract. Review the coverage page."}},"topics":{"financial_one":{"attention":{"title":"Financial One needs your attention","body":"Something needs your attention in Financial One. Open it to see what; nothing about it is sent here."}},"tickets":{"placeholder":{"title":"Tickets","body":"Placeholder notification for the Tickets module."}},"troubleshooter":{"placeholder":{"title":"Troubleshooter","body":"Placeholder notification for the Troubleshooter module."}},"field_service":{"placeholder":{"title":"Field Service","body":"Placeholder notification for Field Service."}},"my_views":{"placeholder":{"title":"My Views","body":"Placeholder notification for My Views."}},"invitations":{"placeholder":{"title":"Invitations","body":"Placeholder notification for Invitations."}},"rbac":{"placeholder":{"title":"Roles","body":"Placeholder notification for RBAC."}},"audit":{"placeholder":{"title":"Audit","body":"Placeholder notification for Audit."}},"external_apps":{"placeholder":{"title":"External Apps","body":"Placeholder notification for External Apps."}},"settings":{"placeholder":{"title":"Settings","body":"Placeholder notification for Settings."}}}},"undoRedo":{"undo":"Undo","redo":"Redo","nothingToUndo":"Nothing to undo","nothingToRedo":"Nothing to redo","undone":"Undone","redone":"Redone","undoFailed":"Couldn't undo","redoFailed":"Couldn't redo","titleChangedTo":"Title changed to"},"boardRecurrence":{"tab":"Recurrence","heading":"Recurrence","description":"Re-create this item automatically on a schedule. A copy — same title, group and column values — is added each time it’s due.","frequency":"Frequency","none":"None","daily":"Daily","weekly":"Weekly","monthly":"Monthly","custom":"Custom","every":"Every","unitDays":"day(s)","unitWeeks":"week(s)","unitMonths":"month(s)","onDays":"On days","dayOfMonth":"Day of month","ends":"Ends","endNever":"Never","endOnDate":"On date","endAfter":"After","occurrences":"occurrences","save":"Save recurrence","saving":"Saving…","remove":"Turn off","loading":"Loading…","loadError":"Couldn’t load recurrence.","retry":"Retry","saveError":"Couldn’t save. Check the fields and try again.","active":"Active","inactive":"Off","nextRun":"Next run","readOnly":"You need edit access to change recurrence.","chipDaily":"Daily","chipWeekly":"Weekly","chipMonthly":"Monthly","chipCustom":"Custom","weekdayMon":"Mon","weekdayTue":"Tue","weekdayWed":"Wed","weekdayThu":"Thu","weekdayFri":"Fri","weekdaySat":"Sat","weekdaySun":"Sun"},"adminHubNav":{"portalAdmin":"Portal Administration","adminHome":"Admin Home","adminHomeTip":"Portal Administration — configure Redsis One itself","sectionPeopleAccess":"People & Access","users":"Users","externalUsers":"External Users","identity":"Identity","roles":"Roles","roleMatrix":"Role Matrix","rolesMatrix":"Roles Matrix","departments":"Departments","groups":"Groups","permissions":"Permissions","companySetup":"Company Setup","accessTroubleshooter":"Access Troubleshooter","sectionAppsPlatform":"Apps & Platform","modules":"Modules","modulesTip":"Module registry + feature flags","externalApps":"External Apps","oneBoardsAdmin":"One Boards Admin","oneBoardsAdminTip":"Governing the core board platform = configuring One (Archive & Trash recovery moved to Technology Hub → One Boards Settings)","brandStandards":"Brand Standards","sectionCommunications":"Communications","notifications":"Notifications","notificationsTip":"Notification topics + delivery config","announcements":"Announcements","email":"Email","emailTip":"The platform's own email send settings","emailLog":"Email Log","emailTest":"Email Test","sectionSecurityGovernance":"Security & Governance","security":"Security","audit":"Audit","accountSecurity":"Account Security","dualControlAuth":"Dual-control Auth","approvals":"Approvals","auditLog":"Audit Log","centralOneIdentity":"Central One identity","qaReports":"QA Reports","sectionAppsBranding":"Apps & Branding","apps":"Apps","menuLayout":"Menu Layout","menuByRoleDept":"Menu by Role & Dept","customLinks":"Custom Links","featureFlags":"Feature Flags","sectionContentOperations":"Content & Operations","waitlist":"Waitlist","reports":"Reports","chartsDashboards":"Dashboards","boardsAdmin":"Boards","automations":"Automations","fieldService":"Field Service","inventory":"Inventory","equipment":"Equipment","travelRequest":"Travel Request","teamStatus":"Team Status","pmDashboard":"PM Dashboard","expenses":"Expenses","fxRates":"FX Rates","noteTaker":"Note Taker","autoTracking":"Auto-tracking","sectionInfrastructure":"Infrastructure","printServers":"Print Servers","printing":"Printing","platforms":"Platforms","cronMonitor":"Cron Monitor","migrations":"Migrations","platformMap":"Platform Map","platformScorecard":"Platform Scorecard","sectionDeveloper":"Developer","developers":"Developers","apiDocs":"API Docs","apiKeys":"API Keys","aiIntegrations":"AI Integrations","designSystem":"Design System","sectionHelp":"Help","userManual":"User Manual"},"workspacesAll":{"title":"All workspaces","backToOneBoards":"Back to One Boards","descExternal":"You have access to the shared company workspace.","descInternal":"Workspaces group related boards across your company, departments, and home.","installAppTitle":"Browse + install ready-made workspaces","installApp":"Install an app","standardsTitle":"Edit status palettes + board defaults","standards":"Standards","othersTitle":"All other workspaces","othersHint":"Workspaces across the organization that you can open but aren't a member of.","typeShared":"shared","typeHome":"home","typeDepartment":"department","typeWorkspace":"workspace","emptyTitle":"No workspaces yet","emptyBody":"Workspace One should have appeared automatically — if not, contact an admin. (This is normally impossible: the Phase 37 migration seeds it.)","saveName":"Save name","cancelRename":"Cancel rename","archivePrefix":"Archive","archiveHint":"Its boards are hidden too. You can restore it for the next few seconds.","archiving":"Archiving…","confirm":"Confirm","cancel":"Cancel","archived":"Archived","restoring":"Restoring…","undo":"Undo","dismiss":"Dismiss","updateFailed":"Couldn't update {name}: {message}","openNamed":"Open {name}","system":"system","openArrow":"Open →","actionsFor":"Actions for {name}","rename":"Rename","archiveWorkspace":"Archive workspace"},"railDock":{"dock":"Rail dock","hide":"Hide panel","widthDefault":"Snap to default width","widthHalf":"Expand to half screen","close":"Close {label}","resizePanel":"Resize right widgets panel","snapToolbar":"Resize widgets panel","halfTitle":"Half screen","halfAria":"Snap to half-screen width","fullTitle":"Full screen (mobile preview)","fullAria":"Snap to full-screen width","hidePanel":"Hide widgets panel","editTabs":"Edit tabs","doneEditing":"Done editing","doneEditingTabs":"Done editing tabs","personalInbox":"Inbox","personalCalendar":"Calendar","personalActivity":"My activity","tabError":"This tab encountered an error. Other tabs are still available.","noTabs":"No rail tabs available.","addTab":"Add {title} tab","add":"Add"},"boards":{"connectSettings":{"tab":"Connection","title":"Connected column","loadingColumns":"Loading columns…","displayLabel":"Column to show","displayDefault":"Item title (default)","displayHint":"What each linked item shows instead of its title.","filtersLabel":"Only offer items that match","filtersEmpty":"No conditions — the picker offers every item on the target board.","addCondition":"Add condition","removeCondition":"Remove condition","column":"Column","condition":"Condition","value":"Value","save":"Save","saved":"Saved.","close":"Close","noTarget":"Pick the board this column links to first.","searching":"Searching…","pickValue":"Choose a value…","matchAll":"Match ALL conditions","matchAny":"Match ANY condition","howToCombine":"How to combine them","moreResults":"More items match — keep typing to narrow the list.","noFilterMatch":"No items match this column’s filters.","allConditions":"Items must match ALL conditions.","loadFailed":"Could not load the linked board’s columns.","saveFailed":"Could not save.","valuePlaceholder":"value","valuePlaceholderMulti":"several, comma-separated","menuEntry":"Filters and column to show","valueRequired":"Every condition needs a value.","valueSearchPlaceholder":"Type to search…","valueSearching":"Searching…","valueNoResults":"No items match.","valueNotVisible":"Saved item you cannot see:","valueLoadFailed":"Could not search items.","valueClear":"Clear value","ops":{"eq":"is","neq":"is not","contains":"contains","not_contains":"does not contain","starts_with":"starts with","in":"is any of","not_in":"is none of","gt":"greater than","gte":"greater or equal","lt":"less than","lte":"less or equal","before":"before","after":"after","is_empty":"is empty","is_not_empty":"is not empty","is_true":"is true","is_false":"is false"},"twoWayOn":"Two-way is on — \"{name}\" on the target board mirrors these links.","twoWayCreated":"Done: \"{name}\" was created on the target board and {count} existing link(s) were reflected.","twoWayCreatedHidden":"{count} link(s) to rows you cannot see were not reflected.","twoWayFailed":"Could not turn on two-way.","twoWayNoTarget":"Pick the target board first.","twoWayCreatedCollisions":"{count} target row(s) had more than one link and the partner is single-link: only one was kept per row.","twoWayConfirm":"This creates the column \"{name}\" on the other board and reflects the existing links. It cannot be undone.","twoWayConfirmGeneric":"This creates a linked column on the other board and reflects the existing links. It cannot be undone.","twoWayConfirmAction":"Convert","twoWayConfirmCancel":"Cancel"},"personAllowedUsers":{"tab":"Allowed users","title":"Allowed users","menuEntry":"Choose allowed users","hint":"If none selected, all users are shown.","allUsers":"All users","selectedCountOne":"{n} user","selectedCountMany":"{n} users","searchPlaceholder":"Search users…","loadingUsers":"Loading users…","noMatches":"No users match.","removeUser":"Remove {name}","save":"Save","saved":"Saved.","close":"Close","loadFailed":"Could not load users.","saveFailed":"Could not save."},"productPnColumn":{"pnLabel":"Part number","startTypingPlaceholder":"Type a part number…","cellHint":"Suggestions come from the product catalog. Description & Brand fill in automatically.","clear":"Clear","save":"Save","commitError":"Could not update part number","descriptionColumnName":"Description","brandColumnName":"Brand","categoryColumnName":"Category","machineTypeColumnName":"Machine Type","alternatesColumnName":"Alternate PNs","quantityColumnName":"On-hand Qty"},"geoColumn":{"addressLabel":"Address","startTypingPlaceholder":"Start typing an address…","addressExamplePlaceholder":"1600 Amphitheatre Parkway, Mountain View, CA","clear":"Clear","save":"Save","addressCellHint":"Pick a suggestion to capture coordinates automatically, or press Enter to save the text as-is.","notLocated":"(not located)","title":"Geo","close":"Close","derivesFrom":"Derives from {column}. Editing here overrides the auto-derived value.","derivesFromFallback":"a linked address column","noPinYet":"Pick an address or geocode it to place the pin.","geocodeButton":"Geocode address","latitudeLabel":"Latitude","longitudeLabel":"Longitude","sourceManual":"Manual override","sourcePicked":"From suggestion","sourceGeocoded":"Geocoded","openInGoogleMaps":"Open in Google Maps","cancel":"Cancel","saveGeo":"Save geo","saving":"Saving…"},"errorBoundary":{"title":"This board couldn't load","body":"Something on the server-side failed while rendering this board. The board data is safe — only the page render hit an issue.","detailsLabel":"Error details","resetAndRetry":"Reset and retry","backToWorkspaces":"Back to Workspaces","reconnecting":"Reconnecting…"},"viewIsFiltered":"View is filtered — clear the toolbar to see all items.","emptyGroup":{"noItems":"No items yet.","addFirst":"Add the first one below."},"portfolio":{"searchBoards":"Search boards…","noBoardsMatch":"No boards match.","noItemsInBoards":"No items in the selected boards.","noBoardsToRollUp":"No boards to roll up.","noStatusColumn":"No status column on this board.","dimGroupCategory":"Status category (Done / Working / Stuck / Not started)","dimStatus":"Status label","dimOwner":"Owner","dimBoard":"Board","notAffectedByBoardFilter":"Not filtered","notAffectedByBoardFilterHint":"This widget rolls up other boards, so this board's filter doesn't apply to it."},"spreadsheetTools":{"menuLabel":"Board tools","removeDuplicatesMenu":"Remove duplicates","textToColumnsMenu":"Text to columns","removeDuplicates":{"title":"Remove duplicates","subtitle":"Find rows that match on the columns you pick, then archive the extras.","matchColumnsLabel":"Match duplicates on","matchColumnsHint":"Rows are duplicates when they share the same value in every selected column.","selectAtLeastOne":"Pick at least one column to match on.","titleColumn":"Item name","keepLabel":"Keep","keepFirst":"First occurrence","keepLast":"Last occurrence","optionsLabel":"Matching options","caseInsensitive":"Ignore letter case","trimWhitespace":"Ignore leading/trailing spaces","previewButton":"Preview","previewing":"Scanning…","applyButton":"Archive duplicates","applying":"Archiving…","close":"Close","back":"Back","cancel":"Cancel","noDuplicates":"No duplicates found on the selected columns.","previewSummary":"{duplicates} duplicate row(s) across {groups} group(s) will be archived. {keep} row(s) kept.","sampleLabel":"Examples","moreRows":"+{count} more","applied":"Archived {count} duplicate row(s).","undo":"Undo","undoing":"Restoring…","undone":"Restored {count} archived row(s).","undoHint":"Archived rows can be restored from here or the Trash tab.","errorGeneric":"Something went wrong. Please try again.","forbidden":"You do not have edit access to this board."},"textToColumns":{"title":"Text to columns","subtitle":"Split one column into several new columns by a delimiter or fixed width.","sourceColumnLabel":"Column to split","sourceColumnHint":"Only text-like columns can be split.","selectSource":"Pick a column to split.","splitByLabel":"Split by","delimiter":"Delimiter","fixedWidth":"Fixed width","delimiterLabel":"Delimiter","comma":"Comma","tab":"Tab","semicolon":"Semicolon","space":"Space","custom":"Custom","customPlaceholder":"e.g. | or -","customEmpty":"Enter a custom delimiter.","treatConsecutiveAsOne":"Treat consecutive delimiters as one","fixedWidthLabel":"Break positions","fixedWidthHint":"Comma-separated character positions, e.g. 3, 7, 12.","fixedWidthEmpty":"Enter at least one break position.","fixedWidthInvalid":"Break positions must be positive whole numbers.","destinationLabel":"New columns","destinationHint":"One new column is created per part. Existing columns are never overwritten.","columnNamePlaceholder":"Column name","previewButton":"Preview","previewing":"Splitting…","applyButton":"Create columns & split","applying":"Creating…","close":"Close","back":"Back","cancel":"Cancel","previewHeader":"Preview","previewRowsNote":"Showing {shown} of {total} row(s).","emptyCell":"(empty)","noData":"This column has no values to split.","resultSummary":"Will create {columns} column(s) and fill {rows} row(s).","applied":"Created {columns} column(s) and split {rows} row(s).","errorGeneric":"Something went wrong. Please try again.","forbidden":"You do not have edit access to this board."}},"pivotView":{"title":"Pivot data","rows":"Rows","columns":"Columns","value":"Value","aggregation":"Aggregation","total":"Total","empty":"(empty)","pickRow":"Pick a column to group rows by.","pickValue":"Pick a value column to aggregate.","exportCsv":"Export CSV","emptyState":"No numeric columns to aggregate. Add a Number, Rating, or Story Points column.","agg":{"sum":"Sum","avg":"Avg","count":"Count","min":"Min","max":"Max","countDistinct":"Distinct"}},"boardMenu":{"boardActions":"Board actions","open":"Open","openInNewTab":"Open in new tab","openInFullScreen":"Open in full screen","openInOverlay":"Open in overlay","exitFullScreen":"Exit full screen","fullScreenTitle":"Full screen","overlayTitle":"Board overlay","addFavorite":"Add to favorites","removeFavorite":"Remove from favorites","duplicate":"Duplicate","duplicateConfirm":"Duplicate this board?","duplicating":"Duplicating…","duplicateFailed":"Could not duplicate the board.","confirm":"Confirm","cancel":"Cancel","customize":"Customize","moveTo":"Move to","close":"Close"},"favoritesWidget":{"title":"Favorite boards","empty":"No favorite boards yet","hint":"Star a board from its menu to pin it here.","loading":"Loading…","remove":"Remove from favorites"},"importWizard":{"headerChip":"Header","itemTitle":"Item title","itemNameLabel":"Item name:","clickRowHint":"Click a row to use it as the header — rows above it are ignored."},"pickerCell":{"clear":"Clear","unknownUser":"Unknown user","unknownUserTitle":"Assigned user not visible"},"archivedBanner":{"title":"This board is archived","subtitle":"It’s read-only. Restore it to make changes.","subtitleWithDate":"Archived {date} · it’s read-only. Restore it to make changes.","restore":"Restore board","restoring":"Restoring…","restored":"Board restored","restoreError":"Couldn’t restore the board. Try again.","manage":"Archive & Trash"},"moduleTitle":"One Boards","adminTitle":"One Boards","compactHeader":{"import":"Import items","automations":"Automations","columns":"Columns","settings":"Board settings","aboutTitle":"About this board","workspace":"Workspace"},"changeType":{"menuLabel":"Change type","title":"Change board type","subtitle":"Controls who can find and open this board.","current":"Current","note":"Only the board owner can change the type. Switching to Private or Shareable opens the Members panel so you can set who has access.","main":{"label":"Main","description":"Everyone who can see this workspace can open the board."},"private":{"label":"Private","description":"Only the owner and explicitly added members can open it."},"shareable":{"label":"Shareable","description":"Workspace members can open it, and you can create external share links."},"shareableActiveNote":"Workspace members can open it and external share links can be minted. Choose Workspace or Private below to change access."},"toolbarMore":{"more":"More","moreAria":"More toolbar actions","exportSection":"Export board","exportExcel":"Excel (.xlsx)","exportCsv":"CSV (.csv)","exportPdf":"PDF","shortcuts":"Keyboard shortcuts","openInSheetsSection":"Open in Sheets","openInSheetsLive":"Live synced sheet","openInSheetsLiveHint":"Opens this view as a spreadsheet that stays in sync — data flows both ways; columns added on the board appear in the sheet.","openInSheetsStatic":"Static copy","openInSheetsStaticHint":"Opens this view as a normal spreadsheet with no ongoing sync.","openInSheetsError":"Could not open this board in Sheets."},"dashboard":{"filterLabel":"Filter","drill":{"viewItems":"View items","loading":"Loading items…","empty":"No matching items.","error":"Couldn’t load these items. Try again.","itemOne":"item","itemMany":"items","moreCount":"+{n} more","close":"Close","hiddenFilterNotice":"Some filters use columns you can’t see, so they were ignored."},"dateRange":{"label":"Date range","allTime":"All time","from":"From","to":"To","basisColumn":"Base column","vsPrevious":"vs. previous period","noDateColumns":"This board has no date columns.","presets":{"last_7":"Last 7 days","last_30":"Last 30 days","last_90":"Last 90 days","this_month":"This month","this_quarter":"This quarter","this_year":"This year","custom":"Custom…"}},"chart":{"otherSeries":"Other","groupSingle":"Single series","groupComparison":"Comparison","splitBy":"Split by","splitByNone":"— none —","types":{"donut":"Donut","column":"Column","bar_h":"Horizontal bar","grouped_column":"Grouped column","grouped_bar":"Grouped bar","stacked_column":"Stacked column","stacked_bar":"Stacked bar","stacked_column_100":"100% stacked column","stacked_bar_100":"100% stacked bar"},"trend":{"dateColumn":"Date column","granularity":"Group by","day":"Day","week":"Week","month":"Month","metric":"Metric","metricCount":"Count","metricSum":"Sum","metricAvg":"Average","valueColumn":"Value column","chartType":"Chart type","line":"Line","area":"Area","autoDateColumn":"Auto (first date column)"}},"freeLayout":{"editLayout":"Edit layout","doneLayout":"Done","editLayoutHint":"Drag and resize widgets freely","dragHandle":"Drag to move"},"saveStatus":{"saving":"Saving…","saved":"Saved"},"richText":{"editText":"Edit text","addDescription":"Add description","editDescription":"Edit description","save":"Save","cancel":"Cancel","emptyNote":"Empty note — click here to write.","emptyNoteViewer":"Empty note.","placeholder":"Write something… type @ to mention someone","titleStyle":"Title style","size":"Size","sizeS":"S","sizeM":"M","sizeL":"L","sizeXL":"XL","bold":"Bold","italic":"Italic","underline":"Underline","strike":"Strikethrough","textColor":"Text color","highlight":"Highlight","noHighlight":"No highlight","fontSize":"Font size","heading1":"Heading 1","heading2":"Heading 2","heading3":"Heading 3","bulletList":"Bulleted list","orderedList":"Numbered list","align":"Alignment","alignLeft":"Align left","alignCenter":"Align center","alignRight":"Align right","link":"Link","linkPlaceholder":"https://…","linkApply":"Apply","removeLink":"Remove link","mention":"Mention someone","mentionEmpty":"No matching board members","mentionNoAccess":"This person can’t open this board, so they won’t be notified","background":"Background","colors":{"default":"Default","muted":"Muted","red":"Red","orange":"Orange","amber":"Amber","green":"Green","blue":"Blue","violet":"Violet"},"highlights":{"yellow":"Yellow","orange":"Orange","blue":"Blue","green":"Green","slate":"Slate","gold":"Gold"},"sizes":{"xs":"Extra small","sm":"Small","base":"Normal","lg":"Large","xl":"Extra large","2xl":"Huge"},"editorLoadError":"The editor couldn’t load. Try again.","tooLong":"Text is too long — the extra will be cut when saved.","toolbar":"Formatting","colorMenu":"Text and highlight color","more":"More formatting","clearFormatting":"Clear formatting","writeHere":"Write here…","descriptionPlaceholder":"Add a description…"},"listItemHeader":"Item","filesWidget":{"pickColumn":"Choose a Files column in this widget’s settings.","empty":"No files on this column yet.","unavailable":"Files couldn’t be loaded right now.","truncated":"Showing the most recent files.","columnField":"Files column","autoFirstColumn":"First files column","layoutField":"Layout","grid":"Grid","list":"List","filterField":"Filter by type","filterAll":"All","filterImages":"Images","filterDocuments":"Documents","limitField":"Max files","downloadAll":"Download all"},"ui":{"clockInvalidTimezone":"Invalid timezone","emptyTitle":"Add a dashboard to this board","emptyDescription":"Build a configurable view of charts, KPIs and battery bars that summarise this board’s items.","addStarter":"Add starter dashboard","startBlank":"Start blank","askEditor":"Ask a board editor to add a dashboard.","createFailed":"Could not create dashboard. Please try again.","defaultViewName":"Dashboard","widgetCount":{"one":"{n} widget","other":"{n} widgets"},"dashboardEmpty":"This dashboard is empty.","emptyHintEditor":"Use “Add widget” to drop in your first chart or metric.","emptyHintViewer":"No widgets yet.","addWidget":"Add widget","pickPortfolioBoards":"Open this widget’s settings to pick the boards to roll up.","computing":"Computing…","goalPrefix":"Goal {goal} · ","targetPrefix":"Target {target} · ","itemCount":{"one":"{n} item","other":"{n} items"},"donePctPrefix":"{pct}% done · ","boardsOverCap":{"one":"{n} board over the 25-board limit not shown","other":"{n} boards over the 25-board limit not shown"},"boardsHidden":{"one":"{n} board you can’t access omitted","other":"{n} boards you can’t access omitted"},"sdkUnavailable":"This widget isn’t available on board dashboards.","sdkPick":"Pick a library widget via the ⋯ menu → Configure.","embedEmpty":"Add an https URL to embed.","overviewItems":"Items","overviewDone":"Done","overviewOverdue":"Overdue","todoDoneCount":"{done}/{total} done","todoEmptyEditor":"Add your first to-do below.","todoEmptyViewer":"Nothing to do yet.","markDone":"Mark done","markNotDone":"Mark not done","countdownEmpty":"Set a target date in the gear menu.","countdownDone":"Done","aiThinking":"Thinking…","aiTryAgain":"Try again","aiRegenerate":"Regenerate","aiGenerate":"Generate insights","noData":"No data yet.","noItems":"No items yet.","widgetSettings":"Widget settings","width":"Width","widthFull":"Full","moveUp":"Up","moveDown":"Down","remove":"Remove","title":"Title","captionOptional":"Caption (optional)","imageLinkPlaceholder":"https://… or /boards/…","shortcutLinkPlaceholder":"https://… or /path","addLink":"Add link","todoConfigHint":{"one":"Add and check off items directly on the widget. {n} item, {done} done.","other":"Add and check off items directly on the widget. {n} items, {done} done."},"clearCompleted":"Clear completed","libraryWidgetField":"Library widget","pickWidget":"Pick a widget…","metric":"Metric","metricCount":"Count of items","metricSum":"Sum of column","metricAvg":"Average of column","metricMedian":"Median of column","metricPercentDone":"Average % (progress)","metricMin":"Minimum of column","metricMax":"Maximum of column","column":"Column","pickNumberColumn":"— pick a number column —","goalOptional":"Goal (optional)","unit":"Unit","unitPlaceholder":"%, h, USD…","unitShortPlaceholder":"%, h…","decimalsAuto":"auto","maxItemsAll":"all","min":"Min","max":"Max","targetOptional":"Target (optional)","formula":"Formula","formulaHelp":"Use sum() avg() min() max() median() count() with + − × ÷ and ( ). Reference a column by the id below.","noNumberColumns":"No number columns on this board.","decimals":"Decimals","groupItemsBy":"Group items by","boardGroups":"Board groups","statusColumn":"Status column","pickStatusColumn":"— pick a status column —","rowsToShow":"Rows to show","columnsUpTo4":"Columns (up to 4)","boardsSelected":"Boards ({n}/{max})","chartType":"Chart type","chartDonut":"Donut","chartBar":"Bar","peopleColumn":"People column","pickPeopleColumn":"— pick a people column —","rankBy":"Rank by","rankByCount":"Number of items","rankBySum":"Total of a column","columnToTotal":"Column to total","peopleToShow":"People to show","peopleColumnMine":"People column (matched to you)","splitByStatus":"Split by status","timeTrackingColumn":"Time-tracking column","pickTimeTrackingColumn":"— pick a time-tracking column —","noTimeTrackingColumn":"This board has no Time-tracking column yet.","show":"Show","sprintsOpen":"Active & planned","sprintsAll":"Include completed","sprintsToShow":"Sprints to show","completedSprintsToShow":"Completed sprints to show","maxItems":"Max items (blank = all)","timelineColumn":"Timeline column","firstTimelineColumn":"— first Timeline column —","zoom":"Zoom","noTimelineColumn":"This board has no Timeline column yet — add one in Table view.","dateColumn":"Date column","firstDateColumn":"— first Date / Timeline column —","scale":"Scale","noDateColumn":"This board has no Date or Timeline column yet — add one in Table view.","periodDay":"Day","periodWeek":"Week","periodMonth":"Month","periodQuarter":"Quarter","text":"Text","alignment":"Alignment","alignLeft":"Left","alignCenter":"Center","urlHttps":"URL (https)","heightPx":"Height (px)","targetDateTime":"Target date & time","timezoneIana":"Timezone (IANA)","labelOptional":"Label (optional)","clock":"Clock","clock12h":"12-hour","clock24h":"24-hour","whenToGenerate":"When to generate","generateOnClick":"On click (no cost until used)","generateOnOpen":"When the dashboard opens"},"kinds":{"kpi":{"label":"Number","description":"A single metric — count of items, or sum / average / median / % done of a column."},"gauge":{"label":"Gauge","description":"A metric shown on a min–max gauge, with an optional target."},"calculation":{"label":"Formula","description":"A custom calculation across columns, e.g. done ÷ total × 100."},"breakdown":{"label":"Chart","description":"Items grouped by a column, as a bar or donut chart."},"trend":{"label":"Trend","description":"A metric over time — line, multi-line, or area (day / week / month)."},"battery":{"label":"Battery","description":"Distribution across a Status column, as one stacked progress bar."},"list":{"label":"Item list","description":"A filtered, sorted shortlist of items with the columns you choose."},"leaderboard":{"label":"Leaderboard","description":"People ranked by how many items they own, or a column total."},"my_items":{"label":"My items","description":"Items assigned to whoever is viewing the dashboard."},"workload":{"label":"Workload","description":"Each person’s items, split by status — a capacity view."},"timesheet":{"label":"Timesheet","description":"Total tracked time per person, from a Time-tracking column."},"sprint_summary":{"label":"Sprint summary","description":"Active and planned sprints with their completion progress."},"velocity":{"label":"Velocity","description":"Completed work across recent finished sprints."},"gantt":{"label":"Gantt","description":"A read-only Gantt of timeline bars with dependency arrows."},"timeline":{"label":"Timeline","description":"A read-only timeline strip of each item’s date range."},"calendar":{"label":"Calendar","description":"A read-only calendar placing items on their start day."},"text":{"label":"Text","description":"A free-text note, heading, or instructions."},"embed":{"label":"Embed","description":"Embed any https page or video in a sandboxed iframe."},"countdown":{"label":"Countdown","description":"A live countdown to a target date or deadline."},"world_clock":{"label":"World clock","description":"A live clock for any timezone."},"ai_insights":{"label":"AI insights","description":"An AI-written summary of where this board stands, on demand."},"activity_ribbon":{"label":"Activity ribbon","description":"A time ribbon of status-over-time, throughput, or automation runs — the telemetry-style view."},"files":{"label":"Files","description":"The attachments on a Files column, as a card gallery or a list."},"portfolio":{"label":"Portfolio breakdown","description":"Items across several boards, grouped by status, category, owner, or board — as a bar or donut."},"portfolio_summary":{"label":"Portfolio roll-up","description":"One health row per board: item count, % done, and a status battery — across a set of boards."},"portfolio_list":{"label":"Cross-board items","description":"The most recent items across several boards, each showing which board it belongs to."},"image":{"label":"Image","description":"Show an image — a logo, a diagram, or a chart snapshot — with an optional caption."},"shortcut":{"label":"Shortcuts","description":"A set of quick-link buttons to boards, pages, or external URLs."},"todo":{"label":"To-do","description":"A simple shared checklist that lives on the dashboard."},"overview":{"label":"Overview","description":"A board summary at a glance — item count, % done, overdue, and a status battery."},"sdk":{"label":"Library widget","description":"Any widget from the platform library (the home-dashboard catalog), rendered for this board."}},"defaultTitles":{"totalItems":"Total items","averageProgress":"Average progress","totalOfColumn":"Total {column}","recentItems":"Recent items","gauge":"Gauge","columnGauge":"{column} gauge","formula":"Formula","itemsByGroup":"Items by group","itemsByColumn":"Items by {column}","trend":"Trend","trendByColumn":"Trend — {column}","statusBattery":"Status battery","columnBattery":"{column} battery","items":"Items","leaderboard":"Leaderboard","leaderboardByColumn":"Leaderboard by {column}","myItems":"My items","workload":"Workload","timesheet":"Timesheet","sprints":"Sprints","velocity":"Velocity","gantt":"Gantt","ganttByColumn":"Gantt — {column}","timeline":"Timeline","timelineByColumn":"Timeline — {column}","calendar":"Calendar","calendarByColumn":"Calendar — {column}","note":"Note","embed":"Embed","countdown":"Countdown","worldClock":"World clock","aiInsights":"AI insights","activityRibbon":"Activity ribbon","portfolioBreakdown":"Portfolio breakdown","portfolioRollup":"Portfolio roll-up","crossBoardItems":"Cross-board items","image":"Image","shortcuts":"Shortcuts","todo":"To-do","overview":"Overview","files":"Files","filesByColumn":"Files — {column}","libraryWidget":"Library widget"},"addOnCard":{"sectionTitle":"Board add-ons","sectionHint":"Capabilities you switch on from inside a board — there’s no separate workspace to install.","name":"Dashboards","description":"Add a configurable dashboard to any board — KPI numbers, bar/donut charts, status batteries and item lists that summarise the board’s own items.","how":"Open a board → view switcher → {view} → “{action}”.","builtIn":"Built in","boardAddOn":"Board add-on"},"computeLabels":{"noStatus":"No status","unknownPerson":"Unknown","unattributed":"Unattributed","unassigned":"Unassigned","completed":"Completed","remaining":"Remaining","group":"Group","untitled":"Untitled","computeFailed":"Could not compute this widget.","unknownWidgetType":"Unknown widget type.","categoryDone":"Done","categoryWorking":"Working on it","categoryStuck":"Stuck","categoryNotStarted":"Not started"}},"dashboardContent":{"imageEmpty":"Add an https image URL in this widget’s settings.","shortcutEmpty":"Add quick links in this widget’s settings.","addTodo":"Add a to-do…","addTodoAria":"Add to-do","imageUrl":"Image URL (https)","fit":"Fit","fitContain":"Contain (whole image)","fitCover":"Cover (fill, may crop)","linkTo":"Link to (optional — https or /path)","links":"Links","label":"Label","removeLink":"Remove link","autoFirstStatus":"Auto (first Status column)","none":"None","statusColumnField":"Status column (for % done + battery)","dateColumnField":"Date column (for overdue)","remove":"Remove"},"dashboardAi":{"arrange":"AI Arrange","arrangeTitle":"Tidy the layout — compact metrics first, wide views last","arranged":"Widgets arranged","aiButton":"AI","popTitle":"AI dashboard","build":"Build new","rework":"Rework current","promptPlaceholder":"Describe the dashboard you want — e.g. “deployment health with workload by owner”","generate":"Generate","generating":"Generating…","applied":"AI dashboard applied","failed":"AI dashboard is unavailable right now. Try again.","saveFailed":"Couldn’t save the dashboard — change rolled back.","heightLabel":"Height","heightAuto":"Auto","narrower":"Narrower","wider":"Wider","dragReorder":"Drag to reorder"},"timelineView":{"dragHint":"Drag a bar to move it; drag an edge to resize.","readOnlyHint":"Read-only — you can’t edit the date column.","onColumn":"on {column}","empty":"No items have a {column} range yet. Set a start/end on the {column} column in Table view to see them here.","untitled":"Untitled item","laneCount":"{count} items","laneUnscheduled":"{count} unscheduled","resizeHandle":"Resize the label column","saving":"Saving…"},"projectTimelineView":{"statProjects":"Projects","statModulesTracked":"Modules tracked","statWeeksFirstStart":"Weeks, first start to today","statLiveInProduction":"Live in production","statMeanCompletion":"Mean completion","notScoredShort":"n/s","tipStarted":"Started","tipElapsed":"Elapsed","tipElapsedValue":"{weeks} weeks · {days} days","tipComplete":"Complete","tipNotScored":"not scored by any tracker","tipBasis":"Basis","liveTag":"Live","weeksAbbrev":"w","viewLabel":"View","viewTimeline":"Timeline","viewTable":"Table","expandAll":"Expand all","collapseAll":"Collapse all","zoomLabel":"Zoom","zoom":{"day":"Day","week":"Week","month":"Month","quarter":"Quarter"},"axisProjectModule":"Project · module","resizeHandle":"Resize the label column","today":"Today","headerWeeks":"Weeks","headerComplete":"Complete","tableProjectModule":"Project / module","tableWhatItDoes":"What it does","tableStarted":"Started","tableWeeks":"Weeks","tablePercentDone":"% done","tableBasis":"Basis","notScored":"not scored","emptyGroup":"No items are grouped into projects yet. Set the grouping column on your items to see them here.","emptyHierarchy":"No projects yet. Add project items (with a start date on the timeline column) to see them here.","footerBarLabel":"Bar","footerBarText":" = first date → today (time elapsed). ","footerMeterLabel":"Meter","footerMeterText":" = % complete. ","footerHatchedLabel":"Hatched · n/s","footerHatchedText":" = not scored by any tracker (never shown as 0%). ","footerStatedLabel":"Stated","footerStatedText":" = the project's own published number; ","footerDerivedLabel":"derived","footerDerivedText":" = the mean of its module scores."},"toolbarV2":{"ayvaAsk":"Ask Ayva","ayvaViewSetupTooltip":"Let Ayva configure this view so it isn't blank","ayvaColumnOptionsTooltip":"Let Ayva propose a starter option list","backlog":{"trigger":"Points","heading":"Points column","auto":"Auto","autoNamed":"Auto ({name})","noNumericColumns":"No numeric columns on this board. Add a Number or Story Points column.","hint":"Each item shows its points from this column; the backlog header sums the visible list."},"projectTimeline":{"trigger":"Setup","rowSourceHeading":"Rows come from","rowSourceHierarchy":"Item tree","rowSourceGroup":"Group by column","hierarchyHint":"Top items are projects, their sub-items are boards, and sub-sub-items are tasks.","groupHint":"Each label of the chosen column becomes a project row; its items become the modules.","groupColumn":"Group items by","timelineColumn":"Dates (bar) column","percentColumn":"Percent (stated %) column","progressColumn":"Progress (derived %) column","statusColumn":"Status (pill) column","linkedBoardColumn":"Linked-board column","showTableTwin":"Open on the table view","autoPick":"Auto-pick","autoOrNone":"Auto / none"},"tierLink":"This link","tierView":"This view","tierYou":"Only you","tierLinkShort":"Link","tierViewShort":"View","tierYouShort":"You","tierLinkHelp":"Lives in the link (URL)","tierViewHelp":"Saved to this view","tierYouHelp":"Only for you","displaySectionLayout":"Layout","displaySectionSubitems":"Sub-items","displayExpandCollapse":"Expand or collapse all","searchColumns":"Search columns…","noColumnsMatch":"No columns match","colGroupText":"Text","colGroupNumber":"Numbers","colGroupChoice":"Status & labels","colGroupPeople":"People","colGroupDate":"Dates & time","colGroupOther":"Other","applied":"applied","pending":"Working…","clear":"Clear","railLabel":"Applied filters, sorting and grouping","railThisView":"this view","searchLabel":"Search","sortLabel":"Sort","groupLabel":"Group","railItemTitle":"Item title","clearAll":"Clear all","railNoteUrlOnly":"In this link only","railNoteSaved":"Saved in '{view}'","railNoteDiffers":"Differs from '{view}'","railOps":{"eq":"is","neq":"is not","in":"is any of","not_in":"is none of","contains":"contains","not_contains":"doesn't contain","contains_any":"contains any of","starts_with":"starts with","gt":"greater than","gte":"at least","lt":"less than","lte":"at most","before":"before","after":"after","is_empty":"is empty","is_not_empty":"is set","is_true":"is checked","is_false":"is unchecked"},"rowLabel":"Board view controls","searchPlaceholder":"Search the whole board…","filter":"Filter","filterTabBuild":"Build","filterTabAsk":"Ask AI","ask":{"placeholder":"Describe the filter you want…","helper":"These become ordinary filters — they show in the toolbar and survive reload.","unavailable":"AI is unavailable right now.","uninterpretable":"Couldn't turn that into filters for this board. Try rephrasing.","poweredBy":"Powered by Claude"},"sortAction":"Sort","groupAction":"Group","columns":"Columns","columnsHidden":"{n} hidden","display":"Display","arrange":"Arrange","myItems":"My items","overdue":"Overdue","addFilterOn":"Add filter on","noFilters":"No filters yet — pick values, never type them.","filterFooter":"Lives in the URL","sortByHeading":"Sort by","noSort":"No sort yet.","ascending":"Ascending","descending":"Descending","groupByHeading":"Group by","staticGroups":"Static groups (default)","thenByHeading":"Then by (optional)","none":"None","toggleColumns":"Toggle columns","showAllColumns":"Show all columns","arrangeFooter":"Sorting, grouping, columns and display for this view.","arrangeBack":"Back to Arrange","freezeUpToHere":"Freeze up to here","frozenBoundary":"Frozen","freezeItemOnly":"Item only","overflowOn":"+{n} · {k} on","overflowTitle":"{n} more · {k} active","density":"Density","densityComfortable":"Comfortable","densityCompact":"Compact","rowNumbers":"Row numbers","rowNumbersHint":"Show a leading number on every row","groupsSubitems":"Groups & sub-items","displayFooter":"Some settings save to the view; some are only for you.","viewMoreCaption":"This view · just what you see","copyLink":"Copy view link","copyLinkDone":"Link copied","gauge":{"label":"Board status","itemsAria":"{n} items total","open":"Show status breakdown","distribution":"Status distribution","filterBy":"Filter by {label}","columnHeading":"Status column","configure":"Choose status column","noStatusColumn":"This board has no status column.","empty":"No items yet","footer":"Configured by the owner · same for everyone"}},"crossBoardSearch":{"title":"Search boards","eyebrow":"One Boards","description":"Search every board you can access — by item title or any text in its columns. Results are ranked by relevance.","placeholder":"Search items across all your boards…","prompt":"Type a query above to search across all your boards.","searching":"Searching…","empty":"No items match \"{q}\".","resultCount":"{n} result","resultCountPlural":"{n} results","inBoard":"in {board}","openItem":"Open item","prev":"Previous","next":"Next","pageOf":"Page {page} of {total}","error":"Search failed. Try again."},"automations":{"conditionsTitle":"Automation conditions","conditionsSubtitle":"Refine WHEN this automation runs.","checkboxCondition":{"checked":"is checked","unchecked":"is not checked","pick":"checked?"},"addCondition":"Add condition","addGroup":"Add group","addBranch":"Add branch","removeNode":"Remove","empty":"No conditions — this automation always runs.","summaryPrefix":"If","summaryAlways":"Always runs","and":"AND","or":"OR","not":"NOT","andHint":"All must match","orHint":"Any must match","notHint":"Invert this group","group":"Group","branch":"Branch","branchIf":"IF","branchThen":"THEN","branchElse":"ELSE","branchAddThen":"Add THEN action","branchAddElse":"Add ELSE action","branchThenWhen":"only when","branchElseWhen":"only when","pickColumn":"Column","pickOperator":"Operator","value":"Value","noColumns":"No columns on this board yet.","picker":{"pick":"Pick a value","pickOne":"Pick…","none":"—","noOptions":"No options yet","add":"Add","addNew":"Add new option","adding":"Adding…","newOptionPlaceholder":"New option name…","added":"Option added","addedBody":"The new option is ready to use.","addFailed":"Couldn't add the option","remove":"Remove"},"op":{"equals":"is","not_equals":"is not","contains":"contains","not_contains":"doesn't contain","starts_with":"starts with","ends_with":"ends with","regex_match":"matches pattern","gt":"greater than","lt":"less than","gte":"greater or equal","lte":"less or equal","between":"between","in_list":"is any of","not_in_list":"is none of","is_empty":"is empty","is_not_empty":"is not empty","date_before":"date before","date_after":"date after","date_between":"date between","is_today":"is today","in_last_n_days":"in the last N days","changed_to":"changed to","changed_from":"changed from"},"kind":{"column":"Column value","person":"Person","date":"Date","related":"Related items","status":"Status is","inGroup":"In group","who":"Who triggered","subitems":"Subitems","linked":"Linked items"},"person":{"label":"Person","who":"Who","me":"is the current user","assignee":"has anyone assigned","user":"is a specific person","pickUser":"Pick a person"},"who":{"role":"has role","department":"in department","user":"is a specific person","pickRole":"Pick a role","pickDepartment":"Department id"},"subitems":{"has":"has subitems","allStatus":"all subitems are","hasYes":"has subitems","hasNo":"has no subitems"},"group2":{"in":"is in","notIn":"is not in","pick":"Pick a group"},"date":{"label":"Date","rel":"When","today":"is today","overdue":"is overdue","this_week":"is this week","next_week":"is next week","within_n_days":"is within N days","in_exactly_n_days":"is in exactly N days","older_than_n_days":"is older than N days","days":"days","modeRelative":"relative","modeWeekday":"is on weekday","modeWindow":"is between","weekdays":{"0":"Sunday","1":"Monday","2":"Tuesday","3":"Wednesday","4":"Thursday","5":"Friday","6":"Saturday"}},"related":{"label":"Related items","relation":"Relation","connected":"connected items","subitems":"subitems","test":"Test","any":"any of them","all":"all of them","statusIs":"status is","statusColumn":"Status column","statusColumnAuto":"Auto (related board status)"},"save":"Save conditions","saving":"Saving…","saved":"Conditions saved","savedBody":"This automation now uses the updated conditions.","saveFailed":"Couldn't save conditions","actions":{"title":"Automation actions","subtitle":"Choose WHAT happens when this automation runs.","empty":"No actions yet — add one below.","addAction":"Add action","removeAction":"Remove action","moveUp":"Move up","moveDown":"Move down","save":"Save actions","saving":"Saving…","saved":"Actions saved","savedBody":"This automation now runs the updated actions.","saveFailed":"Couldn't save actions","summaryPrefix":"Then","summaryNone":"No actions","emailAutoCreateNotice":"The item is created automatically when the email arrives (subject → title, in the group you chose).","kind":{"set_column_value":"Set column value","move_item_to_group":"Move to group","route_to_group_by_status":"Route to group by status","create_item":"Create item","archive_item":"Archive item","send_notification":"Notify","assign_person":"Assign person","set_date":"Set date","shift_date":"Shift date","duplicate_item":"Duplicate item","move_item_to_board":"Move to board","set_multiple_values":"Set multiple values","create_from_template":"Create from template","notify_slack":"Notify Slack","notify_teams":"Notify Teams","web_request":"Web request","ai_action":"AI action","module_action":"Module action","post_update":"Post update","create_subitem":"Create subitem","clear_column":"Clear column","notify_person":"Notify person","change_status":"Change status","send_email":"Send email","board_pending_digest":"Email pending items to each assignee","bulk_update_subitems":"Update all subitems","set_linked_column":"Set linked item column","warranty_update_asset_on_close":"Update covered asset on warranty close","restore_previous_value":"Restore previous value","check_checkbox":"Check checkbox","uncheck_checkbox":"Uncheck checkbox","toggle_checkbox":"Toggle checkbox","increment_number":"Increment number","decrement_number":"Decrement number","set_rating":"Set rating","set_percent":"Set percent","set_progress":"Set progress","set_vote":"Set votes","add_tag":"Add tag","remove_tag":"Remove tag","set_timeline":"Set timeline","connect_item":"Link item","disconnect_item":"Unlink item","match_and_connect":"Match & link item","unarchive_item":"Unarchive item","delete_item_soft":"Delete item","restore_item":"Restore item","assign_me":"Assign me","smart_assign":"Smart assign","notify_role":"Notify role","notify_department":"Notify department","run_another_automation":"Run another automation","append_text":"Append text","prepend_text":"Prepend text","print_label":"Print label","create_linked_item":"Create linked item","start_time_tracking":"Start the timer","stop_time_tracking":"Stop the timer","delay":"Wait"},"routeByStatus":{"statusColumn":"Status column","noMove":"— (no move) —","noLabels":"Add labels to the status column to map them to groups."},"delay":{"amount":"Amount","unit":"Unit","minutes":"minutes","hours":"hours","days":"days"},"operationCustom":"Custom operation…","operationPlaceholder":"operation id (e.g. invoice.create)","argsPlaceholder":"Arguments (JSON) — e.g. { \"amount\": 100 }","column":"Column","group":"Group","value":"Value","title2":"Title","recipient":"Recipient","topic":"Topic","body":"Message","person":"Person","pickUser":"Pick a person","userOwner":"the board owner","userMe":"the triggering user","mode":"Mode","modeReplace":"replace","modeAdd":"add","base":"Base","baseToday":"today","baseAbsolute":"a specific date","date":"Date","offsetDays":"Offset (days)","byDays":"Shift by (days)","cascade":"Cascade to dependents","cascadeHint":"Also shift items that depend on this one","targetBoard":"Target board","pickBoard":"Pick a board","targetGroup":"Target group","targetGroupAuto":"Auto (first group)","columnMapping":"Column values","columnMappingByName":"Re-home by name + type","columnMappingNone":"Drop values","addValue":"Add value","removeValue":"Remove value","template":"Template","pickTemplate":"Pick a template","workspace":"Workspace","pickWorkspace":"Pick a workspace","namePrefix":"Board name (optional)","includeSamples":"Include sample items","targetItemId":"Target item id","matchSourceColumn":"Match this column","matchTargetColumn":"Target column id ('name' = item name)","matchItemName":"the item name","matchByStored":"compare the stored value","matchByLabel":"compare the visible label","matchCaseSensitive":"Case-sensitive","matchCaseSensitiveHint":"Only applies when comparing the visible label. Off by default, so \" Alpha \" matches \"alpha\".","matchByAria":"Compare by","matchMultipleAria":"When several items match","matchMultipleLinkAll":"link every match","matchMultipleSkip":"skip when several match","automationId":"Automation id","strategyRoundRobin":"round-robin","strategyLeastLoaded":"least loaded","strategyRandom":"random","poolRole":"role","poolDepartment":"department","poolUsers":"users","slackChannel":"Slack channel","teamsChannel":"Teams channel","messageText":"Message","url":"URL","method":"Method","requestBody":"Body (JSON)","saveAs":"Save result as","responsePath":"Response path (e.g. data.id)","aiTask":"Task","taskClassify":"Classify","taskSummarize":"Summarize","taskDraft":"Draft","aiInput":"Input text","aiInstructions":"Instructions (optional)","externalVia":"Runs via n8n","externalNotConfigured":"n8n is not configured — this action is skipped until set up.","dedicatedActionTip":"A dedicated action fits this column better","emailTo":"To","emailCc":"CC","emailReplyTo":"Reply-to","emailSubject":"Subject","emailBody":"Body (HTML)","emailSaveAs":"Save result as","digest":{"assigneeColumn":"Assignee column (who to email)","pickAssigneeColumn":"Pick a people column","noPeopleColumns":"This board has no people column yet. Add one, then pick it here.","pendingLabel":"What counts as \"pending\"","pendingHint":"Only items matching every rule below are included. Leave empty to include every item.","addRule":"Add rule","removeRule":"Remove rule","ruleColumn":"Column","ruleOp":"Test","ruleValue":"Value","opStatusIs":"status is","opEquals":"equals","opNotEquals":"is not","opIsEmpty":"is empty","opIsNotEmpty":"is not empty","opInGroup":"is in group","includeColumns":"Extra columns to show on each item","includeColumnsHint":"The item name is always shown — these add extra field values beside it.","addIncludeColumn":"Add column","subject":"Email subject (optional)","subjectHint":"Leave empty for an automatic \"N pending items\" subject.","scheduleHint":"Pair this with the \"On a schedule\" trigger set to daily to send one digest per person every day.","layoutLabel":"Email layout","layoutList":"List","layoutTable":"Table","layoutHint":"Table shows each pending item as a compact row with one column per extra field.","sourceLabel":"Email content","sourceRules":"Pending rules (as before)","sourceView":"A saved view","viewLabel":"View to send","pickView":"Pick a view","viewsLoading":"Loading views…","noViews":"This board has no shared table views. Save a view and share it.","viewManagedNote":"Rows, columns and order come from the view “{view}”. The pending rules and extra columns are not used while it is selected.","viewUnavailable":"View not available","recipientsLabel":"Who receives it","recipientsAssignees":"Each assignee — their own rows of the view","recipientsUsers":"A fixed list of people — the whole view","recipientsHint":"Each person gets the view cut to what they can see on this board. Only board members are listed.","recipientsNone":"This board has no members to pick from yet.","recipientsRemove":"Remove person","recipientsPick":"Add a person…","viewMissing":"Pick the saved view this email sends, or switch back to the pending rules.","attachPdf":"Attach the view as a PDF","attachPdfHint":"The same rows and columns as the email, as a PDF file (up to 2,000 rows). If the PDF cannot be made, the email still goes out."},"subitemsColumn":"Subitem column","subitemsValue":"Set to","subitemsFilter":"Filter by column (optional)","subitemsFilterLabel":"Filter value (optional)","linkedColumn":"Link column","linkedTargetColumn":"Target column (on linked board)","linkedValue":"Set to","linkedMatchMode":"Apply to","linkedMatchFirst":"first linked item","linkedMatchAll":"all linked items","branchThenActions":"Do (when IF passes)","branchElseActions":"Otherwise do","timeTracking":{"noColumn":"This board has no time-tracking column yet. Add one to the board, then pick it here."},"printLabel":{"templatePlaceholder":"Pick a label template…","noTemplates":"No label templates attached to this board yet.","printerPlaceholder":"Printer (template default)","noPrinters":"No network printers registered yet.","copies":"copies"},"createLinkedItem":{"targetBoard":"Target board","pickBoard":"Pick a board…","targetGroup":"Target group","title":"Title of the new item","titleHint":"Use {{item.title}} — or any {{item.Column name}} — to copy text from the item that fired the rule.","columns":"Columns to copy over","addColumn":"Add column","sourceColumn":"From this board","targetColumn":"Into the target board","connectColumn":"Connect column","connectHelp":"The “Connect items” column on this board that points at the target board — that is where the new item gets linked.","noConnectColumn":"This board has no “Connect items” column pointing at “{board}” yet.","noConnectColumnLink":"Create it here, then come back","oneWayWarning":"That connect column has no reciprocal column: the link will show on this board only, not on the new item.","sync":"Keep them in sync","syncBoth":"Two-way — both directions","syncSourceToTarget":"From this item to the new one","syncTargetToSource":"From the new item to this one","syncNone":"No sync — just link them","syncBothHelp":"Changes to the copied columns travel in both directions.","syncSourceToTargetHelp":"Only changes on this item reach the new one; edits on the new item do not come back.","syncTargetToSourceHelp":"Only changes on the new item reach this one; edits here do not travel.","syncNoneHelp":"They are linked once, and after that each goes its own way.","alwaysCreate":"Create a new item every time this runs","alwaysCreateNeedsNoSync":"Creating one every time only works without sync: an item can keep a single synced copy.","unwritableColumn":"This column is calculated — nothing can be written into it.","typePairWarning":"These two column types are not always compatible: the value can land empty.","summaryColumnsOne":"1 column","summaryColumns":"{count} columns"}},"shell":{"title":"Automations","subtitle":"Run actions automatically when something happens on this board.","newAutomation":"New automation","fromRecipe":"From recipe","browseRecipes":"Browse recipes","newShort":"New","startFromRecipe":"Start from a recipe","filterEmpty":"No automations match this filter.","rowMenu":"Automation options","deleteConfirmTitle":"Delete \"{name}\"?","empty":"No automations yet. Create one or start from a recipe.","emptyHint":"Automations run as the board owner and are fully audited.","untitled":"Untitled automation","nameLabel":"Name","namePlaceholder":"e.g. Notify owner when blocked","enabledLabel":"On","disabledLabel":"Off","enable":"Enable","disable":"Disable","rename":"Rename","duplicate":"Duplicate","deleteLabel":"Delete","confirmDelete":"Confirm delete?","cancel":"Cancel","editLabel":"Edit","runsLabel":"Runs","back":"Back","tabWhen":"When","tabIf":"If","tabThen":"Then","runCount":"runs","lastRun":"last run","neverRan":"never run","saved":"Automation saved","savedBody":"Your changes are live.","saveFailed":"Couldn't save the automation","created":"Automation created","createdBody":"Configure it, then turn it on.","deleted":"Automation deleted","duplicated":"Automation duplicated","toggleFailed":"Couldn't change the automation","reviewBeforeEnabling":"Created off — review it, then turn it on.","save":"Save automation","saving":"Saving…","openInDesigner":"Open in Workflows Designer","expandEditor":"Expand editor","restoreEditor":"Restore editor","automate":"Automate","close":"Close"},"designer":{"backToBoard":"Back to board","subtitle":"Visual view — edits sync with the right-rail builder","triggerNode":"When","conditionNode":"If","conditionNodeHint":"Conditions must pass","actionNode":"Then","branchNode":"Branch","branchNodeHint":"Routes actions when it matches","branchNodeHintElse":"Routes actions either way","legThen":"Then","legElse":"Else","enabled":"On","disabled":"Off","openEditor":"Open editor","closeEditor":"Close editor","miniMap":"Mini-map","focusMode":"Focus mode","focusHint":"Press F to focus this node, Esc to clear","clipboardCopied":"Node copied","clipboardPasted":"Action pasted from clipboard","clipboardOnlyActions":"Only action nodes can be pasted","openCatalog":"Add block","closeCatalog":"Close catalog","deleteActionNode":"Delete this action"},"catalog":{"title":"Add a block","searchPlaceholder":"Search triggers, actions, blocks…","allCategories":"All","noMatches":"No blocks match this search.","close":"Close catalog","triggerSet":"Trigger picked — configure it on the When tab.","actionAppended":"Action added — configure it on the Then tab.","comingSoon":"Soon","comingSoonBody":"This block is on the roadmap — it'll light up in a later phase.","readOnlyHint":"Read-only — you can browse blocks but not add them here.","category":{"triggers":"Triggers","conditions":"Conditions","itemActions":"Item actions","columnActions":"Column actions","peopleComms":"People & comms","externalModules":"External & modules","ai":"AI","flow":"Flow control","dataVars":"Data & variables","transforms":"Transforms"}},"triggers":{"pickTrigger":"When…","column":"Column","value":"Value","statusLabel":"Status","days":"days","forDays":"for (days)","cronSchedule":"Schedule","cronAdvanced":"Custom schedule (cron)","cronAdvancedHint":"5-field cron, e.g. 0 9 * * 1","dailyAtHour":"Send at","dailyAtHourAny":"First run of the day","timezone":"Time zone","anyColumn":"any column","anyChange":"any change","oppositeGroup":"Opposite / off events","fromLabel":"From","toLabel":"To","perColumnGroup":"Column events","lifecycleGroup":"Item lifecycle","subitemGroup":"Subitems","threshold":"Threshold","thresholdOp":"Comparison","target":"Target","stars":"Stars (optional)","option":"Option","level":"Priority level","weekday":"Day of week","atHour":"Hour (optional)","doneLabel":"Done label","slaStates":"SLA states that fire","slaStateNames":{"on_track":"On track","at_risk":"At risk","breached":"Breached","paused":"Paused","met":"Met"},"toGroup":"Target group","anyGroup":"any group","email":{"mailboxLabel":"Mailbox","mailboxHint":"The approved shared mailbox this trigger listens to.","filtersLabel":"Filters","filtersHint":"At least one filter is required — a trigger cannot listen to the whole mailbox.","filtersEmptyWarning":"Add at least one filter (subject, sender, attachments, or to/cc) before saving.","combineLabel":"Match","combineAnd":"all filters (AND)","combineOr":"any filter (OR)","subjectLabel":"Subject","subjectOpContains":"contains","subjectOpEquals":"equals","subjectOpRegex":"matches regex","subjectPlaceholder":"text to match in the subject","fromLabel":"Sender","fromPlaceholder":"jane@acme.com, acme.com (one per line)","fromHint":"Addresses or bare domains — one per line.","hasAttachmentsLabel":"Attachments","hasAttachmentsAny":"any","hasAttachmentsYes":"has attachments","hasAttachmentsNo":"no attachments","toCcLabel":"To / CC","toCcPlaceholder":"support@redsis.com (one per line)","toCcHint":"One of these must appear in To or CC — one per line.","mappingLabel":"When an item is created","mappingTitleFrom":"Title ← email subject","mappingTitleFromFixed":"always the subject","mappingBodyToComment":"Post the email body as the first comment","mappingAttachmentsCol":"Attachments → file column","mappingAttachmentsNone":"do not save attachments","mappingFromCol":"Sender → column","mappingFromNone":"do not save the sender","groupLabel":"Create the item in","groupPlaceholder":"pick a group","groupRequiredWarning":"Pick a group to create the item in before saving.","autoCreateHint":"The item is created automatically from this mapping — you don’t need to add a \"create item\" action.","noFileColumns":"No file columns on this board.","noTextColumns":"No text/email columns on this board."},"opGt":"greater than","opLt":"less than","opGte":"greater or equal","opLte":"less or equal","opEq":"equals","weekdays":{"0":"Sunday","1":"Monday","2":"Tuesday","3":"Wednesday","4":"Thursday","5":"Friday","6":"Saturday"},"cronPresets":{"every_day_9":"Every day at 09:00","every_weekday_9":"Every weekday at 09:00","every_monday_9":"Every Monday at 09:00","every_hour":"Every hour","first_of_month_9":"1st of the month at 09:00","custom":"Custom…"},"schedule":{"runPrefix":"Run","cadenceConnector":"on a","cadenceLabel":"schedule","daily":"daily","everyN":"every N days","weekly":"weekly","daysUnit":"days","onConnector":"on","atConnector":"at","weekdayLabel":"day of week","atHourLabel":"time","zoneHint":"({zone} time)","weekdays":{"0":"Sunday","1":"Monday","2":"Tuesday","3":"Wednesday","4":"Thursday","5":"Friday","6":"Saturday"}},"kind":{"item_created":"An item is created","item_updated":"An item is updated","column_changed":"A column changes","column_value_equals":"A column equals a value","status_changed":"A status changes","person_assigned":"Someone is assigned","subitem_added":"A subitem is added","date_arrived":"A date arrives","time_in_status":"An item sits in a status","cron":"On a schedule","checkbox_checked":"A checkbox is checked","checkbox_unchecked":"A checkbox is unchecked","status_changed_from":"A status changes from","status_left":"A status is left","person_unassigned":"Everyone is unassigned","column_cleared":"A column is cleared","column_became_empty":"A column becomes empty","column_became_filled":"A column becomes filled","date_cleared":"A date is cleared","dropdown_deselected":"A dropdown option is removed","number_crossed":"A number crosses a threshold","percent_reached":"A percent reaches a target","progress_reached":"Progress reaches a target","rating_changed":"A rating changes","date_changed":"A date changes","timeline_changed":"A timeline changes","dropdown_changed_to":"A dropdown gains an option","priority_changed_to":"A priority changes to","file_uploaded":"A file is uploaded","file_removed":"A file is removed","link_added":"A link is added","tag_added":"A tag is added","tag_removed":"A tag is removed","connect_linked":"An item is linked","connect_unlinked":"An item is unlinked","vote_added":"A vote is added","item_moved_group":"The item is moved to a group","item_moved_board":"The item is moved to a board","item_duplicated":"The item is duplicated","item_deleted":"The item is deleted","item_restored":"The item is restored","item_archived":"The item is archived","update_posted":"An update is posted","mention_me":"I am mentioned","date_before_n_days":"N days before a date","date_after_n_days":"N days after a date","day_of_week_time":"On a day of the week","item_stale_n_days":"The item is stale for N days","subitem_status_changed":"A subitem status changes","subitem_all_done":"All subitems are done","subitem_column_changed":"A subitem column changes","sla_state_changed":"An SLA state changes","button_clicked":"A button is clicked","email_received":"An email arrives"},"summary":{"item_created":"When an item is created","item_updated":"When an item is updated","column_changed":"When {col} changes","column_value_equals":"When {col} is {val}","status_changed":"When {col} changes to {val}","status_changed_any":"When {col} changes","person_assigned":"When someone is assigned to {col}","date_arrived":"When {col} arrives","subitem_added":"When a subitem is added","time_in_status":"When {col} is {val} for {n} days","cron":"On schedule {val}","anyColumn":"any column","checkbox_checked":"When {col} is checked","checkbox_unchecked":"When {col} is unchecked","status_changed_from":"When {col} changes from {val}","status_left":"When {col} leaves {val}","person_unassigned":"When everyone is unassigned from {col}","column_cleared":"When {col} is cleared","column_became_empty":"When {col} becomes empty","column_became_filled":"When {col} becomes filled","date_cleared":"When {col} is cleared","dropdown_deselected":"When an option is removed from {col}","number_crossed":"When {col} crosses {val}","percent_reached":"When {col} reaches {val}%","progress_reached":"When {col} reaches {val}%","rating_changed":"When {col} rating changes","date_changed":"When {col} changes","timeline_changed":"When {col} changes","dropdown_changed_to":"When {col} gains {val}","priority_changed_to":"When {col} changes to {val}","file_uploaded":"When a file is uploaded to {col}","file_removed":"When a file is removed from {col}","link_added":"When {col} gets a link","tag_added":"When a tag is added to {col}","tag_removed":"When a tag is removed from {col}","connect_linked":"When an item is linked in {col}","connect_unlinked":"When an item is unlinked from {col}","vote_added":"When {col} gets a vote","item_moved_group":"When the item is moved to a group","item_moved_board":"When the item is moved to a board","item_duplicated":"When the item is duplicated","item_deleted":"When the item is deleted","item_restored":"When the item is restored","item_archived":"When the item is archived","update_posted":"When an update is posted","mention_me":"When I am mentioned","date_before_n_days":"{n} days before {col}","date_after_n_days":"{n} days after {col}","day_of_week_time":"On weekday {n}","item_stale_n_days":"When the item is stale for {n} days","subitem_status_changed":"When a subitem {col} changes to {val}","subitem_all_done":"When all subitems reach {val}","subitem_column_changed":"When a subitem {col} changes","sla_state_changed":"When {col} SLA becomes {val}","button_clicked":"When {col} is clicked","email_received":"When an email arrives at {val}"}},"reverse":{"toggleLabel":"Reverse this automation","toggleHint":"Also undo this automatically when the opposite event happens.","modeLabel":"When it un-happens","modeRestore":"Restore the previous value","modeSetValue":"Set a specific value","modeCustom":"Run custom actions","restoreHint":"Restores the exact value this automation overwrote.","customHint":"The reverse runs this rule’s actions on the opposite event.","setColumn":"Column","setValueLabel":"Value","pickColumn":"Pick a column","mirrorTitle":"Auto-generated reverse","mirrorReverses":"↩ Reverses “{name}”. Edit the original to change it."},"runs":{"title":"Run history","subtitle":"Recent runs of this automation.","empty":"No runs yet — this automation hasn't fired.","refresh":"Refresh","filterAll":"All","matched":"matched","skipped":"skipped","actionsRan":"actions","duration":"duration","causeChain":"Cause chain","depth":"depth","userCaused":"user-caused","conditionTrace":"Conditions","actionResults":"Actions","viewItem":"View item","noItem":"no item","status":{"pending":"Pending","running":"Running","succeeded":"Succeeded","failed":"Failed","skipped":"Skipped"},"skipReason":{"conditions":"Conditions didn't match","automation_disabled":"Automation was off","automation_missing":"Automation was removed","identity":"Owner had no access","board_throttled":"Board run cap reached","depth_exceeded":"Automation chain too deep"},"stat":{"succeeded":"Succeeded","skipped":"Skipped","failed":"Failed","last24h":"Last 24h"}},"runNow":{"rowLabel":"Run now","title":"Run now — against existing items","loadingPreview":"Checking which items match…","disabledTitle":"Automation is disabled","disabledBody":"Turn it on to run it manually.","noMatches":"No items on this board currently match this automation.","matchedCount":"{n} items match","irreversibleBanner":"This automation sends emails / webhooks / notifications. Those cannot be undone.","actionsHeading":"Actions","selectAll":"Select all / none","runLabel":"Run","runningLabel":"Running…","cancelLabel":"Cancel","toastEnqueued":"Enqueued {n} runs — undo from run history","toastFailed":"Run now failed","toastUndoAction":"Undo"},"undo":{"undoRunButton":"Undo this run","undoBatchButton":"Undo entire batch","undoneAt":"Undone {ts}","title":"Undo this automation run","loadingPreview":"Checking what can be reversed…","applicableCount":"{n} to reverse","supersededCount":"{n} superseded","notFoundCount":"{n} deleted","alreadyReversed":"This run has already been undone.","nothingToReverse":"Nothing to reverse on this run.","nonUndoableBanner":"{n} side effect(s) — email, webhook, or notification — cannot be undone.","overwriteSupersededLabel":"Overwrite superseded values anyway (may clobber newer changes).","undoLabel":"Undo","undoingLabel":"Undoing…","cancelLabel":"Cancel","toastSuccess":"Undo complete — reversed {undone}, skipped {skipped}.","toastFailed":"Undo failed"},"recipes":{"galleryTitle":"Start from a recipe","gallerySubtitle":"Pick a ready-made automation and fill in the blanks.","useRecipe":"Use this recipe","creating":"Creating…","fillParams":"Fill in the details","reviewNote":"Created off — review it, then turn it on.","instantiated":"Recipe added","instantiatedBody":"Review the new automation, then enable it.","instantiateFailed":"Couldn't add the recipe","multiStepBadge":"Multi-step","category":{"notify":"Notifications","status":"Status flows","dates":"Dates & deadlines","assign":"Assignment","cleanup":"Cleanup & moves","external":"External (Slack / Teams / web)","ai":"AI"},"params":{"statusColumn":"Status column","statusLabel":"Status value","peopleColumn":"People column","assigneeColumn":"Assignee column","dateColumn":"Date column","targetGroup":"Move to group","targetBoard":"Move to board","stampColumn":"Column to stamp","categoryColumn":"Category column","summaryColumn":"Summary column","sourceColumn":"Source column","priorityColumn":"Priority column","assignTo":"Assign to","slackChannel":"Slack channel","teamsChannel":"Teams channel","webhookUrl":"Webhook URL","template":"Template","workspace":"Workspace"},"items":{"notify-owner-on-stuck":{"label":"Notify owner on status change","desc":"When a status changes to a value, notify the board owner."},"assign-to-ayva-autosolve":{"label":"Assign to Ayva (auto-solve)","desc":"When Status is set to “Send to Ayva” and the item is assigned to the chosen user, hand it to the Ayva auto-solver — it downloads the attached details, opens a fix PR, and writes progress, the PR, and a findings summary back onto the item."},"notify-assignee-on-assign":{"label":"Notify assignee when assigned","desc":"When someone is assigned, send them a notification."},"move-done-to-group":{"label":"Move done items to a group","desc":"When a status changes, move the item to a chosen group."},"create-followup-on-approved":{"label":"Create a follow-up item","desc":"When a status changes, create a follow-up item in a group."},"archive-on-closed":{"label":"Archive on close","desc":"When a status changes, archive the item."},"stamp-multi-on-won":{"label":"Stamp fields on win","desc":"When a status changes, set several fields at once."},"set-due-on-start":{"label":"Set due date on start","desc":"When work starts, set the due date to today + 5 days."},"shift-due-cascade":{"label":"Shift due date and cascade","desc":"When a date changes, shift it and every dependent by the same amount."},"flag-stale-overdue":{"label":"Flag stale items","desc":"When a date is older than 14 days, mark the item stale."},"escalate-overdue-not-done":{"label":"Escalate overdue, not done","desc":"When a date is overdue and the status is not Done, mark it stuck and notify the owner."},"assign-owner-on-create":{"label":"Assign owner on create","desc":"When an item is created, assign the board owner."},"assign-me-when-unowned":{"label":"Claim unowned items","desc":"When the people column changes and no one is assigned, assign a chosen person."},"duplicate-on-redo":{"label":"Duplicate on redo","desc":"When a status changes, duplicate the item."},"move-to-board-on-closed":{"label":"Move to another board on close","desc":"When a status changes, move the item to a chosen board."},"provision-board-on-approved":{"label":"Provision a board from a template","desc":"When a status changes, create a new board from a template."},"branch-priority-route":{"label":"Route by priority (if / else)","desc":"When a column changes, notify the owner if High, otherwise post a note."},"parent-done-when-subitems-done":{"label":"Complete parent when subitems done","desc":"When a status changes and all subitems are Done, set the parent to Done."},"slack-on-critical":{"label":"Slack on critical","desc":"When a status changes, post to a Slack channel (via n8n)."},"teams-on-blocked":{"label":"Teams on blocked","desc":"When a status changes, post to a Microsoft Teams channel (via n8n)."},"webhook-on-create":{"label":"Webhook on create","desc":"When an item is created, POST to a webhook URL (via n8n)."},"ai-classify-new-items":{"label":"AI-classify new items","desc":"When an item is created, classify it with AI and set a category."},"ai-summarize-description":{"label":"AI-summarize into a field","desc":"When a column changes, summarize it with AI into a summary field."},"onboard-new-item":{"label":"Onboard a new item","desc":"When an item is created, assign the owner, set a due date and notify the owner."},"won-deal-closeout":{"label":"Closeout a won deal","desc":"On win: stamp fields, create a kick-off item, notify the owner and post to Slack."},"overdue-escalation":{"label":"Escalate overdue work","desc":"When overdue and not done: flag Stuck, push the due date, notify the owner and post to Teams."},"triage-new-bug":{"label":"Triage a new bug with AI","desc":"On create: classify with AI, set the category, assign the owner and notify."},"blocked-handoff":{"label":"Hand off a blocked item","desc":"When blocked: move to another board, notify the assignee and post to Teams."}}},"dryRun":{"openLabel":"Test (dry run)","title":"Dry run","intro":"Simulate this automation against an item. Nothing is executed — no values change, no notifications sent, no external calls.","itemLabel":"Test against item","noItemOption":"No item (board-level)","untitledItem":"Untitled item","noItemsHint":"This board has no items to test against yet.","runButton":"Run dry run","running":"Simulating…","failed":"Couldn't run the dry run","matched":"Conditions matched","notMatched":"Conditions did not match","wouldRun":"Would run","noActions":"No actions would run.","external":"via n8n (not called)","needsItem":"needs an item","legThen":"then","legElse":"else","noteNoItem":"No item selected — item-scoped actions would be skipped at runtime.","noteConditionsFailed":"Conditions did not match, so no actions would run.","noteNoActions":"This automation has no actions configured.","noteExternalNotCalled":"External actions are routed via n8n and are never called during a dry run.","noteNeedsItemActions":"{n} action(s) need a target item and would be skipped without one.","noteChangedValueDependent":"Some conditions depend on the triggering change and can only be evaluated on a real run.","digestPreviewTitle":"Digest preview","digestPreviewSummary":"{people} recipient(s), {items} pending item(s)","digestPreviewEmpty":"No one would receive an email.","digestPreviewNoEmail":"no email","digestPreviewNoSend":"Preview only — no emails are sent.","digestPreviewItems":"{n} item(s)"},"lastRun":{"never":"Never ran","succeeded":"Succeeded","failed":"Failed","skipped":"Skipped","running":"Running…","pending":"Pending","ago":"ago","justNow":"Just now"},"boardRuns":{"title":"All automation runs","subtitle":"Recent runs across every automation on this board.","empty":"No runs yet on this board.","dateRange":"Date range","dateAll":"All time","dateToday":"Today","dateLast7":"Last 7 days","dateLast30":"Last 30 days","goToAutomation":"Go to automation","automationLabel":"Automation","boardRunsLabel":"Board runs"},"audit":{"title":"Change history","subtitle":"Who changed this automation and when.","empty":"No change records found.","openLabel":"Change history","kind":{"created":"Created","enabled":"Enabled","disabled":"Disabled","renamed":"Renamed","trigger_changed":"Trigger updated","conditions_changed":"Conditions updated","actions_changed":"Actions updated"},"by":"by","unknown":"unknown user","systemUser":"system"},"pause":{"openLabel":"Pause all","title":"Pause all automations","subtitle":"Temporarily stop all automations on this board.","intro":"When paused, no automation will fire. In-progress runs finish; pending runs are skipped and logged. Automations resume automatically at the expiry time or when you unpause.","pauseLabel":"Paused","unpauseLabel":"Resume automations","pauseButton":"Pause all automations","unpauseButton":"Resume automations","durationLabel":"Pause for","durationIndefinite":"Indefinitely","duration15m":"15 minutes","duration1h":"1 hour","duration4h":"4 hours","duration24h":"24 hours","reasonLabel":"Reason (optional)","reasonPlaceholder":"e.g. Maintenance window","pausedUntil":"Paused until","pausedIndefinite":"Paused indefinitely","reason":"Reason","saving":"Saving…","saved":"Pause state updated","saveFailed":"Couldn't update pause state","pausedBanner":"All automations are paused","resumeBanner":"Click \"Resume\" to re-enable automations."},"myFilter":{"label":"Mine","all":"All","my":"Mine","paused":"Paused","author":"Author","authorOwner":"owner-mode","authorMember":"member-mode"},"boardControls":{"title":"Board controls"},"recipeUpdate":{"badge":"Update available","badgeTip":"A newer version of this recipe is available. Apply the update to get the latest configuration.","applyUpdate":"Apply update","applyConfirm":"This will replace the trigger, conditions and actions with the latest recipe version. Your automation will be disabled first — review and re-enable. Continue?","applySuccess":"Recipe updated","applyFailed":"Couldn't apply the update","upToDate":"Up to date"},"columnThrottle":{"title":"Column trigger limits","subtitle":"Cap how often a column can trigger automations per day.","intro":"When a column exceeds its daily trigger cap, further automations triggered by that column are skipped (and logged). Useful for columns that change frequently and could cause automation storms.","empty":"No column limits configured.","addLabel":"Add limit","removeLabel":"Remove","columnLabel":"Column","pickColumn":"Pick a column…","maxPerDay":"Max triggers / day","window":"Window (hours)","windowHint":"Triggers in the last window count toward the cap. Default: 24h.","save":"Save limits","saving":"Saving…","saved":"Column limits saved","saveFailed":"Couldn't save column limits","throttledBadge":"throttled"},"cost":{"free":"No external calls","light":"1 external call","moderate":"{n} external calls","heavy":"{n}+ external calls","confirmTitle":"This automation makes external calls","confirmBody":"Enabling this automation will make {n} external call(s) per run (to Slack, Teams, webhooks, or AI). These run in real time and may incur costs or rate limits. Enable anyway?","confirmYes":"Enable","confirmCancel":"Cancel","indicator":"{n} ext. call(s)","indicatorNone":""},"limits":{"openLabel":"Run limits","title":"Automation run limits","subtitle":"Throttle how many automation runs this board can make.","intro":"Cap how many automation runs this board may start in a rolling window. Over the cap, runs are skipped (and logged) instead of running — your data is never lost. Off by default.","enableLabel":"Enable a run cap","maxRunsLabel":"Max runs per window","windowLabel":"Window (minutes)","windowHint":"Runs in the last window count toward the cap.","currentUsage":"Currently {n} / {max} runs used in this window.","save":"Save limits","saving":"Saving…","saved":"Run limits saved","saveFailed":"Couldn't save the run limits"}},"itemDetail":{"registerRequired":{"tab":"Register","heading":"Register this together","explain":"Filling “{trigger}” needs these fields, so they are saved as one entry.","submit":"Save entry","submitting":"Saving…","done":"Entry saved.","alreadyRegistered":"Already filled in.","fillInGrid":"This entry needs {fields}, which has to be filled in the grid — this form cannot enter that kind of field safely.","nothingToRegister":"There is nothing to register on this item right now — its required fields are filled in the grid.","requiredMark":"*"},"activity":"Activity","updates":"Updates","time":"Time","files":"Files","info":"Info","mirror":"Mirror","restore":"Restore","noActivity":"No activity yet.","panelLoading":"Loading item…","panelLoadFailed":"This item could not be opened. It may have been removed, or you may not have access to it.","panelRetry":"Try again","someone":"Someone","created":"created this item","renamed":"renamed","moved":"moved","archived":"archived this item","restored":"restored this item","changed":"changed","widgets":"Widgets","permissions":"Permissions","homes":"Boards","comingSoon":"Coming soon — lands in a later One Boards lane.","close":"Close","filesEmpty":"No files attached yet.","filesNoColumns":"This board has no file fields yet — ask an admin to add one.","filesDownload":"Download","filesCopyLink":"Copy link","attachmentsTitle":"Item attachments","attachmentsHelp":"Files attached to this item — no file column needed.","attachmentsEmpty":"No files attached to this item yet."},"fileViewer":{"title":"File viewer","close":"Close","closeTab":"Close tab","download":"Download","openInNewTab":"Open in new tab","errorTitle":"This file could not be opened.","noPreview":"Preview isn’t available for this file type.","actualSize":"Actual size","fitToScreen":"Fit to screen"},"itemHomes":{"title":"In boards","subtitle":"This item lives in every board below as the same object — edits sync everywhere.","primary":"Primary","loading":"Loading…","onlyHome":"This item lives only in its home board.","addToBoard":"Add to board","selectBoard":"Select a board…","selectGroup":"Group","defaultGroup":"First group","add":"Add","adding":"Adding…","noBoards":"No other boards available to add.","remove":"Remove from this board","removing":"Removing…","primaryNote":"Primary board — removing it promotes another board to primary.","lastHomeNote":"This is the only board — removing it will delete the item.","outcomePromoted":"Another board is now the primary home.","outcomeDeleted":"Item removed from all boards.","errorGeneric":"Could not complete that — please try again."},"trash":{"title":"Trash","buttonLabel":"Archived","subtitle":"Restore archived items and views","itemsSection":"Archived items","viewsSection":"Archived views","restore":"Restore","restoring":"Restoring…","undo":"Undo","emptyItems":"No archived items in this board.","emptyViews":"No archived views in this board.","archivedBy":"archived by {user} · {ago}","unknownGroup":"Unknown group","someone":"Someone","justNow":"just now","itemArchived":"Item archived","itemsArchived":"Archived {count} items","itemRestored":"Item restored","viewArchived":"View archived","viewRestored":"View restored","restoreFailed":"Could not restore.","undoFailed":"Could not undo.","cellCleared":"Cell cleared","groupArchived":"Group archived","itemMovedGroup":"Item moved to another group","itemsMovedGroup":"Moved {count} items to another group","movedGroupUndoHint":"Undo puts each one back at the end of its group","undoDoesNotRevertEffects":"Undo does not revert emails, webhooks or automations already run","undoPartial":"{restored} undone · {skipped} could not be undone","columnArchived":"Column deleted","columnTypeChanged":"Column type changed","itemMovedBoard":"Item moved to another board","itemsMovedBoard":"Moved {count} items to another board","movedBoardFallbackGroup":"{count} went back to the first group: their group was archived","groupDuplicated":"{Group} duplicated","groupDuplicatedWithItems":"{Group} duplicated with {count} {items}","groupMovedBoard":"{Group} moved to another board","itemCreated":"1 {item} created","itemsCreated":"{count} {items} created","dismiss":"Dismiss"},"wiring":{"tabLabel":"Notice","title":"This column holds the app up","lead":"This board is more than a board — platform logic reads it. If you continue, here is what happens:","confirmArchive":"I understand — archive it anyway","confirmRename":"I understand — rename it anyway","continueAnyway":"Continue anyway","cancel":"Cancel","close":"Close"},"railInline":{"archiveViewTitle":"Archive the view “{name}”?","restorableFromTrash":"Restorable from Trash.","archive":"Archive","archiving":"Archiving…","deleteColumnTitle":"Delete the “{name}” column?","deleteColumnBody":"Its values are archived and restorable from Trash.","delete":"Delete","deleting":"Deleting…","cancel":"Cancel","addMilestone":"Add milestone","addSprint":"Add sprint","targetDate":"Target date","start":"Start","end":"End"},"railShell":{"caption":"One Boards","genericBoard":"Board","genericItem":"Item","tabMore":"More","allTools":"All tools","groupBoard":"Board","groupCommunicate":"Communicate","groupAdmin":"Admin","dir":{"activity":{"title":"Activity","desc":"Board-level activity feed."},"filters":{"title":"Views","desc":"Saved views — apply, set default, archive."},"automations":{"title":"Automate","desc":"Rules that run your board for you."},"ai":{"title":"Ayva","desc":"Summaries, digests and board intelligence."},"columns":{"title":"Columns","desc":"Add, reorder and configure columns."},"members":{"title":"Members","desc":"Who has access and their roles."},"tools":{"title":"Project","desc":"Setup, milestones, sprints, related boards."},"email":{"title":"Email","desc":"Send and receive board email."},"notifications":{"title":"Notifications","desc":"Board notification settings."},"settings":{"title":"Settings","desc":"General, rules, access, danger zone."},"trash":{"title":"Trash","desc":"Restore archived items and views."},"print":{"title":"Print","desc":"Print labels for this board."},"railSettings":{"title":"Rail settings","desc":"Pin primary tabs and hide tools."}}},"railSettings":{"primaryHeading":"Primary tabs","primaryHint":"Pin up to 4 tools to keep on the tab bar.","toolsHeading":"Tools","toolsHint":"Hidden tools leave the More directory for you only.","pinned":"Pinned","pin":"Pin","unpin":"Unpin","show":"Show","hide":"Hide","reset":"Reset to defaults","pinLimit":"Keep between 1 and 4 tools pinned."},"railProject":{"sections":{"setup":"Setup","milestones":"Milestones","sprints":"Sprints","related":"Related boards","about":"About"},"setup":{"status":"Status","setStatus":"Set status","targetDate":"Target date","projectManager":"Project manager","owner":"Owner","description":"Description","assign":"Assign","editManager":"Change project manager","editOwner":"Change owner","editDescription":"Edit description","searchPlaceholder":"Search people…","noMatches":"No matches.","clear":"Clear","noDescription":"No description yet.","save":"Save","statuses":{"notStarted":"Not started","planned":"Planned","inProgress":"In progress","complete":"Complete","builtBroken":"Built but broken"}},"milestones":{"empty":"No milestones yet.","emptyHint":"Create one to group items into planning windows.","namePlaceholder":"Milestone name…","overdue":"Overdue","itemsTooltip":"Items in this milestone","markComplete":"Mark as completed","markActive":"Mark as active","archive":"Archive milestone"},"sprints":{"empty":"No sprints yet.","emptyHint":"Create one to time-box your work.","newSprint":"New sprint","namePlaceholder":"Sprint name (e.g. Sprint 14)","start":"Start","complete":"Complete","archive":"Archive sprint","startFailed":"Failed to start sprint","progress":"{done}/{total} done","points":"{n} points","pointOne":"1 point"},"related":{"empty":"No related boards yet.","connect":"Connect a board","referenceOnly":"Reference only","openBoard":"Open {name}","remove":"Remove link","removeTitle":"Remove the link to “{name}”?","removeBody":"Reference only — neither board’s data changes.","removeConfirm":"Remove","removing":"Removing…","searchPlaceholder":"Search boards…","noneFound":"No boards match.","allLinked":"All visible boards are already linked.","linkFailed":"Could not link board.","removeFailed":"Could not remove link."},"about":{"items":"Items","groups":"Groups","columns":"Columns","members":"Members","openMembers":"Open the Members tab","createdOwner":"Created {date} · Owner {owner}","created":"Created {date}"}},"workloadView":{"person":"Person","load":"Load","items":"Items","inProgress":"In progress","done":"Done","overdue":"Overdue","empty":"No items to chart by person yet.","over":"OVER","overTitle":"Over capacity: {open} open items of {capacity}","capacityTitle":"Open items vs capacity ({capacity})"},"parquesView":{"heading":"Parqués race — teammates positioned by a fair blend of pace, load carried, on-time delivery and follow-through","boardLabel":"Parqués race board with a token per teammate positioned by their fair race score","legendCentre":"centre = top score","legendBase":"base = no completions yet","legendWindow":"fair score · last {days} days","standings":"Standings","racing":"{count} racing","formula":"Fair score = pace + load carried{onTime} + follow-through{effort}.","formulaOnTime":" + on-time","formulaEffort":", weighted by effort","statusHint":"Add a status column with a Done label so completions count.","empty":"No one is assigned yet. Add people to the People column to start the race.","filtered":"View is filtered — clear the toolbar to score every item.","cleared":"Cleared their board","inJail":"No completions yet","tokenPoints":"{score} pts","tokenDone":"{done}/{total} done","tokenCleared":"cleared","tokenInBase":"in the base","metaPace":"pace","metaLoad":"load","metaOnTime":"on-time","metaDone":"done","settings":"Race settings","statusColumn":"Status column","statusAuto":"first status column","effortColumn":"Effort column","effortAuto":"1 per task","dueColumn":"Due date column","dueAuto":"no on-time signal","autoOption":"Auto — {hint}","windowDays":"Window (days)","weights":"Weights","weightPace":"Pace","weightLoad":"Load carried","weightOnTime":"On-time","weightFollowThrough":"Follow-through","resetWeights":"Reset to defaults (40 / 25 / 25 / 10)"},"backlogView":{"empty":"No items in this backlog.","pointsTotal":"Total {column}"},"viewUnavailable":{"files":"The Files views need a File column on this board. Add one in Table view, then switch back."},"settingsTab":{"navLabel":"Settings sections","viewOnly":"You have view-only access. Ask a board owner to change these settings.","save":"Save","saved":"Saved","nav":{"general":"General","rules":"Rules","email":"Email","access":"Access","bridge":"Bridge","danger":"Danger","myWork":"My Work"},"myWork":{"title":"My Work","chooseColumnsLead":"Choose which columns decide if an item is","chooseColumnsEmphasis":"yours","chooseColumnsTail":"and whether this board appears in everyone's My Work.","ownerColumn":"Owner column","statusColumn":"Status column","dueDateColumn":"Due-date column","autoDetect":"Auto-detect"},"summary":{"bridge":"Connected modules","terminology":"Terminology","nameRules":"name rules","dataStandards":"data standards","emailChecking":"Checking inbound address…","emailActive":"Inbound address active","emailNone":"No inbound address yet","emailError":"Inbound email unavailable","memberOne":"1 member","memberCount":"{n} members","workspaceGrants":"workspace grants included","danger":"Archive this board"},"general":{"name":"Name","description":"Description","icon":"Icon (emoji or short label)","iconPlaceholder":"e.g. 🗂️","color":"Color","setColor":"Set board color to {color}"},"terminology":{"heading":"Terminology","hint":"Rename what rows and sections are called on this board (e.g. Tasks, Tickets, Deals). Leave blank for the defaults.","itemSingular":"Item (singular)","itemPlural":"Items (plural)","groupSingular":"Group (singular)","groupPlural":"Groups (plural)","itemPlaceholder":"Item","itemsPlaceholder":"Items","groupPlaceholder":"Group","groupsPlaceholder":"Groups"},"nameRules":{"heading":"Item Name Rules","hint":"Auto-build the item name from a counter, prefix/suffix, other columns, or date parts. Empty parts fill in later; a manual rename is never overwritten.","levelItems":"Items","levelSubitems":"Sub-items","levelSubsubitems":"Sub-sub-items","autoName":"Auto-name {level}","regenerate":"Regenerate all","regenerateTitle":"Rebuild every item’s name on this board (clears manual locks)","regeneratedOne":"Regenerated 1 name.","regenerated":"Regenerated {n} names."},"dataStandards":{"heading":"Column Standards (default)","hint":"Applied to every text column on this board unless a column sets its own rules. Formatting is auto-applied on save; validation blocks a non-matching entry."},"email":{"hint":"Email this address to create a new item on this board. The subject becomes the item title; the body is added as the first update.","loading":"Loading…","addressLabel":"Board email address","copy":"Copy email address","copied":"Copied!","generate":"Generate email address"},"access":{"searchPlaceholder":"Add a person to this board…","noMatches":"No matching people.","asEditor":"as editor","removeMember":"Remove member","removeFromBoard":"Remove from board","workspaceNote":"Workspace members inherit access and are managed in workspace settings.","actionFailed":"Action failed."},"danger":{"heading":"Danger zone","body":"Archiving hides “{name}” from the workspace. It can be restored later — nothing is permanently deleted.","archive":"Archive board","confirm":"Confirm archive","cancel":"Cancel","failed":"Could not archive the board."},"workload":{"heading":"Workload capacity","hint":"How many open items a person can carry before the Workload view marks them OVER. Applies to everyone viewing this board.","defaultCapacity":"Default capacity ({min}–{max} items)","perPerson":"Per-person overrides","useDefault":"Default","capacityFor":"Capacity for {name}"}},"permissionsV2":{"viewAccess":"View access","everyone":"Everyone on the board","managersOnly":"Managers & owners only","specificPeople":"Specific people…","addMembersFirst":"Add members first to pick who can see this.","mainTable":"Main table","ownItemsOnly":"Only their own (assigned) items","viewAccessHint":"Hiding the main table sends a person to the first view they’re allowed to open. Owners and oversight users always see everything.","oversightTitle":"One Boards — oversight access","oversightDesc":"Grant specific people read-only access to ALL One Boards data, regardless of board membership or role. It never allows editing, and every board they open is recorded in the audit log.","oversightLinkTitle":"Oversight access","oversightLinkDesc":"Grant specific people read-only access to all One Boards data (audit-logged)","grantOversight":"Grant oversight access","searchPeople":"Search people by name or email…","noMatches":"No matches.","grant":"Grant","revoke":"Revoke","peopleWithOversight":"People with oversight access","noOversight":"No one has oversight access. Everyone sees only the boards they are a member of.","roleTooltips":{"manager":"Manager — change the board (columns, views, settings) and enter data","dataEntry":"Data entry — add items and edit cell values only","viewer":"Viewer — read only"}},"railTabs":{"views":{"header":"Views","empty":"No saved views yet","emptyHint":"Create and edit views from the board toolbar.","menuLabel":"View options","defaultBadge":"Default","defaultTitle":"Default view","shared":"Shared","private":"Private","setDefault":"Set as default","removeDefault":"Remove as default","rename":"Rename","renameLabel":"View name","archiveView":"Archive view","setDefaultFailed":"Could not set default view","renameFailed":"Could not rename view","archiveFailed":"Could not archive view","types":{"table":"Table","kanban":"Kanban","calendar":"Calendar","timeline":"Timeline","gantt":"Gantt","chart":"Chart","cards":"Cards","map":"Map","workload":"Workload"}},"columns":{"header":"Columns","addColumn":"Add column","empty":"This board has no columns yet.","addFirst":"Add your first column","back":"Back to columns","editLabelsTitle":"Edit Labels","editLabels":"Edit labels","menuLabel":"Column options","moveUp":"Move up","moveDown":"Move down","dragToReorder":"Drag to reorder","hiddenBadge":"hidden","requiredBadge":"required","configure":"Configure column","deleteColumn":"Delete column","genericError":"Something went wrong.","formula":"Formula","formulaHintUse":"Use","formulaHintOr":"or","formulaHintRest":"to reference other columns.","formulaAi":{"askTitle":"Ask Ayva to build a formula","placeholder":"e.g. total price with 8% tax, or days until the due date","build":"Build formula","thinking":"Thinking…","explain":"Explain current","fix":"Fix this error","use":"Use this formula","discard":"Discard","errGeneric":"Ayva could not help with that.","errNetwork":"Could not reach Ayva. Please try again."},"decimals":"Decimals","unit":"Unit","unitPlaceholder":"e.g. USD","sourceConnect":"Source connect column","pickConnect":"— pick a connect column —","mirroredName":"Mirrored column name","mirroredPlaceholder":"Column name on linked board","width":"Width (px)","widthAuto":"auto","hideFromPublic":"Hide from public views","required":"Required","requiredHint":"Items can’t be saved with this column empty.","description":"Description","descriptionHint":"Shown as a tooltip on the column header.","descriptionPlaceholder":"What is this column for?","descriptionTooltipAriaLabel":"Column description","defaultValue":"Default value","defaultValueHelp":"Pre-fills this column when a new item is created.","defaultNone":"None","defaultStatic":"Fixed value","defaultToday":"Today","defaultCurrentUser":"Current user","defaultStaticPlaceholder":"Default value…","defaultStaticKeyPlaceholder":"Label key (e.g. done)","defaultTrue":"Checked","defaultFalse":"Unchecked","buttonSetupAction":"Action","buttonSetupOpenPlaceholder":"Open","createErrorDisabled":"This column type is turned off for your workspace. Pick another type or ask an admin to enable it.","createErrorDenied":"You do not have permission to add columns to this board.","createErrorValidation":"The column could not be created: {message}","createErrorGeneric":"The column could not be created. Try again. ({message})","rollupSourcePlaceholder":"Select a subitem column…","rollupAggregationLabel":"Aggregation","rollupAggregations":{"sum":"Sum","avg":"Average","min":"Min","max":"Max","count":"Count","countFilled":"Count filled"},"formatSection":"Format","formatPlainNumber":"Plain number","formatCurrencyOption":"Currency","formatUpperCase":"UPPERCASE","paletteLabelsHint":"This column uses the {palette} palette. Pick {customLabels} above to edit labels here.","customLabelsInline":"Custom labels","geoDeriveFromLabel":"Derive coordinates from","geoAddressColumnLabel":"Address column","geoSelfContainedOption":"Self-contained (enter address in the cell)","geoCountryBiasLabel":"Country bias (optional)","geoBackfillButton":"Geocode existing rows now","geoLinkedModeHint":"Linked mode auto-fills coordinates whenever the address changes.","productPnUseAsNameLabel":"Use this PN as the item name","productPnUseAsNameHint":"The board's item title mirrors this PN on commit. A manual title edit stops this until you Regenerate the name.","productPnCompanionsHeader":"Autofill companion columns","productPnDescriptionLabel":"Description column","productPnBrandLabel":"Brand column","productPnSiteLabel":"Inventory site (optional)","productPnNoneOption":"None (don't fill)","productPnMoreFieldsHeader":"Auto-fill more fields","productPnCategoryLabel":"Category","productPnMachineTypeLabel":"Machine Type","productPnAlternatesLabel":"Alternate PNs","productPnQuantityLabel":"On-hand Qty","productPnBackfill":"Fill existing rows","productPnBackfilling":"Filling…","productPnBackfillDone":"Filled {count} rows","productPnHint":"Pick which columns receive the product Description and Brand. Leave as None to skip a field.","externalLookupUnconfigured":"Pick a query","externalLookupUnconfiguredHint":"Edit this column and pick a saved query","externalLookupHeader":"Database lookup","externalLookupQueryLabel":"Saved query","externalLookupNoQuery":"None — pick a query","externalLookupNoQueriesHint":"No saved queries yet. Create one in the connector query tool (Admin → Connector).","externalLookupParamsHeader":"Feed parameters from columns","externalLookupNoParams":"This query takes no parameters.","externalLookupParamUnset":"Not mapped","externalLookupResultLabel":"Result field (optional)","externalLookupResultPlaceholder":"First column","externalLookupHint":"Runs the saved query with these columns as its parameters and shows the chosen result field. Read-only; refreshes when the source cells change.","productPnApprovedHeader":"Approved-list filter","productPnApprovedSourceLabel":"Restrict to a board","productPnApprovedSourceNone":"No filter — full catalog","productPnApprovedLoading":"Loading columns…","productPnApprovedPnColLabel":"Part-number column on that board","productPnApprovedStatusColLabel":"Status column (optional)","productPnApprovedStatusColNone":"Any status (every row)","productPnApprovedValuesLabel":"Approved when status is","productPnApprovedHint":"Only part numbers listed on the chosen board — and, if a status is set, whose row matches one of the approved values — can be picked in this column.","currencyOpt":{"defaultCurrency":"Default currency","defaultCurrencyHelp":"Pre-selected currency code when creating a new value.","symbolPosition":"Symbol position","symbolBefore":"Before amount ($100.00)","symbolAfter":"After amount (100.00 USD)","showCode":"Show currency code","showCodeHelp":"Appends the ISO code after the amount, e.g. $10,000.00 USD, so multi-currency boards aren’t ambiguous."},"types":{"text":"Text","long_text":"Long text","number":"Number","status":"Status","person":"Person","people":"People","date":"Date","checkbox":"Checkbox","dropdown":"Dropdown","link":"Link","email":"Email","phone":"Phone","rating":"Rating","percent":"Percent","timeline":"Timeline","markdown":"Markdown","week":"Week","hour":"Hour","country":"Country","world_clock":"World clock","color_picker":"Color picker","currency":"Currency","exchange_rate":"Exchange rate","vote":"Vote","code_snippet":"Code snippet","qr_code":"QR code","uuid":"UUID","ip_address":"IP address","rich_text":"Rich text","signature":"Signature","barcode":"Barcode","formula":"Formula","progress":"Progress","button":"Button","connect_board":"Connect board","connect_items":"Connect items","file":"File","dependency":"Dependency","time_tracking":"Time tracking","subitems_count":"Sub-items count","aggregate":"Aggregate","mirror":"Mirror","location":"Location","tags":"Tags","closeout":"Closeout","priority":"Priority","story_points":"Story points","item_link":"Item link","product_pn":"Product PN"}},"activity":{"title":"Activity","subtitle":"Board change history","empty":"No activity yet","eventCount":"{n} events","showAll":"Show all {n} events","someone":"Someone","justNow":"just now","minutesAgo":"{n}m ago","hoursAgo":"{n}h ago","daysAgo":"{n}d ago","actions":{"itemCreated":"created item","itemRenamed":"renamed item","itemMoved":"moved item","itemArchived":"archived item","itemRestored":"restored item","valueChanged":"changed a value","columnCreated":"added column","columnRenamed":"renamed column","columnRemoved":"removed column","columnRestored":"restored column","groupCreated":"added group","groupRenamed":"renamed group","groupArchived":"archived group","groupRestored":"restored group","groupDeleted":"deleted group","boardCreated":"created board","boardRenamed":"renamed board","boardArchived":"archived board","fallback":"made a change"}},"members":{"title":"Members","memberOne":"1 member","memberCount":"{n} members","searchPlaceholder":"Add a person to this board…","noMatches":"No matching people.","asEditor":"as editor","empty":"No members yet","roleFor":"Role for {name}","removeAria":"Remove {name} from board","removeTitle":"Remove from board","viaWorkspace":"via workspace","creator":"Creator","roles":{"owner":"Owner","editor":"Manager","data_entry":"Data entry","viewer":"Viewer"},"note":"Workspace members inherit access and are managed in workspace settings. The board creator always retains access.","actionFailed":"Action failed."},"notifications":{"title":"Notifications","subtitle":"What this board notifies you about","newItems":"New items","newItemsHint":"Get an in-app notification whenever a new item is created.","following":"Following new items","notFollowing":"Not following","updateFailed":"Could not update your subscription. Please try again.","alwaysOn":"Always on","alwaysOnNote":"These always notify the people they affect — no subscription needed.","prefs":"Notification preferences & channels","events":{"assigned":{"label":"Assigned to you","detail":"When an item on this board is assigned to you."},"statusChanged":{"label":"Status changed","detail":"When a status you own changes."},"mentioned":{"label":"Mentioned","detail":"When someone @-mentions you in an update."},"updatePosted":{"label":"Update posted","detail":"Replies on items you follow."},"dueSoon":{"label":"Due soon","detail":"When an item you own is approaching its due date."}}},"ai":{"title":"Ayva","subtitle":"Board intelligence","notEnabled":"AI features are not enabled for this board.","fallbackBoardName":"this board","toolsHeading":"AI tools","sections":{"summary":"Catch me up","digest":"Weekly digest","standup":"Standup","anomalies":"Anomalies","slipRisk":"Slip risk","nextActions":"Next actions","duplicates":"Duplicates","statusUpdate":"Status update","chat":"Ask Ayva","notesImport":"Meeting notes"}}},"aiBreakdown":{"trigger":"AI: break into subtasks","tooltip":"Suggest a breakdown of this item into subtasks with AI","thinking":"Thinking…","heading":"Suggested subtasks","add":"Add subtask","added":"Added","addAll":"Add all","addFailed":"Could not add subtask.","empty":"No suggestions.","unavailable":"AI is unavailable right now. Please try again later.","poweredBy":"Powered by Ollama"},"aiQuery":{"placeholder":"Ask AI about this board…","trigger":"Search","thinking":"Thinking…","clearAll":"Clear all","removeFilter":"Remove","filterLabel":"Filter: {col} {op} {val}","sortLabel":"Sort: {col} {dir}","groupLabel":"Group by: {col}","summary":"AI interpreted:","unavailable":"AI is unavailable right now.","uninterpretable":"Couldn't interpret that. Try rephrasing.","poweredBy":"Powered by Claude","filteredBanner":"View is filtered by AI query — clear the query bar or toolbar to see all items."},"gridControls":{"rowNumbers":"Row numbers","rowNumbersHint":"Show or hide the row-number gutter","pinnedLabel":"Pinned","selectRow":"Select row","bulkTopLevelOnly":"Top-level items only — skips {count} sub-item(s)","bulkColumnDepthSkips":"Skips {count} row(s) this column does not apply to","bulkNoTargets":"No selected row has this column","renameColumn":"Rename","renameItem":"Rename item","dragToReorderGroup":"Drag to reorder group","groupActions":"Group actions","rowActions":"Row actions","renameGroupAction":"Rename","recolorGroupAction":"Color","moveGroupUp":"Move up","moveGroupDown":"Move down","archiveGroupAction":"Archive","archiveGroupConfirm":"Archive this group?","archiveGroupConfirmYes":"Archive","archiveGroupConfirmNo":"Cancel"},"gridParity":{"groupMenu":{"duplicate":"Duplicate {group}","withItems":"With {items}","withoutItems":"Without {items}","copyName":"{name} (copy)","confirmWithItems":"{count} {items} will be copied. “Duplicated” automations run once per top-level {item} ({top}).","confirmYes":"Duplicate","confirmNo":"Cancel","duplicating":"Duplicating…"},"moveBoard":{"tabLabel":"Move to board","title":"Move to another board","oneItem":"1 item","manyItems":"{count} items","targetBoard":"Target board","chooseBoard":"Choose a board…","loading":"Loading…","noBoards":"There is no other board you can edit.","targetGroup":"Target group","mapping":"Column mapping","mappingHint":"A value only goes to a column of the same type and level.","doNotMove":"Do not move (lost)","valuesInColumn":"{count} with a value","noColumns":"No columns to map.","restrictedData":"There is restricted data in this selection; some of it may not travel to the other board. It can only be recovered with Undo while the button is still showing.","summaryTitle":"Summary","summaryItems":"{items} and {subitems} subitems move.","summaryKept":"{count} values kept","summaryKeptOne":"1 value kept","summaryLost":"{count} values lost","summaryLostOne":"1 value lost","summaryAutomations":"{count} automations on the target board run when items arrive (moved or updated).","summaryAutomationsOne":"1 automation on the target board runs when items arrive (moved or updated).","sourceWired":"This board is wired into app logic (integrations, sync or intake). Moving items out of it can affect them.","noColumnsCreated":"No column is created on the target board.","moveButton":"Move {count}","moving":"Moving…","cancel":"Cancel","close":"Close","moved":"Moved {count}","partial":"Moved {moved} · {failed} failed: {message}","rowMenu":"Move to another board…","bulkMenu":"Move to board…","addToBoardHint":"Keeps the item here","topLevelOnly":"Only top-level items move; {count} subitems travel with their parent.","groupTitle":"Move {group} to another board","groupSubtitle":"{Group} “{name}”","groupNewGroup":"It is created on the target board with the same name and colour, and archived here.","groupPermissionsNotCopied":"Visibility rules ({count}) are not copied: set them again on the target board.","groupPermissionsNotCopiedNone":"Visibility rules are never copied to the target board.","moveGroupButton":"Move {group}","groupMenu":"Move to another board…"},"undoLabel":{"cell":"Cell edit","status":"Status change","priority":"Priority change","storyPoints":"Story points change","itemLink":"Item link change","cleared":"Cell cleared","undid":"Undid: {label}","failed":"Undo failed: {message}","unknownError":"unknown error","button":"Undo","hint":"Undo last cell change (Cmd+Z)"},"pasteList":{"title":"Paste as a list?","willCreate":"{n} {items} will be created in «{group}»","automations":"{m} “item created” automations will run {n} times (up to {total} runs)","noAutomations":"No “item created” automation on this board","webhooks":"webhooks will receive {n} events","capped":"Only the first {max} of {total} lines will be created (this board’s limit)","create":"Create {n}","asOneTitle":"Paste as a single title","cancel":"Cancel","creating":"Creating…","loading":"Checking automations…","created":"{n} {items} created","createdOne":"1 {item} created","partial":"{failed} lines could not be created (line {line}: {message})","dropped":"{dropped} lines left out by the limit of {max}","failed":"Could not create the items.","limitTitle":"Pasted lists","limitLabel":"Most items one pasted list may create","limitHint":"Pasting a list into «+ Add» creates one item per line, up to this many (default 100, maximum 500).","limitSave":"Save limit","limitSaved":"Paste limit saved","limitSaveFailed":"Could not save the paste limit"},"facets":{"avatarsLabel":"Filter by {column}","avatarCount":"{name} has {count} {items}","countUnavailable":"{name} (count unavailable)","more":"+{n}","moreTitle":"{n} more people","shiftHint":"Shift+click adds people to the filter","suggested":"Suggested","suggestedTitle":"Suggested filters","suggestedEmpty":"No suggestions for this view","suggestedUnavailable":"Suggestions are not available for this filter combination","loading":"Loading…"},"clearCell":"Clear the active cell","cellClearedLabel":"Cleared {column}","columnMenuLabel":"Column options: {column}","configureColumn":"Configure column","sortAsc":"Sort ascending","sortDesc":"Sort descending","clearSort":"Remove sort","reverseSort":"Reverse sort","filterByColumn":"Filter by this column","hideColumn":"Hide column","freezeUpToHere":"Freeze up to here","addColumnRight":"Add column to the right","duplicateColumn":"Duplicate column","copyColumnId":"Copy column ID","columnIdCopied":"Column ID copied","copySuffix":"(copy)","duplicateFailed":"Could not duplicate the column.","duplicateWithoutValues":"Duplicate (without values)","duplicateWithValues":"Duplicate with values","deleteColumn":"Delete column","deps":{"tabLabel":"Delete column","title":"Delete column","close":"Close","cancel":"Cancel","shortLead":"The column and its values are hidden, not erased. You can undo for 60 seconds from the bar at the bottom.","confirmShort":"Delete column","deleting":"Deleting…","lead":"Other parts of the board depend on this column. Review what will happen before deleting it.","breaksHeading":"Breaks integrations","stopsMatchingHeading":"Will stop matching","cellsWithValue":"{count} cells with a value will be hidden (they come back if you undo).","confirmAnyway":"Delete anyway","hiddenBoards":"{count} more on boards or dashboards you cannot see (not named).","failed":"Could not delete the column.","kinds":{"formula_by_name":"The formula «{where}» uses it by name and will show an error.","mirror_source":"The mirror column «{where}» reads its linked items through it and will go blank.","aggregate_source":"The aggregate «{where}» rolls it up and will stop counting.","geo_source":"The location column «{where}» takes its address from it and will stop updating.","reciprocal_pair":"Its two-way partner «{where}» on board «{label}» becomes one-way.","automation":"The active automation «{where}» uses it and may stop running as expected.","sla_policy":"The SLA column «{where}» uses it ({label}) and will measure without it.","saved_view":"The saved view «{where}» filters, sorts or groups by it; that part is dropped.","dashboard_widget":"A dashboard widget ({where} {label}) reads it and will show less data.","form_field":"The form «{where}» asks for it; that field disappears from the form.","conditional_formatting":"The color rules of «{where}» check it and will stop applying.","name_rule":"The item-name rule uses it; new names will skip that part.","product_pn_companion":"The Product PN column «{where}» fills it ({label}) and will stop doing so.","status_router":"It is the only status column: the Status → Group router turns off (restoring the column turns it back on).","column_config":"The column «{where}» ({label}) uses it in its settings and will stop matching.","progress_tape":"The progress tape «{where}» reads it and will stop advancing."}},"changeType":"Change type…","typeChange":{"tabLabel":"Change type","title":"Change column type","close":"Close","cancel":"Cancel","current":"Current type: {type}","targetLabel":"New type","targetPlaceholder":"Choose a type…","noTargets":"This column type cannot be converted to any other type.","previewing":"Checking every cell…","kept":"{count} keep their value","lost":"{count} will be emptied (do not fit)","empty":"{count} are already empty","newLabels":"New labels to create ({count})","newTags":"New tags to create ({count})","lostSamplesHeading":"Examples of values that will be lost","archivedCells":"Includes {count} cells of archived items: they change type too and are not among the examples.","archivedCellsOne":"Includes 1 cell of an archived item: it changes type too and is not among the examples.","archivedLost":"{count} of the emptied values are in archived items.","archivedLostOne":"1 of the emptied values is in an archived item.","softHeading":"May stop matching","snapshotNotice":"A copy of every cell is kept for 60 seconds so you can undo from the bar below.","backupNotice":"This column has more than 2,000 cells: the copy is kept as an archived column «{name} ({suffix})», and Undo uses it.","noEffects":"Converting does not log a change per cell and does not run automations, webhooks or notifications. Views, dashboards, forms and automations keep pointing at the column; filters that no longer fit are dropped.","confirmLost":"I understand that {count} values will be lost","convert":"Convert {count} cells","converting":"Converting…","failed":"The column type could not be changed.","backupSuffix":"before the type change","blockedHeading":"This column cannot change type","blocked":{"wiring":"An integration depends on it:","sla_policy":"An SLA column measures with it.","structural_type":"Its type computes, links or stamps its own values.","item_name":"Item names are built from it.","derived_ref":"A formula, mirror, aggregate or location column of this board reads it."},"errors":{"TOO_MANY_TAGS":"More than 50 new tags would be created: too many for the shared tag catalog.","UNDO_EXPIRED":"Undo is only available for 60 seconds after the change.","CONFLICT":"The column changed since this preview. Review it again before converting.","AUTHORIZATION_DENIED":"You need access to every row of this board to change a column type.","VALIDATION":"That request is not valid.","TOO_LARGE":"{cells} cells hold a value: at most 20,000 can change type at once.","TOO_MANY_LABELS":"More than 50 different values: too many labels for a status or dropdown column.","LOST_CONFIRM_REQUIRED":"Confirm that the values that do not fit will be lost.","FEATURE_DISABLED":"This feature is not enabled."},"notes":{"currency_dropped":"{count} amounts keep the number and drop the currency","rating_clamped":"{count} ratings are cut to the scale","people_truncated":"{count} cells keep only the first person","link_label_dropped":"{count} links keep the address and drop the label"}},"dupValues":{"tabLabel":"Duplicate with values","title":"Duplicate with values","close":"Close","cancel":"Cancel","lead":"Creates a copy right after «{name}» with its type, settings, required flag and restrictions, then copies the value of every live row.","hiddenRows":"The copy includes rows you cannot see on this board.","noEffects":"Copying does not log one change per cell and does not run automations, webhooks or notifications.","confirm":"Duplicate with values","working":"Copying…","done":"{count} values copied into «{name}».","failed":"Could not duplicate the column with its values.","unsupported":"This column type computes its own values, so it can only be duplicated without values."},"subitemNoun":"subitem","subitemsNoun":"subitems","addSubitem":"Add subitem","createItemBelow":"Create {item} below","moveToGroup":"Move to {group}","untitled":"(Untitled)","actionFailed":"Could not complete the action."},"spreadsheet":{"find":"Find","findPlaceholder":"Find in board…","replacePlaceholder":"Replace with…","replaceOne":"Replace","replaceAll":"Replace all","matchCase":"Match case","wholeCell":"Whole cell","thisColumn":"This column only","allColumns":"All text columns","prev":"Previous match","next":"Next match","close":"Close","noMatches":"No matches","replacedCount":"Replaced","undoReplace":"Replace","undoPaste":"Paste","undoFill":"Fill","cells":"cells","pasteDone":"Pasted","pasteAddRows":"new rows","skipped":"skipped","pasteOverflowPrefix":"This paste adds","pasteApply":"Paste","cancel":"Cancel","fillHandleLabel":"Drag to fill"},"subitemProgress":{"sourceLabel":"Progress source","sourceRow":"Status columns on this row","sourceSubitems":"Phases (subitems)","phaseStatusLabel":"Phase status column","phaseStatusPlaceholder":"Select a subitem status column…","phaseWeightLabel":"Weight column (optional)","phaseWeightNone":"No weights — every phase counts the same","noSubitemStatus":"Add a status column to the subitems first, then pick it here.","partialLabel":"Partial credit per status","partialFactorAria":"Partial credit for {label}, in percent","doneHint":"A phase in a done status counts 100%. Other statuses count 0% unless they have partial credit.","weightsHint":"Weights are normalised: they do not need to add up to 100. Phases left blank share what is left up to 100 (with no weight entered at all, every phase weighs the same); a weight of 0 leaves a phase out.","topLevelOnly":"Phase progress is only available on item columns, not on subitem columns.","cellPickStatus":"Pick the phase status column","cellEmpty":"No phases to measure yet","noWeights":"The phases have no weight","breakdownTitle":"Progress by phase","breakdownAria":"Show the progress breakdown by phase","colPhase":"Phase","colStatus":"Status","colWeight":"Weight","colContribution":"Contribution","noStatus":"No status","phaseWithoutWeight":"phase without weight","missingWeightWarning":{"one":"{n} phase has no weight and counts 0.","other":"{n} phases have no weight and count 0."},"defaultedEqualMark":"equal","defaultedRemainderMark":"shared","equalDefaultSummary":"No weights entered: every phase weighs the same.","filledRemainderSummary":{"one":"{n} phase without weight takes the remaining {x}%.","other":"{n} phases without weight share the remaining {x}%."},"total":"Total"},"footer":{"boardTotal":"∑ Board total","itemOne":"item","itemMany":"items","manual":"manual","configure":"Configure total","function":"Function","defaultFn":"Default","manualOverride":"Manual value","manualPlaceholder":"Type a value…","set":"Set","clearManual":"Clear manual value","emptyCount":"Empty: {n}","aggregations":{"count":"Count","count_distinct":"Distinct","count_non_empty":"Filled","sum":"Sum","avg":"Avg","median":"Median","min":"Min","max":"Max","percent_checked":"% checked","percent_done":"% done"}},"sharePanel":{"publicLinkDefault":"Public link","calendar":{"copied":"Copied!","copyUrl":"Copy calendar URL","remindersOn":"Reminders on (1 day before)","remindersOff":"Reminders off","remove":"Remove"},"share":"Share","title":"Share board","close":"Close","addPeople":"Add people","searchPlaceholder":"Search people by name or email…","pressEnterBefore":"Press","enterKey":"Enter","pressEnterAfter":"to add.","joinAs":"New members join as {role}.","myView":"My view of this board","onlyMyItems":"Only my items","wholeTeam":"Whole team","scopeOwnHint":"You're only seeing items where you're the assignee. This is a personal setting — it doesn't change what anyone else sees.","scopeAllHint":"You're seeing every item on this board. Switch to “Only my items” to hide items assigned to other people.","noMembers":"No explicit members yet. Add someone above.","viaWorkspace":"via workspace","removeMember":"Remove {name}","memberFallback":"member","couldNotSetScope":"Could not set item scope","couldNotSaveViewAccess":"Could not save view access","visibility":"Visibility","visibilityWorkspace":"Workspace","visibilityWorkspaceHint":"Everyone who can see this workspace can open the board.","visibilityPrivate":"Private","visibilityPrivateHint":"Only the owner and the members listed below can open it.","onlyOwnerVisibility":"Only the board owner can change visibility.","publicLink":"Public read-only link","copied":"Copied!","revokeLink":"Revoke link","createPublicLink":"Create a public link","publicLinkHint":"Anyone with the link sees a read-only view. People, contact, file and location columns are hidden, plus any column marked “Hide from public”.","calendarSubscription":"Calendar subscription","createCalendarFeed":"Create a calendar feed","calendarHint":"Every dated item becomes an event you can subscribe to in Outlook, Google or Apple Calendar. Read-only; people, contact, file and location columns are never included."},"mirrorAggregation":{"label":"When several rows are linked","hint":"Formulas read the folded number, e.g. [Initial stock] + [QTY IN] - [QTY OUT].","list":"List","sum":"Sum","avg":"Average","min":"Min","max":"Max","count":"Count"},"nouns":{"item":"item","items":"items","group":"group","groups":"groups","add":"Add {item}","addButton":"Add","newTitlePlaceholder":"New {item} title","adding":"Adding…","countPartial":"{loaded} of {total} {items}","newGroup":"New {group}","groupNamePlaceholder":"{group} name","createGroup":"Create {group}","creatingGroup":"Creating…","groupNameEmpty":"{group} name cannot be empty"},"statusTape":{"title":"Board status","empty":"No items yet","configure":"Configure status tape","drivingColumn":"Status column","position":"Position","posTop":"Top band","posAbove":"Above the grid","posBelow":"Below the grid","noStatusColumn":"This board has no status column.","noStatusBucket":"No status"},"workflow":{"header":"Workflow","on":"ON","off":"OFF","hint":"Pick which statuses each state can move to. Green = allowed. Anything not allowed is rejected on save, on every path (app, API, automations).","ownerOnly":"Only the board owner can change the workflow.","loading":"Loading…","needsTwoLabels":"Add at least two labels to set up a workflow.","rowUnrestricted":"goes anywhere","rowAllowsCount":"allows {n}","toggleEdgeTitle":"Allow or block \"{from}\" → \"{to}\"","entryHeader":"New items can start at","entryHint":"Which statuses a brand-new item may be created with. All allowed unless you narrow it.","observedHeader":"Transitions actually used","observedHint":"Recorded on this column. Amber ones would be blocked by the workflow above.","wouldBlock":"would be blocked","breaksWarning":"{n} transition(s) this board really uses would be blocked. Check before enforcing.","presetLinear":"Linear chain","clearAll":"Clear workflow","emptyState":"(empty)"},"cf":{"applyTo":"Apply to","scopeCell":"Cell","scopeRow":"Whole row","rowBadge":"Row","column":"Column","thisColumn":"This column","andSep":"and","addCondition":"+ Add condition","matchAll":"Match all (AND)","matchAny":"Match any (OR)","removeCondition":"Remove condition","valuePlaceholder":"e.g. Done"},"aiDigest":{"trigger":"Weekly digest","closeDigest":"Close digest","tooltip":"Generate a 7-day activity digest for this board with AI","generating":"Generating digest…","unavailablePrefix":"AI unavailable — ","unavailable":"AI digest is unavailable right now. Please try again later.","refresh":"Regenerate digest","close":"Close digest","poweredBy":"Powered by Claude"},"aiStandup":{"trigger":"Standup","closeStandup":"Close standup","tooltip":"Generate a 24-hour standup summary for this board with AI","generating":"Generating standup…","unavailablePrefix":"AI unavailable — ","unavailable":"AI standup is unavailable right now. Please try again later.","refresh":"Regenerate standup","close":"Close standup","poweredBy":"Powered by Claude","windowLabel":"Last {hours}h"},"aiAnomalies":{"trigger":"Scan for anomalies","closeScan":"Close anomaly scan","tooltip":"Scan this board for anomalies in metrics (overdue spikes, throughput drops, WIP blowup, etc.)","scanning":"Scanning…","heading":"{count} {count, plural, one {Anomaly} other {Anomalies}} Detected","noAnomalies":"Board looks healthy — no anomalies detected.","warningBadge":"Warning","criticalBadge":"Critical","explanationHeading":"AI Explanation","explanationUnavailable":"AI explanation unavailable — flags above are deterministic and accurate.","unavailable":"Anomaly detection is unavailable right now. Please try again later.","refresh":"Re-scan for anomalies","close":"Close anomaly scan","poweredBy":"Anomaly detection: deterministic · Explanation: Claude","anomalyIds":{"overdue_spike":"Overdue Spike","throughput_drop":"Throughput Drop","stuck_items":"Items Stuck","wip_blowup":"WIP Explosion","inflow_spike":"Sudden Inflow"}},"aiChat":{"trigger":"Ask Ayva about this board","closeChat":"Close board chat","title":"Ayva — Board Assistant","thinking":"Ayva is thinking…","placeholder":"Ask about this board… (Enter to send, Shift+Enter for new line)","send":"Send message","clear":"Clear conversation","unavailablePrefix":"AI unavailable — ","unavailable":"AI is unavailable right now. Please try again later.","emptyHint":"Ask me anything about this board — I’ll answer from the real data.","poweredBy":"Powered by Claude"},"aiSlipRisk":{"trigger":"Check slip risk","closePanel":"Close slip risk","tooltip":"Score all active items for slip risk (overdue, due soon, stale, blocked)","analyzing":"Analyzing…","heading":"{count} {count, plural, one {Item} other {Items}} at Risk","noRisk":"No items at risk — all on track.","highBadge":"High risk","mediumBadge":"Medium risk","scoreLabel":"score","reasonsUnavailable":"AI reasons unavailable — risk scores and signals above are deterministic and accurate.","unavailable":"Slip-risk prediction is unavailable right now. Please try again later.","refresh":"Re-scan slip risk","close":"Close slip risk panel","poweredBy":"Scoring: deterministic · Reasons: Claude","signals":{"overdue":"Overdue","due_soon":"Due soon","stale":"Stale","blocked":"Blocked"}},"aiNextActions":{"trigger":"Next actions","closePanel":"Close next actions","tooltip":"Find items needing attention and suggest a next action for each","analyzing":"Analyzing…","heading":"{count} {count, plural, one {Item} other {Items}} Need Attention","allClear":"All items are on track — nothing needs attention.","suggestionsUnavailable":"AI suggestions unavailable — items above were selected deterministically and are accurate.","unavailable":"Next-actions service is unavailable right now. Please try again later.","refresh":"Refresh next actions","close":"Close next actions panel","poweredBy":"Selection: deterministic · Actions: Claude","signals":{"overdue":"Overdue","stale":"Stale","blocked":"Blocked","unassigned":"Unassigned","high_priority_no_progress":"Stalled"}},"aiBuilder":{"trigger":"Build with AI","triggerHint":"— describe your board in plain English","sectionHeading":"Build with AI","inputLabel":"Describe your board","inputPlaceholder":"e.g. a sales pipeline with stages Lead, Qualified, Won, and Lost — a deal-value currency column, an owner people column, and a close-date column. Include 2–3 sample items per stage.","inputHintReady":"Ready to propose","inputHintNeedMore":"{remaining} more character{s} needed","proposeButton":"Propose board","proposing":"AI is designing your board…","reviewBoardName":"Board name","reviewGroups":"Groups ({count})","reviewColumns":"Columns ({count})","reviewSampleItems":"Sample items ({count})","reviewItemIn":"in","confirmButton":"Confirm & Create","startOverButton":"Start over","retryButton":"Retry creation","creating":"Creating your board…","done":"Board created! Navigating…","poweredBy":"Powered by Claude","unavailable":"AI is unavailable right now. Please try again later.","errorGeneric":"Could not create the board. Please try again.","errorServer":"Server error ({status}). Please try again.","errorNetwork":"Could not reach the server. Please check your connection."},"aiDuplicates":{"trigger":"AI: find duplicates","tooltip":"Scan this board for likely-duplicate items using AI","scanning":"Scanning…","heading":"Likely duplicates","scannedHint":"{count} items scanned","clusterLabel":"Duplicate group {n}","reason":"Reason","keepLabel":"Keep","archiveLabel":"Archive","archiving":"Archiving…","archiveFailed":"Could not archive item.","noDuplicates":"No duplicates found.","unavailable":"AI is unavailable right now. Please try again later.","poweredBy":"Powered by Ollama","dismiss":"Dismiss","retry":"Scan again"},"aiAutofill":{"trigger":"AI fill","tooltip":"Let AI suggest column values for this item based on its title","thinking":"Generating suggestions…","heading":"AI Fill Suggestions","selectAll":"Select all","deselectAll":"Deselect all","accept":"Accept","acceptCount":"Accept ({count})","applying":"Applying…","dismiss":"Dismiss","close":"Close","noSuggestions":"No column suggestions for this item title.","unavailable":"AI auto-fill is unavailable right now.","applied":"{count} value applied.","appliedPlural":"{count} values applied.","poweredBy":"Powered by Claude","turnOff":"Turn off these suggestions for me","turnOffHint":"Only affects you — flip it back anytime from the board ⋯ menu.","turnedOffToast":"Ayva suggestions are off for you. Re-enable them from the board ⋯ menu.","turnedOnToast":"Ayva suggestions are back on for you.","menuDisable":"Turn off Ayva suggestions on new items (only me)","menuEnable":"Turn Ayva suggestions back on (only me)"},"aiNotes":{"trigger":"Import from notes","closeTrigger":"Close notes import","tooltip":"Paste meeting notes and let AI extract action items for review","heading":"Meeting Notes → Action Items","notesLabel":"Paste your meeting notes","notesPlaceholder":"Paste meeting notes, action items, or any free-form text here. AI will extract action items for review.","extractButton":"Extract action items","extracting":"Extracting…","foundHeading":"{count} Action Item Found","foundHeadingPlural":"{count} Action Items Found","editHint":"Edit titles or remove items before creating","assigneeHint":"Assignee hint: {name}","dueHint":"Due hint: {date}","backToNotes":"← Back to notes","createButton":"Create {count} item","createButtonPlural":"Create {count} items","creating":"Creating…","noItems":"No action items found. Try adding more detail to your notes.","unavailable":"AI extraction is unavailable right now. Please try again.","created":"{count} item created on the board.","createdPlural":"{count} items created on the board.","poweredBy":"Extraction: Claude · Items created to board on confirm"},"aiTemplateRec":{"trigger":"AI: recommend a template","triggerHint":"— describe what you want to build in one line","inputPlaceholder":"e.g. a CRM for tracking sales leads and deals","recommendButton":"Recommend","finding":"Finding best matches…","resultsHeading":"Best matching templates ({count})","useTemplate":"Use template","tryAgain":"Try a different description","noMatch":"No matching templates found. Try a different description or browse manually.","unavailable":"AI is unavailable right now. Please try again later.","poweredBy":"Powered by Claude","close":"Close"},"aiStatusUpdate":{"trigger":"Draft status update","closeTrigger":"Close status update","tooltip":"Generate an AI-drafted status update from real board data and post it to the News Feed","drafting":"Drafting…","titleLabel":"Announcement title","bodyLabel":"Status update (review and edit before posting)","categoryLabel":"News Feed category","postButton":"Post to News Feed","posting":"Posting…","regenerate":"Regenerate draft","posted":"Posted to News Feed.","viewAnnouncement":"View announcement →","unavailablePrefix":"AI unavailable — ","unavailable":"AI draft is unavailable right now. Please try again later.","errorPost":"Could not post to News Feed.","reviewNote":"Review and edit before posting.","poweredBy":"Powered by Claude","close":"Close"},"linkedBoards":{"empty":"No linked boards yet.","addButton":"Add linked board","pickerTitle":"Pick a board to link","pickerPlaceholder":"Search boards…","pickerEmpty":"No boards match.","pickerAllLinked":"All visible boards are already linked.","removeTitle":"Remove link","errorAdd":"Could not link board.","errorRemove":"Could not remove link."},"description":"One Boards — workspaces, boards, items, columns, views, widgets, dashboards. The engine inside one.redsis.app. Distinct from the Monday-sync mirror.","tabs":{"overview":"Overview","templates":"Templates","recovery":"Recovery","quotas":"Quotas"},"stats":{"workspaces":"Workspaces","boards":"Boards","items":"Items","storageUsed":"Storage used"},"permissionDeniedTab":"You don't have permission for this tab","overview":{"recentActivity":"Recent activity","adminHint":"You have boards.admin — Templates / Recovery / Quotas tabs are unlocked above."},"placeholders":{"templates":"System and user board templates are registered in the nb_board_templates table. The UI here lists every template, edits the system ones, and lets you publish/unpublish.","recovery":"Restore soft-deleted boards and items. Every nb_* row with deleted_at IS NOT NULL surfaces here with a 30-day window before hard-delete. Storage quotas do not count soft-deleted rows.","quotas":"Per-workspace storage quotas. Default is 1 GiB per workspace; admins can raise individually. nb_workspaces.storage_quota_bytes is the canonical column; the storage-rollup trigger on nb_files keeps storage_used_bytes accurate.","shipsInPrefix":"Ships in:"},"capabilities":{"boards.create":"Create boards","boards.read":"View boards","boards.update":"Edit board structure","boards.archive":"Archive boards I own","boards.archive_others":"Archive boards I don't own","boards.admin":"Administer One Boards","boards.share":"Share a board","boards.export":"Export board contents","boards.template_create":"Create user board templates","boards.template_admin":"Administer system board templates","boards.recovery":"Restore soft-deleted boards / items","boards.quota_admin":"Manage per-workspace storage quotas"},"liveRefresh":{"updated":"Board updated","refreshing":"Refreshing…"},"whiteboard":{"toolSelect":"Select","toolSticky":"Sticky note","toolText":"Text","toolShape":"Shape","toolFrame":"Frame","toolPen":"Pen","toolConnector":"Connector","toolImage":"Image","addItems":"Add items","undo":"Undo","redo":"Redo","zoomIn":"Zoom in","zoomOut":"Zoom out","zoomReset":"Reset zoom","zoomFit":"Fit to content","fill":"Fill","stroke":"Colour","width":"Width","fontSize":"Size","customColor":"Custom colour","duplicate":"Duplicate","bringFront":"Bring to front","front":"Front","sendBack":"Send to back","back":"Back","delete":"Delete","close":"Close","searchItems":"Search items…","noItems":"No items match.","untitled":"Untitled","frameTitle":"Frame","imageUploadFailed":"Image upload failed","linkDependency":"⛓ Link as dependency","unlinkDependency":"⛓ Linked as dependency — click to unlink","defaultViewName":"Whiteboard","createFailed":"Could not create whiteboard","emptyTitle":"Start a whiteboard","emptyBody":"A freeform canvas for this board — place items as cards and add sticky notes, shapes, drawings, and connectors.","creating":"Creating…","createView":"Create whiteboard","noEditAccess":"Ask an editor to set up the whiteboard.","minimap":"Whiteboard minimap"},"presence":{"viewingCount":"{count} viewing","youSuffix":"{name} (you)","andMore":"+{count} more"},"conflictGuard":{"editingHere":"{name} is editing","editingHereMulti":"{count} people editing","overwroteTitle":"Cell updated by {name}","overwroteBody":"Your change overwrote theirs — re-check the cell."},"archiveTrash":{"tabs":{"active":"Active","archived":"Archived","trash":"Trash"},"archiveAction":"Archive board","deleteAction":"Delete board","archiveConfirmPrefix":"Archive","archiveConfirmSuffix":"?","archiveConfirmHint":"Archived boards are kept indefinitely. Restore it any time from Archived, or undo below for the next few seconds.","deleteConfirmPrefix":"Delete","deleteConfirmSuffix":"?","deleteConfirmHint":"You can restore it from Trash for {days} days.","confirmArchive":"Confirm","archiving":"Archiving…","confirmDelete":"Delete","deleting":"Deleting…","cancel":"Cancel","archivedLabel":"Archived","deletedLabel":"Moved to Trash","undo":"Undo","restoring":"Restoring…","dismiss":"Dismiss","archiveErrorPrefix":"Couldn't archive {name}:","deleteErrorPrefix":"Couldn't delete {name}:","archivedTitle":"Archived boards","archivedEyebrow":"One Boards","archivedDescription":"Boards you archived. Kept indefinitely — restore any time, or send to Trash to schedule removal.","archivedEmptyTitle":"No archived boards","archivedEmptyBody":"When you archive a board it moves here and stays until you restore it or delete it.","archivedOn":"Archived {date}","trashTitle":"Trash","trashEyebrow":"One Boards","trashDescription":"Deleted boards stay here for {days} days, then leave your Trash. Nothing is permanently destroyed — after that an administrator can still recover them.","trashEmptyTitle":"Trash is empty","trashEmptyBody":"Boards you delete land here and are recoverable for {days} days. After that they leave your Trash but an administrator can still restore them.","deletedOn":"Deleted {date}","daysLeft":"{days} days left","oneDayLeft":"1 day left","lastDay":"Leaves Trash today","expiredBadge":"Past retention","restore":"Restore","delete":"Delete","deleteNow":"Delete now","moveToTrash":"Move to Trash","settingsTitle":"One Boards Settings","settingsEyebrow":"Technology Hub","settingsDescription":"Archive & Trash across every user. Restore any board or purge it from a user’s Trash. Boards are never hard-deleted.","sectionArchived":"Archived boards","sectionTrash":"Trashed boards","adminArchivedEmpty":"No archived boards across the platform.","adminTrashEmpty":"No trashed boards across the platform.","colOwner":"Owner","colWorkspace":"Workspace","colDate":"Date","ownerUnknown":"Unknown owner","adminNote":"Every user’s archived and trashed boards. Restore returns a board to Active; Delete now removes it from the owner’s Trash but keeps it retained here (never hard-deleted).","accessDeniedTitle":"Recovery access required","accessDeniedBody":"You need the board recovery permission to manage everyone’s archived and trashed boards.","movedToTrashAdmin":"Removed from owner’s Trash"},"driftMasters":{"sectionTitle":"Master boards & drift","sectionDescription":"Hub-and-spoke master registry plus the nightly drift report. Detection only — nothing here blocks or changes a board.","disabledTitle":"Drift detector is off","disabledBody":"The one_boards_drift_detector flag is disabled: the nightly sweep is skipped and the report is hidden. Registered masters are kept; detection resumes when the flag is re-enabled.","mastersTitle":"Registered master boards","mastersEmpty":"No master boards registered yet.","missingLabel":"No master registered for:","archivedBadge":"Archived","designateTitle":"Designate a master","designateHint":"Marks a board as the canonical master for an entity (settings.masterEntity). Reports change; behavior never does.","boardIdPlaceholder":"Board short ID (BRD-…)","entityLabel":"Entity","designateButton":"Designate","clearButton":"Clear","confirmClear":"Confirm?","alreadyRegistered":"That entity already has a registered master — clear it first.","boardNotFound":"No live board with that short ID.","entities":{"client":"Clients","vendor":"Vendors / Techs","parts":"Parts","location":"Locations","sla":"SLA"},"reportTitle":"Drift report (computed live)","totalFindingsLabel":"findings","participatingLabel":"Participating spoke workspaces","checkATitle":"Master-shaped boards outside the hub","checkBTitle":"Spoke boards with no master connect","checkCTitle":"Boards without provisioning provenance","checkCOutsideNote":"more outside hub/spoke workspaces (counted, not listed)","masterlessNote":"No masters registered yet — this check scanned every workspace.","truncatedPrefix":"Showing first","truncatedOf":"of","noFindings":"No findings.","matchedLabel":"matched","ownerLabel":"Owner","createdLabel":"Created","errorGeneric":"Action failed"},"moveWorkspace":{"menuAction":"Move to workspace","pickerTitle":"Move \"{name}\" to…","checking":"Checking for cross-board links…","confirmPrefix":"Move","confirmMiddle":"to","confirmSuffix":"?","confirmHint":"This changes the board's home workspace. It stays fully intact — items, columns, and views move with it.","impactTitleOne":"This move may break access to a linked board for some people.","impactTitleMany":"This move may break access to {count} linked boards for some people.","impactLinksTo":"Links to","impactLinkedFrom":"Linked from","impactWorkspaceWarning":"members of {workspace} who aren't also in {toWorkspace} may lose read access to one side.","confirmMove":"Move","confirmMoveAnyway":"Move anyway","moving":"Moving…","movingTo":"Moving to {workspace}…","movedPrefix":"Moved","movedSuffix":"to {workspace}","moveErrorPrefix":"Couldn't move {name}:"}},"announcements":{"moduleTitle":"Announcements","adminTitle":"Announcements","tabs":{"categories":"Categories","publishers":"Publishers","moderation":"Moderation"},"moduleEmpty":{"eyebrow":"Announcements","title":"No announcements yet","body":"Check back soon — your team will post updates here."},"adminEmpty":{"categories":{"eyebrow":"Categories","title":"No categories configured","body":"Categories group your announcements by audience. Category management is coming soon."},"publishers":{"eyebrow":"Publishers","title":"No publisher rules set","body":"Publisher rules control who can post in each category. You'll manage them here once categories are configured."},"moderation":{"eyebrow":"Moderation","title":"No content to moderate","body":"Once announcements are published, you can review and manage them here."}},"categories":{"all-staff":"All Staff","company-news":"Company News","leadership":"Leadership","managers":"Managers","warehouse":"Warehouse","operations":"Operations"},"broadcast":{"categorySuffix":"sends to everyone","warningTitle":"Company-wide broadcast","warningDetail":"Posting sends an in-app notification (and, on paths where email is wired, an email) to every active user. You will be asked to type CONFIRM before it goes out.","dialogTitle":"Send to every active user?","dialogPromptPrefix":"This will notify every active user. Type","dialogPromptSuffix":"below to send.","confirmTokenPlaceholder":"Type CONFIRM","confirmToken":"CONFIRM","cancel":"Cancel","sendToAll":"Send to all","postToEveryone":"Post to everyone","publishBroadcast":"Publish broadcast","noCategoriesTitle":"No categories available","noCategoriesBody":"Every configured category posts to all active users, and you do not currently hold the Publish to all permission. Ask an admin to grant it or add a role-scoped or user-scoped category."},"adminComposer":{"priorityNormal":"Normal","priorityHigh":"High — policy or important update","priorityUrgent":"Urgent — outage or critical alert","summaryLabel":"Summary","titlePlaceholder":"A clear, scannable headline","summaryPlaceholder":"One-line teaser shown in feed cards","bodyPlaceholder":"The full announcement. Plain text — rich-text formatting comes in a later phase."},"audience":{"sectionLabel":"Audience","everyone":"Everyone in this category","limit":"Limit to specific audiences","hint":"Only people in the selected audiences (who also pass this category's rules) will see the post. Leave off to use the category's own visibility.","rolesLabel":"Roles","departmentsLabel":"Departments","workspacesLabel":"Workspaces","emptyLimit":"Select at least one audience, or switch back to Everyone.","targetedBadge":"Targeted","targetedBadgeTitle":"This post is limited to specific audiences beyond its category"},"readReceipts":{"tabContent":"Announcement","tabReceipts":"Read receipts","title":"Read receipts","summary":"{read} of {total} active staff have read this ({percent}%).","none":"No one has opened this announcement yet.","colPerson":"Person","colFirstRead":"First opened","colLastRead":"Last opened","adminOnly":"Only visible to announcement admins."}},"identity":{"menu":{"label":"Identity"},"page":{"title":"Identity"},"empty":{"title":"No identities synced yet","body":"Once a platform sync runs, every person's accounts across Microsoft 365, Monday, GitHub and the rest will appear here. You'll be able to manage them — including locking everyone out of everything with one click — from this page.","cta":{"label":"Sync platforms now (coming in I.2)"}},"error":{"forbidden":"You do not have access to identity management.","unauthorized":"Sign in to access identity management."},"console":{"subtitle":"Linked external accounts for every person, across all platforms.","kpis":{"links":"Linked identities","people":"People linked","errors":"Sync errors","providers":"Providers configured","centralOne":"Linked to a Central One person"},"providers":{"microsoft":"Microsoft 365","monday":"Monday","jira":"Jira","unifi":"UniFi","redix":"Redix","auth0":"Auth0"},"providerState":{"on":"on","off":"off"},"table":{"person":"Person"},"cell":{"linked":"Linked","error":"Error","notLinked":"Not linked"},"managedByCentralOne":{"title":"Identity is managed by Central One","body":"Central One is the identity root (Identity Lifecycle Program D19). This directory mirrors what Central One holds; offboarding and platform access are driven from Central One, and \"Apply now\" on a person reads Central One's state instead of pushing to a platform.","cta":"Central One panel"},"truncated":"Showing the first 500 people with linked identities.","drillHint":"Click a person to link, unlink, or re-sync their accounts.","empty":{"title":"No identities linked yet","body":"Once people are linked to Microsoft 365, Monday, Jira, UniFi or Redix, their accounts appear here in one place. Link a person from their profile to get started.","cta":"Manage users"}}},"updates":{"widget":{"title":"Updates","subtitle":"Saved in Redsis One. Anyone with access to this item can see them.","loading":"Loading updates…","empty":"No updates yet — be the first to post.","postPlaceholder":"Write an update… @ to mention. ⌘+Enter to send.","send":"Send","posting":"Posting…","unknownAuthor":"Unknown user","mention":"mention","mentions":"mentions","mentionsNone":"No mentions","draftWithAyva":"Draft with Ayva","drafting":"Drafting…","draftError":"Ayva could not draft an update. Try again."},"message":{"edited":"edited","deleted":"This message was deleted."},"readReceipts":{"seenBy":"Seen by {count}"},"attachments":{"attach":"Attach files","remove":"Remove attachment","tooMany":"Maximum {max} files per update","uploadFailed":"Some files failed to upload."},"source":{"redixLabel":"Redix","redixTitle":"Posted via Redix"}},"mentions":{"searching":"Searching…","noMatches":"No people match \"{query}\".","results":"{count} result(s)","hint":"@ to mention"},"aiTeam":{"menu":{"label":"AI Team"},"page":{"title":"AI Team"},"shell":{"eyebrow":"AI Team","empty":{"title":"Your AI team is being set up","body":"The player registry, project assignments, and master instructions arrive in the next release. You'll be able to manage every human and AI contributor from this page."},"tabs":{"players":"Players","triggers":"Triggers","projects":"Projects","docs":"Docs","instructions":"Instructions","admin":"Admin","activity":"Activity"}},"capabilities":{"view":"View AI Team","addPlayer":"Add Player","editInstructions":"Edit Instructions","connectAccount":"Connect Account","admin":"AI Team Admin"},"triggers":{"notice":"Triggers run as fresh, stateless Claude API requests. They cannot list, resume, or close the conversations in your Claude apps — that surface is not exposed by the API.","accountsHeading":"Your Claude accounts","accountsEmpty":"No eligible accounts. Add an Anthropic API_KEY account to one of your players (Players tab) to run triggers.","accountsHint":"Accounts are per-user: runs use only the accounts you own. Keys are stored encrypted; only the masked tail is ever shown.","listHeading":"Triggers","listEmpty":"No triggers yet. Create one to save a reusable Claude routine.","newTrigger":"New trigger","run":"Run","running":"Running…","edit":"Edit","archive":"Archive","targetAll":"All my accounts","editorNewTitle":"New trigger","editorEditTitle":"Edit trigger","fieldTitle":"Title","fieldDescription":"Description — what this routine does","fieldModel":"Model","fieldSystem":"System prompt (optional)","fieldPrompt":"Prompt — the user message sent to the model","fieldMaxTokens":"max_tokens","fieldThinking":"Thinking","fieldEffort":"Effort","fieldStream":"Stream","advanced":"Advanced (raw JSON escape hatch)","fieldRawJson":"Raw JSON — deep-merged into the request body","rawJsonHint":"Use this for any Messages-API field the form does not expose (stop_sequences, metadata, service_tier, output_config.format…). Overrides the fields above.","save":"Save trigger","cancel":"Cancel","saved":"Trigger saved","archived":"Trigger archived","refused":"REFUSED","warningsLabel":"Adjustments made before sending","historyHeading":"Run history","historyEmpty":"No runs yet.","tokensHeading":"Webhook fire tokens","tokensEmpty":"No tokens yet.","tokensHint":"Tokens let n8n or any webhook fire triggers in real time: POST /api/ai-team/triggers/<id>/fire with Authorization: Bearer <token>. Runs use YOUR accounts and count against the daily spend caps.","tokenName":"Token name (e.g. n8n production)","tokenCreate":"Create token","tokenCreatedNotice":"Copy it now — it is shown exactly once:","tokenRevoke":"Revoke","tokenRevoked":"Token revoked","copied":"Copied to clipboard"},"players":{"heading":"Players","addCta":"Add player","list":{"empty":{"title":"No players yet","body":"Add the first player to your AI team — a human contributor or an AI.","cta":"Add player"},"archived":"Archived"},"kindChip":{"human":"Human","ai":"AI"},"col":{"displayName":"Player","kind":"Kind","identity":"Identity","pattern":"Pattern","created":"Added","actions":""},"form":{"addTitle":"Add player","editTitle":"Edit player","kindLabel":"Kind","kindHuman":"Human","kindAi":"AI","displayNameLabel":"Display name","displayNamePlaceholderHuman":"e.g. Mike Habib","displayNamePlaceholderAi":"e.g. Claude Sonnet 4.6","avatarUrlLabel":"Avatar URL","avatarUrlPlaceholder":"https://...","userPickerLabel":"Linked user","userPickerPlaceholder":"User ID","modelRefLabel":"Model ref","modelRefPlaceholder":"claude-sonnet-4-6","modelRefHint":"Provider model identifier. Examples: gpt-4o, ollama:llama3.2, claude-opus-4-7","cancelButton":"Cancel","createButton":"Create player","updateButton":"Save changes","busy":"Saving..."},"archive":{"button":"Archive","confirmButton":"Click to confirm","confirmHint":"Click again within 4 seconds to archive."},"danger":{"tabLabel":"Danger","archiveTitle":"Archive this player","archiveBody":"This removes the player from active lists. Existing assignments remain queryable for audit."},"toast":{"created":"Player added","updated":"Player updated","archived":"Player archived","error":"Could not save player. Try again.","deleteError":"Could not archive player. Try again."},"actionsMenu":{"edit":"Edit","accounts":"Manage accounts"},"accounts":{"title":"AI accounts","subheaders":{"connected":"Connected accounts","connectNew":"Connect a new account","testCall":"Test call"},"connectForm":{"providerLabel":"Provider","keyLabel":"API key","keyPlaceholder":"sk-ant-...","keyHelpAnthropic":"Get a key at console.anthropic.com → Settings → API Keys. Console-tier API, NOT the Pro/Max subscription.","verifyButton":"Verify & connect","verifying":"Verifying…","verifySuccess":"Connected ✓","verifyFailed":"Verify failed. Check the key and try again."},"providers":{"anthropic-console":"Anthropic Console (Claude)","openai":"OpenAI (GPT-4o)","xai":"xAI (Grok)","mistral":"Mistral","groq":"Groq (Llama)","openrouter":"OpenRouter (multi-model)","gemini":"Google Gemini","ollama":"Ollama (local)"},"keyHelpByProvider":{"anthropic-console":"Get a key at console.anthropic.com → Settings → API Keys. Console-tier API, NOT the Pro/Max subscription.","openai":"Get a key at platform.openai.com → API keys. Account must have credit loaded.","xai":"Get a key at console.x.ai → API keys. Grok-2 access requires an xAI developer account.","mistral":"Get a key at console.mistral.ai → API keys.","groq":"Get a key at console.groq.com → API Keys. Free tier available; rate-limited.","openrouter":"Get a key at openrouter.ai/keys. Routes to many models — pick one in the model field on test-call.","gemini":"Get a key at aistudio.google.com/apikey. Free tier; Google AI Studio key (NOT a service account).","ollama":"Ollama runs locally — no API key. Use the Endpoint URL field instead."},"endpointUrlLabel":"Endpoint URL","endpointUrlPlaceholder":"http://localhost:11434","endpointUrlHelp":"URL of your Ollama server. Default `http://localhost:11434`. The platform calls `/api/chat` on this base — make sure Ollama is running and the model is pulled (`ollama pull llama3.2`).","list":{"empty":"No accounts connected yet. Connect one below to make this player callable.","verifiedOk":"Verified","archiveButton":"Archive account","archiveConfirm":"Click again to confirm"},"testCall":{"placeholder":"Type a message to send to this AI…","sendButton":"Send","sending":"Sending…","waitingForFirstAccount":"Connect an account above to enable test calls.","responseHeader":"Response","usageLabel":"Tokens","spendLabel":"Spend","spendUnitCents":"¢"},"errors":{"missingId":"Missing player id. Open this widget from a player row.","forbidden":"You can only manage accounts on a player you own, or any player as admin.","playerNotFound":"Player not found.","generic":"Something went wrong. Try again."}},"patternBadge":{"apiKey":{"label":"API KEY","tooltip":"Platform stores an encrypted API key and can call this provider directly."},"externalCli":{"label":"CLI","tooltip":"Platform shells out to the user's installed CLI — credentials never leave the CLI."},"local":{"label":"LOCAL","tooltip":"Platform calls a local model server at the configured endpoint."},"registered":{"label":"REGISTERED","tooltip":"Metadata only — platform CANNOT call this account."}},"tabPlaceholders":{"projects":{"title":"Project assignments are coming soon","body":"Once players can be attached to workspaces or boards, you'll manage rosters here."},"docs":{"title":"The doc library is coming soon","body":"Curated docs and uploaded files will be indexed and linked to projects from this tab."},"instructions":{"title":"Master instructions are coming soon","body":"Per-project AI instructions will be editable and versioned here."},"admin":{"title":"Admin tools are coming soon","body":"OAuth client configuration, provider limits, and global player roster live here.","forbiddenTitle":"You don't have access to this tab","forbiddenBody":"This tab requires the AI Team Admin permission. Contact an administrator if you need access."},"activity":{"title":"Activity feed is coming soon","body":"Commits, AI messages, and item actions per player will surface here."}}},"runHistory":{"spendBadgeLabel":"Today's spend vs cap","spendToday":"Today","spendHardCap":"hard cap","spendBlocked":"Calls blocked","spendTier":{"under":"Under soft cap","soft":"Near soft cap","hard":"Hard cap hit","catastrophic":"Catastrophic cap hit"},"trendLabel":"7-day cost trend","trendNote":"Daily spend across all sources","runListLabel":"Agent run history","noRuns":"No runs recorded yet. Run history appears once an agent makes a call.","col":{"player":"Player","time":"Time","input":"Input","output":"Output","cost":"Cost","status":"Status"},"status":{"active":"Active","ended":"Success","errored":"Error"},"detail":{"title":"Run detail","closeLabel":"Close detail panel","player":"Player","model":"Model","started":"Started","status":"Status","inputTokens":"Input tokens","outputTokens":"Output tokens","cost":"Cost"}},"promptLibrary":{"heading":"Prompt & Skill Library","intro":"Reusable prompt and skill snippets. Include one in any player instruction with {{snippet:<id>}}.","newCta":"New snippet","searchPlaceholder":"Search snippets by title…","allTags":"All","noResults":"No snippets match your search.","empty":{"title":"No snippets yet","body":"Create a reusable prompt or skill snippet, then reference it from any player instruction with {{snippet:<id>}} — edit it once and every instruction updates.","cta":"Create the first snippet"},"card":{"copyRef":"Copy reference","copied":"Copied!","edit":"Edit"},"editor":{"addTitle":"New snippet","editTitle":"Edit snippet","close":"Close","titleLabel":"Title","titlePlaceholder":"e.g. Redsis tone of voice","bodyLabel":"Body (Markdown)","bodyPlaceholder":"The reusable prompt text…","tagsLabel":"Tags","tagsPlaceholder":"comma, separated, tags","tagsHint":"Comma-separated. Used to filter the library.","save":"Save","saving":"Saving…","referenceLabel":"Reference token","referenceHint":"Paste this into any player instruction to include this snippet.","versionsLabel":"Version history","archive":"Archive snippet","archiveConfirm":"Click again to archive","archived":"Snippet archived","forbidden":"You don't have permission to edit snippets.","invalid":"Snippet not found.","toast":{"created":"Snippet created","updated":"Snippet updated","error":"Something went wrong. Try again."}}}},"sheets":{"shell":{"empty":{"title":"Sheets","body":"Build spreadsheets with formulas, native to Redsis One. The editor is coming in the next phase."}},"title":"Documents","singular":"Document","newDocument":"New Document","create":"Create document","creating":"Creating…","titlePlaceholder":"Untitled document","untitled":"Untitled","search":"Search documents…","empty":"No documents yet","emptyHint":"Create your first document to get started.","noResults":"No documents match your filters.","sortRecent":"Recently updated","sortName":"Name (A–Z)","sortCreated":"Date created","authorAnyone":"Anyone","authorMe":"Created by me","saving":"Saving…","saved":"Saved","saveError":"Save failed — will retry","viewOnly":"You can view only","viewOnlyHint":"You don’t have permission to edit this document.","collaborators":"Collaborators","noCollaborators":"No explicit collaborators yet — workspace members inherit access.","addCollaborator":"User ID or email","add":"Add","remove":"Remove","roleOwner":"Owner","roleEditor":"Editor","roleViewer":"Viewer","deleteDoc":"Delete document","deleteConfirm":"Delete this document? An admin can restore it.","deleting":"Deleting…","updated":"Updated","by":"by","previous":"Previous","next":"Next","pageOf":"Page {page} of {total}","loadError":"Could not load documents.","library":{"title":"Spreadsheets","newSheet":"New spreadsheet","empty":"No spreadsheets yet. Create your first one to get started.","tabAll":"All","tabFavorites":"Favorites","tabTrash":"Trash","searchPlaceholder":"Search spreadsheets…","sortLabel":"Sort by","sortUpdated":"Recently updated","sortName":"Name (A–Z)","sortCreated":"Date created","favoritesEmpty":"No favorites yet — star a spreadsheet to pin it here.","trashEmpty":"Trash is empty.","star":"Add to favorites","unstar":"Remove from favorites","duplicate":"Duplicate","archive":"Move to Trash","confirmArchive":"Confirm?","restore":"Restore","tabTemplates":"Templates","templatesEmpty":"No templates yet — mark one of your sheets as a template.","useTemplate":"Use template","markTemplate":"Make template","unmarkTemplate":"Unmark template","tabBoardLinked":"Board-linked","boardLinkedBadge":"Board","boardLinkedEmpty":"No board-linked sheets yet — open a board in Sheets from its ⋯ menu."},"boardLink":{"title":"Board link","button":"Board","close":"Close board link panel","loading":"Loading link…","notLinked":"This sheet is not linked to a board.","source":"Comes from","viewNamed":"View: {name}","viewDefault":"View: board default","statusLive":"Live sync is on — data flows both ways with the board.","statusSnapshot":"Snapshot only — this sheet does not sync with the board.","structureChanged":"The board’s columns or rows changed. Choose “Sync now” to bring the sheet up to date.","toggleSync":"Sync data with board","toggleSyncHint":"Cell edits flow both ways. Columns are board-owned: new board columns appear here, but columns you add in the sheet never change the board.","toggleRowCreate":"Allow new rows to create items","toggleRowCreateHint":"Off by default. When on, a row you type below the board block (with an item name) becomes a new board item.","syncNow":"Sync now","unlink":"Unlink","unlinkedNotice":"This sheet is unlinked. All of its data is intact; it no longer syncs with the board.","lastPull":"Last update from board: {time}","lastPush":"Last update to board: {time}","activity":"Recent syncs","runCounts":"{pulled} in · {pushed} out","runConflicts":"{n} overwritten","runRejected":"{n} rejected"},"presenceOne":"{name} is also in this sheet","presenceMany":"{n} others are also in this sheet","email":{"title":"Email a range","button":"Email","close":"Close","hint":"Select a range, then create an Outlook draft with it as a table.","to":"To","subject":"Subject","subjectPlaceholder":"Defaults to the sheet name…","createDraft":"Create Outlook draft","creating":"Creating draft…","draftOnlyNote":"This only creates a draft in Outlook — it is never sent automatically.","created":"Draft created for {n} recipient(s).","openInOutlook":"Open in Outlook","needsSelection":"Select the cells you want to email first.","needsRecipient":"Enter at least one recipient email address.","notConnected":"Connect your Microsoft 365 account to email a range.","connect":"Connect Microsoft 365","error":"Could not create the draft — please try again."},"importOneDrive":{"title":"Import from OneDrive","button":"OneDrive","close":"Close","hint":"Pick an Excel or CSV file from your OneDrive / SharePoint to load into this sheet.","searchPlaceholder":"Search your files…","empty":"No spreadsheet files found.","notConnected":"Connect your Microsoft 365 account to import from OneDrive.","connect":"Connect Microsoft 365","importFailed":"Could not import that file — please try another.","error":"Could not list your files — please try again.","footer":"Importing replaces the current sheet content; use version history to undo."},"history":{"title":"Version history","button":"History","close":"Close","namePlaceholder":"Name this version…","saveVersion":"Save","saveHint":"Saves the current state as a named version you can restore later.","saved":"Saved","empty":"No versions yet. Name one above, or restore points appear when versions are saved.","autoSnapshot":"Auto snapshot","restore":"Restore","confirmRestore":"Confirm?","error":"Something went wrong — try again.","footer":"Restoring saves the current state first, so you can always go back.","compare":"Compare with current","compareSame":"No differences from the current sheet.","compareSummary":"{n} cell(s) differ from the current “{sheet}”. Version → current:","delta":"What this version changed","deltaSummary":"This version changed {n} cell(s) on “{sheet}”:","tabVersions":"Versions","tabActivity":"Activity","activityEmpty":"No activity recorded yet.","actOpen":"Opened","actEdit":"Edited","actRename":"Renamed","actArchive":"Moved to trash","actTrashRestore":"Restored from trash","actVersionRestore":"Version restored","actDuplicate":"Duplicated","actTemplateOn":"Marked as template","actTemplateOff":"Unmarked as template","actViewSaved":"View saved","actAgentWrite":"AI agent write","actAutoSnapshot":"Auto snapshot","actCells":"{n} cell(s)"},"tools":{"title":"Analysis tools","button":"Tools","close":"Close","goalSeek":"Goal Seek","goalSeekHint":"Set a formula cell to a target value by changing one input cell. The result is written live; failed runs restore the original input.","setCell":"Set cell","toValue":"To value","byChanging":"By changing cell","whatIf":"What-if data table","whatIfHint":"Select a column of input values, pick a formula cell and the input cell to vary — see the result for each value.","wifFormulaCell":"Formula cell","wifInputCell":"Input cell to vary","wifRun":"Run data table","wifRunning":"Running…","wifNeedsValues":"Select a column of at least 2 input values first.","wifTarget":"Inserts results in the column at {a1}.","wifInsert":"Insert results","wifApplied":"Inserted","wifFailed":"No results — check the formula and input cells.","fuzzy":"Fuzzy duplicate merge","fuzzyHint":"Select a column to find near-duplicate values (e.g. \"Acme Inc\" / \"Acme, Inc.\") and merge each group to one spelling.","fuzzyRun":"Find fuzzy duplicates","fuzzyNeedsColumn":"Select a column of values first.","fuzzyClean":"No near-duplicates found in the selected column.","fuzzyCluster":"{variants} variants · {rows} rows","fuzzyMerge":"Merge {n} group(s) to canonical","fuzzyApplied":"Merged","perf":"Workbook size","perfHint":"Check this workbook against the performance budget (cells + size).","perfRun":"Check size","perfCells":"cells","perfSheets":"sheets","perfOk":"Comfortably within budget","perfWarn":"Getting large — consider splitting or archiving","perfOver":"Over budget — large sheets may feel slow","explore":"Explore data","exploreHint":"One-click overview of the selected data — shape and the strongest numeric relationships.","exploreRun":"Explore selection","exploreNeedsData":"Select a data range (with headers) first.","exploreShape":"{rows} rows × {cols} columns","exploreCorrelations":"Strongest correlations","exploreNoCorrelations":"No strong numeric correlations found.","exploreNarrate":"Narrate with AI","useActive":"Use the active cell","solve":"Solve","solving":"Solving…","solved":"Solved: {cell} = {value} (target reached {achieved}).","notSolved":"Couldn’t reach the target — the original value was restored.","badCells":"Enter two different valid cells (e.g. B7).","badGoal":"Enter a numeric target value.","readOnly":"You have view-only access, so Goal Seek is disabled.","error":"Something went wrong — try again.","noSelection":"Select some cells first.","profile":"Column profile","profileHint":"Types, blanks, distinct counts, ranges and repeats per selected column.","profileRun":"Profile selection","forecast":"Forecast","forecastHint":"Extends the first numeric column of the selection (Holt linear trend).","forecastPeriods":"periods ahead","forecastRun":"Forecast","forecastNeedsData":"Select at least 4 numeric values in a column.","forecastTarget":"Inserts below the series at {a1}.","forecastInsert":"Insert below selection","forecastApplied":"Inserted","audit":"Formula audit","auditHint":"Finds error cells, formulas reading errors, and all-blank references across the workbook.","auditRun":"Audit workbook","auditClean":"No formula problems found.","auditBlankReads":"reads only blank cells","whereUsed":"{cell} is used by {n} formula(s)","scenarios":"Scenarios","scenariosHint":"Save the selected input cells as a named what-if set; apply to recalc, restore to flip back.","scenarioNamePlaceholder":"Scenario name…","scenarioSave":"Save","scenarioApply":"Apply","scenarioDelete":"Delete","scenarioRestore":"Restore original values","scenarioApplied":"Applied “{name}”.","scenarioRestored":"Original values restored.","scenarioNeedsSelection":"Name it and select the input cells first.","shortcuts":"Keyboard shortcuts","shortcutCopy":"Copy / paste / cut","shortcutUndo":"Undo / redo","shortcutFind":"Find / replace","shortcutFormat":"Bold / italic / underline","shortcutSelectAll":"Select all","shortcutCommit":"Commit cell (down / right)","shortcutEditCell":"Edit the active cell","shortcutJump":"Jump to data edge","shortcutExtend":"Extend selection","namedRanges":"Named ranges","namedRangesHint":"Name the selected cells to use the name in formulas (e.g. =SUM(Sales)). Names save with the sheet.","namePlaceholder":"e.g. Sales","nameAdd":"Name selection","nameAddTitle":"Name the currently selected cells","nameAdded":"Added for {ref}.","nameInvalid":"Names start with a letter or _, then letters/digits/_/. — and can’t look like a cell ref.","nameExists":"That name already exists (or was rejected).","nameNeedsSelection":"Select the cells to name first.","namesEmpty":"No named ranges yet.","nameDelete":"Delete name","views":"Saved views","viewsHint":"Save how you’re looking at this sheet — filters, frozen panes, hidden rows/columns — and switch any time. Views are personal.","viewPlaceholder":"View name…","viewSave":"Save view","viewApply":"Apply","viewApplied":"Applied “{name}”.","viewDelete":"Delete view","viewSavedMsg":"Saved “{name}”.","viewLimit":"View limit reached for this sheet — delete one first.","viewsEmpty":"No saved views yet.","aiExplain":"Explain with AI"},"stats":{"sum":"Sum:","avg":"Avg:","min":"Min:","max":"Max:","count":"Count:"}},"cms":{"title":"Website Manager","subtitle":"Manage content for your websites — pages, posts, media, and imports.","entries":"entries","empty":{"title":"No websites yet","body":"Connect or import a website to start managing its content here."},"live":{"unpublishedChip":"Unpublished changes","editorNote":"This page is live. Saving keeps your changes off the website until a publisher publishes them.","publisherNote":"This page is live. Saved changes reach the website when you click Publish changes.","pendingSince":"Unpublished changes, last saved {when}. The website still shows the published version.","saveChanges":"Save changes","publishChanges":"Publish changes","discardChanges":"Discard changes","needsPublisher":"Only a publisher can put this page live or take it down.","notLiveTag":"not live","changedSinceOpened":"This page changed since you opened it. The editor now shows the latest version: review it, then try again.","saveFirst":"Save or cancel your edits first.","heldOnImport":{"one":"1 of them matched a live page: its imported text waits as unpublished changes until a publisher publishes it.","other":"{n} of them matched live pages: their imported text waits as unpublished changes until a publisher publishes it."}}},"helpdesk":{"title":"Helpdesk","newTicket":"New ticket","statusLabel":"Status","status":{"new":"New","open":"Open","pending":"Pending","on_hold":"On hold","resolved":"Resolved","closed":"Closed"},"priority":{"low":"Low","normal":"Normal","high":"High","urgent":"Urgent"},"filters":{"openAll":"All open","searchLabel":"Search tickets","searchPlaceholder":"Search subject, description, or HD-number…"},"stats":{"open":"Open","unassigned":"Unassigned","breached":"SLA breached","resolved":"Resolved"},"table":{"number":"Number","subject":"Subject","queue":"Queue","status":"Status","priority":"Priority","assignee":"Assignee","updated":"Updated","unassigned":"Unassigned"},"empty":{"title":"No tickets here","bodyManager":"Nothing matches these filters. New tickets land in their queue the moment they are filed.","bodyRequester":"You have not filed any tickets yet. Use “New ticket” and the team (and the AI agents) will take it from there."},"form":{"subject":"Subject","body":"Description","queue":"Queue","priority":"Priority","submit":"File ticket","submitting":"Filing…"},"detail":{"back":"All tickets","created":"Created","timeline":"Timeline","details":"Details","firstResponseDue":"First response due","resolutionDue":"Resolution due","watchers":"Watchers","commentLabel":"Add a comment","commentPlaceholder":"Write an update…","internalToggle":"Internal note (hidden from the requester)","send":"Send","sending":"Sending…","internalNote":"Internal","aiActor":"AI agent","system":"System"},"events":{"created":"filed this ticket","status_changed":"changed the status","priority_changed":"changed the priority","assigned":"changed the assignee","queue_moved":"moved the queue","comment":"commented","internal_note":"added an internal note","ai_draft":"drafted a reply (AI)","ai_action":"performed an action (AI)","sla_first_response_met":"first response within SLA","sla_breach":"SLA breached","escalated":"escalated to a human","watcher_added":"started watching","watcher_removed":"stopped watching"}},"labels":{"shell":{"empty":{"title":"Label Maker","body":"Design and print custom labels for your boards. The designer is coming in the next phase."}},"admin":{"shell":{"empty":{"title":"Label Maker Admin","body":"Manage printers, counters, and print job history. Coming in Phase 135."}},"jobs":{"title":"Print job history","description":"Every label printed, by who, when, on which printer. Read-only audit log.","filterEmail":"Filter by user email…","statusAll":"All statuses","statusSent":"Sent","statusQueued":"Queued","statusFailed":"Failed","jobs":"jobs","refresh":"Refresh","emptyAll":"No print jobs yet.","emptyFiltered":"No jobs match the current filters.","fetchError":"Could not load print jobs.","colWhen":"When","colTemplate":"Template","colPrinter":"Printer","colTransport":"Transport","colCount":"Labels","colSize":"Bytes","colUser":"User","colStatus":"Status","colActions":"Actions","reprint":"Reprint","reprintUnavailable":"Original payload not stored — reprint from source.","reprintQueued":"Reprint sent — a new job was recorded.","reprintError":"Could not reprint that job."}},"capabilities":{"view":"View Label Maker","create":"Create label templates","print":"Print labels","admin":"Administer Label Maker"},"library":{"title":"Label templates","newTemplate":"New template","starters":"Start from a template","empty":"No templates yet. Create your first label template to get started.","searchPlaceholder":"Search templates by name, description, or size…","noMatches":"No templates match your search.","duplicate":"Duplicate template","duplicating":"Duplicating…","duplicateError":"Couldn't duplicate the template.","versionHistory":"Version history","revertButton":"Revert to this version","revertConfirm":"Click again to revert","revertError":"Couldn't revert the template.","versionAuto":"auto save"},"units":{"title":"Units","subtitle":"Every unit that gets a label: find it, register it, preview and print its labels at a station or as a PDF dry run, reprint with the reason recorded, or void it.","search":"Search by serial, vendor serial, part number, order or client…","filterStatus":"Status","statusAll":"All","statusActive":"Active","statusVoided":"Voided","statusShipped":"Shipped","statusDesp":"Dispatched","register":"Register a unit","registerHint":"Site and a part number (IBM or OEM) are required. The serial is assigned by the first print.","registerButton":"Register","registering":"Registering…","loading":"Loading…","empty":"No units match.","error":"Could not load units.","noSerial":"no serial yet","colSerial":"Serial","colPart":"Part","colClient":"Client","colOrder":"Order","colSite":"Site","colStatus":"Status","colLabel":"Label","colPrints":"Prints","fSite":"Site","fPnIbm":"IBM P/N","fPnOem":"OEM P/N","fCondition":"Condition","fVendorSerial":"Vendor serial","fClient":"Client","fSo":"Sales order","fLineSeq":"Order line","fCountry":"Origin country","fYear":"Year","fBattery":"Has a battery","fBrand":"Brand","fPhysicalBrand":"Physical brand","fPhysicalModel":"Physical model","errSiteRequired":"Site is required.","errPnRequired":"An IBM or OEM part number is required.","errValueTooLong":"A value is too long.","errGeneric":"Something went wrong.","back":"Back to units","detail":"Unit","labelVersion":"Label version","printCount":"Prints","lastPrinted":"Last printed","neverPrinted":"never","voidedReason":"Void reason","run":"Labels","runHint":"Preview resolves every label for this unit and reserves its serial; Print records the run in the ledger. The PDF dry run never reaches a printer.","target":"Print to","targetPdf":"PDF (dry run)","targetStation":"Station printers","station":"Station","pickStation":"Pick a station…","profile":"Profile","profileAuto":"By process (automatic)","processRef":"Process","activity":"Activity","newSerial":"Assign a new serial","newSerialHint":"Reprints keep the serial. Tick this only when the unit must get a new one; the reason is recorded as a new-serial reprint.","preview":"Preview","previewing":"Resolving…","print":"Print","printing":"Printing…","reason":"Reason","reasons":{"first":"First print","reprint_same":"Reprint, same content","reprint_changed":"Reprint, content changed","reprint_new_serial":"Reprint with a new serial","void_reprint_blocked":"Refused: unit is voided"},"blocks":"This print is blocked:","blockCodes":{"unit_voided":"the unit is voided","empty":"a required value is empty","query_failed":"a saved query failed","serial_failed":"the serial could not be assigned","lookup_failed":"a lookup failed"},"noBlocks":"Everything resolved. Nothing blocks this print.","previewTemplate":"Template","noTemplate":"no template bound","previewSkipped":"skipped","previewPrinter":"Printer","noPrinter":"no printer for this role","payload":"Printer payload","printed":"Printed","printedSent":"sent","printedFailed":"failed","ledgerRow":"ledger","downloadPdf":"Download PDF","errors":{"unit_not_found":"Unit not found.","unit_voided":"This unit is voided; it cannot be printed.","bindings_v2_disabled":"Process bindings are switched off for your account.","no_roles":"No label roles to print: the profile has none enabled and no template is bound.","profile_not_found":"Profile not found.","station_not_found":"Station not found.","needs_station":"Pick a station to print to its printers.","blocked":"A label is blocked; fix the values above.","printer_problems":"A role printer cannot take this label.","connector_not_configured":"The printer connector is not configured.","nothing_to_print":"Nothing to print."},"void":"Void this unit","voidHint":"A voided unit refuses to print; the attempt is still recorded in the ledger. This cannot be undone.","voidReason":"Reason","voidButton":"Void","voiding":"Voiding…","voidedOk":"Unit voided.","alreadyVoided":"This unit is already voided.","history":"Print ledger","historyEmpty":"No prints recorded yet.","colWhen":"When","colTemplate":"Template","colPrinter":"Printer","colFormat":"Format","colReason":"Reason","events":"Events","eventsEmpty":"No events yet."},"profiles":{"title":"Label profiles","subtitle":"Which labels a process prints, how many copies, which template, and the rules that shape them.","new":"New profile","loading":"Loading…","empty":"No profiles yet.","error":"Could not load profiles.","errGeneric":"Something went wrong.","saved":"Saved.","deleted":"Profile deleted.","confirmDelete":"Click again to delete","pickOne":"Pick a profile on the left, or create one.","name":"Name","processRef":"Process","processRefHint":"The process key this profile applies to (leave empty for a profile picked by hand).","roles":"Labels","colRole":"Label role","colEnabled":"Prints","colTemplate":"Template","colCopies":"Copies","templateByBindings":"By bindings (client / activity / site)","rules":"Rules","rule":{"fruHeader":"FRU header: show the IBM part number as FRU when the order says so","stoRule":"STO: stock-transfer orders print the STO variant","nomForMexico":"NOM: print the NOM-024 / NOM-050 labels for Mexico","batteryIcon":"Battery: mark units that contain a battery","showBrand":"Brand: print the brand on the item label"},"unknownRoles":"This profile names label roles the designer does not know:","saving":"Saving…","save":"Save profile","delete":"Delete"},"stations":{"title":"Stations and printers","subtitle":"The stations of each site and, for every label role, the printer that prints it there.","new":"New station","loading":"Loading…","empty":"No stations yet.","error":"Could not load stations.","errGeneric":"Something went wrong.","saved":"Saved.","deleted":"Station deleted.","confirmDelete":"Click again to delete","pickOne":"Pick a station on the left, or create one.","name":"Name","site":"Site","kind":"Kind","theme":"Theme","language":"Language","languageDefault":"default","saving":"Saving…","save":"Save station","delete":"Delete","printers":"Role printers","printersHint":"Assign a printer to each label role this station prints. The check shows what the planner will refuse.","colRole":"Label role","colPrinter":"Printer","colStock":"Stock loaded","colCheck":"Check","noPrinter":"No printer","stockAny":"Not declared","stock":{"standard":"Standard","destructible":"Destructible"},"ok":"Ready","problems":{"no_role_printer":"no printer for this role","printer_missing":"printer no longer exists","printer_archived":"printer is archived","language_unsupported":"printer language not supported","needs_thermal_printer":"needs a thermal printer","needs_media_type":"printer has no media type","needs_destructible_stock":"needs destructible stock"},"assign":"Assign","clear":"Clear"},"matrix":{"title":"What prints where","subtitle":"For one site and one context, the template and printer every station uses for each label role. Red cells will be refused at print time.","siteRequired":"Pick a site.","error":"Could not build the matrix.","site":"Site","client":"Client","activity":"Activity","vendor":"Vendor","condition":"Condition","process":"Process","profile":"Profile","profileNone":"By process (automatic)","country":"Country","battery":"Battery","sto":"STO order","fru":"FRU header","loading":"Building…","run":"Show","legend":"Each cell: template (version) and the role printer. Red = that station cannot print this label.","empty":"No stations at this site.","colStation":"Station","cellSkipped":"skipped","cellNone":"-","cellNoPrinter":"no printer"},"designer":{"back":"Templates","namePlaceholder":"Untitled template","save":"Save","saving":"Saving…","saved":"Saved","saveError":"Couldn't save. Please try again.","specTooLarge":"This design is too large to save. Remove or shrink images.","nameRequired":"Give the template a name first.","zoomIn":"Zoom in","zoomOut":"Zoom out","zoomFit":"Fit label","zoomActual":"Actual size (1:1)","zoomSelection":"Zoom to selection","undo":"Undo","redo":"Redo","gridToggle":"Grid + snap","multiSelected":"elements selected","tabs":{"elements":"Add","properties":"Properties","arrange":"Arrange","label":"Label"},"arrange":{"title":"Arrange","empty":"Select elements to align or reorder.","left":"Left","centerH":"Center","right":"Right","top":"Top","centerV":"Middle","bottom":"Bottom","front":"To front","back":"To back","forward":"Forward","backward":"Backward","distributeH":"Distribute →","distributeV":"Distribute ↓","distributeHint":"Select 3 or more unlocked elements to distribute.","matchWidth":"Match W","matchHeight":"Match H","matchBoth":"Match W+H","matchSizeHint":"Select 2 or more elements — the first one becomes the reference size.","group":"Group","ungroup":"Ungroup","groupHint":"Select 2 or more elements to group them.","layersTitle":"Layers","defaultLayer":"Default","hide":"Hide layer","show":"Show layer","lock":"Lock layer","unlock":"Unlock layer","newLayerPlaceholder":"New layer name…","assignLayer":"Assign","clearLayer":"Clear"},"readout":{"empty":"Nothing selected","selected":"selected","x":"X","y":"Y","w":"W","h":"H"},"elements":"Elements","addText":"Text","addLine":"Line","addBox":"Box","addRoundedBox":"Rounded","addEllipse":"Ellipse","addImage":"Image","addBarcode":"Barcode","addQr":"QR code","addSignature":"Signature","imageTooLarge":"Image is too large (max 256 KB). Use a smaller file.","signaturePad":{"title":"Draw signature","hint":"Draw with your mouse or finger, then add it to the label.","clear":"Clear","add":"Add to label","cancel":"Cancel"},"symbols":{"title":"Symbol library","hint":"Warning + handling + hazmat glyphs. Click to drop one on the label; scales like any image.","items":{"warning":"Warning","fragile":"Fragile","thisWayUp":"This way up","keepDry":"Keep dry","recycle":"Recycle","biohazard":"Biohazard","flammable":"Flammable","toxic":"Toxic","noStack":"Do not stack","temperature":"Temperature","handling":"Handle with care","noForklift":"No forklift"}},"size":{"title":"Label size","width":"Width (mm)","height":"Height (mm)","dpi":"Print density"},"preview":{"title":"Print preview","saveFirst":"Save the template once to enable the printer-firmware preview.","refresh":"Refresh","loading":"Rendering…","quantity":"Quantity","preview":"Preview","prev":"Previous label","next":"Next label","empty":"Press Refresh to see the printer-firmware preview.","imageAlt":"Printer firmware preview of the label","errorGeneric":"Could not render the preview.","errorNetwork":"Preview service is unreachable. Try again in a moment.","poweredBy":"Rendered via Labelary firmware emulator."},"livePreview":{"openPreview":"Preview","backToDesign":"Back to design","source":"Data from","downloadPdf":"Download PDF","pickBoard":"Pick a board…","refresh":"Refresh","loading":"Loading…","choosePrompt":"Pick a board above to preview with real data.","noRecords":"This board has no items at this level.","record":"Label","prev":"Previous","next":"Next","imageAlt":"Rendered label preview","empty":"No preview yet.","dataPulled":"Data being pulled","noData":"No values on this record.","poweredBy":"Rendered with Labelary — actual printer output.","saveFirst":"Save the template first to preview it with real data.","error":"Could not render this label."},"history":{"open":"History","title":"Version history","subtitle":"Restore an earlier version. Restoring keeps the current one in history, so it is safe.","back":"Back to designer","loading":"Loading…","empty":"No saved versions yet.","version":"Version","current":"Current","editedBy":"by","unknownUser":"unknown","restore":"Restore","restoring":"Restoring…","restored":"Restored — opening the designer…","error":"Could not load version history.","restoreError":"Could not restore that version.","tabs":{"versions":"Versions","prints":"Prints","changes":"Changes"},"changes":{"subtitle":"Compare two versions of this template, element by element.","from":"From","to":"To","current":"Current","loading":"Loading…","error":"Could not compare these versions.","same":"These two versions are identical.","added":"Added","removed":"Removed","changed":"Changed","unchanged":"unchanged elements","meta":"Template settings","print":"Print settings","field":"Field","before":"Before","after":"After","empty":"Save at least one version to compare."},"prints":{"subtitle":"Every label printed from this template.","empty":"No prints recorded yet.","loading":"Loading…","error":"Could not load print history.","colWhen":"When","colVersion":"Ver.","colAsset":"Value","colPrinter":"Printer","colCount":"Labels","colUser":"By","colStatus":"Status","filterAsset":"Filter by value (serial / SKU)…","statusSent":"Sent","statusQueued":"Queued","statusFailed":"Failed"}},"boards":{"title":"Connected boards","hint":"Wire this template to one or more One Boards. The Properties → Data source → Column dropdown fills from the columns of attached boards at the chosen level.","saveFirst":"Save the template once to attach boards.","empty":"No boards attached yet.","attachButton":"Attach a board","attaching":"Attaching…","attach":"Attach","cancel":"Cancel","pickBoard":"Board","pickLevel":"Print level","levelItems":"Items","levelSubitems":"Subitems","levelSubSubitems":"Sub-subitems","remove":"Detach board","allAttached":"Every available board is already attached.","fetchError":"Couldn't load boards.","attachError":"Couldn't attach this board."},"csv":{"title":"Batch from CSV","saveFirst":"Save the template once to enable batch compile.","noColumnsHint":"No CSV-column bindings yet — add one in the Properties tab to drive an element from a column.","uploadButton":"Upload .csv","pasteLabel":"Or paste CSV here (first line = headers)","pastePlaceholder":"sku,name\\nA1,Widget A\\nA2,Widget B","rows":"rows","delimiter":"delimiter:","headers":"Detected headers","missingHeader":"CSV is missing required columns:","previewButton":"Preview (no serial reservation)","compileButton":"Compile + download .zpl","loading":"Working…","resolved":"Compiled {count} labels.","serverMissing":"Server-side reported these columns missing:","errorGeneric":"Batch compile failed.","errorNetwork":"Could not reach the compile service.","errorTooLarge":"CSV is too large (max 1 MB)."},"inspector":{"image":{"title":"Image source","static":"Uploaded image","fromColumn":"From a board file column","noFileColumns":"No file columns at this level on this board."},"none":"Select an element to edit its properties.","elementType":{"text":"Text","line":"Line","box":"Box","image":"Image","barcode":"Barcode"},"x":"X (mm)","y":"Y (mm)","width":"Width (mm)","height":"Height (mm)","rotation":"Rotation (°)","text":"Text","fontSize":"Font size (pt)","align":"Align","alignLeft":"Left","alignCenter":"Center","alignRight":"Right","bold":"Bold","fill":"Fill solid","borderThickness":"Border (mm)","shape":"Shape","shapeRect":"Rectangle","shapeRounded":"Rounded rectangle","shapeEllipse":"Ellipse","cornerRadius":"Corner radius (mm)","delete":"Delete element","shortcutsTitle":"Keyboard shortcuts","shortcuts":{"marquee":"Marquee select","addToSelection":"Add to selection","selectAll":"Select all","copyPaste":"Copy / paste","duplicate":"Duplicate","undoRedo":"Undo / redo","save":"Save","delete":"Delete selected","nudge":"Nudge / big nudge","zorder":"Send back / forward","deselect":"Deselect","inlineEdit":"Edit text inline","pan":"Pan canvas","constrain":"Constrain ratio (resize)","snapAngle":"Snap to 15° (rotate)"},"lock":"Lock element","unlock":"Unlock element","locked":"Locked","unlocked":"Unlocked","barcode":{"symbology":"Symbology","data":"Data","showText":"Show text","validate":{"ean13_length":"Invalid EAN-13: must be 12 digits before check digit","ean13_checkdigit":"Invalid EAN-13: wrong check digit","upca_length":"Invalid UPC-A: must be 11 digits before check digit","upca_checkdigit":"Invalid UPC-A: wrong check digit","code39_charset":"Code 39 allows A–Z, 0–9, space and - . $ / + % only","code128_charset":"Code 128 allows ASCII characters only","code93_charset":"Code 93 allows ASCII characters only","codabar_charset":"Codabar allows 0–9 and - $ : / . + (optional A–D start/stop)","itf14_digits":"ITF-14 allows digits only","itf14_length":"ITF-14 requires 13 or 14 digits","itf14_checkdigit":"Invalid ITF-14 (GTIN-14): wrong check digit","gs1databar_digits":"GS1 DataBar allows digits only","gs1databar_length":"GS1 DataBar requires 13 or 14 digits","too_long":"Value is too long for this symbology"}},"binding":{"title":"Data source","kind":{"literal":"Fixed value","counter":"Auto-counter","column":"CSV / board column","formula":"Formula","datetime":"Date / time","prompt":"Operator scan / type"},"kindDescriptions":{"literal":"The text or barcode value never changes between labels.","counter":"A server-side number that bumps by one (or your step) for every label in a batch.","column":"Pulls the value from a column on your CSV upload or attached board, per record.","formula":"Combines columns into a single string using {column} tokens — e.g. \"{sku} — {name}\".","datetime":"Resolves to the current date/time at print, optionally offset by N days (for expiry labels).","prompt":"The operator scans or types this value at print time (e.g. a serial number). Not stored on the board."},"promptName":"Field name","promptNamePlaceholder":"e.g. Serial Number","promptNameHint":"The record key the scanned value fills. Match this name in the Scan & Print widget.","promptLabel":"Operator prompt","promptLabelPlaceholder":"e.g. Scan serial number","promptLabelHint":"Shown at the print station above the scan box. Defaults to the field name.","dateCustom":"Custom format…","dateFormatTokens":"Format tokens","columnName":"Column header","columnPlaceholder":"e.g. sku, name, lot_number","columnHint":"Match the header in your CSV exactly. Empty cells fall back to the fixed value.","columnPickHint":"Pick a column…","matchTitle":"Match to a board column","matchHint":"Pick the workspace, board, level, then column — no typing.","matchLoading":"Loading…","matchNoBoards":"No boards available to match.","matchNoColumns":"No columns at this level on this board.","pickWorkspace":"Workspace","pickWorkspaceHint":"Choose a workspace…","pickBoard":"Board","pickBoardHint":"Choose a board…","pickLevel":"Level","levelItem":"Item","levelSubitem":"Sub-item","levelSubSubitem":"Sub-sub-item","pickColumn":"Column","pickColumnHint":"Choose a column…","columnCustom":"Custom column…","columnCustomLabel":"Custom column name","columnLoading":"Loading columns from attached boards…","columnNoBoards":"No boards attached yet. Attach one in the Label tab to fill this dropdown, or type a CSV header below.","columnFromBoards":"{count} columns available from attached boards at their chosen level.","formulaTemplate":"Template","formulaPlaceholder":"{sku} — {name}","formulaHint":"Use {columnName} tokens — they're replaced per-row at batch time. Use {{ for a literal brace.","counterName":"Counter name","counterPlaceholder":"e.g. SKU, ORDER, BATCH","counterStart":"Start","counterStep":"Step","counterPadding":"Pad to digits","counterPrefix":"Prefix","counterSuffix":"Suffix","counterSettingsTitle":"Counter settings","counterSettingsHint":"Saved across all templates. Resetting the start re-bases the next reservation.","dateFormat":"Format","dateOffsetDays":"Offset (days)","dateOffsetHint":"Use a positive number for expiry, negative for past.","liveValue":"Live preview","counterPreviewLoading":"Resolving…","counterPreviewMissing":"No counter yet — will start on first print.","dateExamples":{"iso":"2026-05-28","us":"05/28/2026","long":"28 May 2026","time":"2026-05-28 14:32"},"saveCounterButton":"Save counter settings","saveCounterError":"Couldn't save counter settings.","saveCounterSaved":"Counter saved."},"transforms":{"title":"Format transforms","hint":"Reshape the resolved value before it prints. Steps apply in order — e.g. trim → uppercase → pad to 8.","empty":"No transforms yet — value prints as-is.","addLabel":"Add transform…","remove":"Remove transform","moveUp":"Move up","moveDown":"Move down","kinds":{"upper":"UPPERCASE","lower":"lowercase","title":"Title Case","trim":"Trim whitespace","pad":"Pad to length","replace":"Find / replace"},"padLength":"Length","padChar":"Char","padSide":"Side","padLeft":"Left (zero-pad)","padRight":"Right","replaceFind":"Find","replaceWith":"Replace with","replaceRegex":"Treat find as regex (global)","replaceRegexError":"Invalid regex","previewLabel":"Live preview","previewIn":"In:","previewOut":"Out:"},"conditional":{"title":"Conditional visibility","activeBadge":"rule set","hint":"Hide this element on records where the rule doesn't match. Only applied during CSV / column batch prints — the canvas always shows it.","columnName":"Column to check","op":"Condition","opEquals":"equals","opNotEquals":"does not equal","opPresent":"has any value","opAbsent":"is empty","value":"Value","clear":"Clear rule"},"validation":{"title":"Validation","softBadge":"soft","strictBadge":"strict","hint":"Check the resolved value at print time. Soft rules warn in the preview; strict rules refuse to print until the data is fixed.","preset":"Format","presetNone":"No format check","presetAlphanumeric":"Letters + digits only","presetDigits":"Digits only","presetLetters":"Letters only","presetEmail":"Email address","presetUrl":"URL (http/https)","presetGtin12":"GTIN-12 (12 digits)","presetGtin13":"GTIN-13 (13 digits)","presetGtin14":"GTIN-14 (14 digits)","regex":"Custom regex","regexPlaceholder":"e.g. [A-Z]{2}\\d{6}","minLength":"Min length","maxLength":"Max length","strict":"Strict — block the batch on failure","strictHint":"Soft (default) only warns. Strict refuses to compile any batch with a failed record.","clear":"Clear rule"}},"processBinding":{"title":"Process","hint":"Bind this element to the process context: a record field, a saved query, a serial scheme or a lookup. Legacy bindings (counter, column, formula, prompt) stay above.","source":"Process source","sources":{"none":"None (legacy binding)","record":"Record field","query":"Saved query","serial":"Serial scheme","lookup":"Lookup"},"sourceHints":{"record":"A field of the process context, by path (unit.serial, order.so, client.code…).","query":"A saved read-only datasource query; the parameters come from the record or are fixed.","serial":"A serial from the scheme; previewed serials are reserved, printed serials committed.","lookup":"A reference value read live from Redix or the part master, never copied onto the label."},"path":"Path","pathPlaceholder":"unit.serial","queryId":"Query","queryIdPlaceholder":"saved query id","datasourceId":"Datasource (optional)","field":"Field","fieldPlaceholder":"column returned by the query","params":"Parameters","paramsHint":"One per line: name = unit.pnIbm (from the record) or name = \"fixed value\".","schemeKey":"Scheme","schemeKeyPlaceholder":"serial scheme key","policyRef":"Policy (optional)","lookupSource":"Source","lookupSources":{"part_master":"Part master","redix":"Redix"},"lookupKey":"Key","lookupKeyFixed":"Fixed value","lookupKeyFrom":"From the record","ifEmpty":"When the value is empty","ifEmptyOptions":{"block":"Block the print","blank":"Print blank","fallback":"Print a fallback"},"fallbackText":"Fallback text","usedWhere":"Where this template is used","usedWhereHint":"Bind the template to a process, client, vendor, activity, site or condition. The most specific match wins; a pinned version keeps printing while you edit.","usedWhereEmpty":"Not bound yet: this template prints only when a profile names it.","scope":"Scope","scopes":{"process":"Process","client":"Client","vendor":"Vendor","activity":"Activity","site":"Site","condition":"Condition"},"ref":"Value","refPlaceholder":"client code, activity key…","version":"Version","versionCurrent":"Always the current version","priority":"Priority","add":"Add binding","adding":"Adding…","remove":"Remove","bindingError":"Could not save the binding.","duplicate":"That binding already exists.","chips":{"role":"Label role","roleNone":"No role","stock":"Stock","printMethod":"Print method","dataIdentifier":"DI","dpi":"dpi","mm":"mm"},"roles":{"item":"Item","serial":"Serial","box":"Box","service":"Service","verify":"Verify","rma":"RMA","inventory":"Inventory","location":"Location","nom024":"NOM-024","nom050":"NOM-050","special_2x05":"Special 2 x 0.5","special_25x1":"Special 2.5 x 1","special_4x2":"Special 4 x 2","special_4x6":"Special 4 x 6","unit_box_package":"Unit box / package","certified_reutilized":"Certified reutilized","rid_52s":"RID 52S"},"stocks":{"standard":"Standard","destructible":"Destructible"},"printMethods":{"any":"Any","thermal":"Thermal","direct-thermal":"Direct thermal","thermal-transfer":"Thermal transfer"},"saveFirst":"Save the template once to preview with real data, test-print and bind it.","realData":"Preview with real data","realDataHint":"Load a unit (or paste a process context) and render this template with it. Design mode: no serial is reserved, nothing is recorded.","realDataUnit":"Unit","realDataUnitPlaceholder":"serial, vendor serial or part number","realDataLoad":"Load unit","realDataNoUnit":"No unit matches.","realDataContext":"Process context (JSON)","realDataRun":"Render","realDataRunning":"Rendering…","realDataError":"Could not render the preview.","realDataInvalidJson":"The context is not valid JSON.","testPdfHint":"Test print: one page per context in the JSON (a single object or an array), rendered to a PDF you can open on this device.","testPdfRun":"Test print to PDF","testPdfRunning":"Rendering PDF…","testPdfDone":"PDF ready: {count} page(s).","testPdfError":"Could not build the test PDF.","testPdfDownload":"Download","approvals":"Client approvals","approvalsHint":"Ask a client contact to approve this template version through Requests. Applying an approval pins the client binding to that version.","approvalsEmpty":"No approvals requested yet.","approvalClient":"Client","approvalNote":"Note","approvalSubmit":"Request approval","approvalSubmitting":"Submitting…","approvalSubmitted":"Approval request {number} submitted.","approvalError":"Could not submit the approval request.","approvalApply":"Apply","approvalApplying":"Applying…","approvalApplied":"Applied","approvalApplyError":"Could not apply the approval.","approvalVersion":"version","approvalOpen":"Open the request"},"quickActions":{"duplicate":"Duplicate"}},"queue":{"title":"Batch Print Queue","intro":"Stage several labels, reorder them, then send the whole batch at once. The dot shows the selected printer’s live status.","reachable":"Reachable","unreachable":"Unreachable","checking":"Checking…","template":"Template","printer":"Printer","copies":"Copies","noTemplates":"No templates you can access.","noPrinters":"No network printer configured.","add":"Add","empty":"Nothing queued yet — add a template above.","moveUp":"Move up","moveDown":"Move down","remove":"Remove","sending":"Sending…","sendAll":"Send all ({count})","pending":"Pending","sendingOne":"Sending…","sent":"Sent","failed":"Failed"},"scanPrint":{"title":"Scan & Print","intro":"Pick a board and a label template, choose the product, then scan each unit to print its label.","centreHint":"Use the Scan & Print panel on the right: choose a board and template, pick the product, then scan each unit to print its label.","pickBoard":"Board","pickBoardHint":"Choose a board…","noBoards":"No boards you can access.","pickTemplate":"Template","pickTemplateHint":"Choose a template…","noTemplates":"No label templates are tied to this board yet. Open the Label Maker, edit a template, and attach it to this board.","pickPrinter":"Printer","noPrinter":"No network printer configured. Add one in Admin → Label Printers.","pickProduct":"Product","pickProductHint":"Choose the item to label…","searchProducts":"Search products…","noProducts":"No items on this board at this level.","level":"Level","levelItem":"Items","levelSubitem":"Sub-items","levelSubSubitem":"Sub-sub-items","fromBoard":"From the board","toScan":"Scan or type","noScanFields":"This template has no scan fields. Add an “Operator scan / type” field to it in the Label Maker, or print directly from the board.","scanPlaceholder":"Scan or type…","selectProductFirst":"Choose a product first.","fillAllFields":"Fill every scan field to print.","printButton":"Print label","printingButton":"Printing…","printedOne":"Printed 1 label — recorded in the print log.","printedCountLabel":"{count} printed this session","clear":"Clear","emptyState":"Pick a board and template to begin.","errorConnector":"No print connector is configured. Set one up in Admin → Label Printers.","errorPrinterNotNetwork":"The selected printer isn’t a network printer.","errorPrinterNotFound":"That printer no longer exists — pick another.","errorForbidden":"You don’t have permission to print labels.","errorTemplateArchived":"That template was archived — pick another.","errorNetwork":"Network error — nothing was sent to the printer.","errorGeneric":"Print failed.","scanback":{"title":"Confirm print (optional)","hint":"Scan the printed label to verify it matches.","placeholder":"Scan printed label…","confirmed":"Confirmed — the scan matches.","mismatch":"Mismatch — the scan didn’t match the expected value.","expected":"Expected","reprint":"Reprint","error":"Could not record the scan-back."}}},"workspaceSettings":{"pageTitle":"Workspace settings","breadcrumb":"Settings","label":"Settings","emptyState":{"title":"No workspace settings yet","body":"When a module adds a workspace-scoped configuration tab, it will appear here. For now there is nothing to configure at the workspace level."},"permissionDeniedTab":"You don't have permission to view this settings tab.","tabNotFound":"That settings tab does not exist.","tabs":{"members":"Members"}},"jira":{"myWork":{"title":"My Jira","subtitle":"Jira issues assigned to you, synced from your organization’s Jira.","manage":"Manage Jira","notConnected":"Jira isn’t connected yet. An administrator needs to finish setup.","matchHelp":"We match Jira issues to you by email. If nothing shows up, your Jira account may use a different email or hide it for privacy — an admin can link it on your user profile.","assignedCount":"{count} assigned issue(s)","noneAssigned":"No issues assigned to you in the synced data yet."},"settings":{"back":"← Back to integrations","heading":"Jira","intro":"Connect Jira so your issues and projects show up alongside everything else in the portal.","connectedOrg":"Organization is connected to Jira","notConnectedOrg":"Organization not connected yet","connectedHelp":"Shared Jira data syncs at the org level — you don’t need to connect your own account unless you want issues from a different Jira site.","notConnectedHelp":"An administrator still needs to set the Jira environment variables. You can still connect your own Jira below.","viewMyIssues":"View your assigned Jira issues →","yourConnections":"Your connections","noneConnected":"You haven’t connected a personal Jira account.","disconnect":"Disconnect","removing":"Removing…"},"connect":{"heading":"Connect your own Jira","help":"Create an API token in your Atlassian account settings, then paste it below with the email of that account.","label":"Label","siteUrl":"Site URL","email":"Atlassian email","apiToken":"API token","connect":"Connect","validating":"Validating…","connected":"Connected — your Jira is linked."}},"status":{"pageTitle":"System Status","allOperational":"All systems operational","someDegraded":"Some systems are experiencing degraded performance","someOutage":"Some systems are experiencing an outage","operational":"Operational","degraded":"Degraded","outage":"Outage","servicesHeading":"Services","lastChecked":"Last checked","noData":"Status data is being collected.","services":{"webApp":"Web Application","database":"Database","email":"Email & Calendar","emailDelivery":"Email Delivery","fileStorage":"File Storage","erp":"Redix ERP Connectivity"},"incidentHistory":"Incident history","noIncidents":"No incidents in the past 30 days.","incidentStatuses":{"investigating":"Investigating","identified":"Identified","monitoring":"Monitoring","resolved":"Resolved"},"incidentSeverities":{"minor":"Minor","major":"Major","critical":"Critical"},"subscribeHeading":"Get status alerts","subscribeHint":"Enter your email to receive notifications when incidents are opened, updated, or resolved.","subscribePlaceholder":"you@example.com","subscribeButton":"Notify me","subscribeSuccess":"Subscribed! Check your email to confirm.","subscribeFail":"Could not subscribe — please try again.","unsubscribedBanner":"You have been unsubscribed from status alerts."},"shortcutOverlay":{"title":"Keyboard shortcuts","subtitle":"Power-user keys for fast navigation across the platform.","close":"Close","footerHint":"Press ? to open · Esc to close","commandPaletteSoon":"Command palette is coming soon.","sections":{"global":"Global","boards":"Boards","navigation":"Navigation","admin":"Admin"},"shortcuts":{"openShortcuts":"Show this shortcuts panel","commandPalette":"Open the command palette","closePanel":"Close the open panel","goBoards":"Go to Boards","goHome":"Go to Home","goAdmin":"Go to Admin","itemDown":"Move selection down","itemUp":"Move selection up","openItem":"Open the selected item","editItem":"Edit the selected item inline","newItem":"New item in the focused group","clearCell":"Clear the active cell (Delete / Backspace)"}},"dashboards":{"editor":{"tabs":{"style":"Style","layout":"Layout","title":"Title"},"layout":{"position":"Position","column":"Column","row":"Row","size":"Size","colSpan":"Col span","rowSpan":"Row span","locked":"Locked","unlocked":"Unlocked","lockedHint":"Prevents drag and resize"},"title":{"containerTitle":"Container title","untitled":"Untitled container","subtitle":"Subtitle / caption","subtitlePlaceholder":"Optional subtitle","showTitle":"Show title","showTitleHint":"Hides the title bar without clearing its value","visible":"Visible","hidden":"Hidden"},"style":{"border":"Border","borderStyle":"Style","none":"None","solid":"Solid","dashed":"Dashed","dotted":"Dotted","width":"Width","color":"Color","radius":"Radius","background":"Background","opacity":"Opacity","font":"Font","family":"Family","size":"Size","weight":"Weight","align":"Align","lineHeight":"Line height","padding":"Padding","linked":"Linked","linkAll":"Link all","allSides":"All sides","top":"Top","right":"Right","bottom":"Bottom","left":"Left","shadow":"Shadow","offsetX":"X offset","offsetY":"Y offset","blur":"Blur","spread":"Spread","inset":"Inset","insetShadow":"Inset shadow","aligns":{"left":"Align left","center":"Center","right":"Align right","justify":"Justify"}},"data":{"sourceBoard":"Source board","loading":"Loading…","pickBoard":"— pick a board —","pickColumn":"— pick a column —","xAxis":"X-axis (categories)","yAggregation":"Y-axis aggregation","yColumn":"Y-axis column (numeric)","aggregations":{"count":"Count (# items)","sum":"Sum","avg":"Average","min":"Min","max":"Max"}},"renderer":{"noData":"No data to display","byAxis":"by {{label}}"}},"header":{"eyebrow":"Workspace dashboard","renameHint":"Click to rename","nameLabel":"Dashboard name","descriptionLabel":"Description","descriptionPlaceholder":"Add a description","descriptionCounter":"{{count}}/500","saving":"Saving…","saveFailed":"Couldn't save — your text was put back.","errors":{"empty":"The name can’t be empty.","too_long":"That is longer than allowed.","control_chars":"Remove the special characters.","not_text":"Enter text."},"export":"Export","share":"Share","more":"More options","visibility":{"private":"Private","shared":"Shared","company_wide":"Company"},"visibilityHint":{"private":"Only you (and admins) can open it.","shared":"Everyone in this workspace can open it.","company_wide":"Everyone in the company can open it."}},"actionsMenu":{"present":"Presentation mode","rename":"Rename","duplicate":"Duplicate","visibility":"Change visibility","archive":"Archive","help":"How does it work?","archiveConfirm":"Archive this dashboard? You can restore it later.","archiveYes":"Archive dashboard","archiveNo":"Keep it","copySuffix":"(copy)","duplicateOmitted":"{{count}} chart(s) were not copied: you don't have access to their data.","duplicating":"Duplicating…","actionFailed":"That didn't work. Try again.","forbidden":"You don't have permission for that."},"exportPdf":{"menuItem":"Export to PDF","title":"Export to PDF","subtitle":"The PDF uses the filters applied right now.","orientation":"Orientation","portrait":"Portrait","landscape":"Landscape","onePerPage":"One widget per page","scale":"Scale","scale100":"100% — default","scale80":"80% — more per page","scale67":"67% — the most per page","download":"Download PDF","generating":"Generating PDF…","close":"Close","done":"PDF downloaded.","errors":{"busy":"Another PDF is being generated. Try again in {{seconds}} s.","forbidden":"You don't have permission to export dashboards.","too_many_widgets":"This dashboard has more than 40 widgets — too many for one PDF.","render_timeout":"The PDF took longer than 60 seconds. Try again or reduce the widgets.","pdf_unavailable":"PDF is not available in this environment.","generic":"Couldn't generate the PDF. Try again."}},"schedule":{"email":{"subject":"Scheduled report: {dashboard}","intro":"Your scheduled report “{dashboard}” is attached as a PDF.","generatedAt":"Generated on {when} ({zone}).","scheduledBy":"Scheduled by {owner}.","open":"Open in RedsisOne","unsubscribe":"Stop receiving this report: {url}","test":"This is a test send — only you received it."},"notice":{"pausedTitle":"Scheduled report paused: {dashboard}","notDeliveredTitle":"Scheduled report not delivered: {dashboard}","pausedTitleNoName":"Scheduled report paused","notDeliveredTitleNoName":"Scheduled report not delivered","resumeHint":"Open the dashboard’s Export menu to review it and resume it.","reasons":{"owner_lost_access":"It was paused because you no longer have access to export this dashboard. Nothing was sent.","dashboard_archived":"It was paused because the dashboard was archived. Nothing was sent.","repeated_failures":"It was paused after three deliveries in a row failed.","pdf_too_large":"The PDF was larger than 10 MB, so it was not sent. Reduce the widgets or use a smaller scale."}},"errors":{"not_found":"This scheduled send no longer exists or you can’t see it.","forbidden":"You don’t have permission to do this.","not_owner":"Only the person who created this scheduled send can change it or send it.","invalid_cadence":"Choose daily, every N days, weekly or monthly.","invalid_hour":"Choose an hour between 00 and 23.","invalid_weekday":"Choose a day of the week.","invalid_every_days":"Choose a number of days between 2 and 30.","invalid_timezone":"That time zone isn’t valid.","invalid_pdf_options":"Those PDF options aren’t valid.","invalid_recipients":"The recipient list isn’t valid.","too_many_recipients":"A scheduled send can have at most 20 recipients.","recipients_ineligible":"Some recipients can’t receive it: they must be active internal users who can open this dashboard.","too_many_for_dashboard":"This dashboard already has 5 active scheduled PDF sends.","too_many_for_owner":"You already have 10 active scheduled PDF sends.","send_cooldown":"This send was already sent manually less than 10 minutes ago. Try again later.","send_daily_limit":"You can send now or send a test at most 5 times in 24 hours.","test_email_off":"The test wasn’t sent: your email for scheduled sends is turned off in your notification settings.","send_skipped":"Nothing was sent: no recipient could receive it (email turned off in their preferences, no access or inactive).","send_failed":"The send failed. Check the history and try again.","paused":"This scheduled send is paused. Resume it first.","already_paused":"This scheduled send is already paused.","not_paused":"This scheduled send isn’t paused.","owner_lost_access":"The person who created this scheduled send can no longer export this dashboard, so it can’t be resumed.","generic":"Something went wrong. Try again."},"unsubscribe":{"title":"Stop receiving this report","body":"You receive “{dashboard}” by email from a scheduled send. You can stop receiving it; the others on the send keep receiving it.","confirm":"Stop receiving it","done":"Done — you won’t receive this report anymore.","notRecipient":"You aren’t receiving this scheduled send.","back":"Back to the dashboard"},"panel":{"menuItem":"Schedule send","title":"Scheduled sends","subtitle":"The PDF goes by email with what each person can see, in their language and time zone.","close":"Close","back":"Back to the list","loading":"Loading scheduled sends…","loadFailed":"Couldn’t load the scheduled sends.","retry":"Try again","emptyTitle":"No scheduled sends yet","emptyBody":"Email this dashboard’s PDF every day, every few days, every week or every month.","emptyCta":"Schedule a send","newSend":"New scheduled send","phrase":{"daily":"Every day at {time} ({zone})","every_n":"Every {n} days at {time} ({zone})","monthly":"On the 1st of every month at {time} ({zone})","weekly":{"sun":"Every Sunday at {time} ({zone})","mon":"Every Monday at {time} ({zone})","tue":"Every Tuesday at {time} ({zone})","wed":"Every Wednesday at {time} ({zone})","thu":"Every Thursday at {time} ({zone})","fri":"Every Friday at {time} ({zone})","sat":"Every Saturday at {time} ({zone})"}},"cadence":{"daily":"Daily","every_n":"Every N days","weekly":"Weekly","monthly":"Monthly"},"weekdays":{"sun":"Sunday","mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday"},"status":{"active":"Active","paused":"Paused","attention":"Needs attention"},"pauseReasons":{"manual":"paused by hand","owner_lost_access":"its creator lost access","dashboard_archived":"the dashboard was archived","repeated_failures":"three failed sends in a row"},"attention":{"failed":"the last send failed ({reason})","recipients":"someone didn’t receive the last send (no access or inactive)"},"recipientOne":"1 recipient","recipientCount":"{n} recipients","recipientsMore":"{names} and {n} more","unsubscribedCount":"{n} unsubscribed","nextSend":"Next send: {when} ({zone})","nextSendSoon":"Next send: within the next 15 minutes ({zone})","nextSendPaused":"Nothing goes out while it’s paused.","lastResult":"Last result: {status} · {when}","neverSent":"Not sent yet.","notYours":"Created by someone else: only they can edit or send it.","notificationSettings":"Open notification settings","actions":{"edit":"Edit","pause":"Pause","resume":"Resume","sendNow":"Send now","sendTest":"Send me a test","history":"History","hideHistory":"Hide history","delete":"Delete"},"deleteConfirm":"Delete this scheduled send? Nobody will receive it anymore.","deleteYes":"Delete send","deleteNo":"Keep it","toast":{"sentNow":"Sent.","testSent":"Test sent — check your email.","partlySent":"Sent to some recipients — check the history to see who didn’t receive it.","queued":"Queued: it goes out within the next few minutes.","paused":"Scheduled send paused.","resumed":"Scheduled send resumed.","deleted":"Scheduled send deleted.","created":"Scheduled send created.","saved":"Changes saved."},"history":{"title":"Latest sends","empty":"Nothing has been sent yet.","loading":"Loading the history…","failed":"Couldn’t load the history."},"trigger":{"scheduled":"Scheduled","send_now":"Send now","test":"Test"},"runStatus":{"pending":"Pending","running":"Sending","sent":"Sent","partial":"Partly sent","failed":"Failed","skipped":"Skipped","expired":"Expired"},"recipientStatus":{"pending":"Pending","sent":"Sent","failed":"Failed","skipped_no_access":"No access","skipped_inactive":"Inactive","skipped_prefs":"Turned off in their preferences"},"failureReasons":{"render_timeout":"the PDF took too long","render_failed":"the PDF couldn’t be generated","pdf_unavailable":"PDF isn’t available here","pdf_too_large":"the PDF was over 10 MB","too_many_widgets":"more than 40 widgets","owner_lost_access":"its creator lost access","dashboard_archived":"the dashboard was archived","broadcast_blocked":"the sending limit was reached","email_failed":"the email couldn’t be sent"},"unknownPerson":"A person you can’t see","form":{"createTitle":"New scheduled send","editTitle":"Edit scheduled send","cadence":"How often","everyDays":"Every how many days","everyDaysHint":"Between 2 and 30, counting from today.","weekday":"Day of the week","monthlyHint":"It goes out on the 1st of each month.","hour":"Time","zoneNote":"Time in {zone}. It goes out between :00 and :15.","changeZone":"Change it in your profile","recipients":"Recipients","search":"Search people by name or email","noMatches":"Nobody matches.","remove":"Remove {name}","full":"You reached the limit of 20 recipients.","meDefault":"If you leave it empty, only you receive it.","you":"you","noAccess":"Can’t receive it","noAccessSummary":"Some chosen people can’t receive it (inactive, external or unable to open this dashboard). Remove them to save.","pdfOptions":"PDF options","create":"Create send","save":"Save changes","saving":"Saving…","cancel":"Cancel"}}},"share":{"title":"Who can open this dashboard","saved":"Visibility updated.","close":"Close"},"help":{"title":"How does this dashboard work?","close":"Close help","tips":{"add":"Add widget opens the gallery: search by name or browse the categories, then click a card (or drag it onto the canvas).","configure":"Select a chart and choose its board, axis and aggregation in the side panel.","filters":"Filters above the canvas apply to every widget — and to the PDF.","arrange":"Drag a widget by its handle to move it; drag the corner to resize. Shift-click selects several to align them.","present":"Presentation mode hides the menus and fills the screen; Esc or \"Exit\" brings you back.","export":"Export → PDF downloads exactly what you see, with a cover page and the active filters.","live":"Changes by other people appear live; you will see a note when someone else is editing."}},"present":{"exit":"Exit (Esc)","label":"Presentation mode"},"emptyState":{"title":"Visualize data from several boards","body":"Charts, numbers, clocks and notes — all your boards in one view.","bodyReadOnly":"Nothing has been added to this dashboard yet.","cta":"Add your first widget"},"widgetGallery":{"open":"Add widget","title":"Add a widget","railTab":"Widgets","categoriesLabel":"Widget categories","close":"Close gallery","search":"Search widgets","all":"All","add":"Add","adding":"Adding…","dragHint":"Click to add, or drag onto the canvas","noMatchTitle":"No widget matches \"{{query}}\"","noMatchBody":"Try another word, or start with one of these:","clearSearch":"Clear search","categories":{"charts":"Charts","numbers":"Numbers","tables":"Lists & tables","time":"Time","media":"Text & media","layout":"Layout"},"entries":{"chart:bar":{"name":"Bar chart","description":"Compare values across categories."},"chart:bar_horizontal":{"name":"Horizontal bars","description":"Ranks long category names side by side."},"chart:bar_stacked":{"name":"Stacked bars","description":"Shows how parts add up to each total."},"chart:line":{"name":"Line chart","description":"Follow a trend over time."},"chart:area":{"name":"Area chart","description":"A trend with the volume underneath."},"chart:area_stacked":{"name":"Stacked area","description":"Several trends piled into one total."},"chart:area_100":{"name":"100% area","description":"Each part’s share of the whole over time."},"chart:pie":{"name":"Pie chart","description":"Parts of a whole, at a glance."},"chart:doughnut":{"name":"Doughnut chart","description":"A pie with room for the total in the middle."},"chart:scatter":{"name":"Scatter plot","description":"See how two measures relate."},"chart:radar":{"name":"Radar chart","description":"Compare several dimensions in one shape."},"chart:treemap":{"name":"Treemap","description":"Nested rectangles sized by value."},"chart:sunburst":{"name":"Sunburst","description":"A hierarchy as rings of share."},"chart:sankey":{"name":"Flow chart","description":"How volume moves between stages."},"chart:funnel":{"name":"Funnel","description":"Drop-off from one stage to the next."},"chart:waterfall":{"name":"Waterfall","description":"How increases and decreases build a total."},"chart:boxplot":{"name":"Box plot","description":"Spread, median and outliers of a measure."},"chart:histogram":{"name":"Histogram","description":"How values are distributed in ranges."},"chart:gauge":{"name":"Gauge","description":"One number against its target."},"chart:heatmap":{"name":"Heat matrix","description":"A table of values coloured by size."},"chart:pareto":{"name":"Ranking","description":"Categories ordered from largest to smallest."},"kpi":{"name":"KPI number","description":"One headline number from a board, with its trend."},"manual":{"name":"Manual number","description":"A value you type in yourself."},"battery":{"name":"Meter","description":"Progress toward a goal, at a glance."},"clock":{"name":"Clock","description":"The time here or in other cities."},"countdown":{"name":"Countdown","description":"Time left until a date."},"title":{"name":"Title","description":"A heading to organise sections."},"text":{"name":"Text","description":"Notes, instructions or context."},"image":{"name":"Image","description":"A logo, photo or diagram."},"embed":{"name":"Embed","description":"A page or video from another site."},"button":{"name":"Button","description":"A link to a board, form or site."},"divider":{"name":"Divider","description":"A line that separates sections."},"group":{"name":"Group","description":"A frame that keeps widgets together."}}},"print":{"unavailableInPdf":"Not available in PDF","generatedLabel":"Generated","exportedByLabel":"Exported by","widgetsLabel":"Widgets","exportedBy":"Exported by {{name}}","generatedAt":"Generated {{when}}","filters":"Filters applied","noFilters":"No filters — all data","widgets":"{{count}} in total","empty":"This dashboard has no widgets."},"menu":{"label":"Dashboards"},"canvas":{"editContainer":"Edit container","addContainer":"Add","showGrid":"Show grid","hideGrid":"Hide grid","emptyTitle":"No containers yet","emptyBody":"Drag a container from Add onto the canvas, or click one to place it.","presenceEditing":"is also editing","mode":{"label":"Layout","grid":"Grid","canvas":"Canvas","gridHint":"Containers snap to the column grid.","canvasHint":"Containers are placed freely, in pixels."},"dnd":{"dropHere":"Drop to place","dragHint":"Drag onto the canvas, or click to add"},"select":{"countSelected":"{{count}} selected","clear":"Clear selection","alignLabel":"Align","alignLeft":"Align left","alignCentreX":"Align horizontal centres","alignRight":"Align right","alignTop":"Align top","alignCentreY":"Align vertical centres","alignBottom":"Align bottom"},"reflow":{"notice":"Layout is being reflowed to fit. Widen the canvas to rearrange containers."},"saveFailed":"Couldn't save the layout — the container was put back.","dismissToast":"Dismiss","containerTypes":{"chart":"Chart","kpi":"KPI","title":"Title","text":"Text","image":"Image","button":"Button","divider":"Divider","group":"Group","embed":"Embed","manual":"Manual","battery":"Meter","clock":"Clock","countdown":"Countdown","html":"Custom HTML"},"paletteGroups":{"data":"From data","content":"Content","layout":"Layout","utility":"Utility"},"container":{"actionsLabel":"Container actions","remove":"Remove","confirmRemove":"Confirm remove","edit":"Edit","done":"Done","configure":"Configure","retry":"Retry","refreshing":"Refreshing","asOf":"as of {{time}}","editorData":"Data","editorType":"Type","chartTitle":"Chart title","chartTitlePlaceholder":"Untitled chart","display":"Display","gridLines":"Grid lines","dataLabels":"Data labels","noSource":"No data source configured","noData":"No data in this range","titleEmpty":"Add heading text in the editor","textEmpty":"Add text in the editor","imageEmpty":"Add an image URL in the editor","buttonEmpty":"Add a button label in the editor","manualEmpty":"Enter a value in the editor","htmlEmpty":"No HTML content","embedEmpty":"Add a URL to embed in the editor","countdownEmpty":"Set a target date in the editor","countdownExpired":"Time is up","countdownUnits":{"d":"days","h":"hrs","m":"min","s":"sec"},"groupMembers":"{{count}} inside","meterStatus":{"good":"On track","warn":"At risk","danger":"Breached"},"chartLoadFailed":"Couldn't load — the board query failed.","noPermission":"You don't have access to this container's source board.","missingContext":"This container is missing its dashboard context.","unknownType":"Unknown container type \"{{type}}\"."},"filters":{"label":"Filters","addFilter":"Add filter","clearAll":"Clear all","remove":"Remove filter","none":"No filters — showing everything","scopeNote":"Filters scope every container on this dashboard.","column":"Column","operator":"Condition","value":"Value","apply":"Apply","cancel":"Cancel","noColumns":"Add a chart with a board source to filter this dashboard.","onSomeBoards":"on {{count}} of {{total}} boards","saveFailed":"Couldn't save the filters — they were put back.","range":{"label":"Date range","allTime":"All time","custom":"Custom","from":"From","to":"To","presets":{"today":"Today","yesterday":"Yesterday","last_7_days":"Last 7 days","last_30_days":"Last 30 days","last_90_days":"Last 90 days","this_month":"This month","last_month":"Last month","this_quarter":"This quarter","this_year":"This year"}},"ops":{"eq":"is","neq":"is not","gt":"is greater than","gte":"is at least","lt":"is less than","lte":"is at most","in":"is any of","like":"contains","is_null":"is empty","not_null":"is not empty"}}},"crud":{"newDashboard":"New Dashboard","namePlaceholder":"Dashboard name","descriptionPlaceholder":"Optional description","visibility":{"private":"Private","shared":"Shared","company_wide":"Company-wide"},"empty":{"title":"No dashboards yet","body":"Create your first dashboard above.","bodyReadOnly":"Ask an admin to create one for you."},"count_one":"{{count}} dashboard","count_other":"{{count}} dashboards"},"gallery":{"title":"Dashboards","subtitle":"Every dashboard in this workspace you can open.","add":"Add dashboard","create":"Create","cancel":"Cancel","createFailed":"Could not create the dashboard. Try again.","search":"Search dashboards","filters":{"all":"All","mine":"Mine","shared":"Shared with me"},"sort":{"label":"Sort","recent":"Recently updated","name":"Name","created":"Newest"},"mode":{"grid":"Grid","canvas":"Canvas"},"updated":"Updated {{when}}","ownedByYou":"You","noneTitle":"No dashboards yet","noneBody":"Create your first dashboard to chart anything in this workspace.","noneBodyReadOnly":"Ask an admin to create one for you.","noMatchTitle":"No dashboards match","noMatchBody":"Try a different search or filter.","clearFilters":"Clear filters","backToWorkspace":"Back to workspace"},"admin":{"shell":{"eyebrow":"charts & dashboards","empty":{"title":"Charts & Dashboards is coming","body":"Canvas dashboards with live charts, KPI tiles, connectors, and more. Enable with DASHBOARDS_ENABLED=true when ready to activate."},"tabs":{"overview":"Overview","audit":"Audit Log","settings":"Settings"}}}},"portalKpis":{"eyebrow":"My Hub","title":"Portal KPIs","description":"Live operational metrics across the modules you can access.","metricsHeading":"Module metrics","empty":{"title":"No metrics to show yet","body":"Once the modules you can access have activity, their KPIs appear here. Until then, use My Work for assigned items and My Views for filtered grids."},"overdue":{"title":"Overdue tickets","count":"{{count}} overdue","empty":"No overdue tickets — every active ticket is within its SLA.","ticket":"Ticket","severity":"Severity","due":"Due","hoursOverdue":"h overdue","daysOverdue":"d overdue"},"comingSoon":{"title":"My Dashboards","description":"Personal dashboards that surface the metrics you care about most.","cardTitle":"Coming soon","cardBody":"The Dashboards module is on the roadmap. It'll let you arrange charts, KPI tiles, and live boards into a single view per user. For now, use My Work for assigned items and My Views for filtered grids."}},"emptyState":{"boardsTitle":"No boards yet","boardsBody":"Boards are where your team tracks work — tickets, projects, requests and more. Open a workspace to create your first one.","boardsCta":"Browse workspaces","ticketsTitle":"No tickets yet","ticketsBody":"Field Service tickets land here once work is dispatched to a service provider. Create one to send your first job to the field.","ticketsCta":"Create your first ticket","announcementsTitle":"No news yet","announcementsBody":"Company news, product highlights and Intranet updates will appear here.","announcementsCta":"Write the first post","templatesTitle":"No templates yet","templatesBody":"Templates let your team spin up a ready-made board in one click. Create the first one to share a starting point.","templatesCta":"New template","requestsTitle":"No requests yet","requestsBody":"When you create a board item and assign it to someone else, it shows up here so you can track your open asks.","requestsCta":"Browse boards"},"errorPage":{"title":"Something went wrong","body":"This page didn't finish loading. The issue has been logged automatically — you don't need to do anything. You can try again, or head back home.","errorIdLabel":"Error ID","errorIdHint":"Share this ID with support so we can find it fast.","tryAgain":"Try again","goHome":"Go home","viewReports":"View my bug reports","detailsLabel":"Error details"},"help":{"title":"Help","openHelp":"Help for this page","whatIsThis":"What is this?","howTo":"How to use","tips":"Tips","keyboardShortcuts":"Keyboard shortcuts →","giveFeedback":"Give feedback","feedbackSubject":"Portal help feedback","feedbackBody":"My feedback about this page:","noHelp":"No help is available for this page yet."},"inlineEdit":{"ariaLabel":"Edit item title","placeholder":"Item title","hint":"Enter to save · Esc to cancel","empty":"Title cannot be empty"},"contextMenu":{"actions":"Item actions","open":"Open item","copyLink":"Copy link","notes":"Notes & mentions","duplicate":"Duplicate","pinToTop":"Pin to top","unpin":"Unpin from top","archive":"Archive"},"quickAction":{"open":"Quick create","close":"Close menu","heading":"Create","newBoardItem":"New board item","newBoard":"New board","newFieldTicket":"New field ticket"},"reactions":{"add":"Add reaction","pick":"Pick an emoji","reaction":"reaction","reactions":"reactions"},"suggestions":{"engine":{"errors":{"capExceeded":"Suggestions are temporarily unavailable.","notFound":"Suggestion not found.","forbidden":"You do not have permission to manage suggestions."}},"settings":{"title":"Suggestions"}},"noteTaker":{"transcripts":{"title":"Meeting transcripts","description":"Let the AI Note Taker fetch and store transcripts from your Teams meetings so it can generate notes.","enableLabel":"Enable meeting transcripts","saveButton":"Save"},"retention":{"title":"Retention policy","hotDaysLabel":"Keep in hot storage","hotDaysHint":"days before moving to archive","archiveDaysLabel":"Delete after","archiveDaysHint":"days total (must exceed hot-storage days)","saveButton":"Save retention"},"readOnly":{"transcript":"Transcript","badge":"(read-only)","decisions":"Decisions","outline":"Outline"},"viewNamePlaceholder":"View name"},"documents":{"title":"Documents","singular":"Document","newDocument":"New Document","create":"Create document","creating":"Creating…","titlePlaceholder":"Untitled document","untitled":"Untitled","search":"Search documents…","empty":"No documents yet","emptyHint":"Create your first document to get started.","noResults":"No documents match your filters.","sortRecent":"Recently updated","sortName":"Name (A–Z)","sortCreated":"Date created","authorAnyone":"Anyone","authorMe":"Created by me","saving":"Saving…","saved":"Saved","saveError":"Save failed — will retry","viewOnly":"You can view only","viewOnlyHint":"You don’t have permission to edit this document.","collaborators":"Collaborators","noCollaborators":"No explicit collaborators yet — workspace members inherit access.","addCollaborator":"User ID or email","add":"Add","remove":"Remove","roleOwner":"Owner","roleEditor":"Editor","roleViewer":"Viewer","deleteDoc":"Delete document","deleteConfirm":"Delete this document? An admin can restore it.","deleting":"Deleting…","updated":"Updated","by":"by","previous":"Previous","next":"Next","pageOf":"Page {page} of {total}","loadError":"Could not load documents.","builder":{"page":"Page","paper":"Paper size","orientation":"Orientation","portrait":"Portrait","landscape":"Landscape","margins":"Margins","marginNormal":"Normal (1 in)","marginNarrow":"Narrow (½ in)","marginWide":"Wide","marginNone":"None","zoom":"Zoom","guides":"Show margin guides","paperNames":{"letter":"Letter","legal":"Legal","tabloid":"Tabloid","a4":"A4","a5":"A5"},"insert":"Insert","insertLabelSheet":"Avery label sheet","tabSheet":"Label sheet","tabField":"Field","tabDesign":"Design","insertField":"Insert field","pickWorkspace":"Workspace","pickBoard":"Board","pickLevel":"Level","pickRecord":"Record","pickColumn":"Column","fieldPreview":"Value","fieldHint":"Inserts the live value from the board; it refreshes when the document opens.","noBoards":"No boards available to pull from.","noDesigns":"No saved Label Maker designs you can use yet.","designHint":"Embeds a snapshot of the design — it prints at its real size.","loading":"Loading…","label":"Label","labelTemplate":"Avery template","perSheet":"{n} per sheet","lines":"Lines","addLine":"Add line","removeLine":"Remove line","lineText":"Line text","bold":"Bold","italic":"Italic","align":"Align","sizePt":"Size (pt)","baseSize":"Default size (pt)","font":"Font","fontSans":"Sans","fontSerif":"Serif","fontMono":"Mono","vAlign":"Vertical position","vTop":"Top","vMiddle":"Middle","vBottom":"Bottom","printOutlines":"Print cut lines","imageUrl":"Image URL","labelHint":"The same content prints on every label. Per-label data merge from One Boards is coming next."},"templates":{"title":"Choose a template","subtitle":"Start blank, from a document layout, or an Avery® label sheet.","nameLabel":"Document name","useTemplate":"Create","creating":"Creating…","categories":{"blank":"Blank","documents":"Documents","labels":"Labels","badges":"Name badges","cards":"Cards"},"items":{"blank":{"name":"Blank document","desc":"A clean page to start from."},"letter":{"name":"Business letter","desc":"Date, recipient, salutation, body, and sign-off."},"memo":{"name":"Internal memo","desc":"TO / FROM / DATE / RE header with a body."},"report":{"name":"Report","desc":"Title heading with section structure."},"invoice":{"name":"Invoice","desc":"Header, billing block, and a line-item table."}},"averyNote":"Avery® templates are built in (no account needed) and print to exact label positions."}},"apiKeys":{"title":"API Keys","description":"Scoped, revocable keys that let integrations call the platform API.","actsAs":"Each key acts as the user who created it — it can reach only what that user can, limited further by the scopes you select.","create":{"heading":"Create a new key","nameLabel":"Name","namePlaceholder":"e.g. Monday Sync Key","expiresLabel":"Expires (optional)","scopesLabel":"Scopes","submit":"Create key","creating":"Creating…"},"created":{"title":"Key “{name}” created","warning":"Copy this key now — it is shown only once and cannot be retrieved again.","copy":"Copy","copied":"Copied","dismiss":"Done — I copied it"},"curl":{"copy":"Copy as curl","copied":"Copied curl"},"table":{"name":"Name","prefix":"Prefix","scopes":"Scopes","owner":"Owner","lastUsed":"Last used","usage":"Calls","created":"Created","status":"Status","actions":"Actions","empty":"No API keys yet. Create one above."},"status":{"active":"Active","revoked":"Revoked","expired":"Expired"},"revoke":{"action":"Revoke","confirm":"Click again to confirm","cancel":"Cancel"},"errors":{"nameRequired":"Enter a name for the key.","scopesRequired":"Select at least one scope.","createFailed":"Could not create the key. Try again."}},"timeTracking":{"loading":"Loading…","loadError":"Couldn't load time entries.","retry":"Retry","billable":"Billable","nonBillable":"Non-billable","delete":"Delete","untitled":"Untitled","general":"General","tab":"Time","totalLogged":"Total logged","startTimer":"Start timer","stop":"Stop","running":"Running","noEntries":"No time logged yet.","widgetStop":"Stop timer","widgetRunningOn":"Timer running","widgetIdle":"No timer running","viewReport":"Time report","reportTitle":"Time report","groupBy":"Group by","groupByEntity":"Item","groupByUser":"User","groupByDay":"Day","from":"From","to":"To","apply":"Apply","colItem":"Item","colUser":"User","colDate":"Date","colDuration":"Duration","colBillable":"Billable","colCategory":"Category","total":"Total","entries":"entries","noData":"No time entries in this range.","categoryWork":"Work","categoryTravel":"Travel","categoryMeeting":"Meeting","categoryAdmin":"Admin","entityBoardItem":"Board item","entityFieldTicket":"Field ticket","entityGeneral":"General"},"adminGroupsTeam":{"switchLabel":"Usable as a team","switchHint":"People can assign, mention and share One Boards work with this group.","badge":"Team","saveError":"Could not change the team setting. Please try again."},"orgChart":{"zoomIn":"Zoom in","zoomOut":"Zoom out","fitToScreen":"Fit to screen","jumpToMe":"Jump to me","expandAll":"Expand all","collapseAll":"Collapse all","exportChart":"Export","exporting":"Exporting…","exportPng":"PNG image","exportSvg":"SVG vector","panZoomHint":"Scroll to zoom · drag to pan","levelBadge":"L","filters":"Filters","columns":"Columns","exportCsv":"Export CSV","peopleCount":"{count} people","filterByDept":"Department","filterByRole":"Role","filterOnCallNow":"On call now","clearFilters":"Clear","copyEmail":"Copy email","copied":"Copied","editDetails":"Edit details","copyLink":"Copy link","openInAdmin":"Open in Admin","preferredNameLabel":"Preferred name","titleLabel":"Job title","eyebrow":"company & people","title":"Org Chart","subtitle":"Set up your company — departments, locations, and reporting lines — and place every person.","viewChart":"Org chart","viewDirectory":"Directory","searchPlaceholder":"Search people…","departments":"Departments","allPeople":"All people","noDepartments":"No departments yet.","members":"Members","noMembers":"No one is assigned to this department yet.","noPeople":"No people found.","unassigned":"No manager","reports":"{count} reports","colName":"Name","colDepartment":"Department","colRole":"Role","colEmail":"Email","colPhone":"Phone","colOnCall":"On call","onCallToday":"On call today","profile":"Profile","boards":"Boards","openTickets":"Open tickets","onCallSchedule":"On-call schedule","noBoards":"Not a member of any board.","noOpenTickets":"No open tickets.","noOnCall":"No upcoming on-call shifts.","manager":"Manager","role":"Role","email":"Email","phone":"Phone","mobile":"Mobile","close":"Close","loading":"Loading…","loadError":"Could not load this profile.","selectPerson":"Select a person to see their profile.","editHierarchy":"Edit hierarchy","doneEditing":"Done","parentLabel":"Parent","topLevel":"Top level (no parent)","saved":"Saved","saveError":"Could not save changes.","editStructure":"Edit structure","tabDepartments":"Departments","tabGroups":"Groups","resizePanel":"Resize panel","builderHint":"Build your org: add, rename, reorder, or nest departments. Changes apply right away.","addRootDepartment":"Add top-level department","addSubDepartment":"Add sub-department","newDepartmentName":"New department name","add":"Add","cancel":"Cancel","rename":"Rename","delete":"Delete","moveUp":"Move up","moveDown":"Move down","headLabel":"Head","noHead":"No head","confirmDeleteDept":"Delete this department? Sub-departments move up a level; members lose this home.","editLevels":"Edit levels","levelsHint":"Name the tiers of your hierarchy, top to bottom.","levelNamePlaceholder":"Level name","addLevel":"Add level","save":"Save","groupsBuilderHint":"Groups are flexible membership pools that control access. A person can be in many.","addGroup":"Add group","newGroupName":"New group name","noGroups":"No groups yet.","confirmDeleteGroup":"Delete this group?","homeDepartment":"Home department","noDepartment":"No department","departmentHint":"Where this person belongs in the org.","groupsLabel":"Groups","groupsHint":"Groups control what this person can access.","noGroupsForPerson":"Not in any group.","statDepartments":"Departments","statLocations":"Locations","statPeople":"People","statOnCall":"On call now","tabLocations":"Locations","locationsBuilderHint":"Set up the company's branches and offices. Place people in a home office; they can also travel to others.","addLocation":"Add location","newLocationName":"Office name (e.g. US — Miramar)","noLocations":"No locations yet.","locCity":"City","locCountry":"Country code (e.g. US)","locState":"State / region (optional)","locTimezone":"Timezone (e.g. America/New_York)","locColor":"Color","locPrimary":"Primary office","locInactive":"Inactive","deactivate":"Deactivate","reactivate":"Reactivate","edit":"Edit","reportsTo":"Reports to","reportsToHint":"Who this person reports to.","noManager":"No manager","searchManager":"Search for a manager…","clearManager":"Clear manager","homeLocation":"Home location","homeLocationHint":"Where this person works out of.","noHomeLocation":"No home location","legacyOfficeHint":"Was: {value}","travelLocations":"Travels to","travelLocationsHint":"Other offices this person works from.","noTravelLocations":"No travel locations.","accessTitle":"Access","accessHint":"What this person can reach — review before off-boarding.","modulesLabel":"Modules (via groups)","noModules":"No module access via groups."},"onCall":{"title":"On call","currentlyOnCall":"Currently on call","primary":"Primary","backup":"Backup","nobody":"Nobody is on call right now.","addEntry":"Add on-call entry","person":"Person","department":"Department (optional)","noDepartment":"No department","startAt":"Start","endAt":"End","roleLabel":"Role","notes":"Notes","create":"Add to schedule","creating":"Adding…","remove":"Remove","untilLabel":"until","createError":"Could not add the on-call entry.","selectPerson":"Select a person"},"slaTimer":{"column":"SLA","sortByUrgency":"Sort by SLA urgency","sortByReceived":"Most recent","remaining":"{time} left","breached":"Breached {time} ago","green":"On track","yellow":"Due soon","red":"At risk","breachedLabel":"Breached","slaArrival":"Arrival SLA","slaResponse":"Response SLA","slaResolution":"Resolution SLA","slaBreached":"SLA Breached","slaOk":"SLA OK"},"fieldServiceBridge":{"title":"Field Service bridge","description":"Sync this board’s items with Field Service tickets. New and updated items become tickets; ticket status and assignee flow back to the board.","flagOff":"The bridge is turned off platform-wide. An administrator must enable it before any sync runs.","enabledLabel":"Sync this board with Field Service","autoBadge":"Auto","linkedTickets":"Linked tickets","lastSync":"Last sync","never":"Never","mappingTitle":"Column mapping","saved":"Saved","fields":{"status":"Status","severity":"Severity","client":"Client","site":"Site","productSku":"Product","problemType":"Problem type","assignee":"Assignee","received":"Received","slaDue":"SLA due","description":"Description"},"none":"— None —","backfill":"Backfill tickets","backfillHint":"Create or refresh a ticket for every existing item on this board. Safe to run repeatedly.","backfillDone":"Backfill complete: {created} created, {updated} updated of {scanned} scanned.","backfillFailed":"Backfill failed. Check the sync status above and try again."},"fsQaData":{"title":"Service QA Data","description":"Seed and remove demo dispatch tickets, and provision or remove the relational QA workspace. Gated, audited, and fully reversible.","statusHeading":"Current status","ticketsTotalLabel":"fs_ticket rows (all)","ticketsQaLabel":"QA-seeded tickets","ticketsDemoLabel":"Demo-route tickets","workspaceLabel":"QA workspace","workspaceYes":"Provisioned","workspaceNo":"Not provisioned","openWorkspace":"Open workspace","connectorLabel":"FS bridge connector","connectorOn":"Enabled","connectorOff":"Disabled","seedHeading":"Demo dispatch tickets","seedDescription":"Inserts a self-contained scenario (clients, contracts, coordinator chains and a dozen tickets) straight into fs_ticket so the dispatch queue has live data. Idempotent — re-running will not duplicate rows.","seed":"Seed demo tickets","removeSeed":"Remove QA data","workspaceHeading":"Relational QA workspace","workspaceDescription":"Provisions the canonical 10-board Service workspace (working connect relations, Tickets bridge board grant). The global bridge connector is never turned on for you.","provision":"Provision QA workspace","removeWorkspace":"Remove QA workspace","working":"Working…","seeded":"Seeded {tickets} tickets ({assigned} assigned, {unassigned} in the dispatch queue), {clients} clients, {contracts} contracts and {coordinators} coordinator assignments.","removed":"Removed {tickets} tickets, {contracts} contracts, {sites} sites, {clients} clients and {coordinators} coordinator rows.","provisioned":"Provisioned the QA workspace “{name}”.","provisionedConnectorOff":"Provisioned the QA workspace “{name}”. Engine-path tickets need the FS bridge connector enabled before Tickets items materialise.","deprovisioned":"Removed the QA workspace.","deprovisionedNone":"No QA workspace was provisioned.","demoHeading":"Demo-route data","demoDescription":"The “provision demo route” tool seeds a Miami demo route (REDIX-DEMO-CLIENT) per technician into fs_ticket, with no bulk cleanup — so it accumulates and pollutes Ticket Central and the dashboards. This removes every demo-route row (tickets, sites, routes, stops, loadout). It never touches a real ticket, and every row is snapshotted to the audit log before deletion — so a purge is fully reversible.","purgeDemo":"Purge {count} demo-route tickets","demoPurged":"Purged {tickets} demo tickets, {addresses} sites, {routes} routes, {stops} stops and {loadout} loadout rows. Archived first as {archiveId} — fully restorable.","errorGeneric":"Something went wrong. Please try again."},"fsDiagnostics":{"title":"Diagnostics","subtitle":"Diagnose the issue, record the session, and hand off to a quote.","recentSessions":"Recent sessions","noSessions":"No diagnostic sessions yet.","startNew":"Start a diagnosis","byTicket":"From a ticket","byAsset":"By asset / serial","chooseFlow":"Choose a diagnostic flow","noFlows":"No published flows yet — publish one in the Diagnostics admin.","serialLabel":"Serial number","assetLabel":"Asset","open":"Open","resume":"Resume","flow":"Flow","ticket":"Ticket","started":"Started","statusOpen":"In progress","statusCompleted":"Completed","statusAbandoned":"Abandoned","back":"Back","recordAnswer":"Record answer","noFlowForTicket":"No diagnostic flow is published for this ticket yet.","captureReadings":"Record readings","progress":"{pct}% complete","outcome":"Diagnosis","rootCause":"Root cause","rootCausePlaceholder":"Describe the root cause","recommendedProcedure":"Recommended procedure","likelyParts":"Likely parts","noParts":"No specific parts suggested.","requestParts":"Request these parts","sendToQuote":"Send to quote","completeDiagnosis":"Complete diagnosis","narrative":"Session summary","quote":{"title":"Quote","send":"Create Redix quote","sending":"Creating quote…","created":"Quote created in Redix.","sent":"Quote created and sent.","queued":"Quote queued — Redix is in safe / read-only mode and will create it once live.","failed":"Redix could not create the quote: {error}","laborHours":"Labor hours","laborRate":"Labor rate","alsoSend":"Also send to the customer","redixQuote":"Redix quote {number}","viewInRedix":"View in Redix","statusPending":"Queued","statusCreated":"Created","statusSent":"Sent","statusAccepted":"Accepted","statusDeclined":"Declined","statusFailed":"Failed"},"history":{"title":"Asset history","tickets":"Past tickets","reports":"Service reports","sessions":"Diagnoses","empty":"No history for this asset yet."},"tabs":{"history":"Asset history","manuals":"Manuals","videos":"Videos","ayva":"Ayva assist"},"ayva":{"title":"Ayva assist","suggest":"Suggest the next check","draftQuote":"Draft the quote","disabled":"Diagnostics AI assist is turned off.","hint":"Ayva proposes — you confirm. Every action is permission-checked and audited."},"report":{"title":"Service report","workPerformed":"Work performed","partsUsed":"Parts used","slaMet":"SLA met","signOff":"Customer sign-off","signedBy":"Signed by","save":"Save report","saved":"Report saved."},"admin":{"valid":"Valid","captureLabel":"Label","captureUnit":"unit","partName":"Part name","title":"Diagnostic flow authoring","subtitle":"Build and publish the guided diagnostic trees techs run on tickets.","flows":"Flows","newFlow":"New flow","seed":"Seed starter content","seeded":"Seeded {n} starter flow(s).","editTree":"Edit tree","publish":"Publish","published":"Published","draft":"Draft","archived":"Archived","archive":"Archive","newDraft":"New draft from published","version":"Version {n}","validationErrors":"Fix these before publishing:","validationWarnings":"Warnings:","addNode":"Add node","nodeQuestion":"Question","nodeCheck":"Check / measurement","nodeOutcome":"Outcome","rootNode":"Start node","setRoot":"Set as start","prompt":"Prompt","choices":"Choices","addChoice":"Add choice","choiceLabel":"Option label","choiceNext":"Goes to","endHere":"(end)","save":"Save draft","saved":"Draft saved.","key":"Key","flowTitle":"Title","description":"Description","problemType":"Problem type","productFamily":"Product family","productSku":"Product SKU","empty":"No flows yet. Seed starter content or create a new flow.","deleteNode":"Remove node"},"errors":{"generic":"Something went wrong.","notFound":"Not found.","noCap":"You do not have permission for that."}},"routeBuilder":{"scoreBarIneligibleAria":"Ineligible candidate — not scored","weightProportionsAria":"Weight proportions","title":"Route Builder","readOnlyBlocked":"Read-only — you need dispatch permission to make changes.","readOnlyBanner":"Read-only view. Dispatch permission is required to build or change routes.","workspace":{"layers":"Layers","filters":"Filters","select":"Select","selectMode":"Marquee select mode","liveNow":"Live now","planFor":"Planning {date}","notWired":"This action is not available yet.","layer":{"l1":"Open tickets","l2":"Live technicians","l3":"Closed tickets","l5":"Warehouses","l9":"Routes","l10":"Traffic","l11":"Incidents","l12":"Proposed routes"}},"playback":{"title":"GPS playback","play":"Play","pause":"Pause","follow":"Follow","speed":"Speed","loading":"Loading GPS history…","empty":"No GPS history recorded for this technician today.","noAccess":"You do not have permission to view location history.","pickTech":"Select a technician to replay their GPS history.","netError":"Could not load GPS history. Change the technician to retry.","scrubber":"Playback position"},"modes":{"plan":"Plan","live":"Live","history":"History"},"rail":{"actions":"Actions","queue":"Queue","crews":"Crews","route":"Route","ayva":"Ayva","parameters":"Parameters"},"actions":{"assign":"Assign","unassign":"Unassign","addToRoute":"Add to route","publish":"Publish","unpublish":"Unpublish","optimize":"Optimize","handToCoordinator":"Hand to coordinator","cancel":"Cancel"},"widePanel":"Widen panel","narrowPanel":"Narrow panel","hidePanel":"Hide panel","showPanel":"Show panel","common":{"why":"Why?","showWhy":"Show why","showMe":"Show me","fix":"Fix","retry":"Retry","clear":"Clear","details":"Details","dismiss":"Dismiss","undo":"Undo","edit":"Edit","accept":"Accept","confirm":"Confirm","cancel":"Cancel","requestId":"Request id","est":"est.","minAway":"{n} min away","driveMin":"{n} min","open":"Open"},"header":{"selected":"{n} selected","breached":"{n} breached","unverified":"{n} unverified addresses","clear":"Clear","planContext":"{mode} · {date} · {tech}","nothingSelected":"Nothing selected"},"states":{"errorTitle":"Something went wrong","asOf":"as of {time}","forbidden":"You do not have {capability}."},"actionsTab":{"empty":"Nothing selected. Click a dot, shift-click for more, or Shift+drag to marquee.","selectAllInFilter":"Select all in filter ({n})","groups":{"assign":"Assign","route":"Route","schedule":"Schedule","triage":"Triage","parts":"Parts","address":"Address"},"assignToTech":"Assign to tech","autoAssignBest":"Auto-assign best","unassignN":"Unassign {n} tickets","createRouteFor":"Create new route for…","removeFromRoute":"Remove from route","reoptimize":"Re-optimize","moveToDay":"Move to another day","moveToDayApply":"Move","setTimeWindow":"Set time window","setWindowApply":"Set window","setSeverity":"Set severity","escalate":"Escalate to manager","addNote":"Add note","notePlaceholder":"Add an internal note…","requestParts":"Request parts","schedulePickup":"Schedule pickup stop","fixAddress":"Fix address / re-geocode","searchTech":"Search technicians…","results":"Results","confirmUnassign":"Confirm unassign {n}","confirmRemove":"Confirm remove {n}","confirmEscalate":"Confirm escalate {n}"},"queueTab":{"filters":{"unassigned":"Unassigned","unrouted":"Unrouted","breached":"Breached","tight":"Tight","unverified":"Unverified","attention":"Needs review"},"sortBy":"Sort by","sort":{"sla":"SLA deadline","severity":"Severity","distance":"Distance","age":"Age"},"ticketsHere":"{n} tickets here","addressUnverified":"address unverified","empty":"No tickets waiting to be routed for {date}.","showAllOpen":"Show all open tickets","searchPlaceholder":"Search tickets...","scopeEmpty":"You have no boards assigned."},"crewsTab":{"filters":{"available":"Available today","coversRegion":"Covers this region","hasPart":"Has the part","directOnly":"Direct-hire only"},"empty":"No technicians match these filters.","clearFilters":"Clear filters","noVendors":"No service providers are set up.","rosterAdmin":"Open the roster admin"},"vendorCard":{"ownTechs":"(own techs)","authorized":"Authorized","notAuthorized":"Not authorized","expired":"Expired","unknown":"Unknown","coverage":"Coverage","capacity":"Capacity","techsEligible":"{eligible} of {total} eligible","outsideCoverage":"outside coverage","insuranceExpires":"Insurance expires in {n}d","insuranceExpired":"Insurance expired","regionMore":"+{n}"},"techCard":{"badge":{"directHire":"DIRECT HIRE","vendorTech":"VENDOR TECH","solo":"SOLO","unset":"UNSET"},"routingFull":"Full geo-routing","routingHandoff":"Handoff + status only","handoffNote":"Handoff only — no live routing.","meters":{"availability":"Available today","expertise":"Expertise match","inventory":"Van inventory","load":"Load vs capacity","distance":"Distance"},"meterValues":{"hoursFree":"{free}h of {total}h free","meetsExtra":"meets +{n} extra","missingSkill":"missing {skill}","partsLikely":"{on} of {total} likely parts","stopsOf":"{used} of {max} stops","driveDist":"{min} min · {km} km","noDistance":"no position — handoff only","noAvailability":"no shift data"},"assignN":"Assign {n} tickets","addToRoute":"Add to route","why":"Why?","ineligiblePrefix":"Ineligible:","vendorHandoffDrop":"Vendor tech — handoff only, no live routing"},"routeTab":{"noTech":"Pick a technician in Crews, or drag a ticket onto one.","noRoute":"{tech} has no route for {date}.","createRoute":"Create route","publishedEmpty":"Published route has no stops — this is an error.","summary":{"drive":"Drive","service":"Service","stops":"Stops","slack":"SLA slack"},"origin":{"autopilot":"Autopilot","manual":"Manual","version":"param v{n}"},"lockedBanner":"This route is published and in progress — reorder is disabled.","addStop":"Add stop","overflow":"+{n}m past shift","shiftEnds":"Shift ends {time} — {n} stops overflow","dropHere":"No stops yet — drag a ticket here","insertHere":"Insert here","est":"est.","unchanged":"unchanged","newStop":"NEW","slaMissed":"SLA missed","slackM":"slack {n}m","driveMin":"{n} min","publish":"Publish","unpublish":"Unpublish","reoptimize":"Re-optimize","confirmPublish":"Confirm publish","confirmUnpublish":"Confirm unpublish","confidence":"Confidence {pct}%","confidenceTitle":"Autopilot confidence — the share of this route’s stops that cleared every safety check."},"ayvaTab":{"needsYou":"Needs you","proposals":"Proposals","activity":"Activity","allClear":"Nothing needs you. {routes} routes planned, {quarantined} stops quarantined.","disabled":"Ayva assistance is off for this contract.","enableHint":"{who} can turn it on.","dismissedN":"{n} dismissed","commandPlaceholder":"e.g. give Carlos the three Polanco tickets","preview":"Preview","run":"Run","reviewBeforeAccept":"Review before accepting","provenance":"scored by param set v{version} · arithmetic by dispatch.ts","accept":"Accept","edit":"Edit","dismiss":"Dismiss","confirmAccept":"Confirm accept","undo":"Undo","source":{"autopilot":"Autopilot","watch":"Watch","plan":"Plan","command":"Command"},"driveDelta":"{n} min drive","slaDelta":"SLA {n}","costDelta":"{n}","fix":"Fix","showMe":"Show me"},"parametersTab":{"scope":{"global":"Global","contract":"Contract","ticket":"Ticket"},"override":"Ticket override in force","gates":"Gates","weights":"Weights","inheritance":"Inheritance chain","showMath":"Show the math","openStudio":"Open in Parameter Studio","baseLayerNote":"This is the global default set — the base layer.","studioDisabled":"The Parameter Studio is disabled for this contract.","noSelection":"No selection — showing the global default set.","version":"v{n}","closeStudio":"Back to summary","openFullPage":"Open full page","studioLoading":"Loading the editor…","studioLoadError":"The editor could not load."},"gate":{"required_skills":"Required skills","required_certifications":"Required certifications","vendor_allow_list":"Vendor allow-list","vendor_exclusion":"Vendor exclusion","region_coverage":"Region coverage","min_stock_on_hand":"Minimum stock","site_access_rules":"Site access","working_hours_window":"Working hours","max_travel_radius_km":"Max travel radius","hoy_no_circula":"Hoy No Circula"},"weight":{"distance_fit":"Distance fit","sla_fit":"SLA fit","parts_fit":"Parts fit","skill_match":"Skill match","current_load":"Current load","continuity_bonus":"Continuity","cost":"Cost"},"attention":{"no_tech":"No eligible technician","no_part":"Part not available","no_access":"Site access unmet","sla_lost":"SLA deadline passed","sla_gone":"SLA deadline passed","bad_address":"Address unverified","overflow":"Day overflows shift","unknown":"Needs review","stuckFor":"Stuck for {duration}"},"dnd":{"grabbed":"Grabbed {label}","dropped":"Dropped {label}","cancelled":"Drag cancelled","previewUnavailable":"Preview unavailable — drop will still be checked server-side","routeChanged":"Route changed while dragging — cancelled, nothing was applied.","ticketsToTech":"{n} tickets → {tech}","assign":"Assign","addToRoute":"Add to route","moveTo":"Move to…"},"health":{"routeHealth":"Route health","stopsOnTime":"{ontime} of {total} stops on time","pastShift":"+{n}m past shift","etaUnavailable":"ETA unavailable"}},"serviceWorkflow":{"inbox":{"title":"Coordinator Inbox","empty":"No tickets waiting for you.","mine":"Assigned to me","unacknowledged":"Waiting to be acknowledged","acknowledge":"Acknowledge","acknowledged":"Acknowledged","ownerSince":"Owner since {time}","slaDue":"SLA due {time}","rotatesIn":"Rotates in {duration}","error":"Could not load your inbox.","acknowledging":"Acknowledging…","rotatedTimes":"Rotated {n}x","slaIn":"SLA in {duration}","slaOverdue":"SLA overdue by {duration}","rotatingNow":"Rotating now","manage":"Manage"},"presence":{"title":"Presence","available":"Available","away":"Away","checkIn":"Check in","checkOut":"Check out","checkedInAt":"Checked in {time}","lastSeen":"Last seen {time}","project":"Project","availableNow":"{n} available now","updating":"Updating…","error":"Could not update your presence. Try again.","availableDesc":"You are receiving new tickets on this project.","awayDesc":"You will not receive new tickets on this project.","noProjects":"You are not assigned as a coordinator on any project."},"rotation":{"chain":"Rotation chain","rank":"Rank","primary":"Primary","secondary":"Secondary","tertiary":"Tertiary","rotatedTo":"Rotated to {name}","rotatedReason":"No acknowledgement in time — rotated to {name}","noCandidate":"No available coordinator to rotate to","held":"Held with current owner","rankN":"Rank {n}"},"custody":{"title":"Chain of custody","routed":"Routed","rotated":"Rotated","acknowledged":"Acknowledged","escalated":"Escalated","manualHandoff":"Manual handoff","handoff":"Hand off","handoffTo":"Hand off to…","from":"From {name}","to":"To {name}","note":"Note","empty":"No custody history yet.","handoffEmpty":"No one else to hand this to.","handingOff":"Handing off…","currentOwner":"Current owner","unassigned":"Unassigned"},"feasibility":{"title":"Route feasibility","checking":"Checking route feasibility…","ok":"All stops meet SLA","willBreach":"{n} stop(s) will miss SLA","firstBreach":"First breach at stop {stop}","projectedArrival":"Projected arrival {time}","slack":"{n} min of slack","late":"{n} min late","etaUnknown":"ETA unavailable","send":"Send","sendAnyway":"Send anyway","blocked":"Route not sent — SLA at risk","error":"Could not check route feasibility.","recheck":"Re-check","stopN":"Stop {n}","est":"est.","willBreachStop":"Will miss SLA","meetsStop":"Meets SLA","warnAck":"I understand one or more stops may miss SLA."}},"fieldService":{"ticketCreate":{"trigger":"+ New ticket","close":"Close form"},"ticketImport":{"trigger":"Import from Excel","eyebrow":"Services","pageTitle":"Import tickets from Excel","pageDescription":"Upload a customer incident list, map its columns, review every row and create the tickets.","backToTickets":"Back to Ticket Central","steps":{"upload":"Upload","map":"Client and columns","validate":"Validation","result":"Result"},"upload":{"label":"Incident file","hint":".xlsx, .xls or .csv · up to 10 MB · up to 500 rows · first sheet, row 1 holds the headers.","choose":"Choose file","parsing":"Reading file…","fileSummary":"{filename} · {rows} rows · {columns} columns","another":"Choose another file"},"client":{"label":"Client","placeholder":"Select a client","noClients":"There are no active clients.","contract":"Active contract: {name}","noContract":"No active contract: the SLA will use the account default tier.","preselected":"Client: {name}. If a column mapping is saved for this client, it is applied after the upload.","paramNotFound":"The client in the link is not an active client; pick one from the list.","ambiguousOption":"{name} — several active contracts","ambiguousHint":"A client with more than one active contract cannot be imported: create those tickets one by one, choosing the contract."},"defaultSeverity":{"label":"Default severity","hint":"Used for rows whose priority cell is empty."},"severity":{"S1":"S1 — Critical","S2":"S2 — High","S3":"S3 — Medium","S4":"S4 — Low"},"mapping":{"title":"Map the file columns","hint":"We suggested a column for each field from its header. Change any of them.","none":"— Not mapped —","required":"required","missing":"Map these fields to continue: {fields}","keyRule":"One ticket per reference per client: a reference already imported is skipped while its ticket exists, whatever its status (closed or cancelled too).","keyRuleShared":"The reference is also the site code (e.g. CIE): ONE ticket per site per client. A school already imported is skipped while its ticket exists, whatever its status (closed or cancelled too).","sameColumn":"The description needs its own column (reference and site code may share one, e.g. a CIE column).","notInFile":"These fields point at a column the file does not have: {fields}"},"fields":{"externalRef":"Customer reference","siteCode":"Site code","description":"Description","title":"Title","priority":"Priority","problemType":"Problem type","address":"Address","city":"City","state":"State","contactName":"Contact name","contactPhone":"Contact phone"},"validate":"Validate","validating":"Validating…","counts":{"ready":"Ready","skip":"Already imported (skipped)","error":"With errors"},"filters":{"all":"All","ready":"Ready","skip":"Skipped","error":"With errors"},"table":{"row":"Row","ref":"Reference","site":"Site","status":"Status","reasons":"Details","ticket":"Ticket"},"status":{"ready":"Ready","skip_existing":"Already imported","error":"Error","created":"Created"},"codes":{"ref_missing":"The reference is empty.","ref_too_long":"The reference is longer than 120 characters.","duplicate_in_file":"The reference repeats an earlier row.","site_missing":"The site code is empty.","site_not_found":"No site of this client has that code.","site_ambiguous":"More than one site matches that code.","description_missing":"The description is empty.","priority_unknown":"Unknown priority value.","site_closed":"The site is marked as closed.","description_truncated":"The description was cut to 4,000 characters.","problem_type_truncated":"The problem type was cut to 80 characters.","client_not_found":"The client no longer exists.","site_client_mismatch":"The site does not belong to this client.","sp_not_assignable":"The technician cannot be assigned.","duplicate_external_ref":"Already imported: a ticket with this reference exists.","unexpected":"Unexpected error while creating this ticket.","client_not_allowed":"Not created: this client is no longer one of the projects you coordinate.","client_contract_ambiguous":"Not created: the client now has more than one active contract."},"duplicateOf":"Same reference as row {row}.","confirm":{"one":"Create {n} ticket","other":"Create {n} tickets"},"nothingToCreate":"There are no rows ready to create.","creating":"Creating tickets… {done} of {total}","chunkFailed":"A batch could not be sent: {error}. Retrying continues where it stopped — nothing is duplicated.","retry":"Retry","emptyFilter":"No rows in this filter.","back":"Back","result":{"title":"Import finished","created":"Created","skipped":"Skipped (already existed)","failed":"Failed","download":"Download result (.csv)","startOver":"Import another file"},"descriptionLabels":{"address":"Address","city":"City","state":"State","contact":"Contact","phone":"Phone"},"preset":{"save":"Save this mapping for the client","saving":"Saving…","saved":"Mapping saved. The next file from this client will be mapped automatically.","applied":"Applied the mapping saved for this client.","dropped":"These saved fields were not found in this file and need mapping: {fields}","invalid":"The mapping saved for this client could not be read; map the columns and save again.","failed":"The mapping could not be saved: {error}"},"importForClient":"Import tickets","actionErrors":{"flag_off":"Ticket import is not enabled.","invalid_input":"The request was not valid. Reload the page and try again.","file_missing":"Choose a file first.","file_empty":"The file is empty.","file_too_large":"The file is larger than 10 MB.","filename_invalid":"The file name is not valid.","parse_error":"The file could not be read. Save it as .xlsx or .csv and try again.","sheet_too_large":"The sheet is too large (its used range spans more than 512 columns, or far more cells than a 500-row list needs). Keep only the incident list and upload it again.","no_columns":"No columns were found. Row 1 must hold the headers.","no_rows":"The file has headers but no rows.","too_many_rows":"The file has {n} rows; the maximum is 500. Split it.","cell_too_long":"A cell is longer than 8,000 characters.","client_not_found":"The client no longer exists.","client_inactive":"The client is inactive.","mapping_invalid":"Map the reference, the site code and the description (the description in its own column).","too_many_chunk_rows":"Too many rows in one batch.","header_reserved":"A column header uses a reserved name (__proto__, constructor or prototype). Rename it and upload again.","network":"Connection error.","not_authorized":"You are not authorized to import tickets.","admin_mfa_required":"Turn on two-step verification to import tickets.","mfa_not_enrolled":"Turn on two-step verification to import tickets.","mfa_not_verified":"Verify your second factor to import tickets.","no_access":"You do not have permission to import tickets.","several_contracts":"You can’t create tickets here: your client has more than one active contract. Ask an administrator for help.","no_active_contract":"You don’t coordinate an active project yet, so there is no client to import tickets for. Ask an administrator.","client_not_allowed":"You cannot import tickets for this client: it is not one of the projects you coordinate.","client_contract_ambiguous":"This client has more than one active contract, and the import needs exactly one. Create those tickets one by one, choosing the contract."},"access":{"title":"You cannot import tickets here yet","admin_mfa_required":"Turn on two-step verification to import tickets.","mfa_not_enrolled":"Turn on two-step verification to import tickets.","mfa_not_verified":"Verify your second factor to import tickets.","no_access":"Importing tickets needs the “Import tickets” permission on the projects you coordinate. Ask an administrator.","several_contracts":"You can’t create tickets here: your client has more than one active contract. Ask an administrator for help.","no_active_contract":"You don’t coordinate an active project yet, so there is no client to import tickets for. Ask an administrator.","fixLink":"Set up two-step verification"}},"spDuplicate":{"possibleTitle":"This technician may already exist","possibleBody":"We found existing service providers with the same name or email. Check them before creating a new one — a second record splits tickets between two profiles.","emailTitle":"This email already belongs to an active service provider","emailBody":"You cannot create another record with this email. Edit or reactivate the existing one instead.","noEmail":"no email","active":"Active","inactive":"Inactive","hasApp":"Has TechOne app","noApp":"No app","matchEmail":"Same email","matchName":"Same name","openRecord":"Open record","createAnyway":"Create anyway","approveAnyway":"Approve anyway","cancel":"Cancel","listLabel":"Existing service providers"},"coordinatorResolution":{"clientPhoneHeading":"Client phone","preliminaryDiagnosisHeading":"Preliminary diagnosis","noAttempts":"No attempts logged yet.","diagnosisFilterPlaceholder":"Type to filter or add a diagnosis…","whoContactedPlaceholder":"Who did you contact?","phoneDialledPlaceholder":"Phone dialled","phoneCountryAria":"Country calling code","phoneNumberAria":"Client phone number","phoneWillSaveAs":"Will be saved as","phoneUnverified":"We couldn't verify this number, so it will be saved exactly as you typed it.","notesPlaceholder":"Notes (optional)","boardAuthored":"board-authored","mirror":"mirror","boardAuthoredTitle":"Board authors this field; the value mirrors to fs_ticket","mirrorTitle":"No board column mapped yet — stored on the ticket mirror","savePhone":"Save phone","suggestedPhone":"Suggested from the last ticket at this site:","currentDiagnosis":"Current:","clear":"clear","suggestedDiagnosis":"Suggested (deterministic default):","useAsFilter":"use as filter","thisProduct":"this product","added":"added","addDiagnosis":"+ Add “{label}” as a new diagnosis","contactAttemptsHeading":"Contact attempts","channelAria":"Channel","outcomeAria":"Outcome","alsoSavePhone":"Also save this number as the client phone","logAttempt":"Log attempt","recording":"recording","byAuthor":"by {name}","genericError":"Something went wrong","addDiagnosisError":"Could not add diagnosis","selectDiagnosisError":"Could not select diagnosis","responseMetHelp":"Logging the contact with the client meets the SLA response deadline (when the outcome is Reached, Resolved on call, Callback scheduled or Left message). The technician arriving on site also meets it, whichever happens first.","channel":{"phone":"Phone","whatsapp":"WhatsApp","email":"Email","sms":"SMS","other":"Other"},"outcome":{"reached":"Reached","no_answer":"No answer","wrong_number":"Wrong number","callback_scheduled":"Callback scheduled","left_message":"Left message","resolved_on_call":"Resolved on call"},"firstContact":{"onTime":"First contact WITHIN the response SLA · {min} min to spare","late":"First contact OUTSIDE the response SLA · {min} min late","pendingExpired":"No contact with the client and the response SLA has already expired","pendingRunning":"No contact with the client yet — the response SLA is still running","noSla":"This ticket declares no response SLA: there is nothing to measure the contact against"}},"flexibleAssignment":{"categoryLabel":"Provider type","categoryHelp":"How this provider is engaged. Direct hires are routed by us; company-dispatched and solo providers hand off and can self-dispatch from their portal.","category":{"direct_hire":"Direct hire","company_dispatched":"Company-dispatched","solo":"Solo company"},"vendor":{"acceptCta":"Accept this ticket","accepting":"Accepting…","acceptedOk":"Ticket accepted.","alreadyAccepted":"Already up to date.","arrivalHeading":"Confirm who is on site","arrivalHelp":"Record the technician your company sent so we can track the visit.","techNameLabel":"Technician name","techNamePlaceholder":"Full name","techContactLabel":"Contact (optional)","techContactPlaceholder":"Phone or ID","captureCta":"Confirm arrival","capturing":"Saving…","capturedOk":"Arrival recorded.","errors":{"feature_off":"This action is not available right now.","not_found":"That ticket is not available.","not_eligible":"Your account cannot self-dispatch this ticket.","rate_limited":"Too many attempts. Please wait a moment and try again.","invalid_input":"Enter the technician name.","invalid_state":"This ticket can no longer be changed here.","unauthenticated":"Please sign in again.","generic":"Something went wrong. Please try again."}}},"projectProvisioning":{"title":"Client Project Setup","description":"Provision each contract’s per-client board workspace — Locations, Products, Client Inventory, Components, Service Providers, SLA, Stock, Tickets — the control plane a project’s field team works from.","empty":"No contracts yet. Create one in Field Service Settings → Contracts.","table":{"contract":"Contract","client":"Client","status":"Status","workspace":"Workspace","actions":"Actions"},"workspace":{"provisioned":"Provisioned","notProvisioned":"Not provisioned","provisionButton":"Provision workspace","provisioning":"Provisioning…","openBoard":"Open Tickets board"},"messages":{"success":"Workspace provisioned — the Tickets board is now linked to this contract.","alreadyProvisioned":"This contract already has a provisioned workspace.","error":"Could not provision the workspace. Try again or contact an admin."}},"contractHoursPurpose":{"title":"Hours purpose","description":"Choose what the hours recorded by this project's technicians are used for.","masterOff":"Takes effect once the automatic workday is turned on.","masterOn":"The automatic workday is on: this setting already applies.","alwaysOn":"Always on","options":{"informativo":{"label":"Informational","hint":"Hours are a reference estimate for the technician and the coordinators."},"cumplimiento_contrato":{"label":"Contract compliance","hint":"Coordinators compare on-site hours with the contracted hours and check whether each day's first arrival falls within the agreed window. It does not use the technician's workday."},"nomina_registro":{"label":"Working-hours record","hint":"Each working day asks the technician or the coordinators to confirm it."}},"compliance":{"title":"Contract data to measure compliance","contractedHours":"Contracted hours per period","contractedHoursHint":"More than 0 and up to 10,000.","period":"Period","periodOption":{"week":"Week","month":"Month","quarter":"Quarter"},"periodAnchor":"Start of the first period","periodAnchorHint":"Periods are counted from this date. Defaults to the contract start.","arrivalStart":"First arrival from","arrivalEnd":"First arrival until","arrivalHint":"Local time at the site. A day with no arrival counts as «no data», never as a miss."},"legalNotice":"This workday record is calculated from TechOne activity and confirmed by the technician or the coordinator. It is not a certified time clock: it does not meet Mexico's mandatory working-hours record (2027) or Brazil's REP-P.","save":"Save hours purpose","saving":"Saving...","saved":"Hours purpose saved.","unchanged":"Nothing changed: the hours purpose stays the same.","error":{"noPermission":"You do not have permission to change this project; ask whoever manages Field Service.","notFound":"This contract no longer exists. Refresh the page.","generic":"Could not save. Try again.","purposes":"Choose a valid hours purpose.","complianceRequired":"For «Contract compliance», fill in the contracted hours, the period and the arrival window.","contractedHours":"Contracted hours must be more than 0 and no more than 10,000.","period":"Choose the period: week, month or quarter.","periodAnchor":"Enter a valid date for the start of the first period.","arrivalWindow":"The arrival window needs two valid times, and the start must be before the end.","genericEditor":"This term is changed in the contract's «Hours purpose» section."}},"contractTechPartsCatalog":{"title":"Parts catalog for technicians","description":"When on, technicians on this project pick parts from the inventory catalog in the POR (suggested for the problem, in their van, or by searching). When off, they type the part number as today.","switchLabel":"Parts catalog for technicians","stateOn":"On for this project","stateOff":"Off for this project","masterOn":"The global switch is on: this setting takes effect right away.","masterOff":"The global switch (tech_parts_catalog_picker) is off: no project shows the catalog yet. This setting takes effect when it is turned on.","saving":"Saving...","savedOn":"Parts catalog turned on for this project.","savedOff":"Parts catalog turned off for this project.","error":{"noPermission":"You do not have permission to change this project.","notFound":"This contract no longer exists. Refresh the page.","invalid":"Invalid input","generic":"Could not save. Try again."}},"coordinator":{"state":{"temporary":"Temporary through {date}","away":"Out of the rotation through {date}","ended":"Coverage ended"},"triggerButton":"Coordinators","title":"Coordinators","description":"Tickets route to the Primary; if not acknowledged in time, custody rotates down the chain (Primary -> Secondary -> Tertiary). Order is the rank.","empty":"No coordinators assigned yet. Add a Primary below to activate the chain.","saving":"Saving...","moveUp":"Move up in rotation","moveDown":"Move down in rotation","remove":"Remove","removeConfirm":"Confirm","rank":{"primary":"Primary","secondary":"Secondary","tertiary":"Tertiary","numbered":"Rank {rank}"},"add":{"heading":"Add a coordinator (as {role})","searchPlaceholder":"Search users by name or email...","userLabel":"User","selectPlaceholder":"Select a user...","allAssigned":"Every active user is already a coordinator on this contract.","submit":"Add coordinator"},"toast":{"added":"Coordinator added.","removed":"Coordinator removed.","reordered":"Rotation order updated."},"error":{"pickUser":"Pick a user to assign.","generic":"Something went wrong","noPermission":"You do not have permission to manage coordinators","rankTaken":"Rank {rank} is already assigned to another coordinator. Pick a different rank.","notAssigned":"That coordinator is no longer on this contract. Refresh and try again.","invalidInput":"Invalid input"}},"coordinatorCoverage":{"title":"Coordinator coverage","description":"Who covers each contract today. If someone will be away, name who replaces them: their open tickets move in one step and access ends on its own on the date you choose.","summaryNoCoordinator":"No coordinator: {n}","summaryNoBackup":"No backup: {n}","summaryOutside":"Tickets held outside the rotation: {n}","summaryNoContract":"Open tickets with no contract: {n}","empty":"There are no active contracts yet. When one exists, it will appear here with who covers it.","noMembers":"Nobody is assigned to this contract. Ask a contracts administrator to assign a coordinator.","statusNotActive":"Contract not active","coverageNoCoordinator":"No coordinator","coverageNoBackup":"No backup","coverageOk":"Covered","ticketsLine":"Open tickets: {open}","outsideLine":"Held outside the rotation: {n}","rank":"Position {rank}","temporaryUntil":"Temporary through {date}","awayThrough":"Out of the rotation through {date}","ownedLine":"Open tickets: {open} (acknowledged: {acknowledged})","replaceButton":"Replace {name}","endTemporaryButton":"End {name}’s coverage","bringBackButton":"Bring {name} back to the rotation","formTab":"Replace a coordinator","formNoTarget":"Choose a person from the list to replace them.","formHeading":"Replace {name}","formContract":"Contract: {contract}","searchPlaceholder":"Search by name or email","replacementLabel":"Who replaces them","replacementPlaceholder":"Choose a person","kindLabel":"Type of replacement","kindTemporary":"Temporary","kindPermanent":"Permanent","lastDayLabel":"Last day of the coverage","lastDayHint":"Access includes the whole day you choose.","reasonLabel":"Reason","reasonPlaceholder":"For example: vacation from the 10th to the 24th","reasonHint":"Between 5 and 500 characters. It stays in the ticket history.","ticketsOne":"one ticket","ticketsMany":"{n} tickets","acknowledgedOne":"1 already acknowledged","acknowledgedMany":"{n} already acknowledged","confirmMove":"Move {tickets} ({acknowledged}) to {to}.","confirmNoTickets":"{from} has no open tickets on this contract.","confirmTemporary":"{to} will see every ticket of {contract} through {accessDate}. {from} leaves the rotation through {date}.","confirmTemporaryMember":"{to} is already on {contract} and keeps their access. {from} leaves the rotation through {date}.","endLeavesNoCoordinator":"If you end this, {contract} is left with no coordinator.","pendingLine":"Not moved to {to}: {tickets} of {from}.","confirmPermanent":"{to} takes over {contract} for good. {from} loses the contract.","confirmPick":"Choose who replaces {from} to see what will happen.","submitMove":"Move {tickets} to {to}","submitName":"Name {to}","submitting":"Saving…","resultTitle":"{to} now covers {contract}.","resultCounts":"Moved: {handed} · Already with them: {alreadyThere} · Could not be moved: {failed} · Closed or moved by someone else: {skipped}","resultRetry":"Retry","resultClose":"Close","warningCannotDispatch":"{to} will be able to see the tickets, but not assign them.","warningAway":"{to} is out of the rotation right now: new tickets will go to someone else.","endedTitle":"Done: {name} on {contract}.","endedNoChange":"Nothing to change: {name} had no coverage dates on {contract}.","mfaTitle":"Turn on your second factor first","mfaBody":"Replacing a coordinator moves tickets and access, so it needs a second factor on your account.","mfaLink":"Go to my security settings","errors":{"no_permission":"You do not have permission to do this. Ask a contracts administrator.","mfa_required":"Turn on your second factor to do this.","invalid_input":"Some of the data is not valid. Review the form and try again.","same_person":"The person who replaces must be someone else.","self_replacement":"You cannot name yourself as the replacement. Choose someone else, or ask another leader.","absent_not_in_chain":"This person is no longer on the contract. The list was refreshed.","replacement_external":"That person belongs to an outside company, so they cannot cover a contract.","replacement_inactive":"That account is not active. Choose someone else.","replacement_cannot_view":"That person cannot see tickets. Ask for that permission, or choose someone else.","end_date_required":"Choose the last day of the coverage.","end_date_past":"That day has already passed. Choose today or a later day.","reason_required":"Write the reason, between 5 and 500 characters.","server_error":"It could not be saved. Your data is still here: try again."}},"stock":{"title":"Van Provisioning","description":"Stand up a technician’s van: create the truck, set products to serial-tracked, receive stock, and load the van.","selectSp":"Service provider","selectSpPlaceholder":"Choose a provider…","noSps":"No active service providers yet.","locationsHeading":"Locations & stock","noLocations":"This provider has no locations yet. Create a truck below.","kind":{"warehouse":"Warehouse","truck":"Truck","home":"Home","pickup":"Pickup point"},"units":"{n} serialized","onHand":"{n} on hand","inactive":"Inactive","createTruck":{"heading":"Create a truck (van)","help":"A truck is the location a technician’s inventory lives on. Once it exists, their app shows “My Van”.","label":"Truck name","labelPlaceholder":"e.g. Van 12 — José","region":"Region tag (optional)","address":"Base address (optional)","submit":"Create truck","submitting":"Creating…","created":"Truck created."},"tracking":{"heading":"Product tracking mode","help":"Serial-tracked products carry a unique serial per unit (required for the return-part loop). Quantity-tracked products are counted.","model":"Product model","modelPlaceholder":"e.g. ROUTER-X100","mode":"Tracking mode","serial":"Serial-tracked","quantity":"Quantity-tracked","submit":"Save tracking mode","submitting":"Saving…","saved":"Tracking mode saved."},"receiveSerial":{"heading":"Receive serialized units","help":"Bring new serial numbers into inventory at a location. The product must be serial-tracked.","destination":"Receive into","serials":"Serial numbers","serialsPlaceholder":"One serial per line","submit":"Receive units","submitting":"Receiving…","received":"Received {n} unit(s)."},"receiveQty":{"heading":"Receive quantity stock","help":"Add on-hand quantity for a quantity-tracked product at a location.","qty":"Quantity","submit":"Receive stock","submitting":"Receiving…","received":"Stock received."},"transfer":{"heading":"Load stock onto a truck","help":"Move stock from a warehouse onto a truck (van). The technician sees it in “My Van” right away.","from":"From warehouse","to":"To truck","qty":"Quantity","pickSerials":"Pick serials to load","noSerials":"No serialized units at the selected warehouse.","submit":"Load truck","submitting":"Loading…","moved":"Stock loaded onto the truck."},"reason":{"label":"Reason","vendor_receive":"Vendor delivery","initial_declaration":"Opening balance"},"chooseProductFirst":"Enter a product model first.","chooseDestination":"Choose a destination…","chooseWarehouse":"Choose a warehouse…","chooseTruck":"Choose a truck…"},"ticketDetail":{"clientType":{"business":"Business","residential":"Residential"},"sourceBoard":"Source board","hardToStaff":"Hard to staff in time","hardToStaffTooltip":"No eligible tech can comfortably meet the arrival window — a staffing/capacity signal, not the SLA clock","print":"Print","printDisabledReason":"Printing is turned off on this screen — a browser printout of the page is not the official service document.","openResolveScreen":"Contact & diagnosis","openResolveScreenHint":"Record who was contacted, their phone number, and the ticket’s preliminary diagnosis.","allTickets":"All tickets","eyebrow":"Ticket","internalId":"Internal ID: {id}","slaPaused":"SLA paused","slaPausedTooltip":"The SLA clock is frozen while the ticket is on hold or waiting on parts","awaitingPartsClockRunning":"Waiting on parts · clock running","awaitingPartsClockRunningContractTooltip":"This contract keeps the SLA clock running while the part is on its way. When it arrives, dispatch the visit again","awaitingPartsClockRunningTooltip":"Waiting on parts does not pause the SLA: the clock keeps running. When the part request is marked fulfilled, the ticket returns to its previous status — unless it is a workshop ticket, was reassigned, or is still waiting on another part","claimedBy":"{name} is dispatching","claimedByTooltip":"Another coordinator is currently dispatching this ticket","overview":"Overview","client":"Client","site":"Site","product":"Product","problem":"Problem","received":"Received","slaBreaches":"SLA breaches","legBreached":"{leg} breached","linked":"Linked","oneBoardsItem":"One Boards item","contract":"Contract","noContract":"no contract","assignedSp":"Assigned technician","unassigned":"unassigned","description":"Description","likelyParts":"Likely parts","customerContact":"Customer contact","asset":"Asset","assetLabel":"Label","assetSerial":"Serial","assetInstalled":"Installed","dispatch":"Dispatch","v2":{"contactTab":"Contact & diagnosis","quickActions":{"title":"Quick actions","requestPart":"Request a part","escalateSeverity":"Escalate severity"},"assignment":{"title":"Assignment","search":"Search technician…","current":"current","statusOnSite":"On site","statusEnRoute":"En route","statusFree":"Free","statusBusy":"Busy","activeTicketsOne":"1 active ticket","activeTicketsMany":"{n} active tickets","km":"{n} km","showAll":"See all {n}","confirm":"Confirm reassignment","confirmFirst":"Confirm assignment","confirmAgain":"Assign again","noMatch":"No technician matches that search.","empty":"There are no technicians to assign on this ticket.","noPermission":"You do not have permission to dispatch.","projectChip":"On this project","projectChipOutside":"Outside this project","projectCount":"{n} on this project · {m} without a project","projectCountCompact":"{n} of {total}","projectFilterLabel":"Only this project","projectFilterHiddenOne":"The filter is hiding 1 technician","projectFilterHiddenMany":"The filter is hiding {n} technicians"}},"serviceReport":"Service report","labor":"Labor","resolvedBy":"Resolved by","customerSignOff":"Customer sign-off","yes":"Yes","no":"No","signedOffBy":"Yes — {name}","location":"Location","technicianLocationUnavailable":"technician location unavailable","partsCountOne":"1 request","partsCountMany":"{n} requests","notes":"Notes & communication","notesCountOne":"1 note","notesCountMany":"{n} notes","relatedTicketsTitle":"Related tickets","relatedTicketsHint":"same asset, site, or client","relatedMatch":{"asset":"asset","site":"site","client":"client"},"photos":"Photos","photosCapturedOne":"1 captured on site","photosCapturedMany":"{n} captured on site","photosHiddenOne":"1 photo is not shown: it does not come from the evidence store","photosHiddenMany":"{n} photos are not shown: they do not come from the evidence store","entitlements":"Entitlements","entitlementsHint":"resolved contract rules — recomputed live for this view","entitlementLabels":{"slaTargets":"SLA targets","coverageTimezone":"Coverage timezone","requiredSkills":"Required skills","none":"none","rawTerms":"Raw resolved terms"},"photoGallery":{"openPhoto":"Open photo {n} of {total}","fromGallery":"From the gallery","uploadedAt":"Uploaded {date}","photoAlt":"Completion photo {n}","close":"Close","previous":"Previous photo","next":"Next photo"},"error":{"title":"This ticket couldn’t load","body":"Something went wrong while loading this ticket. The ticket data is safe — only this page render hit an issue. Try again or go back to the ticket list.","reference":"Reference","retry":"Try again","back":"Back to tickets"},"notFound":{"title":"This ticket doesn’t exist or isn’t on your contracts","body":"Check the link, or go back to the ticket list. If you should see it, ask an administrator to add you as a coordinator on its contract."}},"ticketSignature":{"title":"Proof of service","signedBy":"Signed by {name}"},"shipment":{"title":"Shipments","empty":"No shipments for this ticket.","checkAvailability":"Check availability","checking":"Checking…","onHand":"{qty} already on the tech's truck","sufficientOnHand":"Enough is already on hand — a shipment may not be needed.","noCandidates":"No location in the network has this part in stock right now.","candidatesTitle":"Ship from","distanceAway":"{km} km away","availableQty":"{qty} available","setupShipment":"Set up shipment","settingUp":"Setting up…","alreadyExists":"A shipment for this part is already in progress.","statusReserved":"Reserved","statusInTransit":"In transit","statusReceived":"Received","statusCancelled":"Cancelled","markShipped":"Mark shipped","shipping":"Shipping…","markReceived":"Mark received","receiving":"Receiving…","cancel":"Cancel","cancelling":"Cancelling…","cancelReasonPrompt":"Why are you cancelling this shipment?","reservedAt":"Reserved {date}","shippedAt":"Shipped {date}","receivedAt":"Received {date}","cancelledAt":"Cancelled {date}: {reason}","from":"From","to":"To","qtyLabel":"Qty","genericError":"Something went wrong. Please try again."},"slaWarning":{"title":"SLA warning","warn75":"{pct}% of SLA consumed on ticket \"{title}\" ({milestone}). Deadline: {dueAt}.","warn90":"{pct}% of SLA consumed on ticket \"{title}\" ({milestone}). Deadline: {dueAt}.","milestoneArrival":"arrival","milestoneResponse":"response","milestoneResolution":"resolution","escalated":"Ticket \"{title}\" has been breached ({milestone}) for over 30 minutes and has been escalated."},"slaCockpit":{"title":"SLA Cockpit","description":"At-risk queue, compliance summary, and breach trend for Field Service tickets","tiersLink":"SLA Tiers","atRiskQueue":"At-risk queue","atRiskEmpty":"No open tickets — all SLAs are healthy.","atRiskSubtitle":"Open tickets sorted by nearest SLA deadline","clientUnknown":"Client not identified","complianceSummary":"Compliance summary","windowToday":"Today","window7d":"Last 7 days","window30d":"Last 30 days","totalTickets":"Tickets in window","breachedCount":"Breached (any milestone)","compliancePct":"Compliance","milestoneBreakdown":"Milestone breakdown","milestoneArrival":"Arrival","milestoneResponse":"Response","milestoneResolution":"Resolution","trendTitle":"7-day breach trend","trendEmpty":"No breach data in the last 7 days.","colTicket":"Ticket","colSeverity":"Sev","colSp":"Assigned technician","colSite":"Client / site","colArrival":"Arrival SLA","colResponse":"Response SLA","colResolution":"Resolution SLA","colUrgent":"Most urgent","unassigned":"Unassigned","noDeadline":"No deadline","met":"Met","breached":"Breached","pending":"Pending","colStatus":"Status","colMilestones":"Milestones","trendFootnote":"Each bar = distinct breach events on that day (arrival + response + resolution counted separately per ticket)","eyebrow":"Field Service","milestoneCounts":"{breached} breached / {total} with deadline","trendAria":"7-day breach trend bar chart","dayBreaches":{"one":"{n} breach","other":"{n} breaches"},"slaUnitDay":"{n} d","slaUnitHour":"{n} h","slaUnitMinute":"{n} min","slaPaused":"paused"},"slaEngine":{"tabs":{"overview":"Overview","tiers":"Tiers","assignment":"Assignment & precedence","calendars":"Clock & calendars","pause":"Pause rules","governance":"Governance","alerts":"Breach & alerts","perTicket":"Per ticket"},"sectionsAria":"SLA Engine sections","assignmentTitle":"Assignment & Precedence","calendarsTitle":"Clock & Calendars","pauseTitle":"Pause Rules","governanceTitle":"Governance","alertsTitle":"Breach & Alerts","perTicketTitle":"Per-Ticket SLA","tiersBreadcrumb":"SLA Engine › Tiers","severity":"Severity","response":"Response","arrival":"Arrival","resolution":"Resolution","contract":"Contract","selectContract":"Select a contract…","thisContractIs":"This contract is","resolutionPrecedence":"Resolution precedence","currentlyGovernedBy":"Currently governed by","assignedTier":"Assigned tier","noTierOption":"None (use terms / default)","weeklyWorkingHours":"Weekly working hours","closed":"Closed","holidays":"Holidays","noHolidays":"No holidays.","active":"Active","newCalendar":"New business calendar","calendarDescHint":"Optional — what this calendar represents","tzPlaceholder":"e.g. America/Bogota","close":"Close","noCalendarsYet":"No business calendars yet","timezone":"Timezone","weeklyHours":"Weekly hours","severityRefreeze":"Severity re-freeze","partsUnblock":"Parts-decision unblock","partsUnblockDesc":"When a ticket’s blocking parts request is declined, the part is not coming: return the ticket to active work and resume its SLA clock (banking the paused time) instead of leaving it frozen in parts_pending.","pauseStatuses":"Pause statuses","addStatus":"Add a status","ticketStatusKey":"Ticket status key","labelOptional":"Label (optional)","waitingOnPartsExample":"Waiting on parts","newStatusActive":"New status starts active","atRiskWarnLevels":"At-risk warn levels","warnLevels":"Warn levels","breachCron":"SLA breach cron","ticketId":"Ticket id","waivedMsg":"Waived from SLA measurement.","responseMetByContact":"met by contact or arrival","clockPaused":"Clock paused","clockRunning":"Clock running.","ticketNumberOrId":"Ticket number or id","noTicketFound":"No ticket found for","excludeFromSla":"Exclude from SLA","reasonForWaiving":"Reason for waiving","reason":"Reason","reasonForPausing":"Reason for pausing","clockMode":"Clock mode"},"csat":{"public":{"heading":"How was the service?","poweredBy":"Secured by Redsis One","expired":"This link is no longer active.","alreadyRated":"Thanks — your rating was already recorded.","ticketLabel":"Ticket","form":{"ratingLabel":"Rate the service","commentPlaceholder":"Anything you want to add? (optional)","submit":"Submit rating","submitting":"Submitting…","errorInvalid":"Please choose a rating.","errorFailed":"Could not submit your rating. Please try again.","thanks":"Thank you for your feedback!"}}},"routeCoordinator":{"mixedRouteNotice":"This route also has stops on another contract, so only someone who sees all contracts can reorder, re-optimize or publish it. You can still add your own tickets.","browseTitle":"Browse tickets","buildingRoute":"Building a route","buildRoute":"Build a Route","backToBrowse":"Back to browse","browseHintTitle":"Pick a ticket","browseHintBody":"Click a ticket on the map to see its details here.","buildHintTitle":"Select a ticket to route","buildHintBody":"Click a ticket on the map to match a technician or service provider.","close":"Close","loading":"Loading…","notFound":"Ticket not found.","slaNone":"No SLA","detailClient":"Client","detailSite":"Site","detailAddress":"Address","detailProduct":"Product","detailProblem":"Problem","detailVisit":"Visit time","detailAssignee":"Assigned to","detailUnassigned":"Unassigned","detailDescription":"Description","detailNotes":"Notes","detailNoNotes":"No notes yet.","buildRouteForTicket":"Build a Route","ungeocoded":"not located on the map","minutesUnit":"min","back":"Back","matchFor":"Match for {ticket}","assignTo":"Assign to {name}","tabTechnicians":"Technicians","tabProviders":"Service Providers","searchTechs":"Search technicians","searchProviders":"Search service providers","noCandidates":"No candidates found.","available":"Available","unavailable":"Unavailable","hasParts":"Has parts","noParts":"Missing parts","partsUnknown":"Parts unknown","etaAway":"{n} min away","openTickets":"{n} open","assign":"Assign","assigning":"Assigning…","assignAnyway":"Assign anyway","assignFailed":"Could not assign. Please try again.","overrideReasonPlaceholder":"Reason (saved to the case notes)…","overrideReasonRequired":"Add a reason to reassign or override.","confirmOverride":"Confirm","slaOk":"SLA on time","slaTight":"SLA tight","slaMiss":"SLA at risk","slaUnknown":"SLA unknown","vendorParts":"Vendor sources parts","homeBaseSet":"From home base","noHomeBase":"No home base set","totalDrive":"{n} min drive","totalService":"{n} min on site","etaViaGoogle":"ETAs via Google","etaEstimated":"ETAs estimated (offline)","noStops":"No stops yet — assign a ticket to start the route.","recomputing":"Recomputing…","moveUp":"Move up","moveDown":"Move down","driveFromPrev":"{n} min drive","visitMins":"{n} min visit","ungeocodedStop":"not located","slaLate":"{n} min late","slaSlack":"{n} min slack","saveOrder":"Save order","saving":"Saving…","saved":"Order saved.","publish":"Publish","publishing":"Publishing…","published":"Route published.","saveError":"Something went wrong. Please try again.","matchForCluster":"Match for {n} tickets","assignClusterTo":"Assign {n} to {name}","qualifiedOnly":"Only techs who can resolve","showAllHidden":"Show all ({n})","nearbyTitle":"Other tickets in this area","nearbyNone":"No other open tickets in this area.","buildRouteForCluster":"Build a route for {n} tickets","clusterPartial":"{ok} of {total} assigned","zonesTitle":"Zones","zonesSubtitle":"Pick an area to focus the map.","zonesTotalOpen":"{n} open tickets","zonesOffMap":"{n} off-map","zonesNoAccess":"You don't have access to tickets to dispatch","backToZones":"Zones","recenter":"Recenter","visitSource":{"product":"per-product estimate","problem_part":"from problem/part","default":"default"},"slots":{"wiringTitle":"Board connections","wiringSubtitle":"The boards this Route Builder reads from.","close":"Close","loading":"Loading…","loadFailed":"Could not load connections.","actionFailed":"Something went wrong. Please try again.","connected":"Connected","notConnected":"Not connected","revoked":"Revoked","connectorOff":"Connector off","required":"Required","optional":"Optional","connect":"Connect","reconnect":"Reconnect","grantRevokedError":"This board was disconnected. Click Reconnect to use it again.","backfill":"Import items","backfillDone":"Imported {synced} of {scanned}.","disconnect":"Disconnect","pickBoard":"Choose a board…","contractLabel":"Contract","contractLink":"Link","contractUnlink":"Unlink","contractPick":"Choose a contract…","contractLinked":"Contract linked.","contractLinkedBackfill":"Contract linked. Re-imported {scanned} items ({created} new, {updated} updated).","contractMissingWarning":"No contract linked. Tickets from this board cannot resolve a client or a site, so they will never appear on the map. Link the contract this board belongs to.","tickets":{"label":"Tickets","why":"The open-ticket queue that becomes the map dots."},"providers":{"label":"Providers & techs","why":"The technicians you assign; a provider's contract scopes the list to this project."},"contracts":{"label":"Contracts","why":"Contract & SLA config a ticket resolves against."},"sites":{"label":"Client sites","why":"Client sites & geocodes; a ticket needs a site to land on the map."}}},"onboarding":{"title":"Client onboarding","wizard":{"brand.title":"Client onboarding","brand.eyebrow":"Service Hub","ui.setup":"Setup","ui.ready":"Ready","ui.weDo":"What the wizard does for you","ui.reversibleTitle":"Reversible","ui.reversible":"You can come back and change this any time — later steps re-derive automatically.","ui.saved":"Saved","ui.saving":"Saving…","ui.savePending":"Edits pending","ui.saveFailed":"Save failed","ui.stepsNav":"Onboarding steps","who.tech":"Technician","who.coord":"Coordinator","who.client":"Client","who.sp":"Service provider","land.lead":"Set up a new service client end to end — one guided flow that connects the intake, loads the data, wires the boards, and hands the client, coordinator, technician and service provider everything they need. Stop any time; your progress is saved.","land.startNew":"Start a new onboarding","land.starting":"Creating…","land.resume":"Resume","land.allOnboardings":"All onboardings","land.empty":"No onboardings yet — start one to set up a service client.","land.onStep":"Open at: {name}","land.doneOf":"{done} of {t} steps done","land.liveSub":"Live · tickets flowing automatically","land.archive":"Archive","status.draft":"Not started","status.in_progress":"In progress","status.complete":"Complete","status.notStarted":"Not started","status.doing":"In progress","status.done":"Complete","status.stale":"Needs update","status.error":"Error","nav.back":"Back","nav.continue":"Continue","nav.stepOf":"Step {n} of {t}","step.client.name":"Client basics","step.intake.name":"Intake source","step.workspace.name":"Workspace","step.masters.name":"Master data","step.sla.name":"Contract & SLA","step.bridge.name":"Connect the boards","step.people.name":"People & portals","step.golive.name":"Verify & go live","step.client.who":"👤 You, the setup admin","step.intake.who":"📥 Where the tickets come from","step.workspace.who":"🗂️ The client’s own boards","step.masters.who":"📋 Sites, assets, contacts, providers","step.sla.who":"📜 Response promises","step.bridge.who":"🔗 Mostly automatic","step.people.who":"👥 Coordinator · techs · client · provider","step.golive.who":"✅ The proof","step.client.desc":"Just the essentials to open the account. We create the client record and a draft contract so your workspace can be built — you don’t create anything by hand.","step.intake.desc":"Tell us how this client’s tickets arrive. Pick one — the wizard makes the connection for you. If they use ServiceNow we ask only what’s needed and connect it; if they don’t, you upload a file.","step.workspace.desc":"We build this client their own workspace from a template — the boards it creates are listed below. Picked the wrong one? Change it here and we move everything you’ve entered to the new one.","step.masters.desc":"Load the client’s reference data. Import a spreadsheet or type it in — either way the wizard puts each row on the right board for you. You never touch a board.","step.masters.descBound":"Load the client’s reference data. The sites come from the {board} board: edit them there, with «Open the board». Assets, contacts and providers you import or type in here, and the wizard puts each row on the right board.","step.masters.descBoundConfigure":"The sites come from the {board} board: edit them there, with «Open the board».","step.sla.desc":"Attach an SLA to the client’s contract and activate it. Create a tier just for this client — or use an existing one. When tickets arrive their deadlines are set automatically from this.","step.bridge.desc":"This connects the client’s board to the tickets, so every row becomes a real ticket you can follow. With one click, the wizard makes the connection, gives the permission, and connects the tickets that already exist.","step.people.desc":"Give everyone their door in. Assign a coordinator, invite the technicians, and open the client portal and the service-provider portal — the wizard creates and wires both for you.","step.golive.desc":"We check, without writing anything, that every hand-off is in place for this project’s ticket source. When the checklist is green the client goes live automatically — real tickets start flowing.","client.name":"Client name","client.namePlaceholder":"e.g. Northern Schools","client.language.label":"Customer language","client.language.hint":"The language this customer receives the repair receipt (POR), the messages and the tracking page in. Each person on your team keeps using the app in their own language.","client.language.placeholder":"Choose a language…","client.language.required":"Choose the language the customer receives documents and messages in.","client.language.invalid":"Choose one of the languages in the list.","lang.option.en":"English","lang.option.es-419":"Español","lang.option.pt-BR":"Português (Brasil)","lang.option.unset":"Not set (current behavior)","language.title":"Customer language","language.desc":"Documents and messages for this project’s end customer go out in this language: the repair receipt (POR), its email and text, the “technician on the way” text and the tracking page. Your team’s screens do not change.","language.save":"Save language","language.saved":"Language saved.","language.noChanges":"No changes — that was already the language.","language.readOnly":"Only someone who sets up projects can change the customer language.","language.err.save":"Could not save the customer language. Try again.","client.code":"Short code","client.codeHint":"A short identifier for this client.","client.codePlaceholder":"NORTH-SCH","client.type":"Type","client.type.business":"Business","client.type.residential":"Residential","client.manager":"Account manager","client.managerHint":"Owns the relationship for this client.","client.timezone":"Time zone","client.notes":"Notes","client.notesPlaceholder":"Anything the coordinator should know","client.we1":"Create the client’s record.","client.we2":"Open a <b>draft contract</b> so we can build the workspace in step 3.","client.save":"Save client & continue","client.saving":"Saving…","client.doneTitle":"Client & draft contract created","select.choose":"Choose…","intake.opt.servicenow.title":"ServiceNow","intake.opt.servicenow.desc":"Connect their ServiceNow instance.","intake.opt.integrator_board.title":"Integrator board","intake.opt.integrator_board.desc":"Link the board an integrator fills.","intake.opt.file.title":"File (Excel/CSV)","intake.opt.file.desc":"No external system — upload a file.","intake.opt.portal.title":"Portal","intake.opt.portal.desc":"Client submits in their portal.","intake.opt.email.title":"Email","intake.opt.email.desc":"Tickets arrive by email.","intake.opt.po.title":"Purchase order","intake.opt.po.desc":"Raised from purchase orders.","intake.badge.connect":"We connect it","intake.badge.setup":"We set it up","intake.sn.section":"Connect ServiceNow","intake.sn.name":"Connection name","intake.sn.namePlaceholder":"Client SN intake","intake.sn.url":"Instance URL","intake.sn.urlPlaceholder":"client.service-now.com","intake.sn.auth":"Sign-in method","intake.sn.auth.password":"OAuth password","intake.sn.auth.authcode":"OAuth (redirect)","intake.sn.auth.basic":"Basic auth","intake.sn.username":"Username","intake.sn.password":"Password","intake.sn.tables":"Tables to pull","intake.sn.tablesHint":"Usually 'incident'.","intake.sn.clientId":"Client ID","intake.sn.clientIdPlaceholder":"OAuth client ID","intake.sn.secret":"Client secret","intake.sn.filter":"Which assignment group?","intake.sn.filterHint":"Paste your group’s name or ID — we only see those tickets.","intake.sn.filterPlaceholder":"e.g. Field Service MX","intake.sn.connect":"Connect & test","intake.sn.retypeSecret":"Type the client secret and the password this sign-in needs. For security they are never saved, so they are blank when you come back.","intake.sn.connecting":"Connecting…","intake.sn.note":"The wizard validates the credentials live and sets up the ticket pull. Secrets are stored encrypted.","intake.sn.noteLead":"That’s all we ask.","intake.sn.doneTitle":"ServiceNow connected & verified","intake.sn.doneNote":"We’ll pull incidents matching your filter straight into the client’s intake.","intake.board.section":"Link the integrator board","intake.board.desc":"Your integrator already drops tickets on a board. Tell us which and we connect it.","intake.board.id":"Source board","intake.board.idPlaceholder":"e.g. BRD-…","intake.board.link":"Link & wire","intake.board.linking":"Linking…","intake.board.doneTitle":"Integrator board linked","intake.board.doneNote":"We marked that board as intake and auto-connected it to the client’s tickets.","intake.board.changeViaAdmin":"To use another board, ask an administrator to unlink this one.","intake.mode.note":"We’ll create the intake board and prepare it for this channel. Fine channel config uses the existing tool — the wizard links you there.","intake.mode.prepare":"Prepare this channel","intake.mode.preparing":"Preparing…","intake.mode.doneTitle":"Intake channel prepared","ws.tmpl.canonical.title":"Field Service — Standard","ws.tmpl.canonical.desc":"Intake, Tickets, Routes, Parts, Proof of Repair, PM.","ws.we1":"Install a fresh workspace from the template, with its boards already connected.","ws.we2":"Link it to the client’s contract — re-running never duplicates it.","ws.create":"Create the workspace","ws.creating":"Creating workspace…","ws.doneTitle":"Workspace created for {client}","ws.tmplChange":"Change template & move my data","ws.wrongTmplLead":"Wrong template?","ws.wrongTmpl":"Changing it moves everything you’ve already entered to the new workspace and archives the old one — nothing is lost or deleted.","ws.needContract":"Finish “Client basics” first — a contract is required.","migrate.title":"Change template & move data","migrate.intro":"Pick the right template. We’ll rebuild the workspace and move everything you’ve already entered — nothing is re-typed.","migrate.slug":"New template slug","migrate.slugPlaceholder":"e.g. field-service-depot","migrate.movesTitle":"Moves to the new workspace:","migrate.masterData":"Master data","migrate.contractSla":"Contract + SLA","migrate.boardWiring":"Board wiring","migrate.portals":"Portals & permissions","migrate.rederived":"re-derived","migrate.regranted":"reconnected","migrate.rows":"{n} rows","migrate.archiveNote":"The old workspace is archived (not deleted) for audit.","migrate.run":"Move & rebuild","migrate.running":"Rebuilding…","migrate.cancel":"Cancel","masters.tab.sites":"Sites","masters.tab.assets":"Assets","masters.tab.contacts":"Contacts","masters.tab.providers":"Service providers","masters.mode.import":"Import a file","masters.mode.manual":"Enter manually","masters.import.drop":"Drop the {kind} file","masters.import.dropHint":"we map it and place it on the {board} board","masters.import.parsing":"Reading the file…","masters.import.mapIntro":"Match your columns — we preview before writing:","masters.import.fileCol":"Your file column","masters.import.boardField":"Board field","masters.import.sample":"Sample","masters.import.ignore":"(ignore)","masters.import.validRows":"{n} valid rows","masters.import.addToBoards":"Add to the board","masters.import.reset":"Choose a different file","masters.manual.noRows":"No rows yet — add below.","masters.manual.add":"Add","masters.manual.addToBoards":"Add to the board","masters.manual.removeRow":"Remove row","masters.placing":"Placing…","masters.onBoard":"{n} on the {board} board","masters.note":"Imported or typed, rows land on the right board and are saved in the system. Re-importing the same file updates, never duplicates.","masters.noteLead":"The wizard places the data.","masters.coreSites.board":"Sites (Service · Core)","masters.coreSites.summary":"{created} created · {updated} updated · {unchanged} unchanged · {skipped} skipped · {errors} with errors","masters.coreSites.progress":"Loading sites… {done} of {total}","masters.coreSites.pendingNote":"{pending} sites still to load — press the button again to continue where it stopped (loading again never duplicates).","masters.coreSites.skippedTitle":"Skipped rows","masters.coreSites.skip.missing_code":"row {row}: no Code","masters.coreSites.skip.missing_name":"row {row} ({code}): no Name","masters.coreSites.skip.duplicate_in_input":"row {row} ({code}): Code repeated in this file","masters.coreSites.postalTitle":"Postal code left empty","masters.coreSites.postalNote":"Left empty because Core Sites stores the postal code as a number (a leading zero would be lost).","masters.coreSites.postalItem":"row {row} ({code}): {postal}","masters.coreSites.errorsTitle":"Rows with errors","masters.coreSites.errorItem":"row {row} ({code}): {message}","masters.coreSites.more":"+{n} more","masters.coreSites.busy":"These sites are already being loaded for this onboarding. Wait for it to finish, then try again.","masters.coreSites.reload":"The sites setting changed since this page was opened. Reload the page and load the sites again.","masters.coreSites.no_client":"Finish \"Client basics\" (step 1) first — the sites hang off that client.","masters.coreSites.client_not_found":"The client of this onboarding no longer exists. Go back to \"Client basics\" (step 1).","masters.coreSites.client_not_on_core":"This client could not be published to the Core \"Clients\" board ({status}), so its sites cannot be linked to it and nothing was written. An admin has to fix the Clients board connection (Bridge → clients) — do not create the client card by hand, that makes a second client.","masters.coreSites.workspace_not_found":"The Service · Core workspace was not found, so no sites were written.","masters.coreSites.board_not_found":"Service · Core has no active \"Sites\" board, so no sites were written. Restore or create it, then try again.","masters.coreSites.columns_missing":"The Core \"Sites\" board is missing a required column ({columns}), so no sites were written.","masters.missingBoard.other":"This project has no \"{board}\" board, so these rows were NOT loaded anywhere. Today assets, contacts and service providers are loaded on the Service · Core boards.","sla.newTierName":"New tier name","sla.newTierNamePlaceholder":"Standard","sla.sev":"Severity","sla.response":"Response (min)","sla.arrival":"Arrival (min)","sla.resolution":"Resolution (min)","sla.save":"Save contract & SLA","sla.saving":"Saving…","sla.activate":"Activate contract","sla.activating":"Activating…","sla.active":"Contract active","sla.we1":"Attach the SLA tier to the client’s contract.","sla.we2":"When tickets arrive, their deadlines freeze automatically from this SLA.","sla.engineNoteLead":"We reuse the SLA Engine.","sla.engineNote":"For advanced rules (by site, calendar, pause) open the SLA Engine — we don’t rebuild that screen here.","sla.openEngine":"Open SLA Engine","bridge.flow.board":"Board","bridge.flow.boardSub":"row created","bridge.flow.bridge":"Connection","bridge.flow.bridgeSub":"two-way sync","bridge.flow.ticket":"Ticket","bridge.flow.ticketSub":"real ticket","bridge.we1":"We turn on the connection and give the board permission.","bridge.we2":"We connect Intake ↔ Tickets and the tickets that already exist.","bridge.wire":"Connect the boards","bridge.wiring":"Connecting…","bridge.doneTitle":"Boards connected to the tickets","bridge.doneNote":"Every board row now becomes a trackable ticket, and changes flow both ways.","bridge.backfill":"{n} existing tickets connected","bridge.grant":"Permission ready","bridge.grantRevoked":"Permission removed: the board will not sync until an administrator turns it back on","bridge.grantMissing":"No permission: the board does not sync yet","bridge.intakeTickets":"Intake ↔ Tickets","bridge.needWorkspace":"Create the workspace first (step 3).","people.coord.section":"Coordinator","people.coord.assign":"Assign a coordinator","people.coord.assignHint":"They’ll see this client’s intake in their inbox.","people.coord.assign.btn":"Assign","people.coord.assigning":"Assigning…","people.coord.assigned":"Coordinator assigned","people.tech.section":"Technicians","people.tech.provider":"Provider","people.tech.access":"App access","people.tech.invited":"Invited","people.tech.noAccess":"No access","people.tech.provision":"Give TechOne access","people.tech.provisioning":"Giving access…","people.tech.email":"Tech email","people.tech.emailPlaceholder":"technician@example.com","people.tech.phone":"Phone (optional)","people.tech.noProviders":"No service providers on file — add one in step 4 (Service providers) or enter a provider id + email below.","people.tech.spId":"Service provider id","people.portal.section":"Portals","people.portal.client.title":"Client portal","people.portal.client.desc":"Client sees their tickets, proof of repair & history.","people.portal.sp.title":"Service-provider portal","people.portal.sp.desc":"Provider sees assigned tickets, routes & parts.","people.portal.create":"Create","people.portal.creating":"Creating portal…","people.portal.createdShared":"Created & shared","people.portal.audience":"Audience","people.portal.grants":"{n} boards shared","people.portal.noGrants":"no boards matched — none were shared","people.portal.note":"Each board is shared with the right audience — client or provider — without you opening the portals tool.","people.portal.noteLead":"The wizard creates both portals — or reuses the ones the client already has. If one does not apply, mark it «Not applicable».","people.portal.na":"Not applicable to this client","people.portal.naHint":"Marked «Not applicable» — no portal is created. Untick it to create one.","people.portal.naExists":"This portal already exists — it cannot be marked «Not applicable».","people.portal.managedOnly":"Portals are locked to the managed ones: only the Owner can create or wire a portal right now.","people.portal.notActive":"This client already has a portal of this type, but it is not active (suspended). Reactivate it in Portals — no new one was created.","people.portal.naPortalIntake":"This client’s tickets come in through the client portal, so it cannot be «Not applicable».","people.portal.reused":"Reused — the client already had this portal","people.portal.duplicates":"This client has {n} portals of this type: the oldest active one was used and no new one was created.","people.portal.missing":"Not in this project: {boards}","golive.check.workspace":"Workspace provisioned","golive.check.intake":"Intake source connected","golive.check.masters":"Master data present","golive.check.contract_sla":"Contract active + SLA attached","golive.check.bridge":"Boards connected, with the tickets that already existed","golive.check.coordinator":"Coordinator assigned","golive.check.tech":"At least one technician","golive.check.client_portal":"Client portal shared","golive.check.sp_portal":"Service-provider portal shared","golive.check.client_portal_intake":"Client portal can open a ticket (dry run)","golive.notApplicable":"Not applicable to this client","golive.flowTitle":"The path a ticket will follow","golive.flow.intake":"Intake","golive.flow.ticket":"Ticket","golive.flow.tech":"Tech","golive.flow.coord":"Coord.","golive.flow.client":"Client","golive.flow.provider":"Provider","golive.run":"Run the go-live check","golive.running":"Running…","golive.rerun":"Re-run the check","golive.autoArmLead":"Auto-arm.","golive.autoArm":"When every check is green, the client goes live automatically — no extra confirmation.","golive.liveTitle":"{client} is live","golive.liveDesc":"New tickets flow automatically: intake → ticket → technician → coordinator → client portal → service-provider portal.","golive.passed":"{n} of {t} ready","gate.notAuthorized":"You do not have access to Client Onboarding.","gate.disabled":"Client Onboarding is not enabled.","gate.noCapability":"You do not have permission to run onboarding.","gate.goLiveNeedsAdmin":"The final step is activated by an administrator.","gate.noticeTitle":"You can see onboardings, but not run them","gate.mfaLink":"Set up two-step verification","err.linkBoard":"Could not link the board. Check the board id and try again.","advance.blocked.client":"Save the client first.","advance.blocked.intake":"Choose where the tickets come from first.","advance.blocked.workspace":"Create the workspace first.","advance.blocked.masters":"Load the client’s sites first.","advance.blocked.sla":"Activate the contract first.","advance.blocked.bridge":"Wire the boards first.","advance.blocked.people":"Assign a coordinator and at least one technician first.","intake.err.mode":"Choose a valid intake source.","intake.file.handoffTitle":"Tickets will come from a file","intake.file.handoffNote":"The tickets are loaded with the ticket importer (Service → Tickets), once the client is set up. This step only records that this client sends files.","ws.boardsNone":"No boards are visible in this workspace yet.","ws.boardsLoading":"Loading the workspace boards…","ws.we1Count":"Install a fresh workspace from the template, with its {n} boards already connected.","ws.board.intake":"Intake","ws.board.tickets":"Tickets","ws.board.routes":"Routes & Stops","ws.board.parts":"Parts Requests","ws.board.proof":"Proof of Repair","ws.board.pm":"Preventive Maintenance","ws.board.uptime":"Uptime","ws.board.cash":"Cash Discrepancy","ws.board.products":"Products","ws.board.components":"Components","ws.board.dashboards":"Dashboards","ws.board.archived":"Archived Tickets","ws.board.serviceHistory":"Service History","masters.import.dropHintCatalog":"we read it, match the columns and save each site to the client’s site list","masters.saveSites":"Save sites","masters.savingSites":"Saving sites…","people.tech.hasAccess":"Has access","golive.mastersSites":"Active sites: {n}","golive.missing.title":"{n} items left before going live","golive.missing.titleOne":"1 item left before going live","golive.missing.goTo":"Go to step {n} · {step}","client.timezoneGroupCommon":"Our locations","people.tech.addToProject":"Add to the project","people.tech.removeFromProject":"Remove from the project","people.tech.inProject":"In the project","people.newTech.open":"New technician","people.newTech.title":"New technician","people.newTech.hint":"For someone who is not on file yet. We create their record, give them TechOne access by email and add them to this project.","people.newTech.name":"Full name","people.newTech.email":"Email","people.newTech.phone":"Mobile (optional)","people.newTech.region":"Region (optional)","people.newTech.regionHint":"One region. Pick one in use so it matches the client sites.","people.newTech.submit":"Create and give access","people.newTech.creating":"Creating…","people.newTech.created":"{name} was created and added to the project.","people.newTech.reused":"This email already had a record: {name} ({state}). We used it; no duplicate was created.","people.newTech.notAssignable":"{name} already exists but is disabled ({state}). It was not added to the project. Ask a Field Service admin to review the record.","people.newTech.activationPending":"We sent an activation code to their email.","people.newTech.notEnrolled":"This onboarding has no contract yet, so the technician was not added to a project.","people.newTech.region.added":"Region: {tag}.","people.newTech.region.already":"Region: {tag} (it already had it).","people.newTech.region.no_permission":"The region «{tag}» was not added: changing the regions of an existing technician needs the “Manage SP roster / skills / loadout” permission. Ask an administrator.","people.newTech.confirmInternal":"This email belongs to an internal user. Give this person a technician login too?","people.newTech.confirmInternalBtn":"Yes, continue","people.newTech.candidates":"Some records look like this person. Use one of them, or check the name and email.","people.newTech.useThis":"Use this one","people.newTech.candidateInactive":"inactive","people.newTech.state.active":"active","people.newTech.state.provisioning":"being set up","people.newTech.state.orphaned":"setup failed","people.newTech.state.disabled":"disabled","people.newTech.err.noPermission":"You need the permission to onboard technicians. Ask an administrator.","people.newTech.err.name":"Enter the full name (up to 100 characters).","people.newTech.err.email":"Enter a valid email address.","people.newTech.err.phone":"Check the mobile number: digits only, with an optional + and 7 to 15 digits.","people.newTech.err.region":"The region must have between 1 and 60 characters.","people.newTech.err.invalid":"Check the technician details and try again.","people.newTech.err.create":"We could not create the technician. Try again.","people.newTech.err.candidateGone":"That record is no longer one of the matches. Check the details and try again.","people.newTech.codeAlreadySent":"We had just sent them an activation code; we did not send another one.","people.newTech.region.failed":"We could not add the region «{tag}». Try again.","people.newTech.confirmLinkNoEmail":"The record of {name} has no email. Link the email you typed to this record?","people.newTech.confirmLinkNoEmailBtn":"Yes, link it","people.newTech.err.candidateOtherEmail":"That record belongs to someone with another email, so it cannot be used for this email. Check the email, or create the technician with another name.","people.newTech.err.inProgress":"Access for this technician is being sent right now. Wait a moment and reload.","people.err.techNoAccess":"This provider doesn’t have TechOne access yet. Use «Give TechOne access».","people.err.spNotFound":"We couldn’t find this provider, or it is no longer active. Reload the page.","people.err.enrollFailed":"We could not add this technician to the project: it is not active or is still being set up. Check the technician record and try again.","people.coord.label":"Coordinator:","ws.boardsOptional":"Also created (you can ignore them if they don’t apply to this client):","sla.attachedNotice":"SLA tier «{name}» attached to the contract.","sla.attachedNoticeNoName":"SLA tier attached to the contract.","client.tzRegion.America":"Americas","client.tzRegion.Europe":"Europe","client.tzRegion.Asia":"Asia","client.tzRegion.Africa":"Africa","client.tzRegion.Australia":"Australia","client.tzRegion.Pacific":"Pacific","client.tzRegion.Atlantic":"Atlantic","client.tzRegion.Indian":"Indian Ocean","client.tzRegion.Antarctica":"Antarctica","client.tzRegion.Arctic":"Arctic","client.tzRegion.Other":"Other","masters.sites.target":"the client’s sites","masters.sites.catalogNote":"Sites are saved in the client’s site list — the one the client portal, the tickets and the routes use — and never on a board. Loading the same file again completes empty fields and never duplicates or overwrites.","masters.sites.ambiguous":"More than one column of your file fits {fields} — choose which one to use.","masters.sites.missing":"Choose the column of your file for: {fields}.","masters.sites.manualMissing":"Every site needs: {fields}.","masters.sites.inCatalog":"{n} sites in the client’s list","masters.sites.noneLoaded":"No site was loaded.","masters.sites.summary":"{created} new · {updated} completed · {unchanged} already there · {skipped} not loaded","masters.sites.skippedTitle":"Rows not loaded","masters.sites.skip.missing_code":"row {row}: no Code","masters.sites.skip.missing_name":"row {row} ({code}): no Name","masters.sites.skip.missing_address":"row {row} ({code}): no Address","masters.sites.skip.too_long":"row {row} ({code}): {field} is too long","masters.sites.skip.duplicate_in_file":"row {row} ({code}): Code repeated in this file — row {first} was used","masters.sites.skip.closed":"row {row} ({code}): this site is closed — it was not reopened","masters.sites.skip.raced":"row {row} ({code}): loaded at the same moment by someone else — left as it was","masters.sites.skip.ambiguous_code":"row {row} ({code}): same site as code {with} (only spaces or leading zeros differ) — not loaded; fix one of the two codes","intake.change.lead":"Change the source?","intake.change.warn":"This onboarding already has its source saved. Changing it marks the next steps (workspace, master data, contract, boards and people) to review again — nothing is deleted.","intake.change.confirm":"Change the source","intake.sn.connectFailed":"Could not connect to ServiceNow. Check the instance URL and the credentials, then try again.","masters.err.kind":"Unknown kind of master data.","masters.kindUnavailable":"This workspace has no «{board}» board","masters.kindsUnavailableNote":"{kinds}: not available here — this workspace has no board for them. Today they are loaded on the Service · Core boards.","masters.sites.busy":"The sites are being written by another process right now. Try again in a moment — nothing was duplicated.","masters.sites.no_client":"Finish «Client basics» (step 1) first — the sites belong to that client.","masters.sites.client_not_found":"The client of this onboarding no longer exists. Go back to «Client basics» (step 1).","masters.sites.client_inactive":"The client of this onboarding is not active, so no sites were saved.","masters.sites.too_many_rows":"At most {max} rows per load — split the file.","land.newClient":"New client","land.startFailed":"Could not start a new onboarding. Try again.","land.archiveFailed":"Could not archive this onboarding. Try again.","land.archiveConfirm":"Archive?","status.archived":"Archived","err.generic":"Something went wrong. Try again.","err.noResponse":"It couldn’t be completed: there was no answer in time. Try again.","err.stillWorking":"This is taking longer than usual; still waiting for: {action} (step {n})…","err.stillWorkingNoStep":"This is taking longer than usual; still waiting for: {action}…","err.previousAction":"the previous action","err.sessionNotFound":"This onboarding no longer exists. Go back to the list.","err.clientNameRequired":"Enter the client name.","err.createClient":"Could not create the client. Check the details and try again.","err.createContract":"Could not create the client’s contract. Try again.","err.noContract":"This onboarding has no contract yet — finish «Client basics» (step 1) first.","err.provisionWorkspace":"Could not create the workspace. Try again.","intake.sn.urlRequired":"Enter the instance URL.","intake.sn.urlNotServiceNow":"Enter your ServiceNow instance URL (https://<name>.service-now.com).","intake.sn.filterRequired":"Enter the assignment group — without it we would pull every incident of the instance.","intake.board.idRequired":"Enter the integrator board id.","intake.board.notFound":"No active board matches «{board}». Paste the board code (BRD-…) as it appears in One Boards; the board must exist, not be deleted, and you must have access to it.","intake.board.needsEdit":"You need permission to edit that board.","intake.board.block.tickets_board":"{board} is this project’s Tickets board, so it cannot be its intake board. Choose the project’s intake board instead.","intake.board.block.workspace_already_has_intake":"This project already has an intake board: {board}. A project has only one — use that board.","intake.board.block.workspace_already_has_intake_hidden":"This project already has an intake board, and a project has only one.","intake.board.block.board_archived":"{board} is archived, so it cannot be the intake board. Unarchive it first if it really is this project’s intake board.","migrate.err.same":"Choose a different template to move to.","migrate.contractSlaKept":"kept","masters.err.noRows":"Add at least one row.","masters.err.needWorkspace":"Create the workspace first (step 3).","masters.import.readFailed":"Could not read this file. Save it as CSV or Excel and try again.","masters.col.name":"Name","masters.col.code":"Code","masters.col.address":"Address","masters.col.city":"City","masters.col.state":"State","masters.col.region":"Region","masters.col.postalCode":"Postal code","masters.col.asset":"Asset","masters.col.tag":"Tag","masters.col.email":"Email","masters.col.dispatchEmail":"Dispatch email","sla.err.createTier":"Could not create the SLA tier. Check the times and try again.","sla.err.attachTier":"Could not attach the SLA tier to the contract. Try again.","sla.tierQuestion":"Which SLA applies to this client?","sla.createNew":"Create a new tier","sla.recommended":"Recommended","sla.createNewDesc":"A tier only for this client: set its times below. No other client’s SLA changes.","sla.useExisting":"Use an existing tier","sla.useExistingDesc":"Pick one from the SLA tier catalog.","sla.groupGeneral":"General tiers","sla.groupGeneralEmpty":"There are no general tiers yet.","sla.groupOthers":"Used by other clients ({n})","sla.usedBy.one":"used by {clients}","sla.usedBy.other":"used by {clients}","sla.othersWarn":"These tiers are attached to other clients’ contracts: if one of them is edited later, it changes for those clients too.","sla.pickFirst":"Choose a tier or create a new one.","sla.ctx.error":"This contract's SLA settings could not be loaded, so nothing can be saved yet.","sla.ctx.retry":"Retry","sla.ctx.loading":"Loading this contract's SLA settings…","sla.ctx.retrying":"Retrying…","bridge.err.wire":"Could not connect the boards. Try again.","people.err.assignCoordinator":"Could not assign the coordinator. Try again.","people.err.techEmailRequired":"Enter the technician’s email.","people.err.provisionTech":"Could not give the technician access. Check the email and try again.","people.err.portal":"Could not create the portal. Try again.","golive.flow.ticketSub":"real ticket","golive.portalIntakeRefused":"the client portal cannot open tickets yet","people.err.tech.identity_has_other_access":"This person already has access elsewhere — ask a portal admin to set up their technician login.","people.err.tech.identity_suspended":"This account is suspended — ask a portal admin to review it before giving it a technician login.","people.err.tech.password_reset_requires_admin":"This technician already has a working login — ask a Field Service admin or a portal admin to reset the password.","people.err.tech.no_permission":"You do not have permission to give technicians access.","people.err.tech.invalid_email":"Enter a valid email address.","people.err.tech.temp_password_too_short":"The temporary password must have at least {min} characters.","people.err.tech.sp_not_found":"That service provider no longer exists. Reload the page.","people.err.tech.sp_has_other_login":"This service provider already has a different login linked. Unlink it first.","people.err.tech.email_linked_elsewhere":"This email is already linked to a different service provider ({sp}).","err.createClient.invalid_input":"Check the client details: a field is missing or too long, or the time zone is not valid.","err.createClient.redix_id_conflict":"Another client already uses this Redix id. Check the code or open that client.","ws.err.contract_not_found":"The contract of this onboarding no longer exists. Go back to «Client basics» (step 1).","ws.err.app_not_registered":"The service-project template is not installed on this platform. Ask an administrator.","ws.err.tickets_board_missing":"The workspace was created without a Tickets board, so it was not linked. Ask an administrator.","ws.err.install_failed":"The workspace template could not be installed. Try again.","ws.err.provisioning_disabled":"Creating service-project workspaces is turned off on this platform. Ask an administrator.","people.err.coord.no_permission":"You do not have permission to manage coordinators.","people.err.coord.invalid_input":"That person cannot be assigned as coordinator here. Choose someone else.","people.err.coord.rank_taken":"Another coordinator already holds that position on this contract. Reload and try again.","people.err.coord.not_assigned":"That coordinator is no longer on this contract. Reload and try again.","golive.chain.key.chain_tickets_board":"Tickets board","golive.chain.key.chain_bridge":"Connection to tickets","golive.chain.key.chain_grant":"Tickets board permission","golive.chain.key.sn_account":"ServiceNow account","golive.chain.key.sn_feed_binding":"ServiceNow linked to the intake board","golive.chain.key.sn_feed_on":"ServiceNow intake feed","golive.chain.key.sn_mirror_fresh":"ServiceNow data up to date","golive.chain.key.intake_marked":"Intake board","golive.chain.key.case_bridge_on":"Intake cases","golive.chain.key.promote_target":"Where approved cases land","golive.chain.key.import_on":"Import from Excel","golive.chain.key.client_active":"Active client","golive.chain.key.import_destination":"Where imported tickets land","golive.chain.key.portal_plan":"Client portal tickets","golive.chain.key.channel_secret":"Email / order intake set up","golive.chain.key.channel_on":"Email / order channel","golive.chain.key.channel_sender":"Who sends the emails / orders","golive.chain.state.pending":"Waiting for activation","golive.chain.state.unverifiable":"Cannot be checked from here","golive.chain.reason.check_failed":"The check could not run. Try again in a moment.","golive.chain.reason.no_tickets_board":"The project has no Tickets board.","golive.chain.reason.bridge_inactive":"The connection that turns rows into tickets is off on the Tickets board.","golive.chain.reason.no_grant":"The connection has no permission on the Tickets board.","golive.chain.reason.grant_revoked":"An administrator removed the connection's permission on the Tickets board.","golive.chain.reason.connector_inactive":"The ticket connection is turned off.","golive.chain.reason.no_intake_board":"The intake board is not visible or does not exist.","golive.chain.reason.no_sn_account":"No ServiceNow account is connected to this onboarding (step 2).","golive.chain.reason.sn_account_inactive":"The ServiceNow account is paused.","golive.chain.reason.no_feed_binding":"The ServiceNow account is not linked to the intake board yet. Ask the integrations team to link it.","golive.chain.reason.feed_other_account":"The intake board is linked to another ServiceNow account.","golive.chain.reason.feed_off":"The ServiceNow intake feed is turned off.","golive.chain.reason.mirror_never_synced":"ServiceNow data has never been synced.","golive.chain.reason.mirror_stale":"ServiceNow data has not refreshed in over 6 hours.","golive.chain.reason.intake_not_marked":"The intake board is not marked as this project's intake board.","golive.chain.reason.multiple_intake_boards":"This project has more than one intake board. There must be exactly one.","golive.chain.reason.intake_other_workspace":"The intake board belongs to another project.","golive.chain.reason.case_bridge_off":"Intake cases are turned off.","golive.chain.reason.no_bridge_board":"Approved cases would have no Tickets board to land on.","golive.chain.reason.multiple_bridge_boards":"This project has more than one Tickets board with the connection on.","golive.chain.reason.target_other_board":"Approved cases would land on another Tickets board.","golive.chain.reason.import_pending":"Will turn on once ticket import is enabled.","golive.chain.reason.no_client":"The client of this onboarding does not exist.","golive.chain.reason.client_inactive":"The client is not active, so imported tickets would be refused.","golive.chain.reason.no_destination":"Imported tickets would not land on this project's Tickets board: the active contract has no board.","golive.chain.reason.destination_other_board":"Tickets would land on another Tickets board, not this project's.","golive.chain.reason.no_client_portal":"There is no client portal yet (step 7).","golive.chain.reason.portal_routing_pending":"Portal intake will turn on once the portal project routing is enabled. Ask an administrator.","golive.chain.reason.intake_secret_missing":"Email / order intake is not set up on the server.","golive.chain.reason.channel_off":"This intake channel is turned off.","golive.chain.reason.sender_unverifiable":"We can't check from here who sends the emails/orders. Confirm it and activate manually.","golive.chain.reason.no_board":"The portal is not linked to a Tickets board.","golive.chain.reason.ambiguous_board":"The portal could send tickets to more than one Tickets board.","golive.chain.reason.no_client_column":"The Tickets board has no Client column.","golive.chain.reason.client_not_on_master":"The client is not on the Clients board yet.","golive.chain.reason.client_master_mismatch":"The Client column points to another Clients board.","golive.chain.reason.no_group":"The Tickets board has no group to receive tickets.","golive.banner.pendingActivation":"Everything is ready. The project goes live once Excel ticket import is enabled.","golive.manual.button":"Activate manually","golive.manual.reasonLabel":"Why are you activating without this check?","golive.manual.reasonRequired":"Write why you are activating without this check ({min}–{max} characters).","golive.manual.notAllowed":"Manual activation is not possible: a check is red or still waiting.","golive.manual.done":"Activated manually.","golive.manual.activatedBy":"Activated manually by {name} on {date}: {reason}","golive.alreadyActive":"This onboarding is already live.","golive.chain.reason.feed_unverifiable":"The ServiceNow mirror cannot be verified automatically to feed this board.","golive.chain.reason.no_column_map":"The connection has no column to write to on the Tickets board, so it would sync nothing.","bridge.grantBridgeOff":"The connection to the tickets is turned off on this board: no permission was given.","gate.mfaNotEnrolled":"Turn on two-step verification in Settings → Security to set up projects.","gate.mfaNotVerified":"Verify your second factor to continue.","gate.mfaVerifyLink":"Verify my second factor","gate.mfaLinkGo":"Go there","perm.missing":"To {action} you need the “{permission}” permission. Ask {who}.","perm.action.connectServiceNow":"connect ServiceNow","perm.action.createPortal":"create portals","perm.name.integrationsConnect":"Connect integrations","perm.name.portalsManage":"Manage portals","perm.who.admin":"an administrator","intake.sn.permissionAlternative":"You can choose another source for the tickets meanwhile.","advance.blocked.intakePermission":"You need the “Connect integrations” permission to connect ServiceNow; you can choose another source or ask for it.","golive.chain.reason.sn_permission_missing":"The “Connect integrations” permission is missing in step 2, so no ServiceNow account could be connected. Ask an administrator.","golive.chain.reason.portal_permission_missing":"The “Manage portals” permission is missing in step 7, so the client portal could not be created. Ask an administrator.","session.notFound":"This onboarding no longer exists or was archived. Go back to the list and open it again.","access.boardsNotVisible":"You do not have access to the boards of this project. Ask {owner} to share the workspace with you, then try again.","access.boardsNotVisible.noOwner":"You do not have access to the boards of this project. Ask the workspace owner to share it with you, then try again.","configure.err.noAccess":"Only someone who sets up projects, or this contract's coordinator, can open this.","configure.err.sectionForbidden":"Only someone who sets up projects can change this.","configure.err.stepNotAvailable":"This step is not part of the project configuration.","configure.err.calendarShared":"This calendar is also used by another contract or SLA level, so its holidays cannot be changed here. Save the SLA step again to give this project its own calendar, then approve the year.","configure.err.calendarSharedAsk":"This calendar is also used by another contract or SLA level, so its holidays cannot be changed here. Ask someone who sets up projects to give this project its own calendar, then approve the year.","configure.err.sessionMismatch":"This configuration belongs to another client. Open it again from the contracts list.","configure.err.contractHasSession":"This contract already has a setup in progress. Open that one instead.","configure.err.contractNotFound":"This contract no longer exists. Go back to the contracts list.","sites.err.boundToBoard":"This client's sites come from their sites board. Edit them there.","sites.err.clientNoTimezone":"The client's time zone is missing. Set it in the Client step, then link the board.","sites.tz.missingOnboarding":"The client's time zone is missing, so the board cannot be linked yet.","sites.tz.goToClient":"Set it in the Client step","sites.tz.missingConfigure":"The client's time zone is missing, so the board cannot be linked. Ask someone who sets up projects to set it.","sites.err.clientOnLegacySource":"This client's sites already come from the shared sites board, so another board cannot be linked.","sites.err.boardNotCandidate":"That board cannot hold sites (it needs a «Site Code» column and must not be deleted). Choose another one.","sites.err.boardTaken":"That board already holds the sites of another client. Choose another one.","sites.err.notBound":"This client has no sites board linked.","sites.err.previewFailed":"We could not load the preview. Try again.","sites.err.planChanged":"The board changed since the preview. Review the new numbers.","sites.err.syncOff":"Site sync is turned off on this platform.","sites.err.syncFailed":"The sites could not be synced. Nothing was half-written: try again.","sites.err.loadFailed":"We could not load the sites setup. Try again.","sites.loading":"Loading…","sites.retry":"Retry","sites.origin.question":"Where do the sites come from?","sites.origin.board":"From a board","sites.origin.boardDesc":"The team keeps the sites on a board; what changes there arrives here.","sites.origin.file":"Upload a file","sites.origin.fileDesc":"A spreadsheet with one row per site, loaded once.","sites.emptyOperational":"There is no sites board yet. Ask someone who sets up projects to link it.","sites.readOnlyBoard":"Only someone who sets up projects can change the sites board.","sites.bound.title":"Sites from the board {board} · {workspace}","sites.bound.titleNoWorkspace":"Sites from the board {board}","sites.bound.open":"Open the board","sites.bound.deleted":"The linked sites board no longer exists, so nothing syncs. Choose another one.","sites.change":"Change board","sites.unlink":"Stop using this board","sites.unlinkNote":"Sites already created stay; only the sync stops.","sites.firstSync.none":"No site has been created yet. Review the preview and confirm.","sites.firstSync.warn":"Review this before creating the sites: every new site counts for billing.","sites.fileBound":"This client's sites come from the board {board}. Edit them there.","sites.search.label":"Find the sites board","sites.search.placeholder":"Type the board or workspace name","sites.search.empty":"No board with a «Site Code» column matches.","sites.candidate.rows.one":"{n} row","sites.candidate.rows.other":"{n} rows","sites.col.code":"code","sites.col.address":"address","sites.col.city":"city","sites.col.state":"state","sites.col.postalCode":"postal code","sites.col.postalNumeric":"postal code in a number column (not loaded)","sites.link":"Use this board","sites.preview.title":"Preview","sites.preview.loading":"Loading the preview…","sites.preview.reload":"Refresh the preview","sites.group.more":"+{n} more","sites.run.upToDate":"Everything is up to date","sites.run.createOnly.one":"Create {n} site","sites.run.createOnly.other":"Create {n} sites","sites.run.completeOnly.one":"Complete {n} site","sites.run.completeOnly.other":"Complete {n} sites","sites.run.both.one":"Create {n} site and complete {m}","sites.run.both.other":"Create {n} sites and complete {m}","sites.run.running.one":"Syncing {n} site…","sites.run.running.other":"Syncing {n} sites…","sites.result.title":"Sync finished · {time}","sites.result.close":"Close","sites.result.created.one":"{n} created","sites.result.created.other":"{n} created","sites.result.completed.one":"{n} completed","sites.result.completed.other":"{n} completed","sites.result.unchanged.one":"{n} already there","sites.result.unchanged.other":"{n} already there","sites.result.errors.one":"{n} with an error","sites.result.errors.other":"{n} with an error","sites.result.notActive.one":"{n} without active status","sites.result.notActive.other":"{n} without active status","sites.result.cleanedCodes.one":"{n} code cleaned","sites.result.cleanedCodes.other":"{n} codes cleaned","sites.result.postalNotText.one":"{n} without postal code","sites.result.postalNotText.other":"{n} without postal code","sites.field.label":"name","sites.field.addressText":"address","sites.field.coords":"location","sites.field.region":"region","sites.field.timezone":"time zone","sites.field.siteCode":"code","sites.field.externalRef":"link to the board","sites.field.city":"city","sites.field.state":"state","sites.field.postalCode":"postal code","sites.conflict.addressText":"two rows with different addresses","sites.conflict.coordinates":"two rows with different locations","sites.conflict.key":"rows that join two different codes","sites.conflict.catalog_ambiguous":"more than one site already has this code","sites.conflict.client_changed":"the site belongs to another client","sites.conflict.city":"two rows with different cities","sites.conflict.state":"two rows with different states","sites.conflict.postalCode":"two rows with different postal codes","sites.skipReason.client_not_enabled":"this client is not enabled for board sites","sites.skipReason.client_no_timezone":"the client's time zone is missing","sites.skipReason.client_invalid_timezone":"the client's time zone is not valid","sites.skipReason.legacy_client_unavailable":"the client of the shared board is not available","sites.skipReason.client_bound_to_board":"this client has its own sites board","sites.skipReason.awaiting_first_review":"waiting for the first reviewed sync","sites.dup.code":"same code as a loaded site","sites.dup.name_city":"same name and city as a loaded site","sites.dup.address":"same address as a loaded site","sites.cleaned.from":"was {raw}","sites.postal.raw":"on the board: {raw}","masters.sites.postalRejected.one":"{n} row was saved without its postal code (it is not a complete code): {codes}","masters.sites.postalRejected.other":"{n} rows were saved without their postal code (it is not a complete code): {codes}","sites.group.inserts.one":"{n} new","sites.group.inserts.other":"{n} new","sites.group.updates.one":"{n} gets completed","sites.group.updates.other":"{n} get completed","sites.group.unchanged.one":"{n} already there","sites.group.unchanged.other":"{n} already there","sites.group.conflicts.one":"{n} with differences","sites.group.conflicts.other":"{n} with differences","sites.group.noKey.one":"{n} without a code","sites.group.noKey.other":"{n} without a code","sites.group.foreignClient.one":"{n} of another client","sites.group.foreignClient.other":"{n} of another client","sites.group.notActive.one":"{n} without active status: not loaded","sites.group.notActive.other":"{n} without active status: not loaded","sites.group.cleanedCodes.one":"{n} code had quotes: the site is created without them. The board still shows them; fix it there if you want them to match","sites.group.cleanedCodes.other":"{n} codes had quotes: the sites are created without them. The board still shows them; fix them there if you want them to match","sites.group.postalNotText.one":"{n} site without postal code: fix it on the board","sites.group.postalNotText.other":"{n} sites without postal code: fix it on the board","sites.group.possibleDuplicates.one":"{n} possible duplicate: review it on the board","sites.group.possibleDuplicates.other":"{n} possible duplicates: review them on the board","sites.group.fieldTooLong.one":"{n} with a value that is too long","sites.group.fieldTooLong.other":"{n} with a value that is too long","sites.group.skippedClient.one":"{n} cannot be loaded for this client","sites.group.skippedClient.other":"{n} cannot be loaded for this client","sla.pause.contractNeverPauses":"This contract's clock never stops, so the SLA cannot be paused.","sla.pause.policyUnavailable":"We could not check whether this contract allows pausing the SLA, so nothing was paused. Try again in a moment.","sla.pause.reasonRequired":"Write why you are making this change (3 to 500 characters).","sla.pause.listChanged":"The list changed while you were confirming. Review it again and confirm.","holidays.unavailable":"We could not load the official holidays. Add them by hand.","holidays.wrongYear":"Every date has to belong to {year}.","holidays.err.timeout":"The official holidays service took too long to answer ({years}). Try again or add them by hand.","holidays.err.network":"We could not reach the official holidays service ({years}). Try again or add them by hand.","holidays.err.provider":"The official holidays service refused the request ({years}). Add them by hand.","holidays.err.badData":"The official holidays service returned data that is not valid ({years}). Add them by hand.","holidays.partial":"We loaded the holidays of {loaded}, but {missing} is missing: {why}. Try again or add them by hand.","holidays.why.timeout":"the official holidays service took too long to answer","holidays.why.network":"we could not reach the official holidays service","holidays.why.provider":"the official holidays service refused the request","holidays.why.badData":"the official holidays service returned data that is not valid","calendar.err.invalidSchedule":"Check the hours: a time is not valid (use HH:MM between 00:00 and 23:59, opening before closing).","calendar.err.invalidHoliday":"A holiday date does not exist (use a real YYYY-MM-DD date).","sla.err.out_of_range":"Business days must be a whole number from 1 to 30.","sla.err.non_uniform_days":"Every open day must have the same hours to count whole business days.","sla.err.no_open_days":"Choose at least one open day.","sla.err.timezone":"Choose a valid time zone.","sla.err.save":"Could not save the SLA. Try again.","sla.err.pickTier":"Choose a tier.","sla.err.tierNotFound":"That tier no longer exists. Choose another one.","sla.err.contractClosed":"This contract expired or was replaced, so it cannot be activated. Open the contract in force from the contracts list.","configure.title":"Configure project · {contract}","configure.badge":"Configuration","configure.open":"Configure project","configure.opening":"Opening…","configure.readOnly":"Only someone who sets up projects can change this.","configure.noticeTitle":"You cannot open this configuration","configure.contractActive":"Contract active","configure.save":"Save","sla.path.business_days":"Business days","sla.path.business_daysDesc":"The ticket is due after N business days; weekends and holidays do not count.","sla.path.existing":"Use an existing tier","sla.path.existingDesc":"Pick one from the SLA tier catalog.","sla.path.by_severity":"By severity","sla.path.by_severityDesc":"Minutes per severity, counted around the clock.","sla.bd.days":"Business days to resolve","sla.bd.openDays":"Open days","sla.bd.fullDay":"Whole day (00:00–23:59)","sla.bd.timezone":"Time zone","sla.bd.deadMinute":"A ticket that arrives between 23:59 and 00:00 starts counting at 00:00 of the next business day.","sla.bd.notBusinessDays":"The current tier is not business days.","sla.bd.current":"Current: {tier}","sla.hol.title":"Holidays","sla.hol.load":"Load official holidays","sla.hol.loading":"Loading…","sla.hol.retry":"Retry","sla.hol.source":"Official holidays of Brazil and São Paulo","sla.hol.covers":"Covers until {date}","sla.hol.addDate":"Date","sla.hol.addName":"Holiday name","sla.hol.add":"Add","sla.hol.proposalAdd":"Add date","sla.hol.duplicate":"That date is already on the list.","sla.hol.paste.toggle":"Paste a list","sla.hol.paste.label":"Holidays, one per line","sla.hol.paste.hint":"Format: date;name — a comma or a tab also works. Dates as YYYY-MM-DD or DD/MM/YYYY.","sla.hol.paste.willAdd.one":"{n} holiday will be added","sla.hol.paste.willAdd.other":"{n} holidays will be added","sla.hol.paste.none":"No line can be added yet.","sla.hol.paste.lineError":"Line {line} («{text}»): {reason}","sla.hol.paste.add.one":"Add {n} holiday","sla.hol.paste.add.other":"Add {n} holidays","sla.hol.paste.err.invalidDate":"That date does not exist or is not written as YYYY-MM-DD or DD/MM/YYYY.","sla.hol.paste.previewLine":"{raw} → {date} ({long}) · {name}","sla.hol.paste.more":"…and {n} more","sla.hol.paste.err.limit":"The list already has the maximum of {max} holidays.","sla.hol.remove":"Remove {date}","sla.hol.empty":"No holidays yet: load them or add them by hand.","sla.hol.count":"{n} holidays","sla.hol.unapproved":"Holidays {year} not approved: this year the SLA only skips weekends.","sla.hol.proposedTitle":"Holidays proposed for {year}","sla.hol.proposedLead":"They were loaded automatically. Review, edit and approve them: until then they do not count for the SLA.","sla.hol.approve":"Approve holidays {year} ({n} dates)","sla.hol.approved":"Holidays {year} approved: they count for the SLA from now on.","sla.pause.title":"Clock pause","sla.pause.question":"Does the clock pause in this contract?","sla.pause.yes":"Yes, follow the general rule","sla.pause.no":"No, the clock never stops","sla.pause.openNone":"0 tickets with the clock paused","sla.pause.openSome":"{n} tickets with the clock paused: saving «No» closes those pauses (you will confirm first).","sla.parts.title":"If the result is «requires a part»","sla.parts.question":"When the technician closes the visit with «requires a part», the ticket is never closed. How does it stay?","sla.parts.onHold":"On hold (pauses the SLA)","sla.parts.awaitingOpen":"Open, waiting for the part (the clock keeps running)","sla.parts.hint":"Applies to the next visit with «requires a part». Tickets already waiting for a part do not change.","sla.shadowed":"This contract has its own {what} term that overrides the tier. What you configure here will not apply to new tickets while that term exists. Edit it in the contract record.","sla.shadowed.sla":"SLA","sla.shadowed.business_hours":"business hours","sla.shadowed.link":"Open the contract record","sla.result.saved":"Saved.","sla.result.savedNotApplied":"Saved, but it does not apply: the contract's own term overrides it.","sla.result.noChanges":"There were no changes to save.","sla.result.newTier":"A new tier was created because the previous one is used by another contract.","sla.result.closedPauses":"{n} pauses closed.","sla.result.dismiss":"Close","sla.preview":"A ticket created now would be due {date}","sla.previewNotApplied":"The SLA is not applied yet.","sla.previewShadowed":"Not applied: the contract's own term overrides it.","sla.liveNote":"Existing tickets keep their due date; the change applies to new ones.","sla.tierSuffix":"{n} business days","sla.calendarSuffix":"calendar","sla.severityTierSuffix":"by severity","configure.err.busyRetry":"Someone else is changing this technician right now. Try again in a moment.","configure.err.notOpenedYet":"This project's configuration has not been opened yet. Ask someone who sets up projects to open it.","configure.people.name":"Technicians, regions and import","configure.people.who":"🧑‍🔧 Coordinator · project technicians","configure.people.needsTech":"Missing: enroll at least one technician in this project.","configure.people.desc":"Choose which technicians work on this project, set the regions they cover and import the day's tickets from Excel.","team.loading":"Loading the project team…","team.title":"Technicians","team.intro":"The technicians enrolled on {contract}. Route Builder and the ticket assignment list use this team.","team.empty":"No technician is enrolled on this project yet.","team.firstNotice":"Before the first one: once this project has enrolled technicians, Route Builder and the ticket assignment panel offer only them for this project's tickets — from the board, created by hand or imported.","team.access.yes":"Has TechOne","team.access.no":"No TechOne access yet","team.origin.manual":"Added here","team.origin.board":"From the technicians board","team.fromBoard":"from the board","team.openTickets":"{n} open tickets here","team.noRegions":"No region (covers every site)","team.search.label":"Find a technician","team.search.placeholder":"At least 2 letters of the name","team.search.button":"Search","team.search.searching":"Searching…","team.search.none":"No available technician matches that name.","team.enroll":"Enroll {name} in {contract}","team.enrolled":"{name} is now on this project.","team.alreadyEnrolled":"{name} was already on this project.","team.unenroll":"Remove from the project","team.unenrolled":"{name} was removed from this project.","team.confirm":"Yes, continue","team.cancel":"Cancel","team.dismiss":"Close the notice","team.err.network":"Couldn't complete it. Check your connection and try again.","team.retry":"Retry","team.err.refreshAfterSave":"It was saved, but the list could not be refreshed. Check your connection.","team.err.loadFailed":"Couldn't load the team. Check your connection and try again.","team.newTechs":"Is the technician new?","team.newTechsLink":"Request their access in Technician requests","team.grant.title":"Give TechOne access","team.grant.email":"Technician email","team.grant.phone":"Phone (optional)","team.grant.submit":"Send access","team.grant.done":"TechOne access sent to {name}.","team.grant.alreadySent":"We already sent the access a moment ago.","team.grant.inProgress":"Access is already being sent to this technician; wait a moment.","team.err.queryTooShort":"Type between 2 and 60 characters of the name.","team.err.spNotFound":"That technician does not exist or is not active.","team.err.sharedTech":"This technician also works on {n} other projects you do not manage. Ask someone who sets up projects.","team.err.sharedTechOne":"This technician also works on 1 other project you do not manage. Ask someone who sets up projects.","team.err.confirmShared":"This technician also works on: {projects}. Confirm to enroll them here too.","team.err.confirmOpenTickets":"This technician has {n} open ticket(s) on this project. If you remove them, those tickets stay assigned to them. Confirm to continue.","team.err.boardManaged":"This technician comes from the technicians board. Change it on that board.","team.err.noTechOnboard":"To give TechOne access you need the “Onboard technicians” permission. Ask an administrator.","team.err.notOnProject":"This technician is not on this project. Enroll them first.","regions.title":"Regions","regions.intro":"A technician with no region can be sent to any site. With regions, they are only offered for the sites in those regions. Here you add regions; to remove one, edit the technician's record.","regions.empty":"No site of this client and no technician of the project has a region yet.","regions.summary":"Sites: {sites} · technicians: {techs}","regions.uncovered":"no technician covers it","regions.pickTech":"Technician","regions.pickTechPlaceholder":"Choose a technician","regions.input":"Region","regions.add":"Add region","regions.added":"Region saved for {name}.","regions.unknownWarning":"No site of this client has this region yet. Check the spelling: it has to match the site's region exactly.","regions.err.tooMany":"Add up to 10 regions at a time.","regions.err.invalid":"Write a region of 1 to 120 characters.","regions.err.notOnProject":"This technician is not on this project. Enroll them first.","regions.err.sharedTech":"This technician also works on {n} other projects; a region changes where they are dispatched there too. Ask someone who sets up projects.","regions.err.sharedTechOne":"This technician also works on 1 other project; a region changes where they are dispatched there too. Ask someone who sets up projects.","regions.err.confirmShared":"This technician also works on: {projects}. The region applies there too. Confirm to continue.","regions.err.confirmFirstRegion":"This technician has no region, so today they can be sent to any site. With a region they will only be offered for the sites of their regions. Confirm to continue.","import.title":"Import tickets","import.ok":"Import the day's tickets of this client from an Excel file.","import.open":"Open the importer","import.no_permission":"Importing tickets needs the “Import tickets” permission. Ask an administrator.","import.mfa":"Turn on two-step verification to import tickets.","import.mfaLink":"Set up two-step verification","import.ambiguous":"This client has more than one active contract, and the import needs exactly one. Create those tickets one by one, choosing the contract.","import.several_contracts":"You can’t create tickets here: your client has more than one active contract. Ask an administrator for help.","import.disabled":"Importing tickets from Excel is not enabled yet.","import.not_allowed":"You can only import tickets for the clients of the projects you coordinate."}},"repairTimes":{"title":"Repair Times","subtitle":"Set how long an on-site visit takes for each product. Route Builder uses these minutes to compute the arrival time at every stop.","searchPlaceholder":"Search by product name or SKU","colProduct":"Product","colEstimate":"Estimate","save":"Save","saving":"Saving…","saved":"Saved","clear":"Clear","explicit":"Explicit estimate","usingFallback":"Using fallback (default {n} min)","minutesUnit":"min","inputAriaLabel":"Repair time in minutes","invalid":"Enter a whole number from 1 to 1440.","error":"Couldn't save. Please try again.","noMatches":"No products match your search.","empty":"No products to configure yet."},"scorecard":{"title":"Tech Scorecard","description":"Per-technician stage timings, SLA-hit rate, CSAT average, and reopen rate","tabScorecard":"Scorecard","tabCsat":"CSAT Responses","windowToday":"Today","window7d":"Last 7 days","window30d":"Last 30 days","empty":"No completed tickets or open returns in this window yet.","rollupNotice":"{n} row(s) show a vendor rollup — that SP has more than one active technician, so individual attribution isn’t available yet.","rollupBadge":"vendor rollup","colTech":"Technician","colCompletions":"Completions","colResponse":"Response","colArrival":"Arrival","colResolution":"Resolution","colSla":"SLA hit","colCsat":"CSAT","colReopen":"Reopen %","colReturns":"Returns","colTravel":"Avg. travel","colVerifiedArrivals":"Verified arrivals %","colTravelHint":"Average minutes from «En route» to «On site» per visit (count of measured visits). Each visit counts for the technician who did it; a technician without their own row counts on the vendor row. Visits over 12 h are discarded.","colVerifiedArrivalsHint":"Arrivals marked within 300 m of the site (or inside the GPS fence where the project has GPS arrival on) ÷ arrivals in the window at sites with a location (arrivals without GPS count against). Each visit counts for the technician who did it; a technician without their own row counts on the vendor row.","verifiedArrivalsNoSite":"{n} without site location (excluded)","colTravelTime":"Travel time (median)","colTravelTimeHint":"Median minutes from «En route» to «Arrived» per trip, with the count of measured trips. In projects with GPS arrival on, only GPS-verified arrivals (inside the site fence, 250 m by default) enter the median; the others are counted apart. Wall-clock time, by arrival in the window, any ticket status. Trips under 0 or over 12 h are discarded; tickets whose travel was corrected by hand are excluded. Attributed to the route's provider; a provider with several technicians shows on the vendor row.","travelTimeExcluded":"{discarded} discarded · {corrected} corrected (excluded)","travelTimeUnverified":"{n} unverified","travelTimeUnverifiedDetail":"{unverified} arrived away from the site · {unlocated} without a GPS check (not in the median)","colOnSiteTime":"On site (median)","colOnSiteTimeHint":"Median minutes from the arrival to the POR close (stop completed) per visit, with the count. Visits still open are not counted. Attributed like «Travel time».","travelTimeUnverifiedShare":"{pct} unverified","travelTimePausedArrivals":"{n} with location paused (not counted)","returnsOutstanding":"{n} open","csatAvgLabel":"Average rating","csatCountLabel":"Responses","csatEmpty":"No CSAT requests in the last 30 days.","noContractsTitle":"You don’t coordinate any contract yet","noContractsBody":"Ask an administrator to add you as a coordinator on the contract’s page. You’ll see the technicians and surveys of your contracts here.","colTicket":"Ticket","colRating":"Rating","colComment":"Comment","colRequested":"Requested","colStatus":"Status","statusRated":"Rated","statusPending":"Pending","resend":"Resend","resending":"Sending…","resent":"Sent","resendFailed":"Failed"},"depot":{"title":"Depot Repairs","description":"In-house bench repair — intake, diagnose, quote, repair, QC, pickup.","bench":"Bench","intake":"Intake","newIntake":"New intake","benchEmpty":"No units on the bench. Start with a new intake.","benchEmptyColumn":"Nothing here.","wip":"WIP","openTotal":"On the bench","age":"Age","assignTech":"Assign tech","unassigned":"Unassigned","moveTo":"Move to","illegalMove":"That move is not allowed from this stage.","stage":{"received":"Received","diagnosed":"Diagnosed","quoted":"Quoted","approved":"Approved","in_repair":"In repair","qc":"QC","ready":"Ready","returned":"Returned","on_hold":"On hold","parts_pending":"Parts pending"},"intakeForm":{"title":"Check in a unit","clientSection":"Customer","findClient":"Find a customer","searchPlaceholder":"Search by name, phone or email…","noMatches":"No matches — create a new customer below.","newClient":"New customer","clientType":"Customer type","business":"Business","residential":"Residential","clientName":"Name / company","personName":"Contact name","personPhone":"Phone","personEmail":"Email","personAddress":"Address","createClient":"Create customer","clientCreated":"Customer created.","unitSection":"Unit","serial":"Serial number","scanSerial":"Scan or type the serial","findUnit":"Look up","existingUnit":"Matched an existing unit","newUnit":"New unit","sku":"Product / SKU","unitLabel":"Label (optional)","conditionSection":"Condition","unitTitle":"Short title","reportedProblem":"Reported problem","conditionNotes":"Condition notes","accessories":"Accessories received","addAccessory":"Add accessory","photos":"Photos","photosHint":"Paste photo URLs (one per line) — file upload arrives with the depot photo store.","channel":"Intake channel","walkIn":"Walk-in","shippedIn":"Shipped in","severity":"Priority","submit":"Check in unit","submitting":"Checking in…","created":"Unit checked in. Reference {ref}.","pickClientFirst":"Pick or create a customer first.","identifyUnit":"Identify the unit (existing or new serial + product)."},"quoteTab":{"tab":"Quote","title":"Repair quote","labor":"Labor","parts":"Parts","addLabor":"Add labor line","addPart":"Add part","description":"Description","hours":"Hours","rate":"Rate","sku":"SKU","partName":"Part","qty":"Qty","unitPrice":"Unit price","available":"In stock","lineTotal":"Total","subtotal":"Subtotal","total":"Total","currency":"Currency","notes":"Notes to customer","save":"Save quote","saved":"Quote saved.","send":"Send to customer","sent":"Quote sent — approval link emailed.","noEmail":"This customer has no email — record the decision manually.","empty":"No quote yet. Add labor and parts, then send it.","catalogSearch":"Search parts catalog…","recordDecision":"Record decision","approve":"Mark approved","decline":"Mark declined","decisionNote":"Note (optional)","approved":"Approved","declined":"Declined","decidedVia":"via {channel}","channelPublicLink":"customer link","channelStaff":"staff"},"qcTab":{"tab":"QC","title":"Quality check","result":"Result","pass":"Pass","fail":"Fail","item":"Check","itemPass":"OK","itemFail":"Issue","note":"Note","addItem":"Add check","notes":"QC notes","save":"Save QC result","saved":"QC recorded.","passMovesReady":"A pass moves the unit to Ready.","failMovesRepair":"A fail sends it back to In repair.","empty":"No QC run yet."},"pickupTab":{"tab":"Pickup","title":"Release to customer","notReady":"The unit must be in Ready before pickup.","idNote":"ID note","idNoteHint":"e.g. driver license last 4, or who collected it.","signedBy":"Signed by","signature":"Signature","complete":"Complete pickup","completing":"Releasing…","done":"Picked up — receipt recorded.","needSignature":"Capture a signature first.","invoiceStub":"Invoice handoff arrives with billing (Wave 5).","pickedUp":"Picked up {when}."},"publicApproval":{"heading":"Repair quote","intro":"Please review the estimate below and choose whether to proceed.","approve":"Approve repair","decline":"Decline","approving":"Submitting…","approved":"Thank you — your approval was recorded. We will begin the repair.","declined":"Understood — we have recorded your decision. We will contact you about returning the unit.","already":"This link has already been used or has expired. Please contact us if you need to change your response.","invalid":"This link is not valid.","notePlaceholder":"Anything you want us to know? (optional)","poweredBy":"Redsis — In-house repair"}},"map":{"popupNoSla":"no SLA","popupSlaMissed":"SLA missed","popupMinLeft":"{n} min left","popupHoursLeft":"{n} h left","popupEta":"ETA {at}","jumpToSp":"Jump to SP:","hasGpsTrail":"Has recorded GPS trail","fitAll":"Fit all","modeLive":"Live","modePlayback":"Playback","liveHint":"Auto-refreshing every 15s","pickTech":"Technician","pickTechNone":"No technicians","date":"Day","from":"From","to":"To","load":"Load","loading":"Loading…","play":"Play","pause":"Pause","speed":"Speed","follow":"Follow","heat":"Coverage heat","noCoverage":"No recorded location history for this technician in the selected window.","fixesLoaded":"GPS fixes loaded","ofN":"of","atTime":"At","reset":"Reset","errorLoad":"Could not load history. Check the day and time window.","windowTooWide":"The window must be 24 hours or less.","pickTechFirst":"Pick a technician first.","scrubber":"Playback position","loadMore":"Load earlier fixes","loadingMap":"Loading map…"},"resolutionKpis":{"resolvedOf":"{num} / {den} resolved","metOf":"{num} / {den} met","title":"Resolution KPIs","resolutionRate":"Resolution rate","mttr":"MTTR","mttrHint":"business hours, pause-aware","firstTimeFix":"First-time-fix","slaCompliance":"SLA compliance","reopenRate":"Reopen rate","partsWait":"Parts-wait","partsWaitHint":"mean parts_pending dwell","view7":"View 7 days","view30":"View 30 days","window7":"last 7 days","window30":"last 30 days","estimatedNote":"First-time-fix and MTTR are estimated from ticket events; precision improves once service reports are recorded per ticket.","techLeaderboard":"Tech leaderboard","clientHealth":"Client health","openAging":"Open-ticket aging","kpiTrend":"Service KPI trend","noOpen":"No open tickets — backlog is clear.","noCompleted":"No completed tickets in this window yet.","noClients":"No client activity in this window yet.","notEnoughHistory":"Not enough snapshot history yet — trend builds nightly.","pickerResolutionRate":"Resolution rate","pickerMttr":"MTTR (mean time to resolve)","pickerFirstTimeFix":"First-time-fix %","pickerSlaCompliance":"SLA compliance (overall)","pickerSlaComplianceArrival":"SLA compliance — arrival","pickerSlaComplianceResolution":"SLA compliance — resolution","pickerReopenRate":"Reopen rate","pickerPartsWait":"Parts-wait time","pickerOpenCount":"Open tickets","pickerResolvedCount":"Resolved (in window)","pickerReceivedCount":"Received (in window)","pickerAtRiskCount":"At-risk tickets","pickerWindowToday":"Today","pickerWindow7d":"Last 7 days","pickerWindow30d":"Last 30 days","pickerWindowCustom":"Custom"},"dispatch":{"railTitle":"Dispatch","eyebrow":"Dispatch","title":"Dispatch Builder","queueTitle":"Unassigned / At-risk","queueHint":"Drag a ticket onto a technician timeline to assign","queueEmpty":"No unassigned or at-risk tickets","noRoutes":"No active routes today","mapTitle":"Live Dispatch Map","providerGoogle":"Google (live traffic)","providerGoogleHint":"ETAs from Google Maps with real-time traffic","providerHeuristic":"Heuristic (estimated)","providerHeuristicHint":"ETAs estimated from distance + average speed","tabTimelines":"Timelines","tabCandidates":"Candidates","tabStop":"Stop detail","timelinesHint":"Drag stops to reorder. Drop a ticket here to assign.","emptyRoute":"No stops yet","dropHere":"Drop ticket here to assign","pickTicketForScores":"Select a ticket from the queue to see candidate scores","pickStopForDetail":"Click a stop to see details","scoreCandidates":"Score candidates","noCandidates":"No candidates found for this ticket","scoring":"Scoring…","candidatesFailed":"Failed to load candidates","openTicket":"Open ticket","assign":"Assign","assigning":"Assigning…","assignFailed":"Failed to assign technician","confirmAssign":"Confirm assignment","confirmAssignPrompt":"Assign {sp} to ticket \"{ticket}\"?","confirmOverride":"Override current assignment","overrideAssign":"Override","overrideReasonPlaceholder":"Reason for override (optional)","cancel":"Cancel","done":"Done","saving":"Saving…","reorderFailed":"Failed to reorder stops","dragHint":"Drag to reorder","ticketStop":"Ticket stop","partsPickup":"Parts pickup","partsPickupTitle":"Parts Pickup","insertPickup":"Insert parts pickup stop","partsAllOnVan":"All parts already on van","partsNoWarehouse":"No warehouse stocks the needed parts ({skus})","partsCheckFailed":"Failed to check parts","partsInsertFailed":"Failed to insert pickup stop","checkParts":"Check parts","checking":"Checking…","ineligible":"Not eligible","stops":"stops","detailEta":"ETA","detailKind":"Stop type","detailLate":"Late by","detailPlanned":"Planned arrival","detailStatus":"Status","minutes":"min","slaPast":"SLA past by {n} min","refreshEtas":"Refresh ETAs","refreshEtasHint":"Recalculate all ETAs from Google Maps (traffic-aware)","etaRefreshFailed":"Failed to refresh ETAs","etasRefreshed":"ETAs refreshed {ago}","etasNeverRefreshed":"ETAs not yet refreshed"},"suggest":{"loading":"Ranking techs…","intro":"Ranked from each tech’s live position, current workload, the SLA window, parts on their van and skills. Tap “Why” to see the math.","atRiskLabel":"Hard to staff in time.","atRiskBody":"No available tech can comfortably meet the arrival window — assign the strongest option now and consider escalating.","loadFailed":"Could not load suggestions","assignFailed":"Assign failed","none":"No candidate techs found for this ticket yet.","noneEligible":"No eligible techs — see the excluded list below for why.","assign":"Assign","assigned":"Assigned","why":"Why?","hide":"Hide","scoreTitle":"Match score out of 100","colFactor":"Factor","colScore":"Score","colWeight":"Weight","colPoints":"Points","total":"Total match score","notEligiblePrefix":"Not eligible","factorWorkload":"Workload","factorSla":"SLA fit","factorDistance":"Distance / ETA","factorParts":"Parts on van","factorSkills":"Skills","factorContinuity":"Continuity"},"ticketDispatch":{"noPermission":"You don’t have permission to assign this ticket.","pickPlaceholder":"Pick a technician…","ineligibleTag":"not eligible","overrideReasonRequired":"A reason is required to reassign this ticket or to assign an ineligible candidate.","overrideReasonPlaceholder":"Reason for overriding an ineligible candidate (required)","reassignReasonPlaceholder":"Why reassign? (saved to the case notes)","alreadyAssignedTo":"Already assigned to {name}","reassignTo":"Reassign to {name}","reassignAction":"Reassign","keepAssignee":"Keep","assigneeOffRoute":"{name} does not have this ticket on their route.","assignAgainAction":"Assign again","assignAgainTo":"Assign again to {name}","assignTo":"Assign {name}","assignToSelected":"Assign the selected SP","reassignToSelected":"Reassign to the selected SP","fallbackThisSp":"this SP","assigning":"Assigning…","current":"current","alreadyAssignedSummary":"Already assigned to {name}. Pick a different candidate below (or in the full list) to reassign.","recommendation":"Recommendation: {name} (score {score})","noEligibleCandidates":"No eligible candidates. Pick one below to override.","noCandidates":"No candidates available for this ticket.","tiedCandidates":"{count} candidates tied at {score} — the score does not tell them apart, you pick.","assignFailed":"Failed to assign","colSp":"SP","colScore":"Score","colDistance":"Distance","colSlaFit":"SLA fit","colParts":"Parts","colSkill":"Skill","colLoad":"Load","filtered":"Filtered","pickerTitle":"Technicians","pickerEligibleCountSingular":"{n} eligible","pickerEligibleCountPlural":"{n} eligible","pickerIneligibleCountSingular":"{n} not eligible","pickerIneligibleCountPlural":"{n} not eligible","searchPlaceholder":"Search technician…","showScores":"Show scores","hideScores":"Hide scores","showRemaining":"Show the {n} remaining","ineligibleGroup":"Not eligible ({n})","noMatch":"No technician matches","pickerShared":"For everyone: {line}","pickerSelected":"Selected: {name}","clearSearch":"Clear search","reason":{"minsAway":"{n} min away","missSla":"would miss the SLA","slaSlackHours":"{h}h SLA slack","slaSlackMinutes":"{n}m SLA slack","noPartsPredicted":"no specific parts predicted","partOnVan":"has {sku} on van","partNotOnVan":"part not on van — would need sourcing","extraSkillMatch":"extra skill match","carryingStops":"carrying {n} stops today","servicedSiteSingular":"has serviced this site {n} time before","servicedSitePlural":"has serviced this site {n} times before","spInactive":"SP is inactive","spUnavailable":"SP unavailable today","outsideWorkingHours":"Outside working hours","excludedForContract":"On exclusion list for this contract","notOnAllowList":"Not on allow-list for this contract","missingSkill":"Missing required skill: {skill}","regionNotCovered":"Doesn’t cover region {region}","gateFiltered":"Filtered by eligibility gate"}},"assign":{"title":"Assign tickets","description":"Pick a ticket, then assign the tech or service provider best able to handle it — one at a time.","queueHeading":"Unassigned queue","queueEmpty":"No unassigned tickets in your queue right now.","waitingCount":"{n} waiting","overdueCount":"{n} overdue","selectPrompt":"Select a ticket on the left to see who can handle it.","candidatesHeading":"Who can handle this ticket?","loadingCandidates":"Scoring candidates…","noCandidates":"No candidates available for this ticket.","scoreLabel":"Score {score}","bestMatch":"Best match","severityLabel":"Severity {sev}","slaIn":"SLA in {n} min","slaOverdue":"SLA overdue by {n} min","slaNoDeadline":"No SLA deadline","factorAvailability":"Availability","factorParts":"Parts","factorExpertise":"Expertise","factorDistance":"Distance","factorSla":"Time vs SLA","stAvailable":"Available","stUnavailable":"Unavailable","stOffShift":"Off shift","stInactive":"Inactive","stExcluded":"Excluded here","stPartsOnHand":"On van","stPartsSourcing":"Needs sourcing","stPartsNone":"None needed","stSkillStrong":"Strong match","stSkillMeets":"Meets skills","stSkillMissing":"Missing skill","stRegionNotCovered":"Region not covered","stDistanceAway":"~{n} min","stDistanceUnknown":"Unknown","stSlaComfortable":"Comfortable","stSlaTight":"Tight","stSlaMiss":"Would miss SLA","stNotScored":"Not scored","whyLabel":"Why","assignBtn":"Assign","assignAnywayBtn":"Assign anyway","assigning":"Assigning…","assignedToast":"Assigned to {name}.","assignFailed":"Could not assign: {error}","overrideReason":"Assigned despite: {warnings}"},"moduleNav":{"settings":"Settings","settingsTitle":"Module configuration (admin only)"},"ticketCommon":{"system":"System","justNow":"just now","minutesAgo":"{n}m ago","hoursAgo":"{n}h ago","daysAgo":"{n}d ago"},"ticketStatusControl":{"changeTitle":"Click to change status","moveTo":"Move to:","freezesSla":"Freezes the SLA clock","clockKeepsRunning":"The SLA clock keeps running","resumesSla":"Resumes the SLA clock","reasonPlaceholder":"Reason (optional)","reasonRequiredLabel":"Reason for this status change (required)","reasonRequiredPlaceholder":"Reason (required)","cancel":"cancel","failed":"Could not change the status.","noteRequired":"Write the reason here — it is saved as the note for this status change.","holdReasonLabel":"Reason for the hold","holdReasonPlaceholder":"Choose a reason…","holdDetailPlaceholder":"Details (optional)","holdDetailRequiredPlaceholder":"Write the reason (required)","holdConfirm":"Put on hold","holdReasonRequired":"Choose the reason for the hold from the list.","holdDetailRequired":"With «Other», write the reason.","holdReasonCurrent":"On hold because","holdReasons":{"client_request":"Pending at the client’s request","client_agreement":"Pending by agreement with the client","other":"Other"},"status":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"}},"ticketSeverityEdit":{"changeTitle":"Click to change severity","changeTo":"Change to:","reasonPlaceholder":"Reason (optional)","cancel":"cancel","failed":"Could not change the severity."},"serviceTypesAdmin":{"metaTitle":"Service types","eyebrow":"Service Hub","title":"Service types","description":"Add the service types people pick on tickets and decide how each one is billed.","listHeading":"Current types","listIntro":"These are the types on the tickets board. A type can be renamed while no ticket uses it.","empty":"There are no service types yet. Add the first one with the form.","billingLabel":"Billing","billingPerEvent":"Per event (like IMAC)","billingIguala":"Per contract","billingExtra":"Extra charge","billingNone":"No billing class: it cannot be picked on a ticket","addHeading":"Add a type","textLabel":"Type name","textPlaceholder":"e.g. Remote support","billingQuestion":"How is it billed?","billingPerEventHelp":"Each service is billed separately.","billingIgualaHelp":"Covered by the client’s monthly contract.","addButton":"Add type","adding":"Adding…","added":"«{text}» was added ({billing}). It can now be picked on tickets.","rename":"Rename","renameLabel":"New name for «{text}»","save":"Save","saving":"Saving…","cancel":"Cancel","renamed":"«{from}» was renamed to «{to}».","dismiss":"Close","renameInUse":"It cannot be renamed: some tickets store this type.","renameCodeWord":"It cannot be renamed: it is a base type and would lose its billing class.","noDelete":"To delete a type, ask a board administrator.","mfaTitle":"Turn on two-step verification","mfaBody":"To add or rename service types you need two-step verification active in this session.","mfaLink":"Set up two-step verification","columnUnavailable":"The service type catalog was not found. Ask an administrator to check the tickets board setup.","errors":{"external":"You do not have access to this page.","no_capability":"You do not have permission to manage service types. Ask your administrator.","mfa_not_enrolled":"Turn on two-step verification to continue.","mfa_not_verified":"Verify your second factor to continue.","invalid_input":"Check the details and try again.","invalid_text":"Type a name of up to 60 characters.","invalid_chars":"Use only letters from one alphabet, numbers and spaces (no invisible characters).","duplicate":"A type with that name already exists.","code_word_other_class":"That name is already reserved with another billing class. Use another name.","not_found":"That type no longer exists. Reload the page.","in_use":"It cannot be renamed: some tickets store this type.","code_word_rename":"It cannot be renamed: it is a base type and would lose its billing class.","reserved_word":"That name is reserved by the system. Use another name.","unconfigured":"The service type catalog was not found. Ask an administrator to set it up.","board_missing":"The service type catalog was not found. Ask an administrator to set it up.","no_column":"The service type catalog was not found. Ask an administrator to set it up.","write_failed":"It could not be saved. Try again.","unknown":"Something went wrong. Try again."}},"ticketServiceType":{"fieldLabel":"Service type","restingLabel":"Undetermined","changeTitle":"Click to change the service type","changeTo":"Change to:","reasonPlaceholder":"Reason (optional) — type it BEFORE picking","cancel":"cancel","failed":"Could not change the service type.","defaultSuffix":"(default)","pickDefaultHint":"Choosing the contract default clears the manual override.","labels":{"imac":"IMAC","porContrato":"POR CONTRATO","cargoExtra":"Cargo extra"},"provenance":{"override":"manual override","contractDefault":"by contract / default","undetermined":"not set — by contract / default"}},"boardCatalog":{"source":"From the board: {source}","unlinked":"this board value is not linked to the official model yet","more":"+{n} more","less":"Show fewer","empty":"Board “{source}” has no values in this catalog yet.","unconfigured":"Nobody configured this catalog’s board. The {key} setting is missing in Setup Center; until then the internal list is shown.","boardMissing":"Setting {key} points at “{value}” and that board does not exist.","restricted":"You do not have permission to read this catalog’s board.","noColumn":"The board has no column for this catalog (looked for: {names})."},"ticketEquipmentCatalog":{"fieldLabel":"Equipment type"},"ticketNotes":{"liveNewMessageFrom":"New message from {author}","liveNewMessage":"New message","composerPlaceholder":"Add a note… (internal by default)","internal":"Internal","customer":"Customer","channelAria":"Communication channel","portalNote":"Portal note","sentVia":"Sent via {channel}","add":"Post","adding":"Posting…","addFailed":"Failed to add note","mirrorNotPosted":"The note was saved, but it did not reach the board item’s updates.","empty":"No notes yet.","via":"via {channel}","visibility":{"internal":"internal","customer":"customer"}},"ticketParts":{"heading":"Parts","viewOnBoard":"View on Parts board","skuPlaceholder":"Product SKU","skuAria":"Product SKU","catalogAria":"Catalog part","catalogFreeText":"Other part (type it)","catalogSelectionStale":"That part is no longer in the catalog — pick it again or type the SKU","catalogRowUnnameable":"That catalog row has no part number and no name, so it cannot be requested","quantityAria":"Quantity","urgencyAria":"Urgency","urgency":{"now":"now","today":"today","tomorrow":"tomorrow"},"notesPlaceholder":"Notes (optional)","notesAria":"Notes","request":"Request part","requesting":"Requesting…","skuRequired":"Product SKU is required","requestFailed":"Failed to request part","needsAssignee":"Assign a service provider to request parts.","empty":"No parts requested.","status":{"open":"open","fulfilled":"fulfilled","cancelled":"cancelled","closed":"closed","sourcing":"sourcing","dispatched":"dispatched","unknown":"unknown"},"techHasPart":"Technician says they have it · {time}","received":{"cta":"Part received","confirmVisit":"The request will be fulfilled and a visit will be created for {tech}.","confirmStillWaiting":"The request will be fulfilled. No visit will be created: this ticket has another part pending.","confirmNotWaiting":"The part will be marked as received. The ticket keeps its status and no visit will be created, because it is not waiting for a part.","confirmDepot":"The part will be marked as received. No visit will be created, because this ticket is handled at the depot.","confirm":"Confirm","cancel":"Cancel","doneResumed":"Part received. Visit created for {tech}; the ticket moved to Dispatched.","doneStillWaiting":"Part received. This ticket has another part pending.","confirmHoldNotForParts":"The request will be fulfilled. No visit will be created because the last visit did not report «requires a part». If this hold was for the part, change the status.","confirmHoldReasonNotParts":"The request will be fulfilled. No visit will be created because this hold has a recorded reason other than the part. If it can be serviced now, change the status.","doneHoldNotForParts":"Part received. No visit was created because the last visit did not report «requires a part». If this hold was for the part, change the status.","doneHoldReasonNotParts":"Part received. No visit was created because this hold has a recorded reason other than the part. If it can be serviced now, change the status.","doneOnly":"Part received.","errNoAssignee":"Assign a technician before marking the part received.","errNotOpen":"This request is no longer open. Refresh the page.","errTicketClosed":"The ticket is closed or cancelled.","errNoVisit":"The visit could not be created. Check the technician's route.","errAssigneeChanged":"The assigned technician changed. Refresh the page and try again.","errGeneric":"Could not mark the part received. Try again."}},"ticketTimeline":{"tab":"Ticket history","countOne":"1 event","countMany":"{n} events","empty":"No activity recorded yet.","photosCaptured":"{n} photo(s) captured","arrival":{"verified":"Arrival verified","far":"Marked arrival {distance} from the site","noGps":"Arrival without location","noGpsReason":{"denied":"permission denied","timeout":"location timed out","unavailable":"location unavailable","inaccurate":"location too imprecise","paused":"location paused","no_consent":"location not shared"},"noSiteCoords":"The site has no location","meters":"{n} m","kilometers":"{n} km","source":{"tap":"by the tap's GPS","tracking":"by live tracking"},"review":"Review","reviewFlag":{"far":"far from the site","clock_suspect":"phone clock off","fast_arrival":"«Arrived» less than a minute after «En route»"},"travelMin":"Travel {n} min","onSiteMin":"On site {n} min","useAsSiteLocation":"Use this location as the site's","siteLocationAdopted":"Site location updated from this arrival.","siteLocationAdoptFailed":"Could not use this location (the site may have a manual location)."},"assignedTo":"Assigned to {name}","unknownSp":"technician no longer on file","porNotDelivered":"Not sent to the customer","noAccessReason":{"customer_absent":"Customer not available","no_access":"No access to site or equipment","unable_to_complete":"Could not complete"},"partsDeclinedVia":{"ticket_closed":"Cancelled because the ticket was closed","ticket_cancelled":"Cancelled because the ticket was cancelled"},"partsUnroutedReason":{"no_contract":"The parts request was not sent to anyone: the ticket has no contract.","no_coordinator":"The parts request was not sent to anyone: the contract has no coordinator.","no_explicit_grant":"The parts request was not sent to anyone: nobody has permission to approve it.","coordinator_check_failed":"The parts request was not sent to anyone: the coordinators could not be verified.","out_of_scope":"The parts request was not sent to anyone: the people who could approve it do not cover this project.","other":"The parts request was not sent to anyone: nobody could be notified."},"slaBirthReason":{"no_contract":"No contract: the account's default SLA was used","contract_without_terms":"The contract sets no deadlines for this ticket: the account's default SLA was used","contract_not_found":"The ticket's contract was not found: the account's default SLA was used","part_return":"Part returns carry no SLA","no_policy":"Neither the contract nor the default SLA sets deadlines: the ticket has none"},"slaBirthDefaultTier":"The account's default SLA was used","porFailureReason":{"storage_unconfigured":"Document storage is not configured","assemble_failed":"The ticket data could not be assembled","pdf_render_failed":"The PDF could not be rendered","storage_failed":"The PDF could not be saved","version_conflict":"Version conflict while saving","ticket_not_found":"Ticket not found","guard_declined":"Generation was declined","exception":"Unexpected error","generate_failed":"Generation failed","other":"Generation failed"},"event":{"created":"Ticket created","assigned":"Assigned","reassigned":"Reassigned","status_changed":"Status changed","severity_changed":"Severity changed","cancelled":"Cancelled","help_requested":"Help requested","sp.en_route":"Technician en route","sp.arrived":"Technician on site","sp.completed":"Work completed","added_to_route":"Added to route","removed_from_route":"Removed from route","stop_added":"Stop added","stop_removed":"Stop removed","reordered":"Route reordered","published":"Route published","auto_published":"Route auto-published","unpublished":"Route unpublished","parts_requested":"Parts requested","parts_declined":"Parts request declined","parts_dispatched":"Part dispatched","parts_fulfilled":"Part received","parts_tech_has_part":"Technician reports having the part","parts_pickup_added":"Parts pickup added","depot_intake":"Depot intake","depot_bench_assigned":"Assigned to bench","depot_quote_saved":"Quote saved","depot_quote_sent":"Quote sent","depot_quote_decision":"Quote decision","depot_qc_recorded":"QC recorded","depot_stage_changed":"Depot stage changed","note_added":"Note added","field_service.customer_notified":"Customer notified","tech.signature_added":"Signature captured","tech.photo_added":"Photo added","tech.quote_saved":"Quote saved","tech.quote_sent":"Quote sent to the customer","tech.quote_revised":"Quote reopened for revision","tech.customer_signoff_added":"Customer sign-off captured","csat.requested":"Survey sent","csat.submitted":"Survey answered","board.projection_repaired":"Board status repaired","sla.excluded":"Excluded from SLA","sla.reincluded":"SLA measurement restored","sla.response_met":"Response SLA met","sla_pause_closed_by_contract":"SLA pause closed by a contract change","ticket_sla_applied":"SLA applied","ticket_sla_not_applied":"No SLA applied","intake.sn_terminal_override":"Ticket created over a closed ServiceNow incident","sn.state_diverged":"ServiceNow state differs from the ticket","sn.reassigned_out":"ServiceNow moved the incident to another group","reassign.acceptance_reset":"Acceptance reset: the new technician must accept","tech.late_update_on_closed":"Late technician update on a closed ticket","por.generation_failed":"Proof of Repair could not be generated","parts_approved":"Parts request approved","parts_acknowledged":"Parts request seen by coordination","por.generated":"Proof of Repair generated","por.delivered":"Proof of Repair delivery","client_receipt_confirmed":"Client confirmed receipt","client_reply":"Client replied","created_draft":"Draft ticket created","depot_billing_handoff":"Billing record from depot","escalated":"Escalated","install_base.updated":"Installed base updated","part_return_closed":"Part return closed","part_return_handed_in":"Part handed in for return","rescheduled":"Rescheduled","service_report.draft_saved":"Service report draft saved","service_report.recorded":"Service report recorded","sp.declined":"Technician declined the ticket","sp.diagnosis":"Diagnosis recorded","sp.fault_coded":"Fault code recorded","sp.inspection_item":"Inspection item recorded","sp.meter_reading":"Meter reading recorded","sp.no_access":"Visit not completed","sp.ppe_acknowledged":"Protective equipment confirmed","sp.started_work":"Technician started work","tech.coverage_applied":"Job coverage applied","tech.coverage_cleared":"Job coverage removed","tech.deficiency_logged":"Deficiency logged","tech.deficiency_status":"Deficiency status updated","tech.quote_decided":"Quote decision recorded","tech.video_added":"Video added","unassigned":"Technician unassigned","vendor_accepted":"Vendor accepted","vendor_arrival_captured":"Vendor arrival recorded","warranty_decided":"Warranty decision recorded","warranty_requested":"Warranty request created","warranty_approved":"Warranty request approved","warranty_denied":"Warranty request denied","warranty_cancelled":"Warranty request cancelled","warranty_replacement_dispatched":"Replacement part shipped","warranty_defective_handoff":"Defective part handed to the carrier","warranty_defective_received":"Defective part received back","warranty_closed":"Warranty closed automatically","warranty_marked_billable":"Warranty exchange marked as billable","parts_request_unrouted":"Parts request had no one to notify","sp.accepted":"Accepted","sp.acknowledged":"Acknowledged","sp.serial_installed":"Serial recorded","billing_class_changed":"Billing class changed","review.approved":"Closure approved by coordinator","review.rejected":"Sent back to technician","resolution.reopened":"Ticket reopened"},"source":{"coordinator":"coordinator","contract_config":"contract configuration","system":"system","board_bridge":"board bridge","tech_app":"technician app","sp_app":"technician app","mobile_api":"mobile app","client_portal":"client portal","kiosk":"kiosk","pm_schedule":"preventive maintenance","autopilot":"autopilot","service_center":"service center","depot_intake":"depot intake","depot_bench":"depot bench","depot_quote":"depot quote","depot_qc":"depot QC","depot_pickup":"depot pickup","customer_link":"customer link","csat_public":"satisfaction survey","web":"web","sla_birth":"SLA engine"}},"cancelTicket":{"reasonPlaceholder":"Cancellation reason (required)","reasonRequired":"A reason is required to cancel.","failed":"Failed to cancel","action":"Cancel ticket","confirm":"Click to confirm cancel","reasonCodeLabel":"Cancellation reason","reasonCodePlaceholder":"Choose a reason…","detailOptionalPlaceholder":"Detail (optional)","reasonTooLong":"The reason is too long (max. 500 characters including the preset reason).","reasons":{"reassigned_other_provider":"Another provider has it now (reassigned in ServiceNow)","duplicate":"Duplicate ticket","client_cancelled":"The client cancelled the request","resolved_without_visit":"Resolved without a visit","created_by_mistake":"Created by mistake","other":"Other reason (type it)"}},"reassignedOut":{"banner":"On {date}, ServiceNow moved this incident to the group {group}. If it is no longer Redsis's, cancel it with the reason «Another provider has it now».","bannerNoDate":"ServiceNow moved this incident to the group {group}. If it is no longer Redsis's, cancel it with the reason «Another provider has it now».","notificationTitle":"ServiceNow moved the incident to another group","notificationBody":"Ticket FS-{ticket} ({inc}) is now with the group {group}. If it is no longer Redsis's, cancel it with the reason «Another provider has it now»."},"ticketReopen":{"button":"Reopen","reasonLabel":"Reason (required)","reasonPlaceholder":"Why is this ticket being reopened?","confirm":"Reopen ticket","cancel":"Cancel","reopening":"Reopening…","hint":"It goes back to Accepted (or New if no technician). SLA is measured again against the original deadline, so an overdue ticket may alert right away.","errors":{"reasonRequired":"Write a reason to reopen.","reasonTooLong":"Keep the reason under {max} characters.","notReopenable":"Only closed, cancelled or completed tickets can be reopened.","statusChanged":"The ticket changed while you were working — reload and try again.","notFound":"Ticket not found.","failed":"Could not reopen the ticket."}},"coordinatorReview":{"title":"Coordinator review","body":"The technician marked this ticket as completed. Approve to close it for good, or reject it with a reason to send it back to the technician.","approve":"Approve closure","approveConfirm":"Click to confirm approval","notePlaceholder":"Closing note (optional)","reject":"Reject","rejectConfirm":"Click to confirm rejection","reasonPlaceholder":"Reason for rejection (required, min. 5 characters)","reasonRequired":"A reason is required to reject.","reasonTooShort":"Write at least 5 characters.","reasonTooLong":"The reason is too long (max. 500 characters).","notPending":"This ticket is no longer pending review — reload the page.","disabled":"Coordinator review is turned off.","blocked":"Cannot approve yet — reverse logistics still has open part movements.","porRequired":"A signed Proof of Repair is required to approve.","partsRequired":"This ticket requires a part: it stays on hold until the part arrives. It cannot be approved; you can return it to the technician.","approved":"Closure approved — the ticket is closed.","rejected":"Sent back to the technician.","refreshing":"Updating the ticket status…","failed":"Could not complete the review."},"twoStep":{"confirmAgain":"Click again to confirm","working":"Working…"},"widgetPanel":{"close":"Close panel","closeNamed":"Close {title}"},"adminSettings":{"shell":{"eyebrow":"System / Operations / Field Service","title":"Field Service — Settings","description":"Admin configuration for the Field Service module: contracts, providers, assets, regions, rules, and integrations.","openModule":"Open module →","nav":{"overview":"Overview","contracts":"Contracts","clients":"Clients","serviceProviders":"Service Providers","assets":"Assets","regions":"Regions","rules":"Rules & weights","integrations":"Integrations","importData":"Import","audit":"Audit log"}},"contractsList":{"title":"Contracts","empty":"No contracts yet. Use the buttons above to create or clone a contract.","colContract":"Contract","colClient":"Client","colStatus":"Status","colEffective":"Effective","colVersion":"Version","colTerms":"Terms","colMondayBoard":"Monday board","notWired":"not wired"},"contractEditor":{"failed":"Something went wrong. Try again.","saving":"Saving…","save":"Save","clear":"Clear","addTitle":"Add a term","step1":"1. What does this term apply to?","step2":"2. What kind of term?","step3":"3. Term details","scopeOption":{"client":"Whole contract (client default)","site":"Specific site","product":"Specific product","product_at_site":"Product at a specific site","asset":"Specific asset","severity":"Specific severity"},"behaviorReplace":"Replaces less-specific terms","behaviorMerge":"Merges with other scopes","productSku":"Product SKU","asset":"Asset","noAssets":"(no assets created)","site":"Site","noSites":"(no sites)","zone":"Zone","zonePlaceholder":"primary / extended / excluded","saveTerm":"Save term","termAdded":"✓ Term added.","noChanges":"There were no changes.","err":{"pickSite":"Pick a site.","enterSku":"Enter a product SKU.","siteAndSku":"Both the site and the SKU are required.","pickAsset":"Pick an asset.","slaRow":"Fill at least one severity row.","timezone":"The time zone is required.","pickSp":"Pick at least one SP.","pickSkill":"Pick at least one skill.","zone":"The zone is required.","reason":"A reason is required."},"sla":{"help":"Minutes from when the ticket is received. Leave blank for «no deadline» (scheduled).","sev":"Sev","response":"Response","arrival":"Arrival","resolution":"Resolution"},"hours":{"timezone":"Time zone","help":"Opening and closing time per day. Leave blank to mean «closed that day».","days":{"mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat","sun":"Sun"}},"sps":{"help":"Select the SPs this term applies to.","empty":"No SPs in the roster yet."},"skills":{"help":"Required skills add up across scopes: more specific scopes ADD requirements, never remove them.","empty":"No skills in the roster yet.","other":"Other (comma-separated)"},"access":{"notice":"Advance notice (hours)","escort":"After-hours escort required","ppe":"PPE required (comma-separated)","checkin":"Check-in instructions","checkinPlaceholder":"Report to dock 4, ask for Maria."},"parts":{"pool":"Preferred pool","standard":"Standard","premium":"Premium","loaner":"Loaner equipment available","threshold":"Loaner threshold (hours)"},"stopClock":{"help":"Does the SLA clock pause in this contract? It applies to the whole contract.","question":"Does the clock pause in this contract?","yes":"Yes, follow the general rule (on hold pauses the clock)","no":"No, the clock never stops"},"clockPauseConfirm":{"title":"These tickets have the clock paused","lead":"With «the clock never stops», these pauses close now: the time already paused is kept and the clock runs again from now.","liveTitle":"This contract is live: {n} open tickets","liveLead":"The tickets that already exist keep their due date; the change applies to new ones.","colNumber":"Ticket","colTitle":"Title","colStatus":"Status","colSince":"Paused since","notPaused":"—","more":"…and {n} more","reasonLabel":"Why are you making this change? (required)","reasonHint":"3 to 500 characters. It is saved with the change and in each affected ticket's history.","confirmCloseOne":"Close 1 pause and save","confirmCloseOther":"Close {n} pauses and save","confirmLive":"Change the SLA of {contract} ({n} open tickets)","cancel":"Cancel","errReasonRequired":"Write the reason (3 to 500 characters).","errListChanged":"The list changed while you were confirming. Review it again and confirm.","closedOne":"1 pause closed. The clock runs again on that ticket.","closedOther":"{n} pauses closed. The clock runs again on those tickets.","dismiss":"Close"},"tier":{"title":"Assign SLA tier","help":"A tier sets the default response, arrival and resolution targets per severity for new tickets. An explicit «SLA» term on the contract always overrides the tier.","current":"Current tier:","select":"Select tier","none":"(No tier — use the system defaults or explicit terms)","assigned":"✓ Tier assigned.","cleared":"✓ Tier cleared.","noTiers":"No tiers defined yet.","createOne":"Create one in the SLA tier catalog."},"monday":{"title":"Wire Monday board","help":"One Monday board per contract: Field Service mirrors that board’s tickets here. For now this only saves the board; the sync turns on in a later phase.","boardId":"Monday board ID","placeholder":"e.g. 1234567890","wired":"✓ Monday board wired.","cleared":"✓ Monday board cleared."},"del":{"pick":"Click a term card in the middle panel to select it for deletion.","title":"Delete term","body":"You are deleting the «{type}» term that applies to {scope}. A snapshot is saved in the contract history; you can undo it by adding the term again.","reason":"Reason for deletion","confirm":"Click again to delete"}},"contractDetail":{"allContracts":"← All contracts","slaTier":"SLA tier: {name}","signedPdf":"Signed PDF (Redix) ↗","scopeTree":"Scope tree","termCount":{"one":"{n} term","other":"{n} terms"},"appliesTo":"Applies to: {scope}","noTerms":"No terms yet. Use «+ Add term» to start defining rules.","status":{"draft":"draft","active":"active","expired":"expired","superseded":"superseded"},"scope":{"client":"Client default","site":"Site","product":"Product","product_at_site":"Product @ site","asset":"Asset","severity":"Severity","compound":"Compound"},"termType":{"sla":"SLA","business_hours":"Business hours","holiday_calendar":"Holiday calendar","blackout_dates":"Blackout dates","stop_clock_conditions":"Stop-the-clock","eligible_sps":"Eligible SPs","excluded_sps":"Excluded SPs","required_skills":"Required skills","access_rules":"Access rules","parts_policy":"Parts policy","preemption_policy":"Pre-emption","pricing_rules":"Pricing rules","penalty_clauses":"Penalty clauses","coverage_zone":"Coverage zone","escalation_chain":"Escalation chain","notification_rules":"Notifications","hours_purpose":"Hours purpose"},"summary":{"arrival":"Arrival: {parts}","scheduled":"{sev}: scheduled","sevDuration":"{sev}: {t}","minutes":"{n} min","hours":"{n} h","days":"{n} d","tzUnknown":"time zone not set","weekdays":"Mon-Fri","businessHours":"{tz} · {days} {hours}","eligibleSps":{"one":"{mode} list of {n} SP","other":"{mode} list of {n} SPs"},"modeAllow":"Allow","modeDeny":"Deny","excludedSps":{"one":"Excludes {n} SP","other":"Excludes {n} SPs"},"none":"(none)","pool":"Pool: {pool}","poolStandard":"standard","loaner":"loaner","notice":"{n}h notice","escort":"escort after-hours","ppe":"PPE: {items}","noRequirements":"(no requirements)","hoursPurpose":{"purpose":{"informativo":"Informational","cumplimiento_contrato":"Contract compliance","nomina_registro":"Working-hours record"},"period":{"week":"week","month":"month","quarter":"quarter"},"compliance":"{hours} h per {period} · arrival {start}–{end}"}},"scopeSummary":{"client":"every ticket on this contract","site":"site = {id}","product":"product = {sku}","productAtSite":"{sku} @ site {id}","asset":"asset = {id}","severity":"severity = {severity}","compound":{"one":"compound ({n} clause)","other":"compound ({n} clauses)"}},"triggers":{"addTerm":"+ Add term","addTermTab":"Add term","assignTier":"Assign SLA tier","wireMonday":"Wire Monday board","deleteTerm":"Delete term"}},"sps":{"title":"Service Providers","addSp":"+ Add SP","closeForm":"Close form","empty":"No service providers yet. Use «+ Add SP» above to create one.","colSp":"SP","colContact":"Contact","colShift":"Shift","colSkills":"Skills","colRegions":"Regions","colLoadout":"Loadout","colStatus":"Status","colActions":"Actions","loadoutParts":"{n} parts","active":"Active","inactive":"Inactive","pendingInvite":"Pending invite","gpsLive":"GPS live","edit":"Edit","editing":"Editing…","delete":"Delete","deleteNamed":"Delete {name}","deleting":"Deleting…","cancel":"Cancel","reasonPlaceholder":"Reason (required)","deleteFailed":"Delete failed"}},"partsQueue":{"title":"Parts Requests","noPending":"No pending requests","noneAwaiting":"No requests awaiting a decision","awaitingOne":"1 request awaiting decision","awaitingMany":"{n} requests awaiting decision","urgency":{"now":"Now","today":"Today","tomorrow":"Tomorrow"},"status":{"open":"Open","sourcing":"Sourcing","dispatched":"Dispatched"},"sectionNow":"Urgent — Now ({n})","sectionToday":"Today ({n})","sectionTomorrow":"Tomorrow ({n})","unknownSp":"Unknown SP","requestedByFor":"Requested by {name} for {tech}","approve":"Approve","decline":"Decline","approvedRouting":"Approved: pending dispatch or delivery","declined":"Declined","selectPath":"Select fulfillment path","paths":{"warehouse":"Warehouse","warehouseHint":"Pull from parts warehouse stock","other_sp":"Another provider","other_spHint":"Transfer from a nearby service provider","client_stock":"Client Stock","client_stockHint":"Client has this part on-site","vendor_po":"Vendor PO","vendor_poHint":"Purchase order from supplier (longer lead time)"},"notesLabel":"Notes (optional)","notesPlaceholder":"Routing instructions, supplier contact, ETA…","approving":"Approving…","confirmApprove":"Confirm Approval","cancel":"Cancel","declineReason":"Decline reason","declinePlaceholder":"Part not available, wrong SKU, ticket already resolved…","declining":"Declining…","confirmDecline":"Confirm Decline","reasonRequired":"A decline reason is required","approveFailed":"Approval failed","declineFailed":"Decline failed","dispatchFailed":"Could not dispatch. Try again.","fulfillFailed":"Could not fulfill the request. Try again.","requestNotAlive":"This request was already closed or cancelled.","requestNoLongerOpen":"This request is no longer open.","dispatch":"Dispatch","dispatching":"Dispatching…","fulfill":"Fulfill","emptyTitle":"No pending parts requests","emptyBody":"Open, in-sourcing and dispatched requests will appear here."},"rulesAdmin":{"title":"Rules & weights","description":"The DB-tunable knobs the dispatch engine reads live — no redeploy. Adjust the scorer weights and the problem-type → likely-part mappings and the change takes effect on the next dispatch.","weightsTitle":"Scorer weights","weightsHelp":"Relative weights the dispatch scorer applies to each factor when ranking technicians. Higher = more influence. Leave a row at its default to keep the built-in value.","mappingsTitle":"Problem → likely parts","mappingsHelp":"Maps a reported problem type (optionally for a specific product SKU) to the parts a technician most likely needs, so the parts-fit score and parts-pickup suggestions are accurate.","mappingsEmpty":"No mappings yet","weight":{"distance_fit":"Distance fit","sla_fit":"SLA fit","parts_fit":"Parts fit","skill_match":"Skill match","current_load":"Current load","continuity_bonus":"Continuity bonus"},"totalWeight":"Total","saveWeights":"Save weights","resetDefaults":"Reset to defaults","save":"Save","saving":"Saving…","saved":"Saved","saveFailed":"Failed to save","noChanges":"No changes to save","addMapping":"Add mapping","edit":"Edit","delete":"Delete","cancel":"Cancel","confirmDelete":"Delete this mapping?","deleteFailed":"Failed to delete","fieldProblemType":"Problem type","fieldProductSku":"Product SKU","fieldLikelyParts":"Likely parts","fieldServiceDuration":"Service minutes","fieldNotes":"Notes","minutes":"min","problemTypePlaceholder":"e.g. compressor_failure","productSkuPlaceholder":"Any SKU (optional)","likelyPartsPlaceholder":"Comma-separated part SKUs"},"calendar":{"title":"Calendar","eyebrow":"Services","description":"Scheduled service visits by committed arrival date","countThisMonth":"{count} this month","noVisits":"No scheduled visits","scheduled":"{count} scheduled","today":"Today","prevMonth":"Previous month","nextMonth":"Next month","legendClick":"· click a visit to open its ticket"},"dashboard":{"title":"Field Service","ticketsHeading":"Tickets","colStatus":"Status","colTitle":"Title","colSite":"Site","colReceived":"Received","colArrivalSla":"Arrival SLA","statOpenTickets":"Open tickets","statAtRisk":"At risk (≤1h)","statActiveSps":"Active SPs","statSpsSharingGps":"SPs sharing GPS","statRoutesToday":"Routes today","statOpenPartsRequests":"Open parts requests","statActiveContracts":"Active contracts"},"processHome":{"title":"How service works","supportingTools":"Supporting tools","supportingToolsBlurb":"Knowledge, settings and the mobile app — useful at every step.","refHeading":"Reference — how the Service Hub works","refModulesTitle":"Modules — what each one is","refWorkspacesTitle":"Service workspaces & boards","refSyncTitle":"ServiceNow Sync — what it stores","statusOn":"on","statusOff":"off","installed":"installed","notInstalled":"not installed","unknown":"unknown","provisioned":"provisioned","boardSystemTitle":"Service Boards — the main way in","snConnected":"connected","snNone":"no ServiceNow accounts connected yet","snLastSync":"last sync","snNever":"never","eyebrow":"Service Hub","descriptionUser":"Follow a ticket from the moment it arrives until it closes: each numbered step takes you to the tool that does it.","description":"Follow a ticket from the moment it arrives until it closes: each numbered step takes you to the tool that does it. Below you have the reference: every module, the service workspaces and boards, and the ServiceNow sync, each with its current status.","boardSystemBody":"— service work now happens on the boards: open them from Service Hub → Tickets. This screen stays as a backup.","stages":{"intake":{"title":"Intake","blurb":"A request becomes a ticket: a client opens one, it comes in from ServiceNow, or a coordinator creates one from the Inbox."},"queue":{"title":"Queue & Triage","blurb":"Every ticket lands with a coordinator, gets a priority and an SLA clock, and moves to the next person in charge if nobody picks it up in time."},"dispatch":{"title":"Dispatch","blurb":"Assign the right tech and plan the route and the day, in one map-centred workspace (Plan / Live / History)."},"field":{"title":"Field Work","blurb":"The tech works the job on site from the mobile app."},"depot":{"title":"Depot Repair","blurb":"Gear that comes in is diagnosed and repaired on the bench."},"parts":{"title":"Parts","blurb":"Order what the job needs, restock the van, and account for every replaced part."},"resolution":{"title":"Resolution & SLA","blurb":"Close the ticket, prove the SLA was met, and score the work."},"close":{"title":"Close & Deliver","blurb":"The client sees the result; synced systems stay in step."}},"links":{"openTicketPortal":"Open a Ticket (client portal)","intakeReview":"Inbox — review & promote to ticket","newTicketDesk":"New Ticket — Service Desk","coordinatorInbox":"Coordinator Inbox","serviceDesk":"Service Desk","boardSlaQueue":"Board SLA Policies (queue)","helpdesk":"Helpdesk","routeBuilder":"Route Builder","calendar":"Calendar","techMobileApp":"Tech Mobile App","providers":"Providers","techRequests":"Tech Requests","depotRepairs":"Depot Repairs","diagnostics":"Diagnostics","repairStation":"Repair Station (kiosk)","partsRequests":"Parts Requests","partReturns":"Part Returns","inventoryReceive":"Inventory · Receive & load a van","operationalDashboard":"Operations dashboard","slaCockpit":"SLA Cockpit","boardSla":"Board SLA Policies","techScorecard":"Tech Scorecard","overview":"Overview dashboard","portalMyTickets":"Client Portal — My Tickets","serviceNowSync":"ServiceNow sync","clientProjectSetup":"Client Project Setup","pmSchedules":"PM Schedules","serviceVideos":"Service Videos","serviceManuals":"Service Manuals","mobileControlPlane":"Mobile App (control plane)","fsSettings":"Field Service Settings"},"audienceClient":"Client-facing","audienceTech":"Tech-facing","flagOff":"flag off","refModulesHint":"The {n} Service Hub menu modules, grouped by section, with their current status (on or off).","refWorkspacesHint":"The two Field Service board apps, with whether each one is installed.","refSyncHint":"The {n} groups of data the ServiceNow sync stores, with their fields.","kindPermanent":"Permanent · shared","kindPerContract":"Per-contract","boardCount":"{n} boards","columnCount":"{n} cols"},"coverage":{"columnTitle":"Coverage","coveredOne":"covered","coveredMany":"covered","closedBadge":"closed","closedOne":"closed","closedMany":"closed","regionOne":"region","regionMany":"regions","noRegions":"no regions set","regionPrefix":"Region:","editButton":"Edit coverage","branchCodePlaceholder":"Branch code (e.g. 0142)","regionPlaceholder":"Service region","statusActive":"Covered (active)","statusClosed":"Closed (leaves universe)","notePlaceholder":"Note for the change journal","saveButton":"Save coverage","saving":"Saving…","updateFailed":"Update failed"},"pmSchedule":{"title":"Preventive Maintenance Schedules","description":"Recurring, contract/asset/site-driven schedules that auto-generate service tickets on a cadence — so planned maintenance never depends on manual re-entry.","newSchedule":"+ New schedule","emptyState":"No PM schedules defined yet. Create one to get started.","disabledNotice":"Preventive Maintenance is not enabled yet. Ask an admin to turn it on in Feature Flags.","statusActive":"Active","statusInactive":"Inactive","nextDueLabel":"Next due","lastGeneratedLabel":"Last generated","neverGenerated":"Never generated yet","cadenceEvery":"Every","cadenceUnit":{"day":"day(s)","week":"week(s)","month":"month(s)"},"fields":{"name":"Schedule name","namePlaceholder":"e.g. Quarterly HVAC filter change","client":"Client (Redix ID)","clientPlaceholder":"Client identifier","site":"Site (optional)","sitePlaceholder":"Site ID — leave blank for all sites","asset":"Asset (optional)","assetPlaceholder":"Asset ID — leave blank for all assets","contract":"Contract (optional)","contractPlaceholder":"Contract ID — inherits its SLA","cadenceUnit":"Repeats every","cadenceInterval":"Interval","anchorDate":"First occurrence due","windowDays":"Generate this many days before due","severity":"Severity","ticketTitleTemplate":"Ticket title (optional)","ticketTitleTemplatePlaceholder":"Default: \"Preventive Maintenance: <name> (<date>)\"","ticketDescription":"Ticket description (optional)","ticketProblemType":"Problem type","checklist":"Checklist (optional)","checklistPlaceholder":"One item per line"},"actions":{"create":"Create schedule","creating":"Creating…","save":"Save changes","saving":"Saving…","deactivate":"Deactivate","reactivate":"Reactivate","cancel":"Cancel","edit":"Edit"},"messages":{"createFailed":"Failed to create schedule","saveFailed":"Failed to save"}},"warranty":{"title":"Warranty","description":"Warranty claims against serviced serials — each opens a service ticket that runs through dispatch, SLA and proof-of-repair.","newClaim":"New warranty claim","cancel":"Cancel","emptyState":"No warranty claims yet.","portalIntro":"File a warranty claim against a piece of your serviced equipment. We open a service ticket and take it from there.","noAssets":"You have no serviced equipment on file to open a warranty claim against.","selectAsset":"Serviced serial","assetPlaceholder":"Choose a serial…","severity":"Severity","eligibilityChecking":"Checking warranty…","inWarranty":"In warranty","expired":"Out of warranty","unknown":"Warranty unknown","warrantyUntil":"Covered until","reportedProblem":"Reported problem","reportedProblemPlaceholder":"Describe the fault the customer reported…","overrideReason":"Override reason","overrideReasonHint":"This serial is out of warranty — say why you are filing a claim anyway.","submit":"Open warranty claim","submitting":"Opening…","assetRequired":"Select a serviced serial.","problemRequired":"Describe the problem.","overrideRequired":"Give an override reason to file an out-of-warranty claim.","colSerial":"Serial / Product","colTicket":"Service ticket","colClient":"Client","colCoverage":"Coverage","colStatus":"Claim","colOpened":"Opened","colActions":"Actions","open":"Open","approved":"Approved","rejected":"Rejected","cancelled":"Cancelled","openedVia_staff":"Staff","openedVia_portal":"Client portal","approve":"Approve","reject":"Reject","cancelClaim":"Cancel","decideReasonPlaceholder":"Reason (optional)"},"myProjects":{"trigger":"My projects ({n})","title":"My projects","intro":"The projects you coordinate. Open one to manage its technicians, regions and imports.","configure":"Configure project","opening":"Opening…","mfa":"Turn on two-step verification to configure it"}},"fileManager":{"title":"Files","myFiles":"My Files","workspaces":"Workspaces","home":"Home","searchPlaceholder":"Search this folder…","newFolder":"New Folder","upload":"Upload","folderNamePlaceholder":"Folder name","create":"Create","cancel":"Cancel","save":"Save","loading":"Loading…","empty":"This folder is empty","emptyHint":"Drag files here or use the Upload button to get started.","emptyReadOnly":"No files here yet.","noResults":"No files match your search.","dropHint":"Drop files to upload","viewGrid":"Grid view","viewList":"List view","actions":"Actions","download":"Download","rename":"Rename","move":"Move","moveHere":"Move here","moving":"Moving “{name}” — open a destination folder, then click Move here.","share":"Share link","linkCopied":"Link copied to clipboard","delete":"Delete","confirmDelete":"Delete?","confirmYes":"Delete","confirmNo":"Cancel","uploading":"Uploading","uploadFailed":"Upload failed","items":"items","item":"item","folder":"Folder","errorGeneric":"Something went wrong. Please try again."},"webhooks":{"title":"Webhooks","description":"Send platform events to any URL. No code, no env vars — configure outgoing webhooks visually, sign every payload, and watch deliveries in real time.","newWebhook":"New webhook","editWebhook":"Edit webhook","emptyTitle":"No webhooks yet","emptyDesc":"Create your first webhook to start delivering events to an external URL.","colName":"Name","colUrl":"URL","colEvents":"Events","colLastTriggered":"Last triggered","colStatus":"Status","active":"Active","inactive":"Inactive","never":"Never","eventsCount":"{count} events","nameLabel":"Name","namePlaceholder":"e.g. Ops Slack relay","urlLabel":"Payload URL","urlPlaceholder":"https://example.com/webhooks/redsis","eventsLabel":"Events","eventsHelp":"Pick which events POST to this URL.","headersLabel":"Custom headers","headersHelp":"Sent with every delivery (e.g. an authorization token).","headerKey":"Header","headerValue":"Value","addHeader":"Add header","removeHeader":"Remove","secretLabel":"Signing secret","secretHelp":"Each payload is signed with HMAC-SHA256 in the X-Webhook-Signature header. Verify it on your endpoint.","secretSet":"A signing secret is set.","regenerate":"Regenerate","secretShownOnce":"Copy this secret now — it will not be shown again.","copy":"Copy","copied":"Copied","activeLabel":"Active","activeHelp":"Inactive webhooks receive no deliveries.","save":"Save","saving":"Saving…","create":"Create webhook","creating":"Creating…","cancel":"Cancel","test":"Send test","testing":"Sending…","testOk":"Test delivered — HTTP {status} in {ms} ms","testFail":"Test failed — {detail}","testResponse":"Response","deliveriesTitle":"Recent deliveries","deliveriesHelp":"Last 50 attempts.","refresh":"Refresh","noDeliveries":"No deliveries yet.","dEvent":"Event","dStatus":"Status","dDuration":"Duration","dAttempts":"Attempts","dResponse":"Response","dTime":"Time","dSucceeded":"Delivered","dFailed":"Failed","viewDeliveries":"Delivery log","delete":"Delete","deleteConfirm":"Delete this webhook? Its delivery history is removed too.","deleting":"Deleting…","loadError":"Could not load webhooks.","saveError":"Could not save the webhook.","required":"Name, URL and at least one event are required."},"featureFlags":{"title":"Feature Flags","subtitle":"Toggle platform features on or off without a redeploy. Scope a feature to specific role tiers, or leave it open to everyone.","ownerNote":"Flags never apply to the Owner — every feature and module is always on for Owner accounts. Toggles here control what everyone else sees.","colKey":"Key","colDescription":"Description","colStatus":"Status","colEnabledFor":"Enabled For","colLastChanged":"Last Changed","everyone":"Everyone","enabled":"Enabled","disabled":"Disabled","editRoles":"Edit","save":"Save","cancel":"Cancel","roleAdmin":"Admin","roleEditor":"Editor","roleViewer":"Viewer","rolesHint":"Visible to (none selected = everyone):","empty":"No feature flags are defined yet.","never":"Never","saveError":"Could not save the change. Try again.","platformTitle":"Platform & engine flags","platformSubtitle":"Every flag that is not a module master switch — engine, cron, and surface gates plus legacy keys. Module switches live on each module row above."},"greenlight":{"title":"Deployments","subtitle":"Greenlight production deploys to one.redsis.app — each merge to main is migrate-gated, built on SSD, then swapped behind a health check with automatic rollback. This is the live status and history.","live":"Currently live","recent":"Recent deploys","empty":"No deploy events recorded yet.","emptyHint":"Greenlight reports each step to /api/deploy/event. Wire the host hook in auto-deploy.sh (see docs/infra/PERMANENT-DEPLOY-SYSTEM.md) to populate this.","inertTitle":"Deploy ingest is not configured yet.","inertHint":"Set GREENLIGHT_DEPLOY_SECRET on the host and add the report hook to auto-deploy.sh. Until then this page shows only the reconciler view.","outcomeSuccess":"Shipped","outcomeFailed":"Failed","outcomeRolledBack":"Rolled back","outcomeStalled":"No report","outcomeInProgress":"In progress"},"cronMonitor":{"title":"Cron Job Monitor","subtitle":"Every scheduled job configured in crons.config.json, with its last run, status, and duration. Trigger any job on demand.","colPath":"Cron","colSchedule":"Schedule","colLastRun":"Last Run","colStatus":"Status","colDuration":"Duration","colAction":"Action","runNow":"Run now","running":"Running…","never":"No runs yet","statusSuccess":"Success","statusError":"Error","statusRunning":"Running","notInstrumented":"Not instrumented — no run history recorded yet.","empty":"No crons are configured in crons.config.json.","runOk":"Triggered","runFailed":"Run failed"},"migrations":{"title":"Migration Preview","subtitle":"Database migration files and whether each has been applied. Read-only — migrations run automatically on deploy.","colSeq":"#","colName":"Migration","colDate":"Applied","colStatus":"Status","colAction":"SQL","applied":"Applied","pending":"Pending","viewSql":"View SQL","hideSql":"Hide SQL","appliedSummary":"applied","pendingSummary":"pending","autoNote":"Migrations apply automatically on deploy. This view is informational only.","empty":"No migration files found.","loadError":"Could not load this migration file.","never":"—"},"equipment":{"title":"Equipment","subtitle":"Searchable registry of every asset Redsis owns or services.","newAsset":"New asset","searchPlaceholder":"Search by name, tag, serial, manufacturer…","empty":"No equipment yet. Add your first asset to get started.","emptyFiltered":"No assets match the current filters.","loadError":"Could not load equipment.","saveError":"Could not save. Check the form and try again.","tagTaken":"That asset tag is already in use.","unassigned":"Unassigned","none":"—","filters":{"allCategories":"All categories","allStatuses":"All statuses","location":"Location","clear":"Clear filters"},"columns":{"name":"Name","tag":"Asset tag","category":"Category","status":"Status","location":"Location","assignedTo":"Assigned to","updated":"Updated"},"category":{"printer":"Printer","scanner":"Scanner","computer":"Computer","hvac":"HVAC","vehicle":"Vehicle","other":"Other"},"status":{"active":"Active","retired":"Retired","lost":"Lost","loaned":"Loaned"},"detail":{"back":"Back to registry","info":"Asset info","qr":"QR code","qrHint":"Scan to open this asset on a phone.","qrDownload":"Download SVG","manufacturer":"Manufacturer","model":"Model","serial":"Serial number","purchaseDate":"Purchase date","purchasePrice":"Purchase price","location":"Location","assignedTo":"Assigned to","notes":"Notes"},"tabs":{"history":"History","maintenance":"Maintenance","warranty":"Warranty","loans":"Loans"},"maintenance":{"title":"Maintenance schedules","add":"Add schedule","type":"Type","description":"Description","frequency":"Every (days)","lastPerformed":"Last performed","nextDue":"Next due","assignedTo":"Assigned to","active":"Active","empty":"No maintenance schedules yet.","type_preventive":"Preventive","type_inspection":"Inspection","type_calibration":"Calibration","type_cleaning":"Cleaning"},"warranty":{"title":"Warranties","add":"Add warranty","provider":"Provider","type":"Type","start":"Start","end":"End","terms":"Terms","notes":"Notes","empty":"No warranties recorded.","type_manufacturer":"Manufacturer","type_extended":"Extended","type_service_contract":"Service contract"},"loans":{"title":"Loan history","add":"Log loan","borrower":"Borrower","email":"Email","loanedOut":"Loaned out","expectedReturn":"Expected return","returned":"Returned","notes":"Notes","out":"Out","markReturned":"Mark returned","empty":"No loans recorded."},"dueView":{"title":"Maintenance due soon","subtitle":"Active schedules due within the next 30 days.","empty":"Nothing due in the next 30 days.","asset":"Asset","due":"Due"},"history":{"empty":"No service history yet. Maintenance and loan activity will appear here."},"admin":{"title":"Equipment admin","subtitle":"Full registry with bulk export.","export":"Export CSV","total":"assets"},"create":{"title":"New asset","name":"Name","tag":"Asset tag","category":"Category","manufacturer":"Manufacturer","model":"Model","serial":"Serial number","purchaseDate":"Purchase date","purchasePrice":"Purchase price","location":"Location","assignedTo":"Assigned to","status":"Status","notes":"Notes","photoUrl":"Photo URL","submit":"Create asset","cancel":"Cancel","saving":"Saving…"}},"vendors":{"title":"Vendors","subtitle":"Suppliers, contracts, and parts reorder alerts — in one place.","newVendor":"New vendor","editVendor":"Edit vendor","search":"Search vendors…","empty":"No vendors yet","emptyHint":"Add your first supplier to start tracking contracts and parts.","noResults":"No vendors match your filters.","loadError":"Could not load vendors.","saving":"Saving…","save":"Save","cancel":"Cancel","delete":"Delete","deleteConfirm":"Delete this vendor? Its contracts will be removed too.","name":"Name","category":"Category","status":"Status","serviceType":"Service type","serviceTypeHint":"A different axis from category — whether this vendor can be dispatched for service, not what it sells.","serviceTypeEquipmentOnly":"Equipment only","serviceTypeServiceAndEquipment":"Service + equipment","contactName":"Contact name","contactEmail":"Contact email","contactPhone":"Contact phone","website":"Website","address":"Address","taxId":"Tax ID","paymentTerms":"Payment terms","notes":"Notes","catParts":"Parts supplier","catService":"Service provider","catLogistics":"Logistics","catSoftware":"Software","catOther":"Other","statusActive":"Active","statusInactive":"Inactive","statusPreferred":"Preferred","statusBlacklisted":"Blacklisted","termNet30":"Net 30","termNet60":"Net 60","termCod":"Cash on delivery","termPrepaid":"Prepaid","allCategories":"All categories","allStatuses":"All statuses","tabInfo":"Info","tabContracts":"Contracts","tabParts":"Parts","tabHistory":"History","contracts":"Contracts","newContract":"New contract","editContract":"Edit contract","noContracts":"No contracts yet","contractName":"Contract name","contractType":"Type","value":"Value","currency":"Currency","startDate":"Start date","endDate":"End date","openEnded":"Open-ended","autoRenews":"Auto-renews","renewalNoticeDays":"Renewal notice (days)","termsSummary":"Terms summary","fileId":"Attached contract file","deleteContractConfirm":"Delete this contract?","typeSupply":"Supply","typeService":"Service","typeMaintenance":"Maintenance","typeSoftwareLicense":"Software license","typeNda":"NDA","cStatusActive":"Active","cStatusExpired":"Expired","cStatusCancelled":"Cancelled","cStatusPending":"Pending","parts":"Parts reorder","newPart":"New part rule","editPart":"Edit part rule","noParts":"No parts tracked yet","partName":"Part name","partNumber":"Part number","currentStock":"Current stock","reorderThreshold":"Reorder threshold","reorderQuantity":"Reorder quantity","unitCost":"Unit cost","location":"Location","lastOrderedAt":"Last ordered","updateStock":"Update stock","preferredVendor":"Preferred vendor","belowThreshold":"Below threshold","deletePartConfirm":"Delete this part rule?","alerts":"Alerts","expiringContracts":"Contracts expiring soon","lowStockParts":"Parts below threshold","noAlerts":"Nothing needs attention right now.","daysLeft":"{days} days left","expired":"Expired","expiresToday":"Expires today","dispatchProfile":"Dispatch profile","dispatchProfileHint":"The Field Service provider record this vendor dispatches through.","serviceProviderLinked":"Linked to {name}","serviceProviderNotLinked":"Not linked to a dispatch profile.","linkServiceProvider":"Link existing provider","unlinkServiceProvider":"Unlink","unlinkServiceProviderConfirm":"Unlink this vendor from its dispatch profile? Neither record is deleted.","selectServiceProviderPlaceholder":"Select a provider…","noUnlinkedServiceProviders":"No unlinked service providers.","link":"Link","linking":"Linking…","unlinking":"Unlinking…","linkServiceProviderFailed":"Could not link the provider. Try again.","unlinkServiceProviderFailed":"Could not unlink the provider. Try again.","loadServiceProvidersFailed":"Could not load unlinked providers."},"expenses":{"title":"Expenses","myTitle":"My Expenses","subtitle":"Submit receipts, categorize, attach to a job, get manager approval.","empty":"No expenses yet.","emptyBody":"Submit your first expense to get started.","submitExpense":"Submit expense","newExpense":"New expense","cancel":"Cancel","save":"Submit","saving":"Submitting…","edit":"Edit","approve":"Approve","reject":"Reject","approving":"Approving…","rejecting":"Rejecting…","rejectReasonPrompt":"Reason for rejection","rejectReasonPlaceholder":"Why is this expense being rejected?","fields":{"amount":"Amount","currency":"Currency","category":"Category","status":"Status","description":"Description","descriptionPlaceholder":"What was this expense for?","date":"Expense date","receiptUrl":"Receipt URL","receiptUrlPlaceholder":"Link to receipt image (optional)","attachTo":"Attach to"},"entity":{"field_ticket":"Field ticket","board_item":"Board item","general":"General"},"category":{"fuel":"Fuel","parts":"Parts","tools":"Tools","meals":"Meals","lodging":"Lodging","travel":"Travel","other":"Other"},"status":{"pending":"Pending","approved":"Approved","rejected":"Rejected","reimbursed":"Reimbursed"},"admin":{"title":"Expense review","subtitle":"Approve or reject submitted expenses.","queueEmpty":"No expenses match these filters.","submittedBy":"Submitted by","filters":"Filters","from":"From","to":"To","allCategories":"All categories","allStatuses":"All statuses","allSubmitters":"All submitters","teamMembers":"Team members","fieldTechs":"Field techs","fieldTechBadge":"Field tech","apply":"Apply","clear":"Clear","count":"{count} expense(s)","total":"Total"},"ticketTab":{"title":"Expenses","empty":"No expenses tagged to this ticket.","total":"Total tagged"},"errors":{"loadFailed":"Could not load expenses.","submitFailed":"Could not submit the expense.","amountRequired":"Enter a valid amount greater than zero.","descriptionRequired":"Enter a description."}},"onboarding":{"brand":"Redsis One","skip":"Skip for now","stepOf":"Step {n} of {total}","back":"Back","next":"Next","finish":"Finish","saving":"Saving…","errors":{"save":"Could not save your preferences. Please try again."},"step1":{"title":"Welcome, {name}!","subtitle":"Let's set up a few basics so Redsis One feels right. This takes less than a minute.","nameLabel":"Your name","namePlaceholder":"How should we show your name?"},"step2":{"title":"Your timezone","subtitle":"We use this to show times, schedules, and notifications in your local time.","label":"Timezone","placeholder":"Select a timezone…"},"step3":{"title":"Language & notifications","subtitle":"Pick the language you'd like to use and how you want to be notified.","languageLabel":"Language","dndLabel":"Start with notifications muted","dndHint":"Turns on Do Not Disturb. You can change this any time in your notification settings."},"step4":{"title":"You're all set!","subtitle":"Your preferences are saved. Jump into your dashboard to get started with Redsis One.","cta":"Go to dashboard"}},"hub":{"modules":"Modules","attention":"Needs attention","recentActivity":"Recent activity","takeCareOf":"What we take care of","team":"Team","comingSoon":"Coming soon","emptyActivity":"Nothing recent.","viewDirectory":"View directory"},"comms":{"title":"Communications","tagline":"Company news, messaging, mail and calendar — all in one place.","actions":{"post":"Post update","inbox":"Open inbox"},"tabs":{"overview":"Overview","announcements":"Announcements","mail":"Mail","calendar":"Calendar","teams":"Teams"},"sources":"Sources","connect":"Add","sourceLabels":{"microsoft":"Microsoft 365","gmail":"Gmail","ayva":"Ayva"},"feedEmpty":"No announcements yet. Be the first to post.","feedOff":"The news feed is turned off for this workspace.","overview":{"mailTitle":"Unread mail","mailEmpty":"Inbox zero — nothing unread.","mailNotConnected":"Connect Microsoft 365 to see your inbox.","mailUnavailable":"Mail is temporarily unavailable.","mailCta":"Open Mail","eventsTitle":"Next up","eventsEmpty":"Nothing else on your calendar today.","eventsNotConnected":"Connect Microsoft 365 to see your calendar.","eventsCta":"Open Calendar","announcementsTitle":"Latest announcements","announcementsEmpty":"No announcements yet.","announcementsOff":"The news feed is off for this workspace.","announcementsCta":"Open Announcements","pulseTitle":"Office pulse","pulseEmpty":"Nothing to celebrate today.","pulseCta":"Open Office Pulse","birthdayLabel":"{name} — birthday","anniversaryLabel":"{name} — {years}yr anniversary"},"panels":{"mail":{"title":"Recent mail","unreadBadge":"{n} unread","empty":"No messages.","notConnected":"Connect Microsoft 365 to see your inbox here.","connectCta":"Connect Microsoft 365","openFullCta":"Open full inbox"},"calendar":{"title":"Today's schedule","empty":"Nothing left on your calendar today.","notConnected":"Connect Microsoft 365 to see your calendar here.","connectCta":"Connect Microsoft 365","openFullCta":"Open full calendar","allDay":"All day","online":"Online"},"teams":{"title":"Conversations","empty":"No conversations yet.","teamsError":"Teams couldn't be reached right now — showing what we have.","openTeamsCta":"Open Microsoft Teams","hint":"Chat with Redsis One colleagues, Teams and Ayva anytime from the chat icon on the right.","providerNative":"Redsis One","providerTeams":"Teams","providerAyva":"Ayva","providerWhatsapp":"WhatsApp"}}},"commsPortal":{"title":"Communications","subtitle":"News, chat, mail, calendar, meetings, channels and people — one place.","search":"Search across communications","comingSoon":"Coming soon","degraded":"Couldn't load this right now — try again.","openIn":"Open in {name}","openFull":"Open full view","tabs":{"home":"Home","chat":"Chat","mail":"Mail","calendar":"Calendar","meetings":"Meetings","channels":"Channels","people":"People"},"badge":{"unread":"{n} unread","mentions":"{n} mentions"},"sources":{"title":"Connected sources","on":"On","connect":"Connect","reconnect":"Reconnect","soon":"Soon","microsoft":"Microsoft 365","gmail":"Gmail","icloud":"iCloud","yahoo":"Yahoo","whatsapp":"WhatsApp","ayva":"Ayva","native":"Redsis"},"home":{"newsTitle":"News & Announcements","cockpit":"Your cockpit","messages":"Messages","untitledMessage":"Conversation","mail":"Mail","today":"Today","quickReply":"Quick reply…","reply":"Reply","send":"Send","sending":"Sending…","undo":"Undo","quickAdd":"Quick add","addEvent":"Add event","eventPlaceholder":"e.g. Call Valentina 9:30","join":"Join","noMessages":"No recent messages.","noMail":"No recent mail.","noEvents":"Nothing on the calendar today.","connectInbox":"Connect your inbox","connectCalendar":"Connect your calendar"},"chat":{"title":"Chat","new":"New chat","empty":"No conversations yet.","placeholder":"Write a message…","teamsOffline":"Teams isn't connected — showing Redsis and Ayva chats."},"mail":{"title":"Mail","openInbox":"Open full inbox","compose":"Compose","focused":"Focused","other":"Other","empty":"Your inbox is clear.","otherEmpty":"Nothing in Other.","oofTitle":"Out of office","oofStatusAlways":"Automatic replies are on.","oofStatusScheduled":"Automatic replies are scheduled.","oofStatusDisabled":"Automatic replies are off.","oofEdit":"Set up","oofTurnOff":"Turn off","oofMessageLabel":"Automatic reply","oofMessagePlaceholder":"I'm away and will reply when I'm back…","oofScheduleLabel":"Only during a time period","oofStartLabel":"From","oofEndLabel":"Until","oofSave":"Turn on","oofSaving":"Saving…","oofCancel":"Cancel","oofNeedsRange":"Pick a start and an end.","oofSaveFailed":"Couldn't update your automatic replies — try again.","rulesTitle":"Rules","rulesEmpty":"No inbox rules yet.","rulesDegraded":"Couldn't load your inbox rules.","rulesNew":"New rule","ruleNameLabel":"Rule name","ruleNamePlaceholder":"e.g. File supplier invoices","ruleFromLabel":"From","ruleFromPlaceholder":"name@company.com, other@company.com","ruleSubjectLabel":"Subject contains","ruleSubjectPlaceholder":"invoice, statement","ruleActionsLabel":"Then","ruleMarkRead":"Mark as read","ruleDeleteMessage":"Delete the message","ruleCreate":"Create rule","ruleCreating":"Creating…","ruleCancel":"Cancel","ruleNeedsName":"Give the rule a name.","ruleNeedsCondition":"Add at least one condition.","ruleNeedsAction":"Pick at least one action.","ruleCreateFailed":"Couldn't create that rule — try again.","ruleEnable":"Enable","ruleDisable":"Disable","ruleRemove":"Delete rule","ruleConfirmRemove":"Delete this rule?","ruleConfirmRemoveYes":"Yes, delete","ruleUpdateFailed":"Couldn't update that rule — try again.","ruleReadOnly":"Managed in Outlook","ruleHasError":"This rule has an error in Outlook."},"calendar":{"title":"Calendar","views":{"month":"Month","week":"Week","day":"Day","agenda":"Agenda"},"today":"Today","newEvent":"New event","empty":"No events in this range.","prev":"Previous","next":"Next","allDay":"All day","more":"+{n} more","noEvents":"Nothing scheduled.","details":"Event details","close":"Close","organizer":"Organizer","attendees":"Attendees","yourResponse":"Your response","accept":"Accept","tentative":"Tentative","decline":"Decline","statusAccepted":"Going","statusTentative":"Maybe","statusDeclined":"Declined","statusNoResponse":"No response yet","statusOrganizer":"You organized this","edit":"Edit","delete":"Delete","save":"Save changes","cancel":"Cancel","saving":"Saving…","deleting":"Deleting…","confirmDelete":"Delete this event?","confirmDeleteYes":"Yes, delete","subjectLabel":"Title","startsLabel":"Starts","endsLabel":"Ends","locationLabel":"Location","onlineLabel":"Teams meeting","subjectRequired":"A title is required.","invalidRange":"The end time has to be after the start time.","saveFailed":"Couldn't save that change — try again.","rsvpFailed":"Couldn't send your response — try again.","deleteFailed":"Couldn't delete that event — try again."},"meetings":{"title":"Meetings","upcoming":"Upcoming","recorded":"Recorded","empty":"No meetings to show.","botOptOut":"Don't record this meeting","summary":"Summary","decisions":"Decisions","actionItems":"Action items","selectRecording":"Select a recording to see its summary.","noNotes":"No notes yet for this meeting.","notesPending":"Notes are still being generated.","notesFailed":"Notes couldn't be generated for this meeting.","participants":"{n} people","protected":"Protected","pii":"PII","due":"Due {date}","recordedOn":"Recorded {date}"},"channels":{"title":"Channels","teams":"Teams","empty":"No channels yet.","openInTeams":"Open in Teams","post":"Post","reply":"Reply","messages":"Messages","noMessages":"No messages in this channel yet.","selectChannel":"Select a channel to view its messages.","composerPlaceholder":"Message this channel…","replyPlaceholder":"Write a reply…","hideReplies":"Hide replies","you":"You","unknownAuthor":"Unknown"},"people":{"title":"People","search":"Search people","message":"Message","mail":"Mail","meet":"Meet","orgChart":"Org chart","empty":"Search for a colleague to get started.","presenceAvailable":"Available","presenceBusy":"Busy","presenceDnd":"Do not disturb","presenceAway":"Away","presenceBrb":"Be right back","presenceOffline":"Offline"}},"hr":{"title":"HR Hub","subtitle":"People, time off, and the whole employee lifecycle in one place.","comingSoon":"Coming soon","viewAll":"View all","manage":"Manage","manageHint":"You have HR-manager access.","roleManager":"Manager access","attention":{"approvalsLabel":"Leave approvals waiting","approvalsHint":"Pending more than 3 days","onboardingLabel":"Onboarding to finish","onboardingHint":"Recent hires not set up yet","probationLabel":"Probation reviews due","probationHint":"Reaching their 90-day mark","celebrationsLabel":"Celebrations today","celebrationsHint":"Birthdays & anniversaries","recruitingLabel":"Connect recruitment sources","recruitingHint":"No job boards connected yet"},"recruiting":{"title":"Recruitment integrations","subtitle":"Connect the job boards Redsis hires through — enter each account’s API key or credentials.","connectedCount":"{n} of {total} connected","syncNote":"Posting & candidate sync activates when each provider’s API is enabled.","connect":"Connect","update":"Update","disconnect":"Disconnect","save":"Save & connect","cancel":"Cancel","secureNote":"Credentials are encrypted at rest and never shown again.","status":{"connected":"Connected","notConnected":"Not connected"},"authType":{"api_key":"API key","oauth":"OAuth","credentials":"Username & password"},"regions":{"global":"Global","usa":"United States","colombia":"Colombia","ecuador":"Ecuador","mexico":"Mexico","brazil":"Brazil"},"fields":{"apiKey":"API key","clientId":"Client ID","clientSecret":"Client secret","username":"Username","password":"Password","accountId":"Account ID","token":"Token","employerId":"Employer ID"}},"activity":{"requested":"{name} requested {type}","approved":"{name}'s {type} was approved","newHire":"{name} joined the team"},"responsibilities":{"records":{"label":"Employee records","desc":"Profiles, departments and reporting lines."},"timeOff":{"label":"Time off","desc":"Leave requests, balances and the team calendar."},"lifecycle":{"label":"Employee lifecycle","desc":"Onboarding, changes and offboarding."},"pay":{"label":"Pay & benefits","desc":"Compensation and benefits — coming soon."}},"today":"Today","tomorrow":"Tomorrow","inDays":"in {n} days","daysAgo":"{n} days ago","yearsSuffix":"{n}y","none":"Nothing coming up.","kpis":{"headcount":"People","newHires30":"New hires (30d)","newHires90":"New hires (90d)","pendingLeave":"Pending leave","onLeaveToday":"On leave today","departments":"Departments","breakdown":"By employment type"},"sections":{"modules":"Modules","moreModules":"On the roadmap","birthdays":"Upcoming birthdays","anniversaries":"Work anniversaries","newHires":"Recent new hires"},"employment":{"employee":"Employee","contractor":"Contractor","intern":"Intern","vendor":"Vendor","service_account":"Service account","unspecified":"Unspecified"},"modules":{"directory":{"name":"Employee Directory","desc":"Search and browse everyone at Redsis."},"calendar":{"name":"People Calendar","desc":"Leave, birthdays, anniversaries and new hires."},"timeOff":{"name":"Time Off","desc":"Pending requests, team calendar and days taken."},"orgChart":{"name":"Org Chart","desc":"Departments, reporting lines and on-call."},"timeTracking":{"name":"Time Tracking","desc":"Clock in/out and timesheets."},"expenses":{"name":"Expenses","desc":"Submit receipts and get reimbursed."},"travel":{"name":"Travel","desc":"Request and approve business travel."},"officePulse":{"name":"Office Pulse","desc":"Birthdays, presence and office life."},"onboarding":{"name":"Onboarding","desc":"New-hire setup and the welcome flow."},"onboardingWorkflows":{"name":"Onboarding Workflows","desc":"Joiner & leaver checklists with provisioning handoff."},"scheduling":{"name":"Workforce Scheduling","desc":"Rosters, shifts, swaps and geofenced clock-in/out."},"leave":{"name":"Leave Management","desc":"Policies, accruals and balances."},"performance":{"name":"Performance","desc":"Goals, reviews and 1:1s."},"recruiting":{"name":"Recruiting","desc":"Requisitions, candidates and offers."},"learning":{"name":"Learning","desc":"Courses, training and certifications."},"documents":{"name":"Documents","desc":"Employee files and policy sign-off."},"compensation":{"name":"Compensation","desc":"Pay, bands and benefits."},"analytics":{"name":"HR Analytics","desc":"Headcount, attrition and reports."},"engagement":{"name":"Engagement & Surveys","desc":"Pulse surveys, eNPS, anonymous feedback and action plans."}},"directory":{"title":"Employee Directory","subtitle":"Search and filter everyone at Redsis.","search":"Search by name, email, title…","count":"{n} people","empty":"No people match these filters.","viewCards":"Cards","viewTable":"Table","sortName":"Name","sortHireDate":"Hire date","sortDepartment":"Department","allDepartments":"All departments","allStatuses":"All types","allOffices":"All locations","allManagers":"All managers","noManager":"No manager","noDepartment":"No department","clearFilters":"Clear filters","terminationDate":"Termination date","terminationHelp":"Last day of employment. Recording it here is the HR leaver fact Central One acts on; it does not suspend the account by itself.","terminationSaved":"Termination date saved.","terminationCleared":"Termination date cleared.","terminationSaveFailed":"Could not save the termination date.","clearTermination":"Clear","col":{"name":"Name","title":"Title","department":"Department","email":"Email","phone":"Phone","manager":"Manager","type":"Type","hireDate":"Hire date","terminationDate":"Termination date"}},"calendar":{"title":"People Calendar","subtitle":"Leave, birthdays, anniversaries and new hires.","prev":"Previous month","next":"Next month","today":"Today","legend":{"leave":"Time off","birthday":"Birthday","anniversary":"Anniversary","new_hire":"New hire"},"birthday":"{name} — birthday","anniversary":"{name} — {years}y","newHire":"{name} — first day","leave":"{name} — time off","more":"+{n} more","empty":"Nothing scheduled this month."},"timeOff":{"title":"Time Off","subtitle":"Pending requests, upcoming leave and days taken.","tabs":{"pending":"Pending","upcoming":"Upcoming","summary":"This year"},"pendingEmpty":"No pending requests.","upcomingEmpty":"No approved leave in the next 30 days.","summaryEmpty":"No leave taken yet this year.","reviewInMyHub":"Review in My Hub","requested":"Requested {date}","days":"{n} days","daysTaken":"Days taken in {year}","halfDay":"Half day","col":{"employee":"Employee","type":"Type","dates":"Dates","reason":"Reason","days":"Days","taken":"Days taken"},"kind":{"vacation":"Vacation","special":"Special"},"subType":{"paid":"Paid","unpaid":"Unpaid","medical":"Medical","late_arrival":"Late arrival","schedule":"Schedule change","other":"Other"}},"onboarding":{"title":"Onboarding & Offboarding","subtitle":"Repeatable joiner and leaver checklists with provisioning handoff.","tasks":"tasks","dueDate":"Due","template":"Template","startedBy":"Started by","complete":"complete","assignedTo":"Assigned to","completedBy":"Completed by","type":{"joiner":"Joiner","leaver":"Leaver"},"status":{"active":"Active","completed":"Completed","cancelled":"Cancelled"},"taskStatus":{"pending":"Pending","in_progress":"In progress","done":"Done","skipped":"Skipped"},"category":{"provision":"Provisioning","equipment":"Equipment","document":"Documents","training":"Training","other":"Other"},"categoryLinks":{"equipment":"Open Equipment","provision":"Open Identity","document":"Open Documents","training":"Open Learning"},"kpis":{"activeJoiners":"Active joiners","activeLeavers":"Active leavers","completedThisMonth":"Completed this month","overdue":"Overdue"},"tabs":{"active":"Active","completed":"Completed","templates":"Templates"},"sections":{"myTasks":"My tasks"},"empty":{"noActive":"No active workflows.","noHistory":"Nothing here yet.","noTasks":"No tasks in this workflow."},"nav":{"backToList":"Back to Onboarding"},"actions":{"startWorkflow":"Start workflow","viewChecklist":"View checklist","markComplete":"Mark complete","markDone":"Mark done","markPending":"Mark pending","cancel":"Cancel","cancelConfirm":"Cancel this workflow? This cannot be undone.","archive":"Archive","viewDetail":"View","viewHistory":"View all history","openModule":"Open module"},"start":{"title":"Start a workflow","type":"Workflow type","subjectUserId":"Employee user ID","subjectPlaceholder":"Paste the user ID…","template":"Template","selectTemplate":"Select a template","dueDate":"Start / exit date","tasks":"tasks","cancel":"Cancel","submit":"Start workflow"},"errors":{"subjectRequired":"Enter an employee user ID.","templateRequired":"Select a template.","dateRequired":"Enter the start or exit date.","nameRequired":"Enter a template name.","unknown":"Something went wrong. Please try again."},"templates":{"title":"Workflow templates","empty":"No templates yet. Create one to get started.","newTemplate":"New template","tasks":"tasks","default":"Default","archiveConfirm":"Archive this template? Active workflows using it will not be affected.","joiner":"Joiner templates","leaver":"Leaver templates","taskCount":"tasks"},"templateBuilder":{"title":"New workflow template","subtitle":"Define the ordered checklist that runs for every new hire or leaver.","name":"Template name","namePlaceholder":"e.g. Standard IT Onboarding","description":"Description (optional)","descriptionPlaceholder":"What is this template for?","setAsDefault":"Set as default for this type","tasks":"Tasks","addTask":"Add task","noTasks":"No tasks yet. Add at least one.","taskTitlePlaceholder":"e.g. Provision laptop","category":"Category","assigneeRole":"Assignee role","assigneeRolePlaceholder":"e.g. IT Admin","dueOffset":"Due offset (days)","required":"Required","save":"Save template"},"history":{"title":"Workflow history","subtitle":"Completed and cancelled onboarding / offboarding workflows."}},"engagement":{"title":"Engagement & Surveys","subtitle":"Pulse surveys, eNPS, anonymous feedback, and action plans.","newSurvey":"New survey","anonymous":"Anonymous","responses":"responses","questions":"questions","viewResults":"Results","noData":"No data","noSurveysForYou":"No active surveys right now.","alreadyResponded":"Responded","takeSurvey":"Take survey","actionPlans":"Action Plans","tabs":{"respond":"My surveys","active":"Active","closed":"Closed","drafts":"Drafts"},"types":{"pulse":"Pulse","enps":"eNPS","onboarding_exit":"Onboarding / Exit","custom":"Custom"},"recurrence":{"once":"One-time","weekly":"Weekly","biweekly":"Bi-weekly","monthly":"Monthly","quarterly":"Quarterly"},"kpis":{"activeSurveys":"Active surveys","responsesLast30d":"Responses (30d)","overallEnps":"Rolling eNPS","openActionPlans":"Open action plans"},"empty":{"active":"No active surveys.","closed":"No closed surveys yet.","drafts":"No drafts."},"builder":{"newTitle":"New survey","editTitle":"Edit survey","settings":"Settings","titleLabel":"Survey title","titlePlaceholder":"e.g. Q2 Employee Pulse","descLabel":"Description (optional)","descPlaceholder":"Briefly describe the purpose of this survey…","typeLabel":"Type","recurrenceLabel":"Recurrence","anonymousLabel":"Anonymous responses","anonymousHint":"When enabled, responses are never linked to an individual. Only a hashed token is stored to prevent double-submission.","minNLabel":"Min-N suppression threshold","minNHint":"Department slices with fewer than this many responses are suppressed in results to protect anonymity.","startsAtLabel":"Opens at","endsAtLabel":"Closes at","audienceLabel":"Audience (departments)","audienceHint":"Leave empty to send to all active employees.","audienceAll":"All active employees","questionsTitle":"Questions","noQuestions":"No questions yet. Add one below.","addQuestion":"Add question","saveDraft":"Save draft","saving":"Saving…","publish":"Publish","publishing":"Publishing…","cancel":"Cancel","lockedHint":"This survey is active or closed — question edits are locked. Close the survey to make changes.","errors":{"titleRequired":"Survey title is required.","noQuestions":"Add at least one question before publishing.","saveFailed":"Failed to save — please try again.","publishFailed":"Failed to publish — please try again."}},"respond":{"anonymousNotice":"Your responses are completely anonymous. No personal information is stored — only a one-way hash is used to prevent duplicate submissions.","requiredError":"Please answer all required questions.","submitError":"Failed to submit — please try again.","alreadySubmitted":"You have already responded to this survey for the current period.","submit":"Submit response","submitting":"Submitting…","cancel":"Cancel","thankYou":"Thank you!","thankYouMsg":"Your response has been recorded.","anonymityConfirm":"Your anonymity is protected. This response cannot be traced back to you.","backToHub":"Back to Engagement"},"results":{"anonymityNote":"This survey is anonymous. Results are shown in aggregate only. Department slices below the min-N threshold are suppressed."}},"scheduling":{"title":"Workforce Scheduling","subtitle":"Rosters, shifts, swap requests and geofenced clock-in/out.","refresh":"Refresh","loading":"Loading…","viewAll":"View all","publish":"Publish","archive":"Archive","allStatuses":"All statuses","noSchedules":"No schedules yet. Create one to get started.","noShifts":"No shifts assigned in this schedule yet.","noUpcomingShifts":"No upcoming shifts.","noSwaps":"No swap requests.","noLocation":"No location","noAttendance":"No attendance data for this period.","coverageGapWarning":"{n} coverage gap(s) detected","bulkCreated":"Created","tabs":{"overview":"Overview","myShifts":"My Shifts","swaps":"Swap Requests","schedules":"Schedules","templates":"Shift Templates"},"kpis":{"shiftsThisWeek":"Shifts this week","staffScheduled":"Staff scheduled","publishedSchedules":"Published schedules","pendingSwaps":"Pending swaps","coverageGaps":"Coverage gaps"},"sections":{"myUpcoming":"My upcoming shifts","pendingSwaps":"Pending swap requests","mySwaps":"My swap requests","today":"Today","todayPunches":"Today's punches","upcoming":"Upcoming"},"statusLabel":{"draft":"Draft","published":"Published","archived":"Archived"},"manageSchedules":"Manage schedules","reviewSwaps":"Review swaps","gridTab":"Schedule grid","attendanceTab":"Attendance","col":{"employee":"Employee","scheduled":"Scheduled","completed":"Completed","noShow":"No-show","lateIns":"Late ins","scheduledHrs":"Sched. hrs","workedHrs":"Worked hrs"},"form":{"name":"Name","namePlaceholder":"e.g. Week 24 – Warehouse","periodStart":"Start date","periodEnd":"End date","startTime":"Start time","endTime":"End time","notes":"Notes (optional)","required":"Name and dates are required.","error":"Something went wrong — try again.","cancel":"Cancel","save":"Save","saving":"Saving…"},"createSchedule":{"title":"New schedule"},"bulkCreate":{"title":"Bulk add shifts","template":"Shift template","userIds":"User IDs (one per line or comma-separated)","userIdsHint":"user-id-1\nuser-id-2","dates":"Dates","create":"Create shifts"},"templates":{"title":"Shift Templates","createTitle":"New shift template","create":"New template","namePlaceholder":"e.g. Morning 7-3","duration":"Duration","break":"Break","color":"Color","empty":"No shift templates yet.","deactivate":"Deactivate","activate":"Activate"},"swapStatus":{"pending":"Pending","approved":"Approved","denied":"Denied","cancelled":"Cancelled","withdrawn":"Withdrawn"},"swaps":{"mySwaps":"My swaps","pendingQueue":"Pending queue","noSwaps":"No swap requests.","noPending":"No pending swap requests.","with":"With","reviewNote":"Note","reviewNotePlaceholder":"Optional note for the requester","approve":"Approve","deny":"Deny","withdraw":"Withdraw request","requestSwap":"Request swap","swapRequested":"Swap request sent."},"punch":{"title":"Clock in / out","clockIn":"Clock in","clockOut":"Clock out","breakStart":"Break start","breakEnd":"Break end","clockHere":"Clock here","geoError":"Location unavailable — punch recorded without coordinates.","locating":"Getting location…","recording":"Recording…","success":"Punch recorded.","timeEntryLinked":"Linked to time entry"}},"learning":{"title":"Learning & Development","subtitle":"Courses, training tracks, and certifications for everyone at Redsis.","myCourses":"My courses","inProgress":"In progress","completed":"Completed","certifications":"Certifications","myCertifications":"My certifications","catalog":"Course catalog","tracks":"Learning tracks","trackCourses":"{n} courses","adminPanel":"Admin","backToCatalog":"Learning","preview":"Preview","enroll":"Enroll","enrolling":"Enrolling…","continue":"Continue","review":"Review","drop":"Drop course","edit":"Edit","archive":"Archive","save":"Save","saving":"Saving…","cancel":"Cancel","create":"Create","creating":"Creating…","issuing":"Issuing…","viewAll":"View all","search":"Search courses…","filter":"Filters","category":"Category","allCategories":"All categories","type":"Type","allTypes":"All types","mandatory":"Mandatory","optional":"Optional","clearFilters":"Clear filters","empty":"No courses match your filters.","notStarted":"Not started","progress":"Progress","modules":"Modules","skills":"Skills","skillsEarned":"Skills you will earn","markComplete":"Mark as complete","enrollToStart":"Enroll to start taking this course.","completedCert":"Certificate earned!","linkContent":"Open the linked resource to complete this module.","openLink":"Open link","openDocument":"Open document","draft":"Draft","contentTypes":{"video":"Video","link":"Link","doc":"Document","quiz":"Quiz"},"status":{"draft":"Draft","published":"Published","archived":"Archived"},"kpi":{"totalCourses":"Courses","totalEnrollments":"Enrollments","completionRate":"Completion","totalCerts":"Certifications","overdue":"Overdue"},"quiz":{"question":"Question {n} of {total}","prev":"Back","next":"Next","submit":"Submit answers","passed":"You passed with {score}%!","failed":"You scored {score}%. Passing score is {passing}%. Try again."},"cert":{"title":"My Certifications","count":"{n} certifications","empty":"No certifications yet.","emptyHint":"Complete courses to earn certificates automatically, or ask HR to record an external one.","issue":"Issue certificate","issued":"Issued","expires":"Expires","issuedDate":"Date issued","expiryDate":"Expiry date (optional)","number":"Cert. number","userId":"User ID","name":"Certificate name","namePlaceholder":"e.g. WHMIS 2018 Completion","issuer":"Issuer","viewCourse":"View course","expiringSoon":"{n} certifications expiring in the next 30 days"},"admin":{"title":"LMS Admin","createCourse":"Create course","editModule":"Edit module","addModule":"Add module","noModules":"No modules yet. Add one to get started.","addAssignment":"Add assignment rule","noAssignments":"No assignment rules. Add one to auto-enroll users.","assignments":"Assignment rules","enrolled":"Enrolled","completed":"Completed","learners":"Learners","overdue":"Overdue","publish":"Publish","unpublish":"Unpublish","archived":"Archived courses","empty":"No courses yet. Create your first course above.","title_label":"Title","titlePlaceholder":"e.g. Workplace Safety Fundamentals","description":"Description","category":"Category","categoryPlaceholder":"e.g. Safety, Compliance, Leadership","duration":"Duration (min)","skillTags":"Skill tags (comma-separated)","skillTagsHint":"These skills are added to the learner's profile on completion.","passingScore":"Passing score (%)","required":"Required module","contentType":"Content type","contentUrl":"Content URL","serviceVideoTile":"Service Video Tile ID (optional)","serviceVideoTileHint":"Link to a service-videos tile for segmented playback.","assignTarget":"Assign to","targetAll":"All users","targetDept":"Department","targetRole":"Role","targetUser":"Specific user","targetId":"Target ID / label","dueDays":"Due in N days","reEnrollOnExpiry":"Re-enroll on cert expiry","dueInDays":"Due in {n} days","manageTracks":"Manage tracks","createTrack":"Create track","noTracks":"No learning tracks yet.","complianceTrack":"Mandatory / compliance track","pickCourses":"Add courses to this track","selected":"selected","trackNamePlaceholder":"e.g. New Hire Compliance Track","create":"Create"}},"leave":{"title":"Leave Management","subtitle":"Leave types, policies, balances, holiday calendars and team availability.","tabs":{"overview":"Overview","types":"Leave Types","policies":"Policies","balances":"Balances","holidays":"Holidays","availability":"Team Availability"},"overview":{"totalTypes":"Leave types","totalPolicies":"Active policies","totalCalendars":"Holiday calendars","onLeaveToday":"On leave today","balancesThisYear":"Balances this year"},"type":{"name":"Name","paid":"Paid","unpaid":"Unpaid","color":"Color","accrualMethod":"Accrual method","annualDays":"Annual days","carryoverCap":"Carry-over cap","maxNegative":"Max advance","allowHalfDay":"Allow half-days","active":"Active","addType":"Add leave type","editType":"Edit leave type","archiveType":"Archive type","archiveConfirm":"Archive this leave type? Existing balances are preserved.","noTypes":"No leave types defined yet.","accrualMethods":{"annual":"Annual (lump-sum)","monthly":"Monthly (1/12 per month)","biweekly":"Bi-weekly (1/26 per period)"}},"policy":{"addPolicy":"Add policy","editPolicy":"Edit policy","archivePolicy":"Archive policy","archiveConfirm":"Archive this policy?","noPolicies":"No policies for this type.","entitlement":"Entitlement (days/year)","accrualRate":"Accrual rate","accrualCadence":"Accrual cadence","carryoverCap":"Carry-over cap","effectiveFrom":"Effective from","effectiveUntil":"Effective until","openEnded":"Open-ended","scope":"Applies to","scopes":{"all":"All employees","department":"Department","role":"Role","user":"Employee"}},"balance":{"title":"Balances","subtitle":"Per-employee leave balance for {year}.","entitled":"Entitled","accrued":"Accrued","taken":"Taken","adjusted":"Adjusted","carriedOver":"Carried over","available":"Available","adjust":"Adjust balance","adjustNote":"Reason / note","adjustDays":"Days (positive = add, negative = deduct)","noBalances":"No balances recorded this year.","myBalance":"My Leave Balance","myBalanceSubtitle":"Your current leave balance for {year}.","days":"{n} days","halfDay":"0.5 days (half)","lastReconciled":"Reconciled {when}"},"ledger":{"title":"Ledger","kinds":{"accrual":"Accrual","taken":"Taken","adjustment":"Adjustment","carryover":"Carry-over"},"noEntries":"No ledger entries.","col":{"date":"Date","kind":"Type","days":"Days","note":"Note"}},"holiday":{"title":"Holiday Calendars","subtitle":"Public holidays that count against team availability.","addCalendar":"Add calendar","editCalendar":"Edit calendar","archiveCalendar":"Archive calendar","addHoliday":"Add holiday","editHoliday":"Edit holiday","archiveHoliday":"Archive holiday","noCalendars":"No holiday calendars yet.","noHolidays":"No holidays in this calendar.","calendarName":"Calendar name","region":"Region / country","date":"Date","name":"Holiday name","recurring":"Repeats every year","col":{"date":"Date","name":"Holiday","region":"Region","recurring":"Recurring"}},"availability":{"title":"Team Availability","subtitle":"Who is out — leave and public holidays at a glance.","onLeave":"On leave","holidays":"Holidays","noOneOut":"Everyone available.","prev":"Previous month","next":"Next month","today":"Today","halfDay":"Half day"},"actions":{"save":"Save","cancel":"Cancel","archive":"Archive","edit":"Edit","add":"Add","saving":"Saving…"},"toast":{"typeSaved":"Leave type saved.","typeArchived":"Leave type archived.","policySaved":"Policy saved.","policyArchived":"Policy archived.","calendarSaved":"Calendar saved.","calendarArchived":"Calendar archived.","holidaySaved":"Holiday saved.","holidayArchived":"Holiday archived.","balanceAdjusted":"Balance adjusted.","error":"Something went wrong. Please try again."}},"performance":{"title":"Performance","subtitle":"Goals, review cycles, 1:1 notes, and continuous feedback.","tabs":{"overview":"Overview","goals":"Goals","reviews":"Reviews","feedback":"Feedback","oneOnOnes":"1:1s"},"actions":{"newGoal":"New goal","giveFeedback":"Give feedback","schedule1on1":"Schedule 1:1"},"goals":{"title":"My goals","empty":"No active goals. Create one to get started.","newGoal":"New goal","titleLabel":"Title","titlePlaceholder":"e.g. Improve customer satisfaction score","titleRequired":"A title is required.","descriptionLabel":"Description","descriptionPlaceholder":"What does success look like?","periodLabel":"Period","periodRequired":"A period is required.","dueDateLabel":"Due date","keyResults":"Key results","due":"Due","archive":"Archive goal","archiveConfirm":"Archive this goal? It will no longer appear in active views.","cancel":"Cancel","save":"Save","saving":"Saving…"},"reviews":{"cycles":"Review cycles","myReviews":"My reviews","noPending":"No pending reviews.","noCycles":"No active review cycles.","pendingCount":"{n} review(s) waiting for your input.","manageCycles":"Manage cycles"},"cycles":{"participants":"participants","activate":"Activate","calibrate":"Start calibration","close":"Close cycle","closeConfirm":"Close this review cycle? Ratings will be final.","types":{"self":"Self","manager":"Manager","peer":"Peer"}},"feedback":{"title":"Feedback & kudos","empty":"No feedback yet. Give someone kudos!","giveFeedback":"Give feedback","archive":"Archive","archiveConfirm":"Archive this feedback entry?","toLabel":"To (user ID)","toPlaceholder":"Enter recipient user ID","toRequired":"Recipient is required.","bodyLabel":"Message","bodyPlaceholder":"Share what they did well or suggest an improvement…","bodyRequired":"A message is required.","kindLabel":"Type","kinds":{"kudos":"Kudos","praise":"Praise","constructive":"Constructive"},"tagLabel":"Tag / value","tagPlaceholder":"e.g. Innovation","visibilityLabel":"Visibility","visibility":{"public":"Public","private":"Private","hrOnly":"HR only"},"cancel":"Cancel","send":"Send","saving":"Sending…"},"oneOnOnes":{"title":"1:1 meetings","empty":"No 1:1 meetings scheduled.","schedule":"Schedule 1:1","yourRole":"Your role in this 1:1","asReport":"I am the report","asManager":"I am the manager","managerUserId":"Manager (user ID)","reportUserId":"Report (user ID)","userIdPlaceholder":"Enter user ID","dateLabel":"Date","dateRequired":"A date is required.","otherRequired":"The other participant is required.","agenda":"Agenda","agendaPlaceholder":"What will you discuss?","noAgenda":"No agenda set.","notes":"Notes","notesPlaceholder":"Meeting notes, action items…","noNotes":"No notes yet.","editNotes":"Edit notes","complete":"Complete","archive":"Archive","archiveConfirm":"Archive this 1:1 meeting?","cancel":"Cancel","save":"Save","saving":"Saving…"}}},"social":{"moduleTitle":"Social Hub","moduleDescription":"Manage every company social account from one place — compose once, route to many networks, schedule, approve, and reply.","empty":{"title":"No accounts connected yet","body":"Connect each company handle once per network to start posting."},"status":{"connected":"Connected","needsReconnect":"Needs reconnect","error":"Error"},"actions":{"compose":"Compose","schedule":"Schedule","approve":"Approve","reply":"Reply","connect":"Connect account"},"soon":"Coming soon"},"sheetsAi":{"title":"AI sidekick","close":"Close","actionFormula":"Formula","actionExplain":"Explain","actionClean":"Clean","actionSummarize":"Summarize","actionAsk":"Ask","actionFormulaHint":"Describe the formula you want — e.g. “sum revenue by month”.","actionExplainHint":"Select a cell with a formula to explain or fix.","actionCleanHint":"Select the range you want to clean.","actionSummarizeHint":"Summarize the selected range, or the whole sheet.","actionAskHint":"Ask a question about the selected data.","actionPivot":"Pivot","actionPivotHint":"Select a data block (with headers) and describe the pivot — e.g. “sum amount by region per month”.","actionCategorize":"Categorize","actionCategorizeHint":"Select rows to label; a category column is proposed to the right.","actionTranslate":"Translate","actionTranslateHint":"Select text cells and say the target language — preview before applying.","actionFillColumn":"Fill blanks","actionFillColumnHint":"Select a column (plus context columns); blanks in the first column get filled.","actionSampleData":"Sample data","actionSampleDataHint":"Describe the table you need; it’s inserted at the active cell.","actionAnomaly":"Anomalies","actionAnomalyHint":"Scan the selection (or sheet) for outliers and inconsistencies.","actionNarrative":"Report","actionNarrativeHint":"Write a short narrative report of the selected data.","actionCfRule":"Format rule","actionCfRuleHint":"Describe a conditional-format rule for the selection — e.g. “highlight amounts over 1000 in red”.","actionSmartFill":"Smart fill","actionSmartFillHint":"Select input columns plus a last column with a few filled examples — the pattern fills the rest.","actionAuditExplain":"Explain analysis","actionAuditExplainHint":"Explains audit or forecast results from the Tools panel.","gridTarget":"Writes {rows} × {cols} cells starting at {a1}.","gridOverwriteWarning":"Cells in that area will be overwritten — move your cursor first if needed.","promptPlaceholder":"e.g. sum revenue by month","voiceStart":"Dictate (voice → formula)","voiceStop":"Stop dictation","promptOptional":"Add focus or context (optional)…","run":"Run","thinking":"Thinking…","noSelection":"Select some cells to give me context.","insert":"Insert","applyFix":"Apply fix","apply":"Apply","applied":"Applied","copy":"Copy","copied":"Copied","noFix":"No changes needed — the formula looks correct.","cleanStats":"{before} rows → {after}; {cells} cells changed","cleanColsWarning":"Adds {n} column(s); cells to the right of your selection will be overwritten.","cleanNoChanges":"No changes needed — the data already looks clean.","moreChanges":"+{n} more","via":"via {model}","disclaimer":"AI can make mistakes. Review suggestions before applying.","readOnly":"You have view-only access — you can get suggestions but not apply them.","errorGeneric":"Something went wrong. Please try again."},"studio":{"title":"Studio Settings","subtitle":"Preferences for your Studio apps — Docs, Sheets and more. Changes apply to your account.","save":"Save","reset":"Reset to defaults","saving":"Saving…","saved":"Saved","error":"Couldn’t save — try again","empty":"You don’t have access to any Studio apps yet."},"studioCollab":{"hubTitle":"Studio Hub","hubTagline":"Your docs, sheets, presentations, designs and labels — private until you choose to share them.","newDoc":"New doc","newSheet":"New sheet","statOwned":"Your documents","statShared":"Shared with you","statFolders":"Folders","recent":"Recent","emptyRecent":"Nothing yet. Create a doc, sheet, presentation, design or label to get started.","sharedWithMe":"Shared with me","emptyShared":"Nothing has been shared with you yet.","sharedBy":"Shared by","foldersTitle":"Folders","newFolder":"New","newFolderPlaceholder":"Folder name…","create":"Create","emptyFolders":"No folders yet. Create one to group and share documents.","docsIn":"items","visibilityChip":{"private":"Private","shared":"Team","public":"Company"},"tiles":{"doc":{"name":"Docs","desc":"Rich documents and notes."},"sheet":{"name":"Sheets","desc":"Spreadsheets and data."},"presentation":{"name":"Presentations","desc":"Slide decks to present and publish."},"designer":{"name":"Designer","desc":"Diagrams, org charts and floor plans."},"label":{"name":"Label Maker","desc":"Design and print labels."},"dashboard":{"name":"Viewer","desc":"Turn Markdown into shareable, board-backed dashboards."}},"share":{"button":"Share","title":"Share","visibility":"Who can access","private":"Private","shared":"Team","public":"Company","privateHint":"Only you and the people you invite can open this.","sharedHint":"Everyone in this workspace can access it.","publicHint":"Any signed-in employee can view it.","people":"People with access","invitePlaceholder":"Invite people by name or email…","owner":"Owner","roleOwner":"Owner","roleAdmin":"Admin","roleEditor":"Can edit","roleViewer":"Can view","remove":"Remove","link":"Anyone with the link","linkHint":"Create a link anyone can open to view — even outside Redsis.","createLink":"Create link","copy":"Copy","copied":"Copied","revoke":"Revoke","noLinks":"No link yet.","close":"Done","cannotManage":"Only the owner or an admin can change sharing."}},"mail":{"keyboard":{"hint":"Keyboard shortcuts (press ?)","cheatSheetTitle":"Keyboard Shortcuts","cheatSheetClose":"Close","next":"Next message","prev":"Previous message","open":"Open message","done":"Mark done","delete":"Delete","toggleUnread":"Toggle read / unread","flag":"Flag / unflag","pin":"Pin / unpin","snooze":"Snooze until tomorrow","reply":"Reply","select":"Select / deselect row","clearFocus":"Clear focus / close pane","toggleCheatSheet":"Show / hide shortcuts"}},"mailRules":{"pageTitle":"Mail Rules","pageDescription":"Automatically sort, flag, or delete incoming messages based on conditions you define.","newRule":"New rule","noRules":"No rules yet.","noRulesHint":"Create a rule to automatically sort, flag, or delete messages.","ruleEnabled":"Enabled","ruleDisabled":"Disabled","moveUp":"Move up","moveDown":"Move down","editRule":"Edit rule","deleteRule":"Delete rule","deleteConfirm":"Delete this rule?","deleteConfirmDesc":"This action cannot be undone.","cancel":"Cancel","delete":"Delete","save":"Save","saving":"Saving…","create":"Create rule","creating":"Creating…","errorSave":"Failed to save rule.","errorDelete":"Failed to delete rule.","errorReorder":"Failed to reorder rules.","form":{"name":"Rule name","namePlaceholder":"E.g. Flag newsletters","account":"Apply to account","accountAll":"All accounts","matchMode":"Match mode","matchAll":"All conditions (AND)","matchAny":"Any condition (OR)","stopProcessing":"Stop processing more rules when this rule matches","conditions":"Conditions","addCondition":"Add condition","removeCondition":"Remove","actions":"Actions","addAction":"Add action","removeAction":"Remove","noConditions":"At least one condition is required.","noActions":"At least one action is required."},"field":{"from":"From","to":"To","subject":"Subject","body":"Body"},"op":{"contains":"contains","equals":"equals","startsWith":"starts with"},"action":{"move":"Move to folder","flag":"Flag message","markRead":"Mark as read","delete":"Delete message","label":"Apply label"},"valuePlaceholder":{"move":"Folder path, e.g. Archive","label":"Label name","conditionValue":"Value…"},"runNow":"Run on existing mail","runNowHint":"Apply this rule to messages already in your inbox.","runNowDisabled":"Save the rule first before running on existing mail.","account":"Account","enabled":"Enabled","conditions":"Conditions","actions":"Actions","stopProcessing":"Stop processing","order":"Order","name":"Name","emptyValue":"(no value)","nameRequired":"Rule name is required.","conditionValueRequired":"Condition value is required.","actionValueRequired":"Action destination is required.","backToInbox":"Back to inbox"},"mailSettings":{"hub":{"title":"Mail settings","subtitle":"Manage signatures and notification preferences for all your connected mailboxes.","signaturesTitle":"Signatures","signaturesDesc":"Create and manage rich-HTML email signatures. Assign them per account or globally, and choose whether they apply to new messages, replies, or both.","signaturesOpen":"Manage signatures","notificationsTitle":"Notifications","notificationsDesc":"Control how and when you are notified about new mail. Set per-account rules, build a VIP list, and configure quiet hours.","notificationsOpen":"Manage notifications"},"signatures":{"title":"Signatures","subtitle":"Your email signatures are stored on the server and available across all devices.","newSignature":"New signature","editSignature":"Edit signature","deleteSignature":"Delete signature","confirmDelete":"Are you sure you want to delete this signature? This cannot be undone.","setDefault":"Set as default","default":"Default","name":"Name","namePlaceholder":"e.g. Work — formal","bodyHtml":"Signature (HTML)","bodyText":"Plain text fallback","applyTo":"Apply to","applyToNew":"New messages only","applyToReply":"Replies only","applyToBoth":"New messages and replies","accountScope":"Account","accountScopeAll":"All accounts (global)","save":"Save","cancel":"Cancel","delete":"Delete","noSignatures":"No signatures yet. Create one below.","deleteSuccess":"Signature deleted.","saveSuccess":"Signature saved.","defaultSet":"Set as default.","errorRequired":"Signature name and body are required.","errorNameTooLong":"Name must be 120 characters or fewer.","errorApplyTo":"Apply-to must be \"new\", \"reply\", or \"both\"."},"notifications":{"title":"Notification preferences","subtitle":"Control how you are notified about new mail, per account or globally.","accountLabel":"Account","accountAll":"Global (all accounts)","newMailRule":"Notify me about","ruleAll":"All new messages","ruleVip":"VIP senders only","ruleNone":"No notifications","vipAddresses":"VIP addresses","vipAddressesHint":"Notifications will only be sent for messages from these senders when VIP mode is active.","vipAdd":"Add VIP address","vipAddPlaceholder":"name@example.com","vipRemove":"Remove","quietHours":"Quiet hours","quietHoursHint":"No new-mail notifications during this window (in-app badges still update).","quietStart":"From","quietEnd":"To","quietNone":"No quiet hours","sound":"Play a sound for new messages","save":"Save","cancel":"Cancel","reset":"Reset to defaults","saveSuccess":"Notification preferences saved.","errorBothHours":"Set both start and end, or neither.","errorHourRange":"Hours must be between 0 and 23.","errorVipEmail":"One or more VIP addresses are invalid.","noPrefs":"Using defaults — save your preferences to customize."}},"mailAyva":{"panelTitle":"Ayva AI","close":"Close Ayva panel","btnDraft":"Draft a reply","btnSummarize":"Summarize thread","btnOptions":"Reply options","loadingDraft":"Drafting reply…","loadingSummary":"Summarizing thread…","loadingOptions":"Generating reply options…","errorGeneric":"Ayva could not complete the request. Please try again.","draftTitle":"Draft reply","draftHint":"Review and copy this draft — it will never be sent automatically.","copyDraft":"Copy draft","copyOption":"Copy","copied":"Copied","openCompose":"Open in compose","summaryTitle":"Thread summary","bulletsSectionLabel":"Key points","actionItemsSectionLabel":"Action items","noActionItems":"None identified.","optionsTitle":"Reply options","optionsHint":"Pick a tone, then click a draft to copy it — review before sending.","toneLabel":"Tone","toneFormal":"Formal","toneFriendly":"Friendly","toneBrief":"Brief","optionLabel":"Option","sendModeLabel":"Draft mode","sendModeHint":"Ayva always creates drafts for your review. Auto-send is disabled.","draftNeverSend":"Draft & review (always on)"},"fsRouteBoundary":{"errorTitle":"This page couldn’t load","errorBody":"Something went wrong loading this view. Your data is safe — only this page render hit an issue. Try again, or head back.","reference":"Reference","retry":"Try again","back":"Go back","loading":"Loading…"},"fsTickets":{"selectAllAria":"Select all","selectTicketAria":"Select ticket","title":"Ticket Central","subtitle":"Your live service-desk command center — tickets across every client, field and in-house.","loading":"Loading tickets…","error":"Could not load Ticket Central.","empty":"No tickets match this view.","emptyHint":"Adjust the filters or clear them to see more.","grid":{"removeViewAria":"Remove view","closeAria":"Close","widgetSettingsAria":"Widget settings","removeWidgetAria":"Remove widget","edit":"Edit layout","done":"Done","addWidget":"Add widget","addView":"Add view","managementView":"Management view","reset":"Reset","saved":"Saved","sizeLabel":"Size","styleLabel":"Style","emptyTitle":"This view is empty","emptyBody":"Click “Edit layout”, then “Add widget” to build your view."},"seedTabs":{"all":"All tickets","triage":"Triage","inhouse":"In-house"},"filters":{"status":"Status","severity":"Severity","handling":"Handling","slaRisk":"SLA risk","search":"Search","searchPlaceholder":"Search title, client, site…","unassignedOnly":"Unassigned only","atRiskOnly":"At-risk only","clear":"Clear filters","all":"All","anyAssignee":"Any assignee","unassigned":"Unassigned","mine":"My claims","owner":"Owner","project":"Project","location":"Location","noLocation":"No location","pendingReview":"Pending review","moreFilters":"More filters","moreFiltersActiveOne":"1 active","moreFiltersActive":"{n} active","sort":"Sort","snState":"SN state","multiSelected":"{n} selected"},"groups":{"groupBy":"Group by","none":"No grouping","status":"Ticket status","snState":"SN state","collapse":"Collapse group","expand":"Expand group","openOnly":"Open tickets only","viewFilters":"View filters","sn":{"new":"New","in_progress":"In Progress","on_hold":"On Hold","resolved":"Resolved","closed":"Closed","canceled":"Canceled","none":"No SN state"}},"paging":{"range":"{from}–{to} of {total}","page":"Page {n} of {total}","prev":"Previous page","next":"Next page"},"columns":{"number":"Ticket #","ticket":"Ticket","client":"Client","site":"Site","severity":"Severity","severityShort":"Sev.","status":"Status","sp":"Assigned","received":"Received","sla":"SLA","sourceBoard":"Source board","snState":"SN state","receivedTooltip":"Opened in ServiceNow: {opened} · Received in Redsis: {received}"},"ticketOrigin":{"servicenow":"ServiceNow","boardSync":"Board sync","clientPortal":"Client portal","purchaseOrder":"Purchase order","email":"Email","excel":"Spreadsheet","webhook":"Webhook","system":"System"},"status":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"},"handling":{"external":"Field","internal":"In-house"},"bulk":{"selected":"{count} selected","assign":"Assign","severity":"Set severity","status":"Set status","claim":"Claim","release":"Release","clear":"Clear selection","run":"Apply","running":"Applying…","chooseSp":"Choose a service provider","chooseSeverity":"Choose a severity","chooseStatus":"Choose a status","reasonLabel":"Reason for the batch","reasonPlaceholder":"Reason (optional)","reasonRequiredLabel":"Reason for the batch (required)","reasonRequiredPlaceholder":"Reason (required)","reasonRequiredHint":"The reason is saved as a note on every selected ticket.","reasonRequiredError":"Write a reason for this batch — it is saved as a note on every selected ticket.","reasonTooLongError":"That reason is too long — keep it under 500 characters and try again.","slaTitle":"SLA exception","slaReasonLabel":"Reason (required)","slaReasonPlaceholder":"Why are these tickets not measured against SLA?","slaExclude":"Exclude from SLA","slaReinclude":"Measure again","slaHint":"Deadlines are not changed. The board's SLA column is not affected.","slaReasonRequiredError":"Write a reason for this batch.","slaTooMany":"Select at most 200 tickets per batch.","slaUnifiedWarning":"The exception was saved, but the unified SLA engine could not update {n} ticket(s). Let an administrator know.","done":"Done — {ok} updated.","partial":"Done — {ok} updated, {failed} failed.","failed":"Failed — {failed} ticket(s) could not be updated."},"claim":{"claim":"Claim","release":"Release","takeOver":"Take over","claimedByYou":"You’re dispatching this","claimedBy":"{name} is dispatching","dispatching":"Dispatching"},"widgets":{"table":"Ticket table","slaAtRisk":"Breached or at risk","unassigned":"Unassigned queue","byClient":"By-client health","noClient":"No client","spAvailability":"SP availability","internalLane":"In-house lane","depotLane":"Depot lane","kpi":"KPI stat","none":"Nothing here right now."},"kpi":{"open":"Open tickets","openPendingReview":"+{n} to review","atRisk":"Breached or at risk","unassigned":"Unassigned","completedToday":"Completed today","internal":"In-house open","metricLabel":"Metric"},"errors":{"loadFailed":"Could not load tickets.","claimFailed":"Could not update the claim.","bulkFailed":"Could not apply the bulk action."},"drill":{"subtitle":"Filtered view — a focused slice of the ticket queue.","summaryAll":"All open tickets, most urgent first.","count":"{count} matching","clear":"Clear filter","next":"Next","timeLeft":"{time} left","overdueBy":"{time} over","emptyTitle":"Nothing matches this filter","emptyBody":"No tickets meet these conditions right now. Clear the filter to see the full queue.","chipJoin":" · ","chip":{"status":"Status: {status}","breaching":"Breaching soon","breachingWindow":"Breaching within {window}","breached":"SLA breached","unassigned":"Unassigned","assignee":"Assigned to one provider","age":"Open longer than {age}","ageBand":"Aged {band}","ageBands":{"lt4h":"under 4h","4to24h":"4h to 24h","1to3d":"1 to 3 days","3to7d":"3 to 7 days","gt7d":"over 7d"}}},"nextStep":{"heading":"Next step","done":"Done"},"slaCell":{"paused":"SLA paused","excluded":"Excluded","met":"met","metLate":"met late","now":"now","snHint":{"inProgress":"In progress in ServiceNow","onHold":"On hold in ServiceNow","updatedAt":"upd. {time}","inProgressTitle":"ServiceNow has it in progress. The Redsis response clock keeps running until the technician finishes.","inProgressTitleOnContact":"ServiceNow has it in progress. The Redsis response clock keeps running until the client contact is logged or the technician arrives on site.","onHoldTitle":"ServiceNow has it on hold. The Redsis SLA clock keeps running while the ticket is not on hold here."}},"slaPanel":{"title":"SLA","leg":{"response":"Response","arrival":"Arrival","resolution":"Resolution"},"primary":"Primary","due":"Due","dueSince":"Was due","late":"late","paused":"Paused","overdueBy":"{time} over","timeLeft":"{time} left","none":"No measurable SLA on this ticket."},"warranty":{"title":"Warranty","emptyTitle":"No warranty claim on this ticket","emptyBody":"This ticket is not linked to a warranty claim.","fields":{"status":"Status","coverage":"Coverage","inWarranty":"In warranty","warrantyUntil":"Covered until","openedVia":"Opened via","serial":"Serial","product":"Product","reported":"Reported problem","decision":"Decision","opened":"Opened"},"yes":"Yes","no":"No","unknown":"Unknown","claimStatus":{"open":"Open","approved":"Approved","rejected":"Rejected","cancelled":"Cancelled"}}},"fsDocuments":{"tab":"Documents","title":"Ticket documents","description":"Generate and download the Proof of Repair (POR) for this ticket. Regenerating adds a new version — nothing is overwritten.","generate":"Generate POR","generating":"Generating…","language":"Language","languageEs":"Spanish","languageEn":"English","languagePt":"Portuguese (Brazil)","download":"Download","versionLabel":"POR","autoBadge":"Auto","empty":"No documents yet. Generate the first POR once the work is done.","error":"Could not generate the document. Please try again.","disabled":"Document generation is disabled.","regenerateNoDeliver":"Regenerate without sending to the customer","regenerateNoDeliverHint":"A new POR version will be created and the customer will NOT be notified (no email or SMS). Use it to fix a document that was already sent.","regenerateNoDeliverConfirm":"Yes, regenerate without sending","regenerateNoDeliverCancel":"Cancel","regenerateNoDeliverDone":"New version created. Nothing was sent to the customer."},"fsResolution":{"tab":"Resolution","title":"Resolution / Response","subtitle":"Record the in-house response and produce the service report.","start":"Start resolution","record":"Record resolution","edit":"Edit","save":"Save draft","saving":"Saving…","submit":"Submit & complete","submitting":"Submitting…","saved":"Saved","finalize":"Finalize report","fields":{"workPerformed":"Work performed","workPerformedPlaceholder":"What did you do to resolve this?","rootCause":"Root cause","resolutionSummary":"Resolution summary","partsUsed":"Parts used","addPart":"Add part","removePart":"Remove part","removePhoto":"Remove photo","sku":"SKU","qty":"Qty","partDescription":"Description","laborMinutes":"Labor (minutes)","photos":"Photos","addPhoto":"Add photo URL","photoUrlPlaceholder":"https://…","signatureName":"Signed by","customerSignOff":"Customer signed off","slaMet":"SLA met","followUpRequired":"Follow-up required","followUpNotes":"Follow-up notes","billable":"Billable","outcome":"Outcome"},"outcome":{"resolved":"Resolved","partially_resolved":"Partially resolved","needs_follow_up":"Needs follow-up","no_fault_found":"No fault found","rejected":"Rejected"},"status":{"draft":"Draft","final":"Final"},"existing":{"recordedBy":"Recorded by {name}","recordedAt":"Recorded {when}","noReport":"No service report yet.","viewReport":"View report","editReport":"Edit report"},"gate":{"techDispatched":"A technician is assigned to this ticket, so the service report is theirs to file. You can see it here as soon as they submit it — return the ticket to them if it needs to be redone.","addOwn":"The technician recorded a visit that did not resolve the ticket. Their record stays read-only; the resolution you write is added alongside it.","noPermission":"You can read this service report, but your role cannot write or edit it."},"lock":{"locked":"This resolution is locked — a service report (POR) was generated. Reopen the ticket to change it.","approveOnly":"A technician filed this resolution. You can approve it or return the ticket, but not edit over it.","reopen":"Reopen resolution","reopening":"Reopening…","reasonPlaceholder":"Reason for reopening (required)","reasonRequired":"A reason is required to reopen."},"ayva":{"tab":"Ayva","title":"Ayva assist","summarize":"Summarize ticket","summarizing":"Summarizing…","draft":"Draft resolution","drafting":"Drafting…","applyDraft":"Apply to form","summaryTitle":"Summary","draftTitle":"Proposed resolution","disabled":"Ayva assist is off","disabledHint":"An admin can enable it for Service Desk.","error":"Ayva could not complete that.","propose":"Propose action","suggestedActions":"Suggested actions"},"diagnose":{"tab":"Diagnose","title":"Diagnostics","open":"Open diagnostics","description":"Run a guided diagnostic session for this ticket."},"errors":{"submitFailed":"Could not save the service report.","workRequired":"Describe the work performed.","draftFailed":"Could not generate a draft.","loadFailed":"Could not load the resolution."}},"assetCustody":{"title":"Equipment custody","subtitle":"Where the physical machine is and who has it.","empty":"No equipment moves recorded yet.","add":"Record a move","save":"Record move","saving":"Recording…","event":"Move","from":"From","to":"To","note":"Note","condition":"Condition","serial":"Serial (if not registered)","none":"—","via":"via {source}","saveFailed":"Could not record the move.","kinds":{"pickup":"Picked up","dropoff":"Dropped off","swap_out":"Swapped out","swap_in":"Swapped in","return":"Returned","depot_in":"Into depot","depot_out":"Out of depot"},"locations":{"branch":"Branch","tech_van":"Tech van","depot":"Depot","stock":"Stock","oem":"OEM","client":"Client site"}},"fsBoardActions":{"tab":"Service Actions","title":"Ticket actions","subtitle":"Operate this service ticket without leaving the board.","ticketRef":"Ticket #{number}","statusLabel":"Status","statusValues":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"},"assignment":{"title":"Assignment","unassigned":"Unassigned","assignedTo":"Assigned to {name}","selectSp":"Select a service provider","assign":"Assign","assigning":"Assigning…","reassign":"Reassign","reasonPlaceholder":"Reason for reassignment","reasonRequired":"A reason is required to reassign.","assigned":"Assigned.","noSps":"No assignable service providers.","needsCapability":"You need dispatch permission to assign tickets.","groupReceivesApp":"Receives work in the app","groupNoApp":"Does not receive work in the app","noAppNote":"Options under “Does not receive work in the app” can still be assigned: the assignment is recorded, but the technician will not see the ticket on their phone.","assignedNoAppNotice":"{name} does not receive work in the app, so the ticket will not show up on their phone. The assignment is recorded."},"resolve":{"title":"Resolution","needsCapability":"You need resolve permission to record a resolution."},"close":{"title":"Fully close","subtitle":"Close the ticket and finalize it.","reasonPlaceholder":"Closing note (optional)","button":"Fully close ticket","confirm":"Confirm full close","cancel":"Cancel","closing":"Closing…","closed":"Ticket fully closed.","gatedNote":"Parts-return checks and the install-base update activate automatically when the gated-close switch is on.","needsCapability":"You need resolve permission to close tickets."},"route":{"title":"Route Builder","subtitle":"Plan the visit and dispatch a technician.","open":"Open Route Builder"},"errorGeneric":"Something went wrong. Please try again."},"permissionDeniedPage":{"title":"Access required","body":"You don't have permission to access {resource}.","defaultResource":"this resource","sent":"Your request has been sent. The owner will review it shortly and you'll be notified when they respond. Redirecting…","messageLabel":"Message (optional)","messagePlaceholder":"Tell the owner why you need access…","sending":"Sending…","requestAccess":"Request access","goHome":"Go to home","submitFailed":"Could not send the request.","genericError":"Something went wrong."},"moduleTroubleshooter":{"tabBoards":"Boards & resources","tabModules":"Modules & menu","tabHealth":"Module health","pickUser":"User","pickModule":"Module","searchUserPlaceholder":"Search by name or email…","searchModulePlaceholder":"Search modules by name, slug or route…","run":"Run diagnostic","running":"Running…","clear":"Clear","verdictAllow":"Everything passes — the menu entry shows and the module opens.","verdictWarn":"Opens, with warnings worth reading.","verdictBlock":"Blocked — the first failing gate below is the reason.","blockers":"blockers","diagnosing":"Diagnosing","forModule":"for module","notDeclared":"Not in the gate manifest yet","fix":"Fix","healthIntro":"Live structural scan of every module — problems sort first. Click a module to diagnose it for a specific user.","toConsole":"Open Modules Console","rescan":"Re-scan","scanning":"Scanning…","summaryTotal":"modules","summaryFailing":"failing","summaryWarnings":"with warnings","summaryOk":"healthy","colModule":"Module","colRoute":"Route","colIssues":"Findings","noIssues":"No findings — wiring looks correct.","diagnoseFor":"Diagnose for a user","selfCheckTitle":"Why can't I open this?","selfCheckShow":"Check my access","selfCheckChecking":"Checking…","selfCheckUnavailable":"No automated explanation is available for this page — use Request Access above.","selfCheckBlocked":"Found it — this is what's stopping you:","selfCheckClear":"Nothing on your account blocks this module — if it still fails, ask an admin to run the Access Troubleshooter."},"carrierTracking":{"title":"Carrier Tracking","subtitle":"Multi-carrier tracking (auto-detected) with proof-of-delivery, all in one board.","syncNow":"Sync now","syncing":"Syncing…","lastSync":"Last sync","never":"Never","freshHealthy":"Synced","freshStale":"Behind","freshDown":"Sync down","nextSyncIn":"next in ~{min} min","cfgTitle":"Connection setup","cfgReady":"{n}/{m} required connected","cfgHint":"This app's config template","cfgRequired":"Required","cfgOptional":"Optional","cfgSourceVault":"Vault","cfgSourceEnv":"Environment (ENV)","cfgSourceNone":"Not configured","cfgGenerate":"Generate secret","cfgRotate":"Rotate secret","cfgSecretRotated":"Secret generated — copy it, shown only once","cfgSecretOnce":"New secret (shown ONCE — copy it into the aggregator portal):","cfgOverlapNote":"The previous secret stays valid ~60 min so in-flight pushes are not dropped.","cfgKeySaved":"Key saved to the vault","cfgSaveKey":"Save","cfgApiKeyPlaceholder":"Paste the API key…","cfgTest":"Test","cfgTesting":"Testing…","attachTitle":"Attach to an existing board","attachHint":"Install tracking onto YOUR board: you enter the tracking number, the app updates the status","attachSelectBoard":"Pick the board","attachChoose":"Select a board…","attachMapCols":"Column mapping","attachNoMap":"not mapped","attachSave":"Save mapping","attachClear":"Remove attach","attachSaved":"Attach saved — when you enter a tracking number on a row, the app will update its status and dates","attachCleared":"Attach removed","attachMissing":"Missing required fields","attachTypeMismatch":"These fields do not fit the chosen column type","attachRequiredNote":"* Tracking Number and Status are required.","attachNoBoards":"You have no boards to attach.","connectTitle":"Connect carrier (this workspace’s account)","connectHint":"Connect this installation’s carrier account. The credential is stored encrypted and never shown back; you only see the status. Without a key, the app never tracks with someone else’s account.","connectOwnerOnly":"Only the workspace owner can connect carrier credentials.","connectConnected":"Connected","connectNotConnected":"Not connected","connectSaved":"Saved ✓","connectSave":"Save","connectReplace":"Replace","connectTest":"Test","connectTestOk":"Connection OK ✓","connectTestInvalid":"Invalid key ✗","connectTestMissing":"No credential","connectDisconnect":"Disconnect","connectDisconnected":"Disconnected","connectBlankKeeps":"(leave blank = unchanged)","connectError":"Error","attachEmptyBoardHint":"This board is empty — use \"＋ Create column\" on each field.","attachCreateCol":"Create column \"{name}\" ({type})","attachColCreated":"Column \"{name}\" created and mapped","search":"Search box, tracking #, order, client, part #…","filterCarrier":"Carrier","filterStatus":"Status","filterAll":"All","trackLink":"Open tracking","colBox":"Box","colTracking":"Tracking #","colCarrier":"Carrier","colStatus":"Status","colClient":"Client","colRecipient":"Recipient","recipientVerified":"Verified","recipientUnverified":"Unverified","recipientVerifiedHint":"Actual send-to (invoicetosend) — safe to auto-send.","recipientUnverifiedHint":"From the customer master (buyer) — may NOT be the real recipient; confirm before sending.","colSalesOrder":"Sales order","syncNothingToDo":"Nothing to check","filterProof":"Proof","filterProofMissing":"Missing","filterProofPresent":"Has one","colCpo":"Customer PO","noShipmentsFilterNarrowing":"But you have filters on, and they narrow before the search runs — {filters}.","searchScope":"Searched in: {fields}.","searchScopeNoPartNumbers":"Part numbers are NOT searched: they are not a column of this board — they are read from the ERP while the screen renders, and only for the loaded rows. If you typed one, this \"no results\" does NOT mean that shipment does not exist.","clearFiltersKeepSearch":"Clear the filters and search everything","searchMotiveByInvoice":"{n} by invoice number","searchMotiveBySalesOrder":"{m} by sales order","searchMotiveNoInvoice":"None of these match the invoice number you typed: what you see came up through another field. Sales orders share the same ERP RUSD sequence as invoices, so this can be ANOTHER client's shipment — check the number before you validate the proof of delivery.","monitorNoticesTitle":"Sync notices","monitorNoticesSummary":"{n} sync notice(s) — the detail is in the right panel.","monitorNoticesPartNumbers":"Part numbers could not be fetched","monitorNoticesLastRun":"Warnings from the last run ({total})","matchedBySalesOrder":"Matched on sales order","searchSiblingInvoices":"invoices of the same shipment","matchedBySiblingInvoice":"Matched on a sibling invoice (consolidated shipment)","siblingInvoicesHint":"The ERP splits invoices and tracking numbers BOTH ways: several invoices can travel under one tracking number, and one invoice can be split across several. All invoices on this shipment:","invoiceDateFromGroup":"This date belongs to the shipment’s invoice GROUP, not necessarily to the invoice shown beside it: the invoice table stores no date of its own.","matchedByCpo":"Matched on customer PO","matchedByHiddenHint":"This row came up because of a field that is not in the table, not the invoice.","colInvoice":"Invoice","colInvoiceDate":"Invoice date","colPartNumbers":"Part numbers","colEstimate":"Estimated","colDelivered":"Delivered","colPod":"POD","colLastSync":"Last sync","colActions":"Actions","pod":"POD","podHtml":"POD HTML","podPdf":"POD PDF","podSource":"POD source","podOnedrive":"OneDrive","podNone":"No POD yet","moreActions":"More actions","podFetchNow":"Get POD now","podFetching":"Fetching…","podFetchCaptured":"Proof of delivery captured.","podFetchNotDelivered":"No delivery date on record — there is no proof to fetch. Use \"Check status\".","podFetchNoProofYet":"The carrier has not issued the proof yet","podFetchUnsupported":"This carrier does not provide proof-of-delivery documents.","podFetchFailed":"The proof of delivery could not be fetched.","podAttach":"Attach proof","podAttaching":"Attaching…","podAttachHint":"Upload the capture you took from the carrier page (PNG, JPG, WEBP or PDF, up to 10 MB).","podAttachDone":"Proof attached.","podAttachBadType":"Unsupported file — PNG, JPG, WEBP or PDF only.","podAttachTooLarge":"The file is larger than 10 MB.","podAttachNoStorage":"Proof storage is not configured on this server.","podAttachFailed":"The proof could not be attached.","uspsWebCheck":"Check status","uspsWebChecking":"Checking…","uspsWebStageOpening":"Opening the USPS page…","uspsWebStageReading":"Reading the tracking…","uspsWebStagePreparing":"Checking whether there is proof…","uspsWebStageAlmost":"Almost there…","uspsWebQueued":"Queued — it will be checked automatically","uspsWebExpired":"{carrier}: tracking expired","summaryRow":"shipment","summaryRows":"shipments","summaryDelivered":"Delivered","summaryWithPod":"With proof","summaryMissingPod":"Delivered, no proof","uspsWebStoppedReturned":"USPS returned the parcel to the sender. There will be no delivery and no proof.","uspsWebStoppedGeneric":"Tracking stopped for this parcel. Use “Check status” to look it up again.","uspsWebStalled":"No news from USPS since {date}. We stopped checking; “Check status” starts it again.","carrierGeneric":"the carrier","carrierNoRecordYet":"USPS has no record of this label yet","carrierApiBlocked":"USPS blocks our API access; status comes from the public page","carrierSyncProblem":"We couldn't sync with the carrier","statusNoRecord":"{carrier}: no record","carrierNeverHadRecord":"{carrier} never received this label. There is no delivery to confirm.","statusUnconfirmed":"Delivery to confirm","unconfirmedStillChecking":"eBay says it probably arrived, but the carrier hasn't confirmed it yet. We keep checking on our own — nothing for you to do.","unconfirmedTooOld":"Old shipment — eBay says it was delivered on {date}, but more than {days} days have passed and {carrier} no longer keeps the tracking to check it. This is the best data there is; to confirm it, look the order up on eBay.","unconfirmedTooOldNoDate":"Old shipment — eBay says it was delivered, but more than {days} days have passed and {carrier} no longer keeps the tracking to check it. To confirm it, look the order up on eBay.","reopenUnconfirmed":"Reopen unconfirmed","reopenUnconfirmedHint":"Puts back in the polling queue the shipments that were closed with no delivery date and no proof, and that the carrier can still answer for.","reopenUnconfirmedDone":"{n} shipment(s) went back into the polling queue.","reopenUnconfirmedNone":"There are no closed unconfirmed shipments left to reopen.","uspsWebReadCaptured":"Delivered. The proof of delivery is ready. ✓","uspsWebReadNoDelivery":"USPS has not recorded the delivery yet. Check again in a few days.","uspsWebReadStatus":"USPS says \"{status}\" — the delivery is not recorded yet.","uspsWebReadNoProof":"USPS recorded the delivery, but the proof is not there yet. Check again in a few days.","uspsWebNoRecord":"USPS has no information on this tracking number.","uspsWebBlocked":"USPS would not let us in right now. Try again in a little while.","uspsWebCallSomeone":"Someone from systems has to look at this — trying again will not fix it.","uspsWebNetworkError":"We could not connect to check. Try again in a little while.","uspsWebTooSoon":"Wait {seconds} seconds before checking again.","uspsWebDateKept":"We already had the delivery date for this shipment and it was not changed.","uspsWebNotUsps":"Only USPS shipments can be checked this way.","uspsWebBadTracking":"This row's tracking number does not look like a USPS one.","uspsWebFailed":"The USPS status could not be checked.","uspsWebPodNotDelivered":"It is not marked delivered yet, so the proof was not requested.","connectionTitle":"Carrier connections","configured":"Configured","notConfigured":"Not configured","missingCreds":"Missing credentials","degradeHint":"Unconfigured carriers are skipped during sync — the board still works.","noShipments":"No shipments yet.","noShipmentsHint":"Shipments appear here once they are imported or synced from the carriers.","noShipmentsForSearch":"No shipment matches “{q}” — ALL {total} shipments on the board were searched, not just the loaded ones.","noShipmentsForSearchFiltered":"No shipment matches “{q}” — the whole table was searched, but only among the ones that pass the filter.","noShipmentsLoadFailed":"The shipments could not be loaded — see the error above. This is NOT an empty board.","truncatedNotice":"Showing {shown} of {total} shipments matching the filter.","noShipmentsTruncated":"No matches in the loaded view — there are {total} shipments matching the filter.","noShipmentsTruncatedUnfiltered":"No matches in the loaded view — there are {total} shipments in total.","truncatedNoticeUnfiltered":"Showing {shown} of {total} shipments.","noShipmentsForFilter":"No shipment matches the active filter — the board holds {total} shipments in total.","syncDone":"Sync complete","syncSummary":"{seeded} seeded · {updated} updated · {events} new scans · {pods} PODs · {errors} errors","syncStarted":"Sync started in the background.","syncRunning":"Syncing in the background… {n} shipments processed.","syncAlreadyRunning":"A sync is already running in the background.","connectorDegraded":"The on-prem connector call failed, so recipient and part-number columns are temporarily empty. The board and syncing keep working.","connectorSlow":"The on-prem connector did not answer within this page’s time budget, so recipient and part-number columns are empty on this load. It may be perfectly healthy — just slower than the page allows. It keeps working in the background; reload to try again.","untrackableNotice":"{n} shipment(s) are outside the automatic sync: their carrier is not one of the supported ones, so the 30-minute run skips them. They keep the status their source last wrote, with no delivery date and no proof. Try “Sync now” on a row: if a provider can identify the carrier it polls the row right there and the row rejoins tracking on its own; if it answers “Nothing to sync”, fix the carrier at the source (the ERP) so it rejoins the run.","carrierUnknownBadge":"not trackable","carrierUnknownHint":"This row is outside the automatic sync: its carrier is not one of the supported ones, so the 30-minute run skips it and the status you see is whatever its source last wrote. Try “Sync now” on this row: if a provider can identify the carrier it polls the row right there and the row rejoins tracking on its own; if it answers “Nothing to sync”, fix the carrier at the source (the ERP).","warningsCount":"Latest run warnings ({shown} of {total})","warningsShowAll":"Show all {total}","reprocessErrors":"Reprocess {count} error rows","reprocessOne":"Reprocess","reprocessDone":"Errored shipments reprocessed","uspsPodTitle":"USPS — proof of delivery","uspsPodHint":"The USPS API still refuses to track these packages (403 — the label was bought by eBay, so its Mailer ID is not ours), which is why their delivery comes from eBay with no date. But the date CAN be obtained: it is read off the USPS public tracking page, with «Check status» on a row or by the automatic pass when it is switched on. Once the date is there, the proof of delivery is produced on its own. These two controls are only for the API path.","uspsProbe":"Test USPS access","uspsProbing":"Testing…","uspsProbeAuthorized":"USPS answered — access is authorized. You can reopen the shipments.","uspsProbeBlocked":"USPS still blocks us","uspsProbeNoShipments":"No USPS shipments to test with.","uspsProbeOtherError":"The test could not be completed","uspsProbeFailed":"The USPS access test could not be run.","uspsReopen":"Reopen USPS shipments","uspsReopenLocked":"Enabled only after the test says USPS authorized us — reopening while the block is up just burns the hourly quota.","uspsReopened":"{n} USPS shipments reopened — they are back in the tracking queue. USPS allows 60 lookups per hour, so the queue drains slowly: with several hundred shipments it can take most of a day. The scheduled sync works through it on its own.","uspsReopenNone":"No USPS shipment needed reopening.","latestWarnings":"Latest run warnings","runHistoryTitle":"Run history","runHistoryHint":"Recent manual/cron runs, warnings, and sync counts.","runColStarted":"Started","runColTrigger":"Trigger","runColStatus":"Status","runColUpdated":"Updated","runColEvents":"Events","runColPods":"PODs","runColErrors":"Errors","runColWarnings":"Warnings","statusLabelCreated":"Shipment information sent","statusPickedUp":"Picked up","statusInTransit":"On the way","statusAtFacility":"Arrived at facility","statusOutForDelivery":"On vehicle for delivery","statusDelivered":"Delivered","statusReadyForPickup":"Ready for pickup","statusException":"Delivery exception / clearance delay","statusReturned":"Returned to sender","statusCancelled":"Cancelled","statusUnknown":"Unknown","syncError":"Sync could not be completed.","permissionDenied":"You do not have permission to sync carrier shipments.","syncRowUpdated":"Updated to {status}","syncRowNoChange":"No changes — still {status}","syncRowError":"Could not sync this shipment","syncRowSkipped":"Nothing to sync — no carrier is connected for this shipment","syncSelected":"Sync selected ({n})","clearSelection":"Clear selection","selectAllRows":"Select all shipments","selectRow":"Select shipment","syncSelectedStarted":"Syncing {n} selected shipments in the background.","syncSelectedDone":"{ok} synced · {skipped} skipped · {errors} errors","syncSelectedNoneActive":"None of the selected shipments can be synced — they are delivered or inactive.","syncSelectedTooMany":"Select at most {max} shipments to sync at once.","connectAggregatorDesc":"17TRACK · aggregator (auto-detects the carrier)","connectAccountNumber":"Account number (optional · for POD)","carrierOther":"Other","loadErrorPrefix":"Could not load the module shipments (the database may not be migrated yet):","sysBoardUnifiedName":"Shipment tracking","sysBoardActiveName":"Active shipments","sysBoardDeliveredName":"Delivered"},"fsBridge":{"title":"Field Service bridge","subtitle":"Sync this Tickets board with Field Service","statusHeading":"Sync status","state":"State","live":"Live","off":"Off","bridgedCount":"Tickets bridged","archiveTarget":"On close","archiveBoard":"Move to Archived Tickets","archiveInPlace":"Archive item in place","mappingHeading":"Field mapping","mappingHint":"Which board column feeds each ticket field. Auto-derived from this board; refine the columns on the board itself.","unmapped":"not mapped","backfillHeading":"Backfill","backfillHint":"Create or refresh a ticket for every existing item on this board. Safe to re-run.","backfillButton":"Backfill tickets","backfillDone":"Done — {created} created, {updated} updated, {skipped} skipped.","backfillFailed":"Backfill failed.","needCap":"Requires the Field Service integrations capability.","errorsHeading":"Last-sync errors","noErrors":"No recent errors."},"clientPortal":{"brandName":"RedsisOne","portalName":"Client Portal","access":{"setupTitle":"Set up your account","setupSubtitle":"Enter your details and verify your phone to activate your access.","emailLabel":"Email","companyLabel":"Company","firstNameLabel":"First name","lastNameLabel":"Last name","passwordLabel":"Password","confirmLabel":"Confirm password","phoneLabel":"Mobile phone","phoneHelp":"Include the country code, e.g. +1 555 123 4567. We'll send your code by text and email.","createButton":"Send verification code","creating":"Sending…","verifyTitle":"Verify your account","verifySubtitle":"Enter the 6-digit code we sent to your phone and your email.","sentTo":"Sent to","phoneHelpSmsOnly":"Include the country code, e.g. +1 555 123 4567. We'll text you a code.","verifySubtitleSmsOnly":"Enter the 6-digit code we texted to your phone.","alsoEmailed":"We also emailed you the code — check your inbox if the text does not arrive.","codeLabel":"Verification code","verifyButton":"Activate account","verifying":"Activating…","noCode":"Didn't get a code?","resend":"Resend code","resending":"Sending…","existingAccountTitle":"You already have an account","existingAccountBody":"You already have an account: sign in to accept the invitation.","signInToAccept":"Sign in","signingIn":"Opening sign-in…","existingNoPassword":"Your account has no password yet: use \"Forgot password?\" to create one.","forgotPasswordLink":"Forgot password?","invalidTitle":"Invite unavailable","invalidBody":"This invite link is invalid or has expired. Please contact your Redsis representative for a new one.","panel":{"title":"Invite a person","emailLabel":"Email","nameLabel":"Name (optional)","submit":"Send invite","sending":"Sending…","hint":"The person must be on the access list. We email them a secure setup link.","successHeading":"Invite sent. You can also share this link:","copy":"Copy link","copied":"Copied","guideTitle":"Two steps to give someone access","guideStep1Lead":"Add their email to the ","guideStep1Tail":" access board, with Access Status set to Active or Invited.","guideStep2":"Come back and invite them here. We email them a secure setup link.","deniedTitle":"Not on the access list yet","deniedLead":"This email isn't authorized yet. Add it to the ","deniedTail":" access board (Access Status Active or Invited), then invite again.","openBoard":"Open the access board","boardClient":"Clients","boardVendor":"Vendors","boardTech":"Technicians"},"redixBlocked":{"title":"Redix enforcement is ON, but Redix isn’t connected — invites will fail.","intro":"Every invite is being rejected with “Redix is not connected yet.” Fix it one of two ways:","optionOffLead":"Turn enforcement off (recommended until Redix is wired) in ","optionOffLink":"Portals → Settings","optionOffTail":" — the “Enforce Redix account validation” switch. It takes effect on the next invite, no redeploy.","optionWireLead":"Or wire the Redix API (set ","optionWireMid":" and ","optionWireTail":") to keep enforcement on.","notice":"Inviting is paused: Redix enforcement is on but Redix isn’t connected. Turn it off in Portals → Settings, or wire the Redix API."},"userSetup":{"title":"Add a user","subtitle":"Choose how this person gets access, then add them.","modeAdminSet":"Set a password now","modeAdminSetHint":"Create the login and hand over the password — they can sign in right away. No phone or code needed.","modeEmail":"Email invite (no phone)","modeEmailHint":"They get a link, set their own password, and confirm with a code sent to their email.","modeOtp":"Secure invite (phone + code)","modeOtpHint":"They set a password and verify a one-time code sent by SMS, with email as a backup.","emailLabel":"Email","nameLabel":"Name (optional)","companyLabel":"Company (optional)","passwordLabel":"Password","passwordPlaceholder":"Leave blank to generate a strong one","generate":"Generate","mustChangeLabel":"Ask them to set a new password on first sign-in","createLogin":"Create login","working":"Working…","credsHeading":"Login created — copy these now","credsNote":"The password is shown once. Share it securely.","credsEmailLabel":"Email","credsPasswordLabel":"Password","credsMustChange":"They will be asked to set a new password on first sign-in.","copy":"Copy","copied":"Copied","error":"Something went wrong. Please try again."},"memberActions":{"manage":"Manage access","close":"Close","passwordPlaceholder":"New password (blank = generate)","mustChange":"Ask for a new password on first sign-in","savePassword":"Save password","activate":"Activate now","resend":"Resend invite","generateCode":"Generate code","passwordDone":"Password set — copy it now:","activatedDone":"Activated. They can sign in now.","codeDone":"Activation code (read it to them):","inviteDone":"New setup link:","copy":"Copy","copied":"Copied","error":"That didn’t work. Please try again.","working":"Working…"}},"nav":{"sectionService":"Service","sectionTracking":"Tracking","home":"Home","myTickets":"My tickets","openTicket":"Open a ticket","warranties":"Warranties","repairs":"Repairs","library":"Technical library"},"topbar":{"searchPlaceholder":"Search…","help":"Help","notifications":"Notifications","account":"Account"},"userCard":{"company":"Company","noCompany":"No client linked"},"home":{"title":"Home","greeting":"Hello, {company}","subtitle":"Your company's service overview.","kpiOpen":"Open tickets","kpiInProgress":"In progress","kpiPending":"Pending with you","kpiCompleted30d":"Completed (30 days)","kpiWarranties":"Warranties in progress","kpiEquipment":"Equipment in repair","recentTitle":"Latest updates","viewAll":"View all","slaWidgetTitle":"Ticket SLA","slaOnTime":"On time","slaAtRisk":"At risk","slaBreaching":"Breach risk","noticesTitle":"Redsis notices","noticesEmpty":"No notices right now."},"tickets":{"title":"My tickets","subtitle":"Track every service request opened for your company.","open":"Open a ticket","empty":"You have no tickets yet.","noScope":"Your account is not linked to a client yet. Contact your Redsis representative to get access.","colTicket":"Ticket","colSubject":"Subject","colCategory":"Category","colStatus":"Status","colAssignee":"Technician","colOpened":"Opened","colSla":"SLA","unassigned":"Unassigned","filterAll":"All","filterOpen":"Open"},"filters":{"search":"Search","status":"Status","category":"Category","equipment":"Equipment","priority":"Priority","all":"All"},"detail":{"back":"Back to my tickets","notFound":"Ticket not found.","timeline":"Activity","conversation":"Conversation","timelineEmpty":"No activity yet.","reply":"Reply","replying":"Sending…","replyPlaceholder":"Write a reply…","replyEmpty":"Write a message.","you":"You","evidenceTitle":"History & evidence","attachments":"Attachments","timeWorked":"Time worked","reopens":"Reopens","confirmReceipt":"Confirm receipt","confirmingReceipt":"Confirming…","details":"Details","sla":"SLA","status":"Status","severity":"Priority","category":"Category","assignee":"Technician","opened":"Opened","site":"Site","description":"Description","system":"System"},"garantias":{"title":"Warranties","subtitle":"Track your company's warranty-part shipments.","tableTitle":"Parts under warranty","empty":"No warranty parts at the moment.","colSerial":"Serial","colItem":"Item / Serial","colShipStatus":"Shipping status","colTracking":"Tracking","colRecipient":"Recipient","colShipped":"Shipped","colExpected":"Expected","colFaulty":"Faulty part","colReplacement":"Replacement","fixtureNote":"Demo data — warranty logistics integration is not available yet.","stage":{"requested":"Requested","picking":"Picking","dispatched":"Dispatched","in_transit":"In transit","delivered":"Delivered","damaged_received":"Faulty unit received"}},"reparos":{"title":"Repairs","subtitle":"Track your equipment being repaired at the Redsis bench.","podNote":"When the POD is generated, the equipment has been repaired and is ready to ship — you will receive the proof of delivery.","empty":"No equipment in repair at the moment.","noEquipment":"Equipment not specified","noFilial":"Site not specified","lane":{"received":"Received","on_bench":"On bench","repaired":"Repaired","pod_generated":"POD generated","shipped":"Shipped"}},"biblioteca":{"title":"Technical library","subtitle":"Manuals, drivers, installers and tutorials for your equipment.","searchPlaceholder":"Search the library…","recentTitle":"Recently accessed","empty":"No content found.","download":"Download","fixtureNote":"Demo data — the technical content library is not available yet.","category":{"manuals":"Manuals","drivers":"Drivers","installers":"Installers","procedures":"Procedures","tutorials":"Tutorials","videos":"Videos"}},"openForm":{"subtitle":"Describe the problem and we'll open a ticket for your company.","category":"Category","serviceType":"Service type","priority":"Priority","product":"Product","serialNumber":"Serial number","site":"Store/branch","problem":"Reported problem","impact":"Operational impact","contactName":"Contact","contactPhone":"Phone","attachments":"Attachments","attachmentsHint":"Drag files here or click to select","saveDraft":"Save draft","submit":"Submit ticket","submitting":"Sending…","selectPlaceholder":"Select…","titlePlaceholder":"Problem summary","successDraft":"Draft saved.","required":"Enter the reported problem.","priorityS1":"S1 — Critical","priorityS2":"S2 — High","priorityS3":"S3 — Medium","priorityS4":"S4 — Low","serviceTypes":["On site","Remote","Depot / bench"],"defaultCategories":["Hardware","Software","Network","Installation","Preventive maintenance","Warranty"],"howItWorksTitle":"How it works","howItWorksSteps":["You open a ticket with the problem details.","Redsis classifies it and assigns a technician.","Track progress and SLA in real time."],"integrationsTitle":"Integrations coming soon","integrationWhatsApp":"Open via WhatsApp","integrationAi":"AI triage","soon":"Soon"},"login":{"title":"Sign in","subtitle":"Access the Redsis Client Portal.","heroTitle":"All your Redsis service in one portal","heroSubtitle":"Open tickets, track SLAs, warranties and repairs — all in one place.","bullets":["Open and track service tickets","Real-time SLA, no surprises","Talk directly with the technical team","Secure access to your operation"],"footer":"© Redsis. All rights reserved.","email":"Username or email","password":"Password","rememberMe":"Keep me signed in","signIn":"Sign in","signingIn":"Signing in…","verify":"Verify","verifying":"Verifying…","mfaLabel":"Verification code","mfaHint":"Enter the 6-digit code from your authenticator app.","activateAccount":"Activate account","mfaSoon":"Two-factor authentication (MFA) coming soon.","invalidCredentials":"Invalid username or password.","rateLimited":"Too many attempts. Try again in {seconds}s.","accountLocked":"Account locked. Try again in {minutes} min.","loginFailed":"Could not sign in. Please try again."},"status":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"},"suite":{"nav":{"eyebrow":"Service portal","home":"Home","tickets":"My tickets","newTicket":"Open a ticket","warranties":"Warranties","repairs":"Repairs","library":"Technical library","chat":"Chat","announcements":"Announcements","boards":"Boards","updates":"Updates","forms":"Forms","dashboards":"Dashboards","pages":"Pages","security":"Security","poweredBy":"Powered by","switchPortal":"Switch portal","signOut":"Sign out","toggleTheme":"Toggle theme"},"home":{"greetingMorning":"Good morning, {name}","greetingAfternoon":"Good afternoon, {name}","greetingEvening":"Good evening, {name}","subtitle":"Here's where {client}'s service stands today.","openTicket":"Open a ticket","kpiOpen":"Open tickets","kpiOpenSub":"{n} in progress","kpiPending":"Pending on you","kpiPendingSub":"reply requested","kpiCompleted":"Completed · 30 days","kpiCompletedSubAll":"all within SLA","kpiCompletedSubPct":"{pct}% within SLA","kpiWarranties":"Active warranties","kpiWarrantiesSub":"{n} in transit","kpiRepairs":"Equipment in repair","kpiRepairsSub":"{n} on the bench","kpiResponse":"Avg. first response","kpiResponseSub":"last 90 days","recentTitle":"Recent updates","allTickets":"All tickets","recentEmpty":"No activity yet — updates on your tickets will appear here.","slaTitle":"Service level","slaOnTarget":"on target","slaCaption":"tickets resolved within SLA · last 90 days","slaEmpty":"No resolved tickets yet.","teamTitle":"Your service team","teamTech":"Field technician","teamCoordinator":"Service coordinator","teamEmpty":"Your service team appears here once a ticket is assigned.","openChat":"Open chat →","maintenanceBadge":"Maintenance","viewAnnouncement":"View announcement"},"ticketsScreen":{"title":"My tickets","subtitle":"Every request {client} has open with Redsis service.","filterAll":"All","filterOpen":"Open","filterInProgress":"In progress","filterPending":"Pending on you","filterCompleted":"Completed","colTicket":"Ticket","colSubject":"Subject","colCategory":"Category","colPriority":"Priority","colStatus":"Status","colSla":"SLA","colUpdated":"Updated","slaMet":"Met","empty":"No tickets yet — open your first ticket to get started.","emptyFiltered":"No tickets match this filter.","footer":"SLA shows how much of the response window has been used. You only ever see {client}'s own tickets.","noScope":"Your account is not linked to a client yet. Contact your Redsis team to get access."},"status":{"open":"Open","inProgress":"In progress","pending":"Pending on you","completed":"Completed","cancelled":"Cancelled"},"priority":{"S1":"Critical","S2":"High","S3":"Medium","S4":"Low"},"steps":{"received":"Received","assigned":"Assigned","part_dispatched":"Part dispatched","on_site":"On site","resolved":"Resolved","confirmed":"Confirmed"},"warrantySteps":{"requested":"Requested","picking":"Picking","dispatched":"Dispatched","in_transit":"In transit","delivered":"Delivered","defective_received":"Defective received"},"detail":{"back":"My tickets","openedBy":"Opened {date} by {name}","priority":"{p} priority","tapeCaption":"The ticket closes once you confirm the fix.","tapeCancelled":"This ticket was cancelled — progress is shown up to where work stopped.","confirmTitle":"Your service team marked this ticket as resolved.","confirmBody":"Please confirm you received the fix — this closes the loop on our side.","confirmCta":"Confirm receipt","confirming":"Confirming…","confirmedTitle":"Receipt confirmed","confirmedBody":"recorded {date} and shared with your service team.","createdBy":"Ticket created by {name} · {date}","techChip":"Redsis · Service team","replyPlaceholder":"Reply to your service team…","send":"Send","sending":"Sending…","replyFailed":"Could not send your reply. Please try again.","evidence":"Evidence","slaConsumed":"SLA consumed","timeWorked":"Time worked","reopens":"Reopens","attachments":"Attachments","visits":"On-site visits","signatureProof":"Proof of service","signedBy":"Signed by {name}","assignedTitle":"Assigned","assignedRole":"Field technician","unassigned":"Not assigned yet","documentsTitle":"Documents","porName":"Proof of Repair (POR)","documentDownload":"Download","csat":{"title":"Rate this service","prompt":"How would you rate the service you received?","commentPlaceholder":"Anything you want to add? (optional)","submit":"Submit","submitting":"Submitting…","error":"Could not submit your rating. Please try again.","ratedLabel":"Your rating","thanks":"Thanks for your feedback!"},"equipment":"Equipment","notFound":"Ticket not found.","you":"You","events":{"created":"Ticket created","created_draft":"Draft created","assigned":"Technician assigned","sp.en_route":"Technician en route","sp.arrived":"Technician on site","sp.completed":"Work completed","client_receipt_confirmed":"Receipt confirmed","client_reply":"Client replied","parts_approved":"Part approved","parts_pickup_added":"Part pickup scheduled","status_changed":"Status updated","tech.signature_added":"Proof of service signed","por.generated":"Proof of Repair document generated"},"tracking":{"title":"{name} is on the way","titleNoName":"Your technician is on the way","onSite":"Technician on site.","onSiteBody":"{name} has arrived and is working on this ticket.","onSiteBodyNoName":"Your technician has arrived and is working on this ticket.","unavailable":"Location temporarily unavailable","unavailableBody":"The live position will reappear as soon as the technician's device reports it.","etaLine":"{dist} km away · {min} min drive · arriving ~{time}","etaLineNoDrive":"{dist} km away","updated":"Position updated {time}","loadingMap":"Loading map…","etaSourceNote":"Live ETA via Google Routes — updates with traffic","etaNoProviderNote":"Drive time unavailable — distance is straight-line"}},"newTicket":{"title":"Open a ticket","subtitle":"Tell us what's wrong — your service team is notified the moment you submit. Fields on this form are configured per portal by your Redsis team.","category":"Category","type":"Type","priority":"Priority","site":"Branch / site","product":"Product / equipment","serial":"Serial number","serialOptional":"(optional)","problem":"What's the problem?","impact":"Operational impact","contact":"Contact","phone":"Phone","attachments":"Attachments","problemPlaceholder":"Describe what's happening, when it started, and what you've already tried…","impactPlaceholder":"e.g. Lane 3 closed, checkout queues doubling at peak","productPlaceholder":"e.g. Ingenico Lane 7000","serialPlaceholder":"S/N","phonePlaceholder":"+57 …","selectPlaceholder":"Select…","typeIncident":"Incident — something is broken","typeRequest":"Service request","typeQuestion":"Question","priorityS1":"Critical — operations stopped","priorityS2":"High — major impact","priorityS3":"Medium — degraded, workaround exists","priorityS4":"Low — minor issue","dropzone":"Drop photos or logs here, or browse — up to 50 MB per file","saveDraft":"Save draft","draftSaved":"Draft saved on this device.","submit":"Submit ticket","submitting":"Submitting…","successTitle":"Ticket submitted.","successBody":"Your reference is {ref} — your service team has been notified.","problemRequired":"Describe the problem before submitting.","fileTooLarge":"{name} is over the 50 MB per-file limit.","submitFailed":"Could not submit the ticket. Please try again.","configCaption":"Fields on this form are configured per portal."},"warranties":{"title":"Warranties","subtitle":"Live tracking for every warranty part — from request to defective return.","colPart":"Part","colQty":"Qty","colCarrier":"Carrier","colTracking":"Tracking","colEta":"ETA","awaitingReturn":"Please ship the defective part back — the warranty closes when we receive it.","empty":"No active warranties.","statusCancelled":"Cancelled","forTicket":"for {ticket}"},"library":{"title":"Technical library","subtitle":"Manuals, drivers, firmware and guides published for your products.","empty":"No documents have been published to your portal yet.","download":"Download","kinds":{"manual":"Manual","driver":"Driver","firmware":"Firmware","installer":"Installer","sop":"SOP","tutorial":"Tutorial","video":"Video","document":"Document"}},"repairs":{"title":"Repair status","subtitle":"Equipment at the Redsis depot. A signed proof of delivery closes the repair automatically.","colReceived":"Received","colBench":"On bench","colRepaired":"Repaired","colPod":"POD","colShipped":"Shipped","podNote":"POD signed → closing","footer":"Read-only view — stages update live from the Redsis depot workflow.","empty":"No equipment in repair right now.","receivedOn":"Received {date}"},"chat":{"title":"Chat","subtitle":"A direct line to your Redsis service team — replies also land in your ticket threads.","related":"Related: {ref}","headerTitle":"{client} × Redsis service","hostedNote":"Hosted on Redsis One — no third-party chat","inputPlaceholder":"Write a message…","send":"Send","sending":"Sending…","empty":"No conversations yet. Your service team will start one with you here.","loading":"Loading…","noMessages":"No messages yet. Reply below to get started.","selectConversation":"Select a conversation.","conversation":"Conversation"},"announcements":{"title":"Announcements","subtitle":"Maintenance windows and service notes from your Redsis team.","maintenance":"Maintenance","newFeature":"New feature","notice":"Notice","empty":"No announcements yet."},"login":{"title":"Sign in","subtitle":"Use the credentials you set when you accepted your invitation.","sharedTitle":"Client sign-in","sharedSubtitle":"One sign-in for all your Redsis portals.","email":"Email","password":"Password","signIn":"Sign in","signingIn":"Signing in…","forgot":"Forgot password?"},"picker":{"title":"Choose a portal","subtitle":"Your account belongs to more than one portal — pick where to go.","continueTo":"Continue","notLinked":"Your account has no active portal access."},"subheaderLabel":"Service portal","footer":{"operatedBy":"Operated by Redsis","tagline":"Technology you can rely on. People you can count on.","support":"Support","sla":"SLA","returns":"Returns"}}},"turnstileGate":{"required":"Please complete the security check and try again.","loadFailed":"The security check could not load. Refresh the page and try again.","verifying":"Verifying…","retry":"Try again","slow":"The security check is taking longer than usual. You can wait a few more seconds or tap Try again.","interactive":"Tick the verification box to continue."},"opsConsole":{"brand":"Operational Console","nav":{"dashboard":"Executive dashboard","central":"Service center","workspace":"Ticket workspace","warranties":"Warranties (ops)","repairs":"Repairs & receiving","logistics":"Logistics","clients":"Clients","users":"Users & roles","managerial":"Managerial dashboard"},"dashboard":{"title":"Executive dashboard","subtitle":"Real-time view of operational performance","kpiOpen":"Open tickets","kpiSla":"SLA compliance","kpiMttr":"Average MTTR","kpiWarranty":"Open warranties","kpiRepairs":"Repairs in progress","kpiLogistics":"Logistics pending","areaQueue":"Queue","areaField":"In the field","areaParts":"Awaiting parts","areaHold":"On hold","mttrTrendTitle":"MTTR trend (30 days)","noReportsAccess":"You do not have access to reports.","backlogTitle":"Backlog by area","backlogCenter":"tickets","empty":"No data to show.","byStatusTitle":"Tickets by status","perfTitle":"Operational performance","perfSla":"SLA compliance","perfResolution":"Resolution rate","perfFtf":"First-time fix","perfArrival":"On-time arrival","status":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"}},"managerial":{"title":"Managerial dashboard","subtitle":"Management analytics and team performance","slaArrival":"Arrival SLA","slaResolution":"Resolution SLA","slaOverall":"Overall SLA","slaTitle":"SLA compliance","slaTeamNote":"No team breakdown yet — showing the organization-wide split.","bottlenecksTitle":"Bottlenecks (ticket aging)","empty":"No data to show.","techTitle":"Performance by technician","colTech":"Technician","colCompletions":"Completions","colMttr":"MTTR","colFtf":"FTF%","clientRankTitle":"Client ranking","colClient":"Client","colOpen":"Open","colAtRisk":"At risk","colCompliance":"Compliance"},"clients":{"title":"Clients","subtitle":"Companies, sites and contracted SLA","empty":"No clients registered.","companyId":"Company ID","active":"Active","inactive":"Inactive","sites":"Sites","contracts":"Contracts","openTickets":"Open tickets","contractedSla":"Contracted SLA","terms":"{n} terms","noContract":"No active contract.","viewSites":"View sites"},"warranties":{"title":"Warranties (operations)","subtitle":"Warranty control and part-shipment tracking","sourceNote":"No dedicated warranty source yet — showing tickets awaiting parts or on hold.","controlTitle":"Warranty control","count":"{n} tickets","empty":"No warranty-related tickets.","registerShipmentHint":"Open the workspace to record the shipment.","registerShipment":"Record shipment"},"repairs":{"title":"Repairs & receiving","subtitle":"The repair conveyor on the depot bench","newIntake":"New intake","openTotal":"{n} open","openBench":"Open bench","emptyColumn":"Empty","redsisLab":"RedsisLab","redsisLabNote":"XML→POD import runs in the depot intake module.","stages":{"received":"Received","diagnosed":"Diagnosed","quoted":"Quoted","approved":"Approved","in_repair":"In repair","qc":"Quality check","ready":"Ready","on_hold":"On hold","parts_pending":"Parts pending","returned":"Returned"}},"logistics":{"title":"Logistics","subtitle":"Outbound, inbound and reverse logistics","outbound":"Outbound","inbound":"Inbound","reverse":"Reverse","openCentral":"Open Service Center","trackingNote":"No tracking source yet — numbers and POD/XML land with the Carrier Tracking module.","empty":"No items in this stage.","noTracking":"No tracking"},"users":{"title":"Users & roles","subtitle":"Field Service standard roles and their capabilities","manageRoles":"Manage roles","clientUsers":"Client users","referenceNote":"Reference view — role editing lives in the Admin tools, not here.","roles":{"admin":"Admin","manager":"Manager","coordinator":"Coordinator","technician":"Technician","logistics":"Logistics","receiving":"Receiving","commercial":"Commercial","client":"Client"},"scopes":{"global":"Global","regional":"Regional","self":"Own only"}},"workspace":{"indexTitle":"Ticket workspace","indexSubtitle":"Pick an open ticket to work on","openCentral":"Open Service Center","empty":"No open tickets.","showingOf":"Showing {shown} of {total}","backToList":"Back to list","systemActor":"System","noMessages":"No messages yet.","noEvidence":"No evidence attached.","noLogs":"No log entries.","noApprovals":"No approvals.","tabCommunication":"Communication","tabEvidence":"Evidence","tabLogs":"Logs","tabApprovals":"Approvals","actionsHeading":"Actions","statusLabel":"Status","apply":"Apply","escalate":"Escalate","escalateHint":"Escalate this ticket to management.","transfer":"Transfer","requestPart":"Request part","logTime":"Log time","notAvailable":"Not available yet","saved":"Saved.","clientData":"Client data","client":"Client","site":"Site","address":"Address","contract":"Contract","assignee":"Technician","unassigned":"Unassigned","severity":"Priority","sla":"SLA","noSla":"No SLA defined.","slaBreaching":"SLA breaching.","slaAtRisk":"SLA at risk.","slaOnTime":"SLA on time."}},"reportIssue":{"tabFeature":"Request a feature","featureIntro":"Have an idea for Redsis One? Describe it and it goes straight onto the product board for triage.","featureTitleLabel":"Title (optional)","featureTitlePlaceholder":"Short headline for your idea","featureDescLabel":"What do you want, and why?","featureDescPlaceholder":"Describe the feature — what it should do and why it helps…","featureSubmit":"Submit feature request","featureSubmitting":"Submitting…","featureFiledTitle":"Feature request filed!","featureFiledBody":"The product team will see it on the board. Track it any time from the My reports tab.","featureAnother":"Request another","featureViewReports":"View in My reports →","featureHint":"Have a feature idea instead? Request a feature →"},"boardEmail":{"title":"Email","subtitle":"Send emails built from this board’s data","tabCompose":"Compose","tabTemplates":"Templates","tabLog":"Sent","itemsLabel":"Items","itemsSelected":"selected","searchItems":"Search items…","noItems":"No items match.","accountLabel":"Send from","platformSender":"Redsis One (platform sender)","toLabel":"To","toPlaceholder":"name@company.com, {{item.Client Email}}…","suggestionsLabel":"From this item:","ccBccToggle":"+ Cc / Bcc","subjectLabel":"Subject","bodyLabel":"Message","insertField":"Insert field","attachLabel":"Attach files from","previewTitle":"Preview (first selected item)","previewEmpty":"Select an item to see the rendered email.","logTo":"To","logSubject":"Subject","resultsSent":"sent","resultsFailed":"failed","skippedAttachments":"attachments skipped by size limits","sendOne":"Send email","sendMany":"Send emails","sending":"Sending…","templateNamePlaceholder":"Save as template…","templateSave":"Save","templateApply":"Use","templateArchive":"Archive","templateEmpty":"No templates yet — compose an email and save it as a template.","logEmpty":"Nothing sent from this board yet.","viaAccount":"from your mailbox","viaPlatform":"via platform sender","disabled":"The email composer is turned off.","loadError":"Could not load the email panel."},"mobile":{"title":"Mobile App","description":"Manage the Redsis One Field Service mobile fleet — devices, editions, push, and the One Boards connection.","actions":"Actions","actionDone":"Done.","actionFailed":"Something went wrong — nothing was changed.","confirm":"Click again to confirm","on":"On","off":"Off","tabs":{"devices":"Devices & Sessions","users":"Users & Editions","boards":"One Boards","fieldApp":"Field App Binding","push":"Push Console","inventory":"Inventory Scope","settings":"App Settings"},"devices":{"versionSummary":"App versions in the field","fleet":"Device fleet","fleetHint":"Every registered device. Revoking kills its sessions on the next API call.","noDevices":"No devices registered yet.","user":"User","platform":"Platform","version":"Version","push":"Push","sessions":"Sessions","lastSeen":"Last seen","signedIn":"Signed in","pushOk":"Registered","pushMissing":"No token","revoke":"Revoke sessions","forceLogout":"Log out all devices","markInactive":"Mark inactive","markActive":"Mark active","orphanSessions":"Sessions without a registered device","orphanHint":"Live sign-ins whose device has not registered yet (older app builds). Force-logout works normally."},"users":{"hint":"Who can use the mobile app and which edition they get. Changes apply on the app’s next refresh — no update needed.","search":"Search users…","filterAll":"All","filterWithDevices":"With devices","filterAssigned":"Assigned","filterExternal":"External techs","filterInternal":"Internal","realm":"Realm","edition":"Edition","access":"Access","devices":"Devices","realmExternal":"External (field)","realmInternal":"Internal","editionFieldService":"Field Service","editionUnified":"Unified","defaultBadge":"default","enabled":"Enabled","disabled":"Disabled","switchToUnified":"Switch to Unified","switchToFieldService":"Switch to Field Service","disableAccess":"Disable mobile access","enableAccess":"Enable mobile access","clearAssignment":"Reset to default","makeFieldTech":"Make field tech","inviteHint":"To invite an external technician, use the provider invite flow:","inviteLink":"Field Service → Providers"},"boards":{"bridgeFlag":"Tickets board bridge","bridgeFlagHint":"The two-way sync between the Field Service Tickets board and mobile tickets. Turning it off pauses sync in both directions.","bridgeOn":"Bridge on","bridgeOff":"Bridge off","turnOn":"Turn on","turnOff":"Turn off","ticketsBoards":"Connected Tickets boards","ticketsBoardsHint":"Field-service project boards named “Tickets” bridge automatically while the flag is on.","noBoards":"No field-service Tickets board found yet.","boardBridged":"Bridged","boardOptedOut":"Opted out","lastSync":"Last sync","neverSynced":"Never synced","lastError":"Last error","columnMap":"Tech-screen column mapping","noMapping":"No columns mapped yet.","pushEvents":"Push on board events","pushEventsHint":"Which ticket events reach the assigned tech’s phone. Applied instantly.","eventAssignment":"Ticket assigned / reassigned","eventAssignmentHint":"Off keeps the in-app and email notice but withholds the phone push.","eventStatusChange":"Ticket status changed","eventStatusChangeHint":"Notifies the assigned tech when a coordinator changes a ticket’s status. Ships off.","eventDispatch":"Stop added to route","eventDispatchHint":"Notifies the tech when dispatch adds a stop to their route. Ships off.","eventRoutePublished":"Route published","eventRoutePublishedHint":"Web push to the tech when dispatch publishes their route for the day. Ships on.","eventStopRemoved":"Stop removed from route","eventStopRemovedHint":"Web push to the tech when a stop is pulled off their route. Ships on.","eventPartsDecision":"Parts request decided","eventPartsDecisionHint":"Web push to the tech when a parts request they raised is approved or declined. Ships on.","eventPartReturn":"Part return closed","eventPartReturnHint":"Web push to the tech when a coordinator closes their part-return ticket. Ships on."},"push":{"composer":"Send a push message","composerHint":"Delivered through the notification engine — user mute and quiet preferences are respected.","titleLabel":"Title","bodyLabel":"Message","deepLinkLabel":"Deep link (optional, e.g. /field)","broadcast":"Send to everyone with a device","noRecipients":"Nobody has a registered device yet.","send":"Send push","sentSummary":"Delivered","skipped":"skipped","deliveryHealth":"Delivery health","deliveryWindow":"Push deliveries over the last 7 days.","recent":"Recent push deliveries","noDeliveries":"No push deliveries yet.","when":"When","topic":"Topic","deliveryStatus":"Status","error":"Error","tokenHealth":"Push token health","tokenHealthHint":"Devices with repeated failures likely hold a dead token — prune it and the app re-registers on next launch.","token":"Token","failures7d":"Failures (7d)","pruneToken":"Prune token"},"inventory":{"hint":"What each tech can see in mobile inventory: warehouses come from their provider; product visibility is granted per tech.","noTechs":"No field techs found yet — link a user to a service provider first.","techs":"Techs","owner":"Provider owner","tech":"Tech","grants":"grants","selectTech":"Select a tech to see their scope.","warehouses":"Warehouses (layer 1)","noWarehouses":"No active warehouses for this provider.","warehousesHint":"Derived from the provider’s active warehouse locations — manage them in Field Service → Providers.","products":"Product visibility (layer 2)","ownerSeesAll":"Provider owners see every product in their warehouses.","noGrants":"No products granted — this tech sees nothing in inventory.","removeGrant":"Remove","addGrantPlaceholder":"Product model…","addGrant":"Grant product"},"settings":{"versionGate":"Version gate","versionGateHint":"Devices below the minimum version are asked (or forced) to update before continuing.","minIos":"Minimum iOS version","minAndroid":"Minimum Android version","forceUpdate":"Force update (hard gate)","forceUpdateHint":"When on, outdated apps cannot continue until updated. Leave off for a soft “please update” notice.","maintenance":"Maintenance mode","maintenanceHint":"Shows a maintenance screen in the app and pauses its API traffic. Use during planned windows only.","maintenanceOn":"Maintenance mode is on","maintenanceMessage":"Message shown to techs during maintenance…","save":"Save settings","confirmWarning":"This affects every device in the field — click again to confirm."},"fieldApp":{"heading":"Field App Binding","hint":"Configure the tech app as a remote over a project workspace’s boards. Map which board plays each role, and which Tickets-board column drives each ticket action. Nothing is hardcoded — every choice comes from the workspace’s live boards.","selectWorkspace":"Project workspace","pickWorkspacePrompt":"Select a workspace to configure…","noWorkspaces":"No workspaces available to configure yet.","configured":"configured","notConfigured":"not configured","enabledLabel":"Board-driven statuses","enabledHint":"When off, techs in this workspace always use the fixed status buttons instead of the board’s Status column.","enabledOn":"On","enabledOff":"Off","boardRolesTitle":"Board roles","boardRolesHint":"Which board in this workspace plays each role. Leave a role unmapped if the project has no such board.","columnRolesTitle":"Ticket column roles","columnRolesHint":"Within the Tickets board, which column drives each ticket action.","columnRolesNeedTickets":"Map a Tickets board first — column roles are picked from its columns.","noBoards":"This workspace has no boards yet.","none":"— None —","save":"Save binding","saved":"Binding saved.","readOnlyHint":"You can view this binding but need the Field Tech coordinator permission to change it.","roles":{"tickets":"Tickets","service_providers":"Service providers (tech pool)","stock":"Stock","locations":"Locations","sla":"SLA","clients":"Clients","products":"Products","vendors":"Vendors","returns":"Returns"},"columnRoleLabels":{"status":"Status","assignee":"Assignee / tech","location_link":"Location link","start_date":"Start / date"},"errors":{"invalid_input":"Those selections could not be saved — please review them.","workspace_not_found":"That workspace no longer exists.","board_not_in_workspace":"That board is not part of this workspace.","column_not_on_tickets_board":"That column is not on the mapped Tickets board.","column_role_needs_tickets_board":"Map a Tickets board before choosing its columns."}}},"boardSpreadsheet":{"validation":{"sectionLabel":"Data validation","kindLabel":"Rule","modeLabel":"Enforcement","mode":{"block":"Block","warn":"Warn","info":"Info"},"kinds":{"none":"None","list":"List of values","number_range":"Number range","text_length":"Text length","date_range":"Date range","regex":"Pattern (regex)","required":"Required","custom_formula":"Custom formula"},"allowedLabel":"Allowed values","allowedHelp":"Comma-separated list of permitted values.","caseSensitiveLabel":"Case-sensitive","minLabel":"Minimum","maxLabel":"Maximum","minLenLabel":"Min length","maxLenLabel":"Max length","dateMinLabel":"Earliest date","dateMaxLabel":"Latest date","patternLabel":"Pattern","flagsLabel":"Flags","formulaLabel":"Formula","formulaHelp":"Must evaluate to true for the value to be accepted.","messageLabel":"Custom message","warnMessage":"This value does not meet the column validation rule.","infoMessage":"Note: this value is outside the column guidance.","issuesTitle":"Validation issues","issuesNone":"No validation issues on this board.","tagBlock":"Blocked","tagWarn":"Warning","tagInfo":"Info"}},"boardCell":{"errors":{"generic":"The change could not be saved. Please try again.","notFound":"This item or column no longer exists. Refresh the board.","authDenied":"You do not have permission to edit this cell.","closeoutRequired":"Fill in the close-out entry before moving this item to Done.","cellRequirementsUnmet":"Some required fields are still empty. Open the item and fill them in from the right rail first.","cellRequirementsUnmetNamed":"Fill in {fields} first — this item needs them before this field can be set.","cellRequirementsClearBlocked":"Clear {fields} first — this field can’t be emptied while it has a value.","transitionNotAllowed":"This column's workflow does not allow that status change.","depthMismatch":"This field cannot be set on this item.","emptyWrite":"There is nothing to save.","validation":"That value is not valid for this field.","noRate":"No exchange rate is available for this currency pair yet."},"workflow":{"transitionsRestricted":"Transitions are restricted for this column.","transitionDenied":"Cannot move from \"{from}\" to \"{to}\"","entryDenied":"A new item cannot start at \"{to}\"","permissionDenied":"You do not have permission to set \"{label}\""},"richTextLoadError":"The rich-text editor could not be loaded. Please try again.","signaturePadLoadError":"The signature pad could not be loaded. Please try again.","barcodeRenderError":"This value cannot be shown as a barcode.","clickToAddText":"Click to add text","qrNoPairedValue":"No value in the paired column","qrAutoGenerated":"Auto-generated from paired column","qrClickToEdit":"Click cell to edit text","textToEncode":"Text to encode","barcodeInvalidForFormat":"Invalid for {format}","barcodePlaceholderEan13":"12 or 13 digits","barcodePlaceholderAny":"Anything…","pickColour":"Pick a colour","linkLabelPlaceholder":"Friendly text","editLink":"Edit link","copied":"Copied!","ip":{"invalidGeneric":"Invalid IP address","invalidVersion":"Invalid {version} address"},"closeout":{"documentRefRequired":"A document reference is required.","documentTypeRequired":"Pick a document type.","explanationRequired":"An explanation is required for this outcome."},"webhook":{"firedTitle":"{label} fired","firedBody":"Webhook returned HTTP {status}.","failedTitle":"{label} failed","errNoTarget":"No webhook URL is configured on this button.","errNetwork":"The webhook could not be reached. Check the URL and try again.","errHttp":"The webhook responded with an error (HTTP {status}).","errNotFound":"This item or column no longer exists. Refresh the board.","errGeneric":"The webhook could not be completed. Please try again."}},"boardForm":{"configure":"Configure form","editorTitle":"Form editor","defaultTitle":"New form","close":"Close","titleLabel":"Form title","descriptionLabel":"Description","includedColumns":"Fields in this form","availableColumns":"Add a field","itemNameField":"Item name","itemNameBadge":"Title","itemNameAlwaysRequired":"Always required — this becomes the item name.","dragHint":"Drag to reorder","noColumns":"No fields yet — add one below.","fieldLabel":"Field label","helpTextLabel":"Help text","required":"Required","fileMax":"Max files","fileAccept":"Accepted types","moveUp":"Move up","moveDown":"Move down","remove":"Remove field","removeFile":"Remove file","publicLabel":"Public — anyone with the link can submit","activeLabel":"Active — accepting responses","publicLink":"Public link","publicLinkAfterSave":"Save to generate the public link.","copyLink":"Copy","copied":"Copied","save":"Save","saving":"Saving…","saved":"Form saved.","loadError":"Could not load the form settings.","saveError":"Could not save the form.","uploading":"Uploading…","tooManyFiles":"Too many files — the limit is {max}.","fileTypeNotAllowed":"One or more files are not an allowed type.","fileTooLarge":"A file is larger than the allowed size.","uploadFailed":"Upload failed — please try again.","uploadNetworkError":"Network error while uploading — please try again.","connectBoard":"Connected board","connectSearchPlaceholder":"Search items…","connectNoResults":"No matches.","connectNoItems":"No items on the connected board.","connectNoTarget":"No connected board set for this field.","connectRemove":"Remove","connectLoading":"Loading…","connectLoadError":"Could not load options — please try again.","dependentPickParentFirst":"Choose {parent} first","dependentPreviewHint":"Dependent list — its options are filtered by the parent field at fill time.","dependentTitle":"Dependent list","dependentHint":"Show only items that match another field of this form (e.g. Country → City).","dependentEnable":"Filter options by a parent field","dependentNoParents":"Add a status, dropdown, or text field first — it drives the filter.","dependentNoFilterColumns":"The connected board has no filterable column (status, dropdown, text, or country).","dependentParentLabel":"Parent field","dependentSelectParent":"Select a field…","dependentFilterColumnLabel":"Filter column (connected board)","dependentSelectFilterColumn":"Select a column…","dependentOpLabel":"Match","dependentOpEquals":"Equals","dependentOpContains":"Contains","dependentDisplayColumnLabel":"Label column (optional)","dependentDisplayColumnDefault":"Item title (default)","dependentPublicTitle":"Public form exposure","dependentPublicEnable":"Show this list on the public form","dependentPublicSaveFirst":"Save the form first to configure public exposure.","dependentPublicError":"Could not check this field for public exposure.","dependentPublicNeedsDisplayColumn":"Select a label column above before making this list public — a public list cannot show the raw item title.","dependentPublicSensitiveBlocked":"This source contains sensitive or minors’ data and can never be exposed on a public form.","dependentPublicLegalWarning":"[PENDING TENANT LAWYER] Exposing this list publicly makes the selected data readable by anonymous visitors. You are responsible for having a lawful basis and complying with data-protection law before enabling it.","dependentPublicPiiHint":"This source appears to contain personal data. Declare the processing purpose and legal basis, then confirm.","dependentPublicPurposeLabel":"Processing purpose (finalidad)","dependentPublicLegalBasisLabel":"Legal basis (base legal)","dependentPublicConfirmLabel":"I confirm this data may be exposed publicly and I have a lawful basis to do so.","dependentPublicConfirmButton":"Confirm and enable","dependentPublicConfirmedNote":"Public exposure confirmed and recorded.","connectNewBoard":"Connect a board","connectNewBoardTitle":"Connect a board","connectNewBoardHint":"Creates a field that links items from another board. It appears as a form field right away.","connectBoardSearchPlaceholder":"Search boards…","connectBoardNoResults":"No boards match.","connectFieldNameLabel":"Field name","connectAllowMultiple":"Allow linking multiple items","connectCreate":"Create field","connectCreating":"Creating…","connectCreateError":"Could not create the connection.","connectCancel":"Cancel","connectDirectionLabel":"Connection direction","connectOneWay":"One-way","connectTwoWay":"Two-way (bidirectional)","connectTwoWayHint":"Two-way also creates a matching column on the other board, so links stay in sync on both sides.","connectTwoWayNoPermission":"You need edit permission on the target board for a two-way connection.","signatureHint":"Draw your signature above","signatureClear":"Clear","signatureRequired":"Signature required.","signatureTooLarge":"That signature is too large — please draw a simpler one.","signatureLoadError":"Couldn't load the signature pad — please refresh.","sections":"Sections","addSection":"Add section","sectionTitle":"Section title","untitledSection":"Untitled section","noSection":"No section","deleteSection":"Delete section","deleteSectionConfirm":"Delete this section?","deleteConfirmYes":"Yes","deleteConfirmNo":"No","moveSectionUp":"Move section up","moveSectionDown":"Move section down","fieldSectionLabel":"Section","confirmationMessage":"Confirmation message","confirmationHint":"Shown after a successful submit.","defaultConfirmation":"Thank you — your response has been recorded.","translationsHeading":"Translations","translationLocaleEs":"Spanish (ES)","translationLocalePt":"Portuguese (PT)","translationBaseHint":"The base text (EN) is used when a translation is empty.","translationFieldLabel":"Label","translationFieldHelpText":"Help text","translationSectionTitle":"Section title","translationFormTitle":"Form title","translationFormDescription":"Form description","translationConfirmationMessage":"Confirmation message","translationBlockText":"Text","translationBlockAlt":"Alt text","selectPlaceholder":"— Select —","preview":"Preview","exitPreview":"Exit preview","previewNote":"Preview — responses are not saved.","previewSubmit":"Submit","share":"Share","shareTitle":"Share form","sharePrivateHint":"This form is not public yet. Make it public to generate a shareable link.","shareEnablePublic":"Make form public","unsaved":"Unsaved changes","allSaved":"All changes saved","formSettingsTitle":"Form settings","noSelectionHint":"Select a field to edit its properties, or adjust the form settings here.","railEmptyState":"Select a field to configure it.","fieldPropertiesTitle":"Configure field","fieldOptions":"Options","insertToolbar":"Insert","advanced":"Advanced","addField":"Add field","pickerTitle":"Add a field","fieldSearchPlaceholder":"Search fields…","fieldSearchNoResults":"No fields match.","allColumnsAdded":"Every board column is already on the form. Create a new column to add more fields.","createColumn":"Create a new column","createColumnTitle":"Create a new column","emptyBody":"Add the item name and start building your form.","targetGroup":"Target group","targetGroupDefault":"First group","deleteFieldConfirm":"Remove this field?","addFieldHere":"Add content here","insertField":"Field","insertSection":"Section","insertText":"Text","insertImage":"Image","blockText":"Text","blockImage":"Image","blockTextPlaceholder":"Write text to show on the form…","blockImageEmpty":"No image yet","insertHeading":"Heading","insertDivider":"Divider","blockHeading":"Heading","blockDivider":"Divider","blockHeadingPlaceholder":"Write a heading…","pickerHeadingHint":"Section-style heading","pickerDividerHint":"Horizontal separator line","pickerAlreadyAdded":"Already on the form","fieldWidthLabel":"Width","fieldWidthFull":"Full","fieldWidthHalf":"Half","fieldDisplayLabel":"Show options as","displayChips":"Chips","displayDropdown":"Dropdown","displayList":"List","displaySegmented":"Segmented","fieldHideLabel":"Hide label","fieldHideColors":"Hide colors","paletteLabel":"Palette","paletteBrand":"Brand","paletteOcean":"Ocean","paletteForest":"Forest","paletteGraphite":"Graphite","backdropLabel":"Background style","backdropPlain":"Plain","backdropDots":"Dots","backdropGlow":"Glow","backdropInk":"Ink","flowLabel":"Fill mode","flowHint":"How responders move through the form. The answer is always submitted as one complete item.","flowAll":"All at once","flowSteps":"Steps","flowSingle":"One at a time","flowProgressLabel":"Step indicator","flowProgressTape":"Stages tape","flowProgressBar":"Progress bar","stepOf":"Step {n} of {total}","stepNext":"Next","stepBack":"Back","fileUploadHint":"Drag or click to upload","dateToday":"Today","dateClear":"Clear","datePlaceholder":"Select a date","datePrevMonth":"Previous month","dateNextMonth":"Next month","dateTimeLabel":"Time","dateDefaultTodayLabel":"Pre-fill with today's date","dateIncludesTimeBadge":"Includes time (from the column)","blockRemove":"Remove block","imageChoose":"Choose image","imageReplace":"Replace","imageAlt":"Alt text","imageAltPlaceholder":"Describe the image (accessibility)","imageUploading":"Uploading image…","imageUploadError":"Could not upload the image.","logoAdd":"Add logo","logoChange":"Change","logoRemove":"Remove","outlineTitle":"Content","outlineAddContent":"Add content","outlineDeleteField":"Delete field","pickerFieldHint":"Adds a board column to the form","pickerSectionHint":"Groups fields under a heading","pickerTextHint":"Informational text block","pickerImageHint":"Image (logo / instructions)","outlineEmpty":"No content yet.","sectionEmptyHint":"Drag fields here, or add one below.","modeEdit":"Edit","modeDesign":"Design","modeConfig":"Configuration","designTitle":"Appearance","designHint":"Style the form. Changes apply to the internal and public views.","themeColor":"Theme color","background":"Background","font":"Font","fontDefault":"Default","fontSans":"Sans-serif","fontSerif":"Serif","fontMono":"Monospace","fontRounded":"Rounded","fontHint":"System fonts only — no external web fonts are loaded.","progressBar":"Show a completion progress bar","designPreview":"Preview","configTitle":"Behavior","configHint":"Control who can respond and what happens on submit.","anonymousResponses":"Allow anonymous responses","anonymousHint":"Anyone with the link can submit without signing in.","anonymousPublicOnly":"Applies only when the form is public.","antiBot":"Anti-bot protection (Cloudflare Turnstile)","antiBotHint":"Shows a challenge on the public form. With no Turnstile keys configured it falls back to rate-limiting only.","responseLimit":"Response limit","responseLimitHint":"Stop accepting responses after this many. 0 = unlimited.","closeDate":"Close date","closeDateHint":"Stop accepting responses after this date and time.","allowDrafts":"Let responders save a draft","allowMultiple":"Allow submitting more than once","redirectUrl":"Redirect after submit","redirectUrlHint":"Absolute http(s) URL to send responders to after a successful submit.","redirectUrlPlaceholder":"https://example.com/thank-you","submitAnother":"Submit another response","antiBotRequired":"Please complete the anti-bot challenge.","antiBotNotConfigured":"Turnstile is not configured on the system — anti-bot will not be enforced until the keys are loaded in Setup Center.","signInToRespondTitle":"Sign in to respond","signInToRespondBody":"This form does not accept anonymous responses. Please sign in to submit it.","signInToRespondCta":"Sign in","submit":"Submit","submitting":"Submitting…","poweredBy":"Powered by","poweredByBrand":"Redsis One","dropzoneTitle":"Drag & drop or click to upload","dropzoneHint":"Images, video, Office, PDF · up to {max} files","signaturePlaceholder":"Sign here","notFoundTitle":"Form not found","notFoundBody":"This form does not exist or has been removed.","loadErrorTitle":"Something went wrong","loadErrorBody":"Could not load this form. Please try again later.","closedTitle":"This form is closed","closedBody":"It is no longer accepting responses.","noFields":"This form has no fields configured yet.","fieldRequired":"\"{field}\" is required","currencyAmountLabel":"Amount","currencyLabel":"Currency","currencyAmountPlaceholder":"0","currencyRequired":"\"{field}\" is required","currencyNegative":"\"{field}\" must be zero or greater","currencyNotAllowed":"\"{field}\" has an unsupported currency","currencyInvalid":"\"{field}\" has an invalid amount","fixHighlighted":"Please complete the highlighted fields.","submissionFailed":"Submission failed — please try again.","downloadAll":"Download all","fieldSaveFailed":"Item created, but \"{label}\" could not be saved: {detail}","networkError":"Network error — please check your connection and try again.","errClosed":"This form is closed and no longer accepting responses.","errSignIn":"Please sign in to submit this form.","errRateLimited":"Too many submissions — please wait a moment and try again.","errAntiBot":"Anti-bot verification failed — please complete the challenge and try again.","editForm":"Edit form","viewForm":"View form","thanksTitle":"Thank you!","sentBadge":"Sent","personSearchPlaceholder":"Search people…","personNoMatches":"No matches.","personClear":"Remove person","personChoose":"Choose person…","logoSectionTitle":"Logo & header","logoAlt":"Logo alt text","logoAltPlaceholder":"Describe the logo (accessibility)","logoAlign":"Alignment","logoAlignLeft":"Left","logoAlignCenter":"Center","logoAlignRight":"Right","logoSize":"Logo size","logoSizeSmall":"Small","logoSizeMedium":"Medium","logoSizeLarge":"Large","coverSectionTitle":"Cover image","coverHint":"A wide banner shown across the top of the form.","coverAdd":"Add cover","coverAlt":"Cover alt text","coverAltPlaceholder":"Describe the cover image (accessibility)","requireWhenTitle":"Required when…","requireWhenHint":"Make this field required only when another answer matches.","requireWhenAlways":"Required only when a condition matches.","requireWhenBadge":"Conditionally required","noAccessTitle":"You do not have access","noAccessBody":"This form belongs to a board you cannot access. Ask the board owner to share it with you.","consentDefaultText":"I authorize the processing of my personal data in accordance with the privacy policy.","consentPolicyLink":"Privacy policy","consentPurposeLabel":"Purpose","consentControllerLabel":"Data controller","consentRequired":"You must accept the data processing authorization to submit.","consentTitle":"Data processing consent (Habeas Data)","consentHint":"Required by law when collecting personal data. Shows a non-pre-checked authorization checkbox that blocks the submit until accepted.","consentEnable":"Require a data processing authorization","consentIncomplete":"When consent is required, you must fill in the purpose (finalidad) and the data controller (responsable) — the law requires informing both, not just the checkbox.","consentText":"Authorization text","consentTextPlaceholder":"I authorize the processing of my personal data…","consentPolicyUrl":"Privacy policy link","consentPolicyUrlPlaceholder":"https://your-company.com/privacy","consentPurpose":"Purpose (finalidad)","consentPurposePlaceholder":"e.g. to contact you about your request","consentDataController":"Data controller (responsable)","consentDataControllerPlaceholder":"e.g. Your Company S.A.S.","conditionalTitle":"Conditional logic","conditionalHint":"Show this field only when another field has a given answer. Add more rules to show it if ANY of them match.","conditionalAlwaysVisible":"Always visible. Add a rule to show this field only under a condition.","conditionalWhen":"Show when","conditionalOr":"or when","conditionalEquals":"is","conditionalFieldLabel":"Controlling field","conditionalValueLabel":"Value","conditionalSelectField":"Select a field…","conditionalSelectValue":"Select a value…","conditionalChecked":"Checked","conditionalUnchecked":"Unchecked","conditionalAddRule":"Add rule","conditionalRemoveRule":"Remove rule","conditionalBadge":"Conditional","conditionalBadgeHint":"This field only appears when its conditional rules are met.","dropdownSearchPlaceholder":"Search options…","dropdownNoMatches":"No options match.","dropdownClear":"Clear selection","dropdownSingleLabel":"Single choice","dropdownMultiLabel":"Multiple choice","dropdownConfiguredOnColumn":"Set on the column.","prefillKeyLabel":"Prefill key (URL)","prefillKeyPlaceholder":"e.g. email","prefillKeyHelp":"Add a key to pre-fill this field from the form link, e.g. /f/<slug>?key=value.","prefillKeyExample":"Pre-fills from the link, e.g. /f/<slug>{example}","prefillKeyInvalid":"Use lowercase letters, numbers, hyphen or underscore (max 40).","languageSwitcherLabel":"Language","itemNameRequired":"Please enter a name for the item.","noGroupToAdd":"This board has no group to add the item to. Add a group first.","couldNotCreateItem":"Could not create the item.","formUploadPartialFail":"Item created, but \"{field}\" could not be uploaded: {reason}","uploadEmpty":"\"{file}\" is empty — nothing to upload.","uploadTooLargeDetail":"\"{file}\" is too large ({size} MB). Maximum is {max} MB.","uploadFailedGeneric":"Couldn't upload \"{file}\". Please try again.","filesUnavailable":"Files couldn't load — reload the board","connectLabelUnavailable":"Couldn't load this column's value — reload the board","connectItemNotVisible":"(item not visible)","text":"Text","textarea":"Long text","number":"Number","currency":"Currency","date":"Date","checkbox":"Checkbox","status":"Status","dropdown":"Dropdown","person":"Person","connect":"Connection","file":"File","signature":"Signature"},"serialBuilder":{"serialId":"Serial ID","title":"Serial ID Builder","preview":"Preview","close":"Close","consecutive":"Consecutive","moveUp":"Move up","moveDown":"Move down","removeSegment":"Remove segment","separatorBefore":"Separator before","fixedTextPlaceholder":"Fixed text, e.g. RSO","autoNumberColumn":"Auto-number column (the consecutive)","chooseColumn":"Choose a column…","autoNumberRenderNote":"Rendered using that column's own numbering (numeric / letters).","kindColumn":"Column","kindDate":"Date","kindText":"Text","defaultSeparator":"Default separator","defaultSeparatorHelp":"Placed between segments unless a segment sets its own.","saveSerial":"Save serial","abbreviations":"Abbreviations (optional — Approved → APR)","removeAbbreviation":"Remove abbreviation","itemCreationDate":"Item creation date","generationDate":"Generation date (today)","separatorBetweenParts":"Separator between parts","partsOrderHelp":"Parts appear in the order you turn them on.","regenerateSerial":"Regenerate this serial"},"ayvaFieldRewrite":{"button":"Rewrite with Ayva","tooltip":"Ask Ayva to rewrite this","title":"Rewrite with Ayva","original":"Original","instructionLabel":"What should Ayva do?","instructionPlaceholder":"e.g. make it more formal, fix grammar, translate to Spanish…","rewrite":"Rewrite","rewriting":"Rewriting…","accept":"Accept","insert":"Insert","copy":"Copy","copied":"Copied","regenerate":"Regenerate","discard":"Discard","result":"Ayva suggests","emptyField":"Type something first, then ask Ayva to rewrite it.","error":"Ayva couldn't rewrite that","translateTo":"Translate to…","languagePlaceholder":"Language (e.g. Spanish)","presets":{"improve":"Improve","fix_grammar":"Fix grammar","shorten":"Shorten","lengthen":"Expand","formal":"Formal","friendly":"Friendly","simplify":"Simplify","translate":"Translate"},"bulk":{"transformBoard":"Transform board with Ayva","transformColumn":"Transform column with Ayva","transformSelected":"Transform selected with Ayva","panelTitle":"Ayva transform","describe":"Describe the change","describePlaceholder":"e.g. translate everything to Spanish, rewrite titles to be concise…","scopeText":"Text (titles & text cells)","scopeLabels":"Status & dropdown labels","scopeHeaders":"Column names","preview":"Preview changes","previewing":"Preparing preview…","reviewTitle":"Review changes","before":"Before","after":"After","apply":"Apply","applying":"Applying…","applied":"Applied {count} change(s)","undo":"Undo","undoing":"Undoing…","undone":"Change undone","nothing":"Nothing to change — the content already matches.","truncatedNote":"Large run — showing the first part only.","selectAll":"Select all","deselectAll":"Deselect all","cells":"cells","labels":"labels","columnNames":"column names","close":"Close","forbidden":"You don't have edit access to this board."}},"databaseTables":{"title":"Database Tables","eyebrow":"Work / Database Tables","description":"Publish a board as a real SQL table any software can query. The board keeps working exactly as it does now; a separate database receives every change, one-way, and you get a connection string for it.","publish":"Publish a board","noTables":"No boards are published yet. Publish one to give other systems a real SQL table to read.","colBoard":"Board","colTable":"Table","colExposure":"Reachable via","colLag":"Lag","colSize":"Size","colStatus":"Status","statusActive":"Live","statusBackfilling":"Backfilling","statusPaused":"Paused","statusError":"Error","exposureTunnel":"Cloudflare Access tunnel","labelRole":"Role","labelQuery":"Starter query","labelPassword":"Password","labelCopied":"I have copied it","labelShared":"I shared this card","labelCancel":"Cancel","labelSave":"Save","labelPublishAnyway":"Publish anyway","labelCompanions":"Companion tables","labelConfirm":"Confirm","exposurePublic":"Public (allowlisted)","notProvisioned":"The mirror database is not provisioned yet. Stand up the redsis-mirror container on the database VM and set BOARD_MIRROR_ADMIN_URL, then come back.","connectTitle":"Connect to this table","connectIntro":"Everything a Postgres client needs. The password is shown once, right after publishing or rotating.","passwordOnce":"Copy this password now — it is not shown again. Rotate to get a new one.","tunnelFirst":"Run this first and leave it running:","dictionaryTitle":"Columns","dictionaryIntro":"What every SQL column means, and which values are snapshots rather than the system of record. The same table is published inside the database as __dictionary.","colSqlColumn":"SQL column","colSqlType":"Type","colBoardColumn":"Board column","colNotes":"Notes","withheld":"Withheld","withhold":"Withhold","restore":"Publish again","healthTitle":"Replication","queueDepth":"Queued changes","deadCount":"Stuck changes","lastApplied":"Last applied","lastReconciled":"Last verified","driftFound":"Drift found","driftRepaired":"Drift repaired","driftClean":"No drift — the table matched the board.","driftWarning":"This sweep had to repair rows, which means a change did not arrive on its own. Worth a look at the log below.","verifyNow":"Verify now","rerunBackfill":"Re-run backfill","rotate":"Rotate password","pause":"Pause","resume":"Resume","unpublish":"Unpublish","unpublishWarning":"Unpublishing revokes the credential and stops the sync. The table and its rows are kept, so anyone who already has a copy of the data keeps it — ask a database admin if the rows themselves must go.","exposureTitle":"Who can reach it","allowlistLabel":"Allowed IP ranges (one per line)","allowlistRequired":"A public table needs at least one allowed IP range.","retentionTitle":"History kept","retentionActivity":"Activity history (days)","retentionComments":"Comments (days)","retentionForever":"Leave blank to keep everything.","oneWayNote":"One-way by design: the board writes to the table, never the other way round. Nothing you write in the table reaches the board.","integrityTitle":"Integrity","integrityVerified":"Verified identical","integrityVerifiedDetail":"Every row matched the board at the last check.","integrityRepaired":"Repaired","integrityRepairedDetail":"The last check found rows that did not match and fixed them — a change was lost on the way.","integrityBehind":"Behind","integrityBehindDetail":"Changes are waiting to reach the table.","integrityStuck":"Stuck","integrityStuckDetail":"Changes could not be applied. Replay them, or rebuild the table from the board.","integrityOverdue":"Unverified","integrityOverdueDetail":"No check has run on schedule. Press Verify now.","integrityBackfilling":"Loading","integrityBackfillingDetail":"The first copy of the board is still being written.","integrityPaused":"Paused","integrityPausedDetail":"Replication is paused on purpose; changes are queued, not applied.","lastDeepVerify":"Last deep check","deepCompared":"Rows checked","deepLostEvents":"Lost changes found","deepSnapshotRefreshes":"Snapshots refreshed","deepNever":"Never — press Deep verify.","deepInProgress":"Checking in parts — resumes where it stopped.","verifyDeep":"Deep verify","verifyDeepHint":"Re-reads every row of the board and compares it, value by value, with the table.","replayDead":"Replay stuck changes","rebuild":"Rebuild from board","rebuildHint":"Rewrites every row from the board. Safe at any time; use it when the table is not trusted.","lastSweepLine":"Last check {at}: {compared} rows compared, {drift} differed, {repaired} repaired.","deepLine":"Deep check {at}: {compared} rows, {lost} lost changes, {snapshots} snapshots refreshed.","verifyResult":"Compared {compared} rows · {drift} differed · {repaired} repaired","deepResult":"Deep check: {compared} rows · {lost} lost changes · {snapshots} snapshots refreshed · {complete}","deepComplete":"complete","deepPartial":"partial — run again to continue","replayResult":"{count} changes put back in the queue","rebuildResult":"{items} rows rewritten from the board"},"boardSync":{"title":"Board Sync","eyebrow":"Work / Board Sync","description":"Keep two boards in sync. Map Board A to Board B fields with no-code transforms, match records by a key column, and sync live, on demand, or on a schedule.","newConnection":"New connection","noConnections":"No sync connections yet. Create one to keep two boards in sync.","colName":"Connection","colBoards":"Boards","colDirection":"Direction","colLastRun":"Last run","colStatus":"Status","enabled":"Enabled","disabled":"Disabled","live":"Live","scheduled":"Scheduled","edit":"Edit","open":"Open","editorTitle":"Sync connection","name":"Name","namePlaceholder":"e.g. Inbox to Ticket board","boardA":"Board A","boardB":"Board B","pickBoard":"Pick a board…","matchColumn":"Match column","matchHelp":"The column that identifies the same record on both boards (e.g. Ticket #). Re-syncs update the matched row instead of adding a copy.","landingGroup":"New items land in","landingGroupFor":"New items in “{board}” go to","firstGroup":"First group","direction":"Direction","directionA2B":"A → B","directionB2A":"B → A","directionBoth":"A ⇄ B (two-way)","fields":"Field map","addField":"Add field","removeField":"Remove","removeRow":"Remove row","moveUp":"Move up","moveDown":"Move down","dateFormatHint":"YYYY-MM-DD HH:mm:ss","fieldA":"Board A column","fieldB":"Board B column","isTitle":"Item name","transforms":"Transforms","addTransform":"Add transform","noTransforms":"No transforms — value copied as-is.","preview":"Live preview","previewHelp":"Sample items from Board A, converted to Board B values.","previewEmpty":"No sample items to preview.","schedule":"Schedule","scheduleOff":"Off (live + manual only)","scheduleInterval":"Every N minutes","scheduleTimes":"At set hours","everyMinutes":"Minutes","hours":"Hours (0–23, comma-separated)","liveEnabled":"Sync live on changes","save":"Save connection","saving":"Saving…","saved":"Saved","delete":"Delete","deleteConfirm":"Delete this connection? Synced items are kept; only the sync stops.","syncNow":"Sync now","syncing":"Syncing…","runLog":"Run history","runTrigger":"Trigger","runCreated":"Created","runUpdated":"Updated","runSkipped":"Skipped","runConflict":"Conflicts","runError":"Errors","runStatus":"Status","runStarted":"Started","noRuns":"No runs yet.","managed":"Managed by an automation","managedShort":"Automation","managedBy":"Rule: “{name}”","managedHelp":"An automation rule set this connection up. The boards, the pairing mode, the field map and the direction are locked here — change them in the rule. The name, the landing groups, the schedule and the live switch are yours.","managedOpenRule":"Open the automation","managedDeleteWarning":"This connection belongs to an automation: deleting it stops the sync only until the rule runs again, and then it comes back.","pairing":"Pairing","pairingMatch":"By match column","pairingLinkOnly":"Only linked items","matchNone":"No key column — the link the automation created defines the pairing: one item with one item.","tf":{"value_map":"Value map","date_reformat":"Reformat date","text_case":"Text case","affix":"Add / strip text","number_parse":"To number","regex_replace":"Find & replace","template":"Combine fields","default":"Default when empty"},"errGeneric":"Something went wrong.","syncDone":"Sync complete"},"emailControl":{"title":"Email Control","eyebrow":"Technology / Email Control","description":"Everything the platform is set up to email anyone — configured senders, the pending queue, full send history, and per-person delivery control including hard suppression.","tabs":{"overview":"Overview","configured":"Configured","queue":"Pending & Scheduled","history":"History","people":"People"},"overview":{"sent7":"Sent (7 days)","failed7":"Failed / bounced (7 days)","suppressed7":"Suppressed (7 days)","queuedNow":"In queue now","activeSuppressions":"Active suppressions","bySourceTitle":"Volume by source (30 days)","bySourceHelp":"Every send is classified back to the surface that produced it. Click a source to filter History.","colSource":"Source","colSent30":"Sends (30 days)","colConfig":"Configure","empty":"No emails in this window."},"sources":{"notifications":"Notifications","digest":"Notification digests","board_automation":"Board automations","board_email":"Board email composer","auth":"Invites & password resets","access_requests":"Access requests","security_alerts":"Security alerts","portal":"Client portal","field_service":"Field service","status_page":"Status page","external_automation":"External automations (n8n)","migrator":"Monday migrator","email_test":"Admin test sends","other":"Other"},"controlLevers":{"preferences":"Per-user preferences & subscriptions","automation":"Disable the automation rule","subscription":"Subscribe / unsubscribe list","none":"Transactional — only suppression blocks it"},"deliveryModes":{"immediate":"Immediate","hourly_digest":"Hourly digest","daily_digest":"Daily digest","weekly_digest":"Weekly digest"},"weekdays":["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],"actions":{"enable":"Enable","disable":"Disable","cancel":"Cancel","suppress":"Suppress address","revokeSuppression":"Revoke suppression","enableEmail":"Turn email on","disableEmail":"Turn email off","save":"Save","unsubscribe":"Remove email","resubscribe":"Restore email"},"configured":{"automationsTitle":"Board automations that send email","automationsHelp":"Every automation rule whose actions include send_email or notify_person, across all boards. Disable stops future sends immediately; the rule is kept, never deleted.","automationsEmpty":"No board automations send email.","colBoard":"Board","colRule":"Rule","colTrigger":"Trigger","colRecipients":"Recipients","colRuns":"Runs","colState":"State","stateOn":"On","stateOff":"Off","topicsTitle":"Notification topics","topicsHelp":"The full topic catalog. \"Email default\" is the out-of-the-box posture; \"Overrides\" shows how many users changed it (email-on / total overrides).","colTopic":"Topic","colModule":"Module","colSeverity":"Severity","colEmailDefault":"Email default","colOverrides":"Overrides","digestsTitle":"Digest schedules","digestsHelp":"Users whose notifications are bundled into scheduled digest emails.","digestsEmpty":"Nobody is on a digest schedule — all email is immediate.","colUser":"User","colCadence":"Cadence","colSchedule":"Schedule","surfacesTitle":"All send surfaces","surfacesHelp":"The reviewed registry of every code path that can send email, including transactional senders with no rule UI. This is the complete answer to \"what can email anyone?\"","colControlLever":"How to remove a person"},"queue":{"queuedTitle":"Queued deliveries","queuedHelp":"Notification emails waiting for the digest flush or a Do-Not-Disturb window to end. Cancelling removes one email from the queue; the in-app notification stays.","queuedEmpty":"Nothing queued.","colQueuedAt":"Queued","colFlush":"Flushes","colActions":"Actions","colStatus":"Status","colSchedule":"Schedule","colLastRun":"Last run","flushDaily":"daily at","flushWeekly":"weekly on","flushHourly":"next hourly flush","flushNext":"next flush","runsTitle":"Pending automation email runs","runsHelp":"Enqueued automation runs whose rule sends email. These normally drain within seconds; disabling the rule stops the send.","runsEmpty":"No pending automation email runs.","recurringTitle":"Scheduled & recurring email automations","recurringHelp":"Enabled time-triggered rules (cron, date-arrived, time-in-status) that send email — the emails the system WILL send in the future.","recurringEmpty":"No recurring email automations."},"history":{"allSources":"All sources"},"people":{"searchPlaceholder":"Search people by name or email…","searchButton":"Search","colEmail":"Email","noMatches":"No matching users.","fullHistoryLink":"Full send history →","suppressedBadge":"SUPPRESSED — this address receives no email","reasonPlaceholder":"Reason (required, kept in the audit trail)","suppressWarning":"Hard suppression blocks EVERY email to this address — including password resets and security alerts. Blocked attempts stay visible in History.","masterSwitch":"Email notifications","hourLabel":"at","weekdayLabel":"on","topicsTitle":"Topic subscriptions","topicsHelp":"Topics currently emailing this person. Removing email here keeps their in-app notification; it only stops the email copy.","colCadence":"Cadence","accountDefault":"account default","noEmailTopics":"No topics email this person.","emailOffTopics":"Topics with email off","automationsTitle":"Automations targeting this person","automationsHelp":"Board automation rules that email this address or notify this user directly.","noAutomations":"No automations target this person.","queuedTitle":"Queued for this person","recentTitle":"Recent emails","ledgerTitle":"Suppression ledger","ledgerHelp":"Every suppression ever created — active and revoked. Rows are never deleted; revoking restores delivery and stamps who did it.","ledgerEmpty":"No suppressions yet.","colAddress":"Address","colReason":"Reason","colCreated":"Created","colStatus":"Status","statusRevoked":"Revoked","statusActive":"ACTIVE","suppressedAutomatically":"Automatic","reasonCodes":{"hard_bounce":"Hard bounce","complaint":"Spam complaint","unsubscribe":"Unsubscribed","manual":"Manual"}}},"edu":{"brand":"Edu One","zone":{"title":"Welcome to Edu One","subtitle":"One school for every Redsis platform: short courses, real screens, certificates you can verify.","cta":"Browse the catalog"},"nav":{"campus":"Campus","catalog":"Catalog","my":"My learning","certificates":"Certificates","teach":"Teach","compliance":"Compliance","settings":"School settings","classes":"Classes"},"common":{"search":"Search","all":"All","loading":"Loading…","save":"Save","saving":"Saving…","cancel":"Cancel","archive":"Archive","back":"Back","next":"Next","previous":"Previous","open":"Open","continue":"Continue","start":"Start","finish":"Finish","submit":"Submit","retry":"Try again","edit":"Edit","add":"Add","remove":"Remove","none":"None","minutes":"{n} min","lessons":"{n} lessons","learners":"{n} learners","courses":"{n} courses","modules":"{n} modules","updated":"Updated","mandatory":"Mandatory","optional":"Optional","required":"Required","error":"Something went wrong","actions":"Actions","name":"Name","description":"Description","title":"Title","status":"Status","level":"Level","category":"Category","academy":"Academy","version":"Version","source":"Source","translations":"Translations","language":"Language","yes":"Yes","no":"No","viewAll":"View all","confirm":"Confirm","preview":"Preview","copy":"Copy","copied":"Copied"},"locales":{"es":"Spanish","en":"English","pt":"Portuguese"},"levels":{"basics":"Basics","intermediate":"Intermediate","advanced":"Advanced","expert":"Expert"},"visibility":{"everyone":"Everyone","assigned":"Assigned only","hidden":"Hidden"},"enrollment":{"enrolled":"Enrolled","in_progress":"In progress","completed":"Completed","dropped":"Dropped","overdue":"Overdue","notEnrolled":"Not enrolled"},"review":{"draft":"Draft","needs_review":"Needs review","changes_requested":"Changes requested","approved":"Approved","published":"Published","submit":"Send to review","requestChanges":"Request changes","approve":"Approve","publish":"Publish","reopen":"Reopen for review","note":"Note for the author","notePlaceholder":"What should change?","trail":"Review history","emptyTrail":"No review activity yet.","publishedVersion":"Published version {n}","knowledgeWarning":"Published, but Ayva could not index the course yet (it retries on the next publish):","retireWarning":"Archived, but Ayva's copy of the course could not be retired; an admin can archive it in Ayva → Shared knowledge:","notPublished":"Not published yet","pendingLocales":"Pending translations: {locales}","moved":"The course is now \"{state}\"."},"campus":{"eyebrow":"Edu One · Campus","title":"Campus","subtitle":"What is new, what is yours to finish, and the academies for every platform.","academies":"Academies","academiesHint":"One academy per platform. Pick where you work.","newCourses":"New courses","continueLearning":"Continue learning","mandatoryOpen":"Mandatory for you","noAcademies":"No academies yet. A school admin creates them in School settings.","noCourses":"No published courses yet.","kpi":{"courses":"Courses","learners":"Learners","completions":"Completions","certificates":"Certificates"}},"academy":{"eyebrow":"Edu One · Academy","courses":"Courses in this academy","noCourses":"No published courses in this academy yet.","modules":"Platform modules","modulesHint":"Every module of the platform and the course that teaches it.","gap":"No lesson yet","gapCount":"{n} modules without a lesson","noModules":"The module list of this platform has not been imported yet.","openPlatform":"Open the platform","learn":"Learn it"},"catalog":{"eyebrow":"Edu One · Catalog","title":"Course catalog","subtitle":"Every published course, by academy, level and category.","searchPlaceholder":"Search courses…","allAcademies":"All academies","allLevels":"All levels","allCategories":"All categories","onlyMandatory":"Only mandatory","empty":"No courses match these filters.","results":"{n} courses"},"course":{"eyebrow":"Edu One · Course","lessons":"Lessons","enroll":"Enroll","enrolling":"Enrolling…","continue":"Continue where you left off","start":"Start the course","completed":"You completed this course","progress":"Progress","due":"Due {date}","overdue":"Overdue since {date}","drop":"Leave the course","dropConfirm":"Leave this course? Your progress is kept for 30 days.","previewBanner":"Preview of the live draft. Learners see the published version.","notPublished":"This course is not published yet.","about":"About this course","skills":"Skills you gain","certificateHint":"A verifiable certificate is issued when you complete the course.","lessonN":"Lesson {n}","requiredLesson":"Required to complete","yourCertificate":"Your certificate","enrollFirst":"Enroll to open the lessons."},"lesson":{"eyebrow":"Edu One · Lesson","tryIt":"Try it in the app","tryItHint":"Ayva guides you on the real screen, step by step.","openIt":"Open it on the platform","markDone":"Mark as done","done":"Done","finishLesson":"Finish lesson","backToCourse":"Back to the course","nextLesson":"Next lesson","prevLesson":"Previous lesson","completedBanner":"Lesson completed.","courseCompletedBanner":"Course completed! Your certificate is ready.","requiredHint":"Complete every required block to finish this lesson.","quiz":{"title":"Knowledge check","selectOne":"Choose one answer","selectMany":"Choose every correct answer","submit":"Check answers","score":"Score: {score}% (passing {passing}%)","passed":"Passed","failed":"Not passed yet","attempts":"Attempts: {n}","tryAgain":"Try again","explanation":"Why","unanswered":"Answer every question first."},"video":{"transcript":"Transcript","unavailable":"This video is still being prepared.","captions":"Captions","narrationTts":"Synthetic-voice narration","narrationHuman":"Narration recorded by a person","download":"Download the video","watchIn":"Playing in {locale}"},"screenshot":{"pending":"Screenshot pending capture."},"live":{"hint":"This is a live class. Join from the class page when it starts."},"practice":{"hint":"Practice task: do it in the training workspace, then come back."},"link":{"open":"Open the resource"}},"my":{"eyebrow":"Edu One · My learning","title":"My learning","subtitle":"Your courses, what is due, and the certificates you earned.","inProgress":"In progress","completed":"Completed","overdue":"Overdue","recommended":"Recommended for you","certificates":"Certificates","nothingYet":"You have not started a course yet.","browse":"Browse the catalog","kpi":{"enrolled":"Enrolled","completed":"Completed","overdue":"Overdue","certificates":"Certificates"}},"certificates":{"eyebrow":"Edu One · Certificates","title":"My certificates","subtitle":"Every certificate has a public verification code anyone can check.","empty":"No certificates yet. Complete a course to earn one.","download":"Download PDF","pdfPending":"PDF being generated","verifyLink":"Verification link","code":"Code","issuedOn":"Issued","expiresOn":"Expires","issuedBy":"Issued by","status":{"valid":"Valid","expiring":"Expires soon","expired":"Expired","no_expiry":"No expiry","revoked":"Revoked"}},"verify":{"title":"Certificate verification","subtitle":"Enter a code like EDU-XXXX-XXXX to confirm a certificate issued by Edu One.","placeholder":"EDU-XXXX-XXXX","check":"Verify","notFound":"No certificate matches this code.","holder":"Holder","course":"Course","issuer":"Issuer","issuedOn":"Issued on","expiresOn":"Valid until","valid":"This certificate is valid.","expired":"This certificate has expired.","revoked":"This certificate was revoked."},"teach":{"eyebrow":"Edu One · Teach","title":"Teach","subtitle":"Author courses, send them to review, publish them in three languages.","newCourse":"New course","byState":"By state","needsRefresh":"Lessons needing a screenshot refresh","screenplay":{"title":"Video script","subtitle":"What the robot does on screen while each sentence plays: navigate, highlight, click, type. Recorded for real.","sentences":"Narration sentences","noSentences":"The lesson has no narration script; write the intro block transcript first.","steps":"Steps","noSteps":"No script yet. Generate one with Claude or add the first step.","generate":"Generate script","generateHint":"Claude writes the steps from the blocks, the narration, the real routes and anchors of the app.","generated":"Script generated: {n} steps.","addStep":"Add step","save":"Save script","saved":"Script saved.","savedWithIssues":"Script saved with {n} issues; fix them before recording.","rehearse":"Rehearse","rehearseHint":"Runs the script in the app without narration and shows every step with a thumbnail.","rehearsing":"Rehearsing…","rehearsalCrashed":"The app restarted while this rehearsal was running; rehearse again.","rehearseQueued":"Rehearsal running; the table refreshes by itself.","lastRehearsal":"Last rehearsal","noRehearsal":"No rehearsals yet.","rehearsalStatus":{"running":"Running","done":"Done","failed":"Failed","crashed":"Crashed"},"rehearsalOk":"Every step passed.","rehearsalFailed":"A step failed; videos will not be generated until it is fixed.","issues":"Issues","step":"Step","action":"Action","actions":{"navigate":"Navigate","spotlight":"Highlight","hover":"Hover","click":"Click","type":"Type","scroll":"Scroll","open":"Open","wait":"Wait"},"cues":"Sentences","cuesFrom":"From","cuesTo":"To","route":"Route","routeHint":"An app route (/workspaces) or the demo workspace tokens {{demo.workspace}} and {{demo.board}}.","target":"Target","anchor":"data-tutorial anchor","text":"Visible text","selector":"CSS selector","value":"Value","valueHint":"What to type (type) or how many px to scroll (scroll).","expect":"Check afterwards","expectAnchor":"Anchor that must appear","expectUrl":"URL must contain","sandbox":"Writes data (demo workspace)","note":"Note next to the spotlight","duration":"{s} s","remove":"Remove step","moveUp":"Move up","importJson":"Paste script (JSON)","importJsonHint":"Paste a { version: 1, steps: [...] } object exported from another course or a bundle.","importApply":"Load into the table","importInvalid":"The JSON is not shaped like a script.","exportJson":"Copy JSON","exported":"Script copied to the clipboard.","moveDown":"Move down"},"media":{"title":"Screenshots and videos","subtitle":"Real screenshots of the app for every block and one narrated video per lesson, in all three languages.","screenshots":"Screenshots","videos":"Narrated videos","captureAll":"Capture screens","captureAllHint":"Takes (or retakes) the screenshot of every screenshot block in es, en and pt with the capture account, masking personal data.","recapture":"Recapture everything","checkDrift":"Check for changes now","checkDriftHint":"Retakes every capture and flags the ones that no longer match the live screen.","generateVideos":"Generate videos","generateVideosHint":"Narrates each lesson script with a synthetic voice, records the screens and renders one video per language.","regenerateVideos":"Generate again","noScreenshotBlocks":"This course has no screenshot blocks.","noTranscript":"The lesson has no narration script (intro block).","noScreenplay":"The lesson has no video script (Lessons → Video script).","rehearsalFailed":"The last rehearsal of the script failed; fix the red step and rehearse again.","skipReasons":{"no_transcript":"no narration script","no_screenplay":"no video script","rehearsal_failed":"the last rehearsal failed"},"skipped":"Not generated: {list}.","gateOk":"Quality gate: passed","gateFailed":"Quality gate: failed","gateNumbers":"frozen max {frozen} s · {live}% recorded","status":{"missing":"No capture","requested":"Queued","captured":"Captured","failed":"Failed","stale":"Changed"},"videoStatus":{"queued":"Queued","running":"Running","done":"Ready","failed":"Failed","cancelled":"Cancelled","none":"No video"},"anchorMissing":"The requested element did not appear; the whole screen was captured.","masked":"{n} elements with personal data masked","capturedAt":"Captured on {date}","pending":"{n} captures queued","stale":"{n} captures changed","activeJobs":"{n} videos in progress","route":"Route","anchor":"Element","locale":"Language","lesson":"Lesson","block":"Block","replaceNarration":"Replace the narration","replaceNarrationHint":"Upload a human recording (mp3, m4a, wav, up to 50 MB) for this lesson and language; the video is rendered again with it and the captions follow the script.","upload":"Upload and render again","uploading":"Uploading…","narration":{"tts":"Synthetic voice","human":"Human voice"},"presenter":{"rendered":"Ayva presents the video","unavailable":"No presenter (the video worker has no WebGL)","off":"No presenter","card":"Ayva at the edges (card)"},"presenterToggle":"Ayva presents the video","presenterHint":"Ayva appears in the corner of the video and moves her lips with the narration.","provider":"Voice provider","voice":"Voice","noTts":"No voice provider is configured (Setup Center → AI providers: ElevenLabs or OpenAI). You can still upload human recordings.","stream":"Cloudflare Stream","streamOff":"Stream is not configured; videos are served from the file store.","jobs":"Recent jobs","noJobs":"No videos yet.","cancel":"Cancel","retry":"Run again","open":"View","duration":"{s} s","cost":"Cost","attempts":"Attempts","disabledCapture":"Capture is switched off (flag edu_capture).","disabledVideo":"Videos are switched off (flag edu_video).","queuedToast":"{n} captures queued; they are taken in the background (a few seconds per screen).","videosQueuedToast":"{n} videos queued; each takes a minute or two.","driftQueuedToast":"Check started; look at \"Needs refresh\" in a few minutes.","nothingToDo":"There was nothing new to do.","refreshing":"Refreshing…","viewRefresh":"See the captures that changed","humanQueued":"Recording received; the video is being rendered again."},"refresh":{"eyebrow":"Edu One · Teach · Needs refresh","title":"Captures that changed","subtitle":"The nightly check retook these screens and they no longer match. Accept the new capture or keep the current one.","empty":"No capture has changed. Everything is up to date.","before":"Current capture","after":"New capture","accept":"Use the new one","keep":"Keep the current one","regenerate":"Regenerate the lesson with Claude","reason":{"dom":"The screen structure changed","pixels":"The image changed","both":"The screen and the image changed"},"checkedAt":"Checked on {date}","distance":"Visual distance {n}","acceptedToast":"Capture updated.","keptToast":"The current capture stays.","openLesson":"Open the lesson","noReplacement":"The new capture is not available yet."},"empty":"No courses yet. Create the first one.","filterState":"State","allStates":"All states","tabs":{"details":"Details","lessons":"Lessons","translations":"Translations","review":"Review","learners":"Learners","assignments":"Assignments","media":"Media"},"form":{"title":"Title (Spanish)","description":"Description","academy":"Academy","noAcademy":"No academy","category":"Category","level":"Level","duration":"Duration (minutes)","mandatory":"Mandatory course","visibility":"Visibility","skillTags":"Skills taught (comma separated)","skillTag":"Certificate tag for dispatch (optional)","passingScore":"Passing score (%)","certValidity":"Certificate validity (days, empty = never expires)","created":"Course created.","saved":"Saved."},"lesson":{"new":"New lesson","title":"Lesson title (Spanish)","description":"Short description","required":"Required to complete the course","duration":"Minutes","tourId":"\"Try it\" tour id (Redsis One screens)","openUrl":"\"Open it\" link (other platforms)","noLessons":"No lessons yet. Add the first one.","blocks":"Blocks","addBlock":"Add block","noBlocks":"This lesson has no blocks yet.","moveUp":"Move up","moveDown":"Move down","archiveConfirm":"Archive this lesson?"},"block":{"kinds":{"text":"Text","callout":"Callout","image":"Image","screenshot":"Screenshot","video":"Video","link":"Link","quiz":"Quiz","tour":"Guided tour","practice":"Practice task","assessment":"Assessment","live":"Live class","embed":"Embed"},"title":"Block title","body":"Text (Markdown)","caption":"Caption","url":"URL","imageUrl":"Image URL","streamUid":"Cloudflare Stream video id","tourId":"Tour id","openUrl":"\"Open it\" link","screenshotRoute":"Route to capture","screenshotAnchor":"Element anchor (optional)","tone":"Tone","tones":{"info":"Info","tip":"Tip","warning":"Warning","success":"Success"},"required":"Required block","passingScore":"Passing score for this quiz (%)","questions":"Questions","addQuestion":"Add question","question":"Question","questionType":"Type","types":{"single":"Single answer","multi":"Multiple answers","true_false":"True / false"},"option":"Option","addOption":"Add option","correct":"Correct","explanation":"Explanation shown after answering","removeBlock":"Remove block","saved":"Block saved."},"translations":{"title":"Translations","hint":"Spanish is the source. English and Portuguese are generated, then reviewed by a person before publishing.","status":{"missing":"Missing","generated":"Generated, not reviewed","reviewed":"Reviewed"},"markReviewed":"Mark as reviewed","fieldTitle":"Title","fieldDescription":"Description","allReviewed":"Every translation is reviewed."},"learners":{"title":"Learners","empty":"Nobody is enrolled yet.","name":"Name","progress":"Progress","completedAt":"Completed","dueAt":"Due"},"assignments":{"title":"Assignment rules","hint":"A rule enrolls the targeted people now and again every night, so new hires are included.","add":"Add rule","target":"Who","targetId":"Department, role or user id","dueDays":"Due in (days)","expand":"Run now","expanded":"Enrolled {n} people.","empty":"No rules yet.","types":{"all":"Everyone","department":"A department","role":"A role","user":"One person"},"lastRun":"Last run","count":"{n} enrolled"},"actions":{"preview":"Preview as learner","archiveCourse":"Archive course","archiveConfirm":"Archive this course? Learners lose access; nothing is deleted."}},"compliance":{"eyebrow":"Edu One · Compliance","title":"Compliance","subtitle":"Mandatory courses by person: who finished, who is late.","empty":"No mandatory courses are published yet.","person":"Person","department":"Department","export":"Export CSV","legend":{"completed":"Completed","in_progress":"In progress","overdue":"Overdue","none":"Not enrolled"},"summary":"{done} of {total} mandatory completions"},"settings":{"eyebrow":"Edu One · School settings","title":"School settings","subtitle":"Academies, their module lists and who teaches.","academies":"Academies","newAcademy":"New academy","form":{"slug":"Slug (URL)","name":"Name (Spanish)","description":"Description","icon":"Icon (Lucide name)","color":"Color","baseUrl":"Platform URL","position":"Order","status":"Status"},"active":"Active","hidden":"Hidden","modules":"Module list","importModules":"Import module list (JSON)","importHint":"Paste the modules.json produced for this platform. Rows are matched by slug; nothing is deleted.","importResult":"Imported {n} of {total} modules.","importRetired":"Retired {n} rows the file no longer carries.","importKeptLinked":"{n} rows kept because a course is linked: {slugs}.","linkCourse":"Link course","unlink":"Unlink","seedDefaults":"Create the default academies","seeded":"Created {n} academies.","saved":"Academy saved."},"errors":{"notFound":"Not found.","notAllowed":"You are not allowed to do that.","notPublished":"The course is not published.","invalid":"Some fields are invalid.","transition":"That change of state is not allowed from here.","capture_disabled":"Capture is switched off (flag edu_capture).","video_disabled":"Videos are switched off (flag edu_video).","no_tts":"No voice provider is configured.","audio_type":"Unsupported audio format (use mp3, m4a, wav, ogg or webm).","audio_size":"The recording is over 50 MB.","no_transcript":"The lesson has no narration script.","no_screenplay":"The lesson has no video script.","rehearsal_failed":"The last rehearsal of the script failed.","generation_failed":"Claude could not generate the script."},"generate":{"title":"Generate with Claude","subtitle":"Claude drafts a complete course from the platform's own sources; a person reviews it before anything is published.","topic":"Topic","topicPlaceholder":"e.g. How to create and move items in One Boards","module":"Platform module","noModule":"Free topic (no module)","lessons":"Lessons","depth":"Depth","depths":{"overview":"Overview","standard":"Standard","deep":"Deep"},"translate":"Also produce English and Portuguese","notes":"Notes for Claude (optional)","notesHint":"Paste procedures, screenshots described in words, or anything the sources miss.","docPaths":"Repository docs (optional, one path per line)","docPathsHint":"docs/… paths on Git One; used when the platform's Git One token (Setup Center → GITONE_TOKEN) is configured.","start":"Generate","starting":"Starting…","regenerate":"Regenerate this draft","regenerateHint":"Replaces the lessons of this draft with a new generation; nothing is deleted, the old lessons are archived.","jobs":"Recent generations","noJobs":"No generations yet.","status":{"queued":"Queued","running":"Running","done":"Done","failed":"Failed","cancelled":"Cancelled"},"openCourse":"Open the draft","retry":"Run again","cancel":"Cancel","cost":"Cost","tokens":"Tokens","model":"Model","sources":"Sources used","disabled":"Generation is switched off (flag edu_generation).","noKey":"No Anthropic key is configured for the platform; set it in Setup Center.","queuedToast":"Generation started. The draft appears here when it is ready (a few minutes).","eyebrow":"Edu One · Teach · Generate","review":"Final review pass on {model} (doubles the cost)","reviewShort":"reviewed","importBundle":"Import a bundle","calls":"{n} calls"},"tutor":{"title":"Ayva tutor","tab":"Tutor","hint":"Ask anything about this course. Ayva answers from the lesson text and can show you where to click.","placeholder":"Ask Ayva about this lesson…","send":"Send","thinking":"Ayva is reading the lesson…","showMe":"Show me where","openScreen":"Open the screen","open":"Open the tutor","contextCourse":"Course context","contextLesson":"this lesson","starters":["What is this lesson about?","Where do I do this in the app?","Explain the hardest step again"],"errors":{"unauthorized":"Sign in to ask the tutor.","not_found":"This course is not available to you.","no_key":"The tutor has no AI key configured; ask an admin to set one in Setup Center.","disabled":"Claude is switched off platform-wide right now.","spend_cap":"The daily AI budget is used up; try again tomorrow.","quota":"Your Ayva budget for today is used up.","model_error":"Ayva could not answer right now. Try again in a moment."}},"avatar":{"title":"Ayva","a11yFace":"Ayva, your tutor","bubbleLabel":"Talk to Ayva","expand":"Open Ayva","collapse":"Minimize","hide":"Hide Ayva in lessons","show":"Show Ayva","modeLabel":"Where Ayva appears","modeFloating":"Floating over the lesson","modeRail":"Side panel only","modeHidden":"Hidden","speakOn":"Voice on","speakOff":"Voice off","listen":"Speak","listening":"I'm listening…","stopListening":"Stop listening","askPlaceholder":"Ask Ayva…","send":"Send","tapToHear":"Tap to listen","greeting":"Hi, {name}! I'm here if you need help with this lesson.","greetingNoName":"Hi! I'm here if you need help with this lesson.","quizPassed":"Well done! You passed the quiz.","quizFailed":"No worries, let's go over it. Want me to explain the question you missed?","explainButton":"Yes, explain it","stalled":"Need a hand with this step?","hintButton":"Give me a hint","lessonDone":"Lesson complete! On to the next one.","courseDone":"You finished the course! Your certificate is ready.","certificateLink":"View my certificate","tourWatching":"Look here","classButton":"Class with Ayva","errorVoice":"Ayva's voice is not available right now.","thinking":"Ayva is thinking…","dismiss":"Close"},"classMode":{"title":"Class with Ayva","subtitle":"{lesson} · {course}","start":"Start the class","pause":"Pause","resume":"Resume","prev":"Previous block","next":"Next block","mute":"Mute","unmute":"Unmute","textMode":"Text mode","handsFree":"Hands-free","handsFreeOn":"Hands-free on: Ayva listens once she finishes speaking","handsFreeOff":"Hands-free off: tap Speak to ask","exit":"Leave the class","listening":"I'm listening…","thinking":"Ayva is thinking…","speaking":"Ayva is speaking","paused":"Paused","readingBlock":"Block {n} of {total}","askHint":"Speak or type your question","quizIntro":"Here comes a question.","quizSayOption":"Say the number or the text of the option.","quizHeard":"I heard: {answer}","quizNotUnderstood":"I didn't catch your answer. Which option do you choose?","quizSubmit":"Submit answer","quizResultPassed":"Correct. Moving on.","quizResultFailed":"Not that one. Let me explain and we'll try again.","finishPrompt":"We finished the lesson. Shall I mark it as complete?","finishYes":"Yes, complete it","finishNo":"Not yet","imageCaption":"Here you see: {caption}","tourOffer":"Want me to show you where to do it?","tourYes":"Yes, show me","endSummary":"That's all for today.","captions":"Captions","keyboardHint":"Space: pause · Arrows: blocks · Esc: exit","noVoice":"Voice is not available; the class continues in text mode.","micBlocked":"The microphone is blocked in your browser. Type your question."},"bundles":{"imported":"Course bundle imported as a draft.","apiHint":"Claude Code sessions can POST a bundle to /api/edu/bundles with an API key scoped edu:write."}},"widgetBuilder":{"title":"Widget Builder","subtitle":"Design your own widgets on a canvas, bind them to live data, and publish them to the company library.","eyebrow":"STUDIO","newWidget":"New widget","empty":{"title":"No widgets yet","description":"Create your first custom widget — compose it on the canvas, bind it to your boards, and publish it for the company."},"card":{"noDescription":"No description","updated":"Updated"},"create":{"title":"New widget","subtitle":"Name your widget and pick a starting point. You can change everything later.","nameLabel":"Widget name","namePlaceholder":"e.g. Overdue tickets by owner","templateLabel":"Start from","createButton":"Create widget","cancel":"Cancel"},"templates":{"blank":{"label":"Blank","hint":"An empty canvas."},"kpi-card":{"label":"KPI card","hint":"A single headline metric with a title."},"metric-trio":{"label":"Metric trio","hint":"Three metrics side by side."},"chart-kpi":{"label":"Chart + KPI","hint":"A headline metric over a breakdown chart."},"ticket-table":{"label":"Table","hint":"A titled list of board rows."}},"toolbar":{"back":"My widgets","undo":"Undo","redo":"Redo","saving":"Saving…","saved":"Saved","unsaved":"Unsaved changes","saveError":"Save failed"},"rail":{"tools":"Tools","properties":"Properties","settings":"Settings"},"canvas":{"locked":"Locked"},"categories":{"data":"Data","chart":"Charts","text":"Text","media":"Media","embed":"Widgets"},"elementTypes":{"text":"Text","heading":"Heading","image":"Image","icon":"Icon","shape":"Shape","divider":"Divider","button":"Button","value":"Metric","chart":"Chart","table":"Table","progress":"Progress","sdk-widget":"Widget"},"tools":{"kpi":{"label":"Metric (KPI)","hint":"A single aggregated number from a board."},"table":{"label":"Table","hint":"Board rows as a compact table."},"progress":{"label":"Progress","hint":"A value against a target."},"chart-bar":{"label":"Bar chart","hint":"Compare categories."},"chart-line":{"label":"Line chart","hint":"A value over a series."},"chart-area":{"label":"Area chart","hint":"A filled series."},"chart-pie":{"label":"Pie chart","hint":"Share of a whole."},"chart-donut":{"label":"Donut chart","hint":"Share of a whole, with a hole."},"chart-gauge":{"label":"Gauge","hint":"A value against a maximum."},"heading":{"label":"Heading","hint":"A large title."},"text":{"label":"Text","hint":"A paragraph of text."},"button":{"label":"Button","hint":"A link to a page or URL."},"image":{"label":"Image","hint":"An image from an https URL."},"icon":{"label":"Icon","hint":"A single icon."},"shape-rect":{"label":"Rectangle","hint":"A rectangle."},"shape-ellipse":{"label":"Ellipse","hint":"An ellipse."},"shape-line":{"label":"Line","hint":"A straight line."},"shape-arrow":{"label":"Arrow","hint":"A line with an arrowhead."},"divider":{"label":"Divider","hint":"A separating rule."},"sdk-widget":{"label":"Existing widget","hint":"Embed any platform widget."}},"palette":{"searchPlaceholder":"Search tools…","hint":"Click a tool to add it to the canvas.","noMatches":"No tools match your search."},"inspector":{"emptyHint":"Select an element to edit it, or add one from the Tools tab.","namePlaceholder":"Element name","duplicate":"Duplicate","forward":"Bring forward","backward":"Send backward","lock":"Lock","unlock":"Unlock","remove":"Delete","position":"Position & size","width":"Width","height":"Height","text":"Text","textPlaceholder":"Type your text…","button":"Button","label":"Label","linkPlaceholder":"/path or https://…","linkHint":"Internal paths or https URLs only.","variants":{"primary":"Primary","secondary":"Secondary","ghost":"Ghost"},"image":"Image","altText":"Alt text","imageHint":"https images only.","fits":{"cover":"Cover","contain":"Contain","fill":"Fill"},"icon":"Icon","shape":"Shape","shapes":{"rect":"Rectangle","ellipse":"Ellipse","line":"Line","arrow":"Arrow"},"orientation":"Orientation","orientations":{"horizontal":"Horizontal","vertical":"Vertical"},"sdkWidget":"Widget","pickWidget":"Choose a widget…","sdkWidgetHint":"The widget renders with its default settings and respects each viewer’s access.","data":"Data","dataSource":"Data source","viewerDataNote":"You see your own data here; each viewer sees only what they can access.","loadingColumns":"Loading columns…","metric":"Metric","column":"Column","pickNumberColumn":"Select a number column…","target":"Target","prefix":"Prefix","suffix":"Suffix","caption":"Caption","chartType":"Chart type","chartTypes":{"bar":"Bar","line":"Line","area":"Area","pie":"Pie","donut":"Donut","gauge":"Gauge"},"categoryColumn":"Category column","xColumn":"X axis column","valueColumn":"Value column","pickColumn":"Select a column…","optional":"Optional…","maxTarget":"Maximum","showLegend":"Show legend","columns":"Columns","noColumns":"This board has no columns.","columnsHint":"Pick up to 8 columns to show.","rowLimit":"Row limit","showHeader":"Show header","fns":{"count":"Count","sum":"Sum","avg":"Average","median":"Median","min":"Min","max":"Max"},"style":"Style","background":"Background","textColor":"Text color","borderColor":"Border color","borderWidth":"Border","radius":"Radius","padding":"Padding","opacity":"Opacity","shadow":"Shadow","shadows":{"none":"None","sm":"Small","md":"Medium","lg":"Large"},"fontSize":"Font size","weight":"Weight","font":"Font","fonts":{"sans":"Sans","slab":"Slab","mono":"Mono"},"horizontal":"Horizontal align","vertical":"Vertical align","aligns":{"left":"Left","center":"Center","right":"Right"},"vAligns":{"top":"Top","middle":"Middle","bottom":"Bottom"},"multiSelected":"{n} selected","align":"Align","alignEdges":{"left":"Left","centerX":"Center","right":"Right","top":"Top","middleY":"Middle","bottom":"Bottom"}},"settings":{"name":"Name","description":"Description","icon":"Icon","canvas":"Canvas size","width":"Width","height":"Height","background":"Background","publish":"Publish","audience":"Who can add it","audiences":{"everyone":"Everyone","roles":"Roles","departments":"Departments"},"noAudienceOptions":"No options available.","publishing":"Publishing…","republish":"Republish","publishNow":"Publish","publishHint":"Publishing makes this widget addable across the company (data stays per-viewer).","statusPublished":"Published","statusDraft":"Draft","statusArchived":"Archived","versions":"Version history","loading":"Loading…","noVersions":"No published versions yet.","rollback":"Restore","archive":"Archive widget","archiveConfirm":"Confirm archive","archiveHint":"Archiving hides it from the library; existing placements show an archived card.","cancel":"Cancel"}},"screenBuilder":{"title":"Screen Builder","subtitle":"Board-bound, right-rail data-entry apps — compose Screens that write straight to One Boards.","empty":{"title":"No screens yet — create one","body":"A Screen is a reusable data-entry app bound to a board — pick fields, bind them to columns, and it writes straight to your board. The composer is coming in a later slice."},"runtime":{"emptyRail":{"title":"No active Screens for this board","body":"A Screen shows up here once it is published (not a draft) and attached to this board."},"status":{"created":"Item created.","saved":"Saved.","savedWithIssues":"\"{field}\" did not save: {error}","noMatch":"No existing item for \"{value}\" — will create a new one.","loaded":"Loaded the existing item — edit and Save.","nothingToSave":"Nothing to save — fill in at least one field.","lookupFailed":"Lookup failed.","saveFailed":"Save failed.","noItemToUpdate":"No item to update — scan the key field first.","screenNotFound":"This Screen could not be loaded."},"field":{"required":"Required.","scanPlaceholder":"Scan or type, then Enter","lookupPlaceholder":"Type or scan, then Enter","selectPlaceholder":"Select…","peopleSearchPlaceholder":"Search people…","noPeopleMatch":"No matches.","noOptions":"No options configured for this field."},"actions":{"submit":"Submit","save":"Save","clear":"Clear"},"workflowSeamNote":"This Screen uses the item-label workflow — showing the generic form until that guided flow ships."},"workflow":{"gate":{"loading":"Checking Redix availability…","flagOffTitle":"Redix Sales-Order intake is not enabled","flagOffBody":"An admin needs to turn on the Redix intake sub-flag for this environment before the guided Sales Order → Part Number → Serial flow can run. Showing the plain form below instead — it still writes to the board.","unreachableTitle":"Redix is unreachable","unreachableBody":"Could not reach Redix: {detail}. Showing the plain form below instead — it still writes to the board.","notConfiguredTitle":"This Screen has no item-label workflow wired up","notConfiguredBody":"The Sales Order and/or Serial fields are not fully configured in the composer. Showing the plain form below instead."},"order":{"salesOrderLabel":"Sales Order","salesOrderPlaceholder":"Scan or type a Sales Order, then Enter","fetchButton":"Look up","fetching":"Looking up the Sales Order…","notFoundError":"Could not find that Sales Order.","customerLabel":"Customer","statusLabel":"Status","changeOrder":"Change Sales Order","linesTitle":"Part Number lines","emptyLines":"This Sales Order has no part-number lines.","selectLine":"Select","selected":"Selected","changeLine":"Switch part number","progressFormat":"{done} / {target}","remainingFormat":"{remaining} remaining","doneLabel":"Done","partNumberEmptyWarning":"Redix returned an empty Part Number for this line — check the Redix field mapping.","noOrderYet":"Scan or enter a Sales Order above to see its part-number lines."},"fields":{"sharedTitle":"Shared for this part number","serialTitle":"Serial"},"session":{"resumed":"Resumed where you left off on this Sales Order."}},"composer":{"title":"Screen Composer","newTitle":"New Screen","backToList":"Back to Screens","board":{"label":"Target board","placeholder":"Pick a board…","loading":"Loading boards…","locked":"A Screen’s board can’t be changed after it’s created.","required":"Pick a board to start composing."},"details":{"nameLabel":"Screen name","namePlaceholder":"e.g. Item Label Intake","descriptionLabel":"Description","descriptionPlaceholder":"What does this Screen do?","statusLabel":"Status","statusDraft":"Draft","statusPublished":"Published"},"sections":{"title":"Layout","addSection":"Add section","sectionTitlePlaceholder":"Section title (optional)","removeSection":"Remove section","empty":"No sections yet — add one to start placing fields.","emptyFields":"No fields in this section yet.","moveUp":"Move up","moveDown":"Move down"},"palette":{"title":"Add a field","kinds":{"text":"Text","longtext":"Long text","number":"Number","date":"Date","dropdown":"Dropdown","status":"Status","people":"People","link":"Link","checkbox":"Checkbox","scan":"Scan","lookup":"Lookup","button":"Button","serial":"Serial number","vendor_serial":"Vendor serial","ibm_pn":"IBM part number","condition":"Condition","unit_picker":"Unit picker","query_lookup":"Lookup from a saved query"}},"field":{"edit":"Edit","collapse":"Done","remove":"Remove field","moveUp":"Move up","moveDown":"Move down","labelLabel":"Label","labelPlaceholder":"Field label","kindLabel":"Field kind","requiredLabel":"Required","placeholderLabel":"Placeholder","placeholderPlaceholder":"Shown when empty","unbound":"Not bound","role":{"label":"Role","none":"None","shared":"Shared (per part number)","perUnit":"Per unit","key":"Key (edit lookup)"},"binding":{"title":"Writes to","none":"Buttons don’t write a value.","mismatch":"This binding targets a different board than the Screen."},"source":{"title":"Options source","kind":"Source","none":"None (type your own options below)","boardColumn":"This board’s column values","redixSalesOrder":"Redix Sales Order","static":"Fixed list","column":"Column","addOption":"Add option","optionValue":"Value","optionLabel":"Label","removeOption":"Remove","mismatch":"This source targets a different board than the Screen."},"events":{"title":"Events","add":"Add event","empty":"No events — nothing happens on Enter/scan/change yet.","on":"When","onValues":{"enter":"Enter","scan":"Scan","change":"Change","blur":"Blur","click":"Click"},"do":"Do","doValues":{"lookup":"Look up","autofill":"Autofill","validate":"Validate","createItem":"Create item","updateItem":"Update item","clear":"Clear + refocus"},"params":"Params (JSON, optional)","paramsInvalid":"Invalid JSON — params not saved for this event.","remove":"Remove event"}},"config":{"title":"Screen configuration","mode":{"label":"Mode","form":"Form","itemLabelWorkflow":"Item-label workflow"},"printMode":{"label":"Print","none":"No printing","inline":"Inline (on submit)","automation":"Via automation","both":"Both","template":"Label template","templatePlaceholder":"Pick a template…","noTemplates":"No label templates attached to this board yet.","printer":"Printer","printerPlaceholder":"Pick a printer…","noPrinters":"No network printers registered yet.","copies":"Copies"},"keyField":{"label":"Key field (edit lookup)","none":"None","hint":"Scanning/typing this field in the runtime loads a matching item for editing."},"editEnabled":"Allow editing existing items","workflow":{"title":"Item-label workflow fields","salesOrderField":"Sales Order field","serialField":"Serial field","partNumberField":"Part Number field (optional)","sharedFields":"Shared fields (remembered per part number)","none":"None","hint":"Pick which fields on this Screen drive the Sales Order → Part Number → Serial workflow."}},"preview":{"title":"Preview","hint":"A read-only preview of how this Screen will render — nothing here writes to the board.","empty":"Add a section and some fields to see a preview."},"actions":{"create":"Create Screen","creating":"Creating…","save":"Save","saving":"Saving…","saved":"Screen saved.","saveFailed":"Save failed","publish":"Publish","unpublish":"Unpublish (back to draft)","archive":"Archive Screen","archiving":"Archiving…","archived":"Screen archived.","archiveFailed":"Archive failed"},"validation":{"nameRequired":"Give this Screen a name.","boardRequired":"Pick a target board first.","fixErrors":"Fix the highlighted issues before saving."}},"collection":{"notEnabled":"This is a data collection field. Those are not turned on for you.","checking":"Checking…","unavailable":"Could not check this right now. Try again.","fixFirst":"Sort out \"{field}\" before saving.","overriddenBy":"Override by {name}: {reason}","previewNote":"Preview: checks read live data, nothing is saved or recorded.","schemes":{"rid_52s":"IBM 52S serial","ncr":"NCR serial","rz_supplier":"RZ supplier serial","rd_inventory_label":"RD inventory label","vsn_vendor":"Vendor serial","auto_policy":"Automatic, by client policy"},"serial":{"placeholder":"Scan or type the serial","scheme":"Scheme: {scheme}","allocateHint":"A serial ({scheme}) is allocated when you save.","lastAllocated":"Serial allocated: {serial}","reserveFailed":"Could not allocate a serial for \"{field}\". Check the condition and the part number, then save again.","issues":{"unknown_scheme":"{value} does not match any known serial scheme.","invalid":"{value} is not a valid serial ({scheme}).","already_registered":"Serial {value} is already registered."}},"vendorSerial":{"placeholder":"Scan or type the vendor serial"},"ibmPn":{"placeholder":"IBM part number, 7 characters"},"condition":{"placeholder":"Choose the condition","lineCondition":"The order line is condition {code}.","notForItemLabels":"{label} (not for item labels)","defaults":{"N":"New","R":"Refurbished","U":"Used"}},"unitPicker":{"placeholder":"Scan a unit","count":"{count} picked","empty":"No units picked yet.","remove":"Remove {serial}","at":"at {location}","needOrder":"Enter the sales order first."},"quantity":{"line":"{labelled} of {ordered} labelled","needLine":"Enter the sales order and the line first."},"queryLookup":{"placeholder":"Filled in by the lookup","waiting":"Fills in once the values it needs are entered.","running":"Looking up…","found":"Found.","manyRows":"{count} rows matched; the first one is used.","none":"Nothing found for these values.","again":"Look up again","required":"\"{field}\" has no answer yet. Enter the values it needs and wait for the lookup.","failed":{"not_configured":"This lookup has no saved query yet.","query_missing":"The saved query no longer exists.","query_disabled":"The saved query is disabled.","datasource_changed":"The saved query now reads a different datasource than the one this field was set up with.","refused":"The datasource refused this query.","run_failed":"The lookup could not be run.","unknown_column":"The saved query has no column named \"{column}\".","unavailable":"Could not run the lookup right now."}},"unitStates":{"in_stock":"in stock","in_transit":"in transit","installed":"installed at a site","pending_return":"waiting to be returned","returned":"returned","rma_outbound":"out on a return to the vendor","scrapped":"scrapped","departed":"no longer in stock"},"block":{"reasonLabel":"Reason","reasonPlaceholder":"Why is it right to continue?","reasonTooShort":"Write a real reason (at least {min} characters).","confirm":"Continue","cancel":"Cancel"},"overrideErrors":{"forbidden":"You do not have the permission for this override.","reason":"Write a real reason first.","audit":"The override could not be recorded, so it was not granted. Try again.","failed":"The override did not go through. Try again."},"keypad":{"pad":"Number pad","clear":"Clear everything","backspace":"Delete the last digit"},"rules":{"conditionMismatch":{"name":"Condition does not match the line","message":"That line is condition {line}. You said the unit is {chosen}. Nothing prints until they agree.","fixes":{"useLineCondition":"The unit is really {line}, use that","pickAnotherLine":"Pick another line","override":"Supervisor override, with a reason"}},"vendorSerialDuplicate":{"name":"Vendor serial already used","message":"This vendor serial was already labelled for {pn} on SO {so}, {date}.","variants":{"noOrder":"This vendor serial was already labelled for {pn}."},"fixes":{"openUnit":"Open that unit","scanAgain":"Scan again","override":"It is a different unit (supervisor, reason)"}},"ibmPnFormat":{"name":"Not an IBM part number","message":"{value} is not an IBM part number (7 characters: 7 digits, or 2 digits, 1 or 2 letters, then digits).","variants":{"noPartNumber":"0000000 means the unit has no IBM part number. That needs a reason."},"fixes":{"fix":"Fix it","override":"Use 0000000, with a reason"},"overrideDenied":"Using 0000000 needs the permission \"Label a unit without an IBM part number\"."},"qtyVsOrdered":{"name":"More than the quantity ordered","message":"This line has {ordered} ordered and {labelled} labelled. One more needs a reason.","variants":{"many":"This line has {ordered} ordered and {labelled} labelled. {adding} more need a reason."},"fixes":{"override":"Add one with a reason","stop":"Stop"},"fixVariants":{"many":{"override":"Add {adding} with a reason"}}},"unitNotInInventory":{"name":"Unit not in inventory","message":"Unit {serial} is not in inventory.","variants":{"notInStock":"Unit {serial} is not in stock: it is {state}."},"fixes":{"pickAnother":"Pick another unit"}},"unitOtherOrder":{"name":"Unit belongs to another order","message":"Unit {serial} is held for SO {otherSo}, not SO {so}. It is at {location}.","variants":{"noLocation":"Unit {serial} is held for SO {otherSo}, not SO {so}.","free":"Unit {serial} is not held for SO {so}. It is free stock at {location}.","freeNoLocation":"Unit {serial} is not held for SO {so}. It is free stock."},"fixes":{"pickAnother":"Pick another unit"}},"unitPnMismatch":{"name":"Part number does not match","message":"Unit {serial} is part {unitPn}. The line asks for {linePn}.","fixes":{"pickAnother":"Pick another unit","override":"Override with a reason"}},"unitQtyMismatch":{"name":"Quantity does not match","message":"Unit {serial} holds {unitQty}. This step needs {needed}.","fixes":{"pickAnother":"Pick another unit"}},"unitDuplicate":{"name":"Unit already picked","message":"Unit {serial} is already on the list.","fixes":{"pickAnother":"Pick another unit"}},"orderNotInRedix":{"name":"Order not in Redix","message":"SO {so} is not in Redix for {site}. The pick ticket may be older than Redix.","variants":{"noSite":"SO {so} is not in Redix. The pick ticket may be older than Redix."},"fixes":{"askOffice":"Ask the office","tryAnother":"Try another order"}},"printerOffline":{"name":"Printer not answering","message":"{role} printer {printer} is not answering.","fixes":{"pickPrinter":"Pick another printer for the {role} role","printLater":"Print later and reprint","retry":"Retry"}},"agentMissing":{"name":"No camera here","message":"No camera on this PC.","fixes":{"deviceCamera":"Use this device's camera","upload":"Upload a file","sendToStation":"Send to {station}"}}},"composer":{"title":"Data collection","closed":"The data collection fields are not turned on for you, so this field cannot be changed here.","ref":{"none":"Not set","field":"Another field","context":"Run context","static":"Fixed value","fieldPick":"Choose a field","contextKey":"Context key","staticValue":"Value"},"serial":{"mode":"Mode","modeValidate":"Scan and validate","modeAllocate":"Allocate on save","scheme":"Serial scheme","schemeAny":"Any known scheme","schemesFailed":"Could not load the serial schemes.","rejectKnown":"Refuse a serial that is already registered","condition":"Condition code","ibmPn":"IBM part number","ncrPn":"NCR part number","pn":"Part number","client":"Client","site":"Site"},"vendorSerial":{"pn":"Part number (a vendor serial is used once per part)"},"ibmPn":{"allowNone":"Allow 0000000 (no IBM part number) with an override"},"condition":{"options":"Condition codes","code":"Code","label":"Name","itemLabel":"Can go on an item label","add":"Add a condition","remove":"Remove {code}","itemLabelOnly":"Offer only the conditions that can go on an item label","allowed":"Codes the client allows (comma-separated)","allowedRef":"Allowed codes read at run time","line":"Condition of the order line"},"unitPicker":{"so":"Sales order","line":"Order line number","pn":"Part number of the line","qty":"Pieces per scan","freeStock":"Accept units that are not held for any order"},"queryLookup":{"query":"Saved query","queryNone":"Choose a saved query","queriesFailed":"Could not load the saved queries.","queriesEmpty":"No saved query is enabled yet. They are written in Portal Administration, Connector.","params":"Parameters","paramsNone":"This query takes no parameters.","valueColumn":"Result column kept as this field’s value","columnPlaceholder":"Column name, as the query returns it","fills":"Fill other fields","fillColumn":"Column","fillField":"Field","fillAdd":"Add a field to fill","fillRemove":"Remove","requiredHint":"For a lookup, \"required\" means a row must match before the Screen can save."},"quantity":{"enable":"Check against the quantity ordered","so":"Sales order","line":"Order line number"},"gallery":{"show":"Show the blocking messages","hide":"Hide the blocking messages","title":"Blocking messages","hint":"Every message these fields can raise, with sample values. Nothing here is saved."}}},"print":{"printed":"Label printed.","printFailed":"Label print failed: {error}"}},"ayvaAdmin":{"title":"Ayva","eyebrow":"AI control plane","description":"Ayva's company-wide control plane — turn her on, shape her rules, govern what she may do, and review every action. She always follows each person's own permissions.","tabs":{"overview":"Overview","config":"Configuration","matrix":"Permission Matrix","monitoring":"Monitoring","skills":"Skills & MCP","usage":"Usage & Keys","evals":"Evals"},"ownerOnly":"Owner only","master":{"onTitle":"Ayva is on","offTitle":"Ayva is off","onBody":"Employees you have enabled can chat with her using the models you allow.","offBody":"No one can chat with her yet. Turn her on when you are ready.","turnOn":"Turn on","turnOff":"Turn off"},"caps":{"title":"Capabilities","subtitle":"What is live right now versus built but dark.","live":"Live","dark":"Off","matrix":"Permission governance","skills":"Skill packs","mcp":"MCP connections","voice":"Voice","autonomy":"Autonomy","knowledge":"Knowledge","memory":"Memory","web":"Web access","write":"Write actions","tools":"Platform tools"},"stats":{"title":"Usage & spend","turns":"Turns (24h)","blocked":"Blocked (24h)","activeUsers":"Active people (24h)","tokens24h":"Tokens (24h)","tokens30d":"Tokens (30 days)","spend30d":"Spend (30 days)","spendHint":"Anthropic billing; local models bill nothing."},"ledger":{"title":"Recent activity","subtitle":"Every act Ayva took, newest first — reversible for 24 hours.","empty":"Ayva has not taken any actions yet.","reversed":"Reverted","notReversible":"Not reversible","undo":"Undo","undoing":"Undoing…","appliedA11y":"Action applied by Ayva"},"kill":{"title":"Kill-switches","subtitle":"Emergency stops. Each takes effect immediately, for everyone.","write":"Write actions","writeHint":"When off, Ayva can only read and propose — never write.","tools":"Platform tools","toolsHint":"When off, Ayva cannot look up boards, tickets or data.","web":"Web access","webHint":"When off, Ayva cannot search the web.","matrixLink":"Open the Permission Matrix"},"sections":{"skillPacks":"Skill packs","selfBuilt":"Self-built tools","selfBuiltHint":"Tools Ayva proposed. Review the code and risk tier before approving.","mcp":"MCP connections","mcpOff":"MCP connections are turned off.","mcpOffHint":"Enable them in Admin → Feature flags to manage them here.","usageOverview":"Usage overview","perUser":"Per person","providerKeys":"Provider keys","access":"Per-person access","limits":"Limits & governance"},"look":{"title":"Ayva's look","subtitle":"How Ayva's face looks across the portal. Changes apply within a few minutes.","glasses":"Glasses","glassesWhite":"White","glassesNavy":"Navy (original drawing)","glassesNone":"No glasses","hairWarmth":"Hair tone","expressionIntensity":"Expression intensity","motion":"Motion","framing":"Framing","framingBust":"Bust","framingFace":"Face","framingShoulders":"Shoulders","blinkRate":"Blink rate","gazeFollow":"Follow with gaze","presets":"Presets","preview":"Preview","save":"Save look","saved":"Look saved.","reset":"Reset to the original look","resetDone":"Look reset.","error":"Could not save the look."},"usage":{"subtitle":"Which AI is being used, by whom, and how much of each — chat, voice, and transcription.","kindAll":"All AI","kindChat":"Chat","kindVoice":"Voice","kindStt":"Transcription","rangeToday":"Today","range7d":"7 days","range30d":"30 days","rangeCustom":"Custom","from":"From","to":"To","apply":"Apply","utcNote":"Ranges are UTC calendar days.","statCalls":"AI calls","statChatTokens":"Chat tokens","statVoice":"Voice synthesized","statTranscribed":"Transcribed","statCost":"Cost","statPeople":"People active","costHint":"Anthropic billing; local models and browser voice bill nothing.","byAiTitle":"Which AI is being used","byAiSubtitle":"Every model, voice, and transcription engine — busiest first. Open a row to see who uses it.","byPersonTitle":"By person","byPersonSubtitle":"Who is using AI, busiest first. Open a row for their split by AI.","trendTitle":"Usage trend","colAi":"AI","colCalls":"Calls","colVolume":"Volume","colCost":"Cost","colPeople":"People","colShare":"Share","colPerson":"Person","colChatTokens":"Chat tokens","colAisUsed":"AIs used","whoUses":"Who uses this","splitByAi":"Split by AI","unitTok":"tok","unitChars":"chars","empty":"No AI usage in this range.","limitsSubtitle":"Live usage vs each person’s caps, and refused/limited turns (misuse)."},"activity":{"subtitle":"Every Ayva conversation, filtered and grouped. Blocked turns are ones Ayva refused or that hit a limit.","range24h":"24 hours","range7d":"7 days","range30d":"30 days","rangeCustom":"Custom","statTurns":"Turns","statBlocked":"Blocked / refused","statFlagged":"Flagged","statPeople":"People","statTokens":"Tokens","filters":"Filters","person":"Person","ai":"AI","tool":"Tool","outcome":"Outcome","searchPlaceholder":"Search text, email, model…","allPeople":"All people","allAis":"All AIs","allTools":"All tools","reset":"Reset","refresh":"Refresh","exportCsv":"Export CSV","exportTruncated":"Exported the first {n} of {total} matching turns.","outcomeAll":"All turns","outcomeBlocked":"Blocked / refused","outcomeFlagged":"Flagged","outcomeWeb":"Used web","outcomeTool":"Used a tool","outcomeClean":"Clean","groupBy":"Group by","groupNone":"None (feed)","groupPerson":"Person","groupAi":"AI","groupTool":"Tool","groupDay":"Day","groupTurns":"turns","groupTokens":"tokens","groupBlocked":"blocked","groupViewTurns":"View turns","groupsEmpty":"No groups match these filters.","feedEmpty":"No activity recorded yet.","feedEmptyFiltered":"No turns match these filters.","loadMore":"Load more","showingOf":"Showing {shown} of {total} turns","userSaid":"User said","ayvaReplied":"Ayva replied","providerLabel":"provider","modelLabel":"model","tokensLabel":"tokens","toolsLabel":"tools","webBadge":"web","unknownUser":"unknown user","loading":"Loading…"},"matrixIntro":"Control what Ayva may do for each role across the platform. Set a domain to off, read, propose or act — Ayva can only be narrowed below a role’s own access, never raised above it.","saving":"Saving…","saved":"Saved.","undone":"Action reverted.","error":"Something went wrong."},"campaignSend":{"tabLabel":"Send","title":"Send an email broadcast","intro":"Build and send an email broadcast — audience, content, schedule, send.","pickCampaign":"Campaign","pickCampaignHint":"Which campaign this broadcast belongs to.","noCampaigns":"No campaigns yet — draft one in Compose first.","flagOffTitle":"Broadcast sending is off","flagOffBody":"An admin must enable “Campaigns — live email broadcast” in Admin → Modules before a campaign can send. You can still build, preview and send a test.","stepAudience":"Audience","stepTemplate":"Content","stepSchedule":"Schedule","stepReview":"Review & send","audienceSourceBoard":"From a board","audienceSourceList":"Paste a list","audienceBoard":"Board","audienceEmailColumn":"Email column","audienceGroup":"Group","audienceAllGroups":"All groups","audiencePaste":"Emails","audiencePasteHint":"One email per line, or paste CSV with a header row (a column named “email” is the address).","recipientsResolved":"recipients","willSendTo":"will send to","refreshCount":"Refresh count","useExisting":"Use campaign content","writeInline":"Write inline","selectContent":"Content","subject":"Subject","subjectB":"Subject B (A/B)","abToggle":"A/B test the subject line","abHint":"Recipients split evenly; the winner is the higher open rate.","previewText":"Preview text","body":"Body (HTML)","mergeHint":"Merge tags: {{first_name}}, {{name}}, {{company}}, {{email}}, {{unsubscribe_url}}","livePreview":"Live preview","sendNow":"Send now","sendLater":"Schedule","sendAt":"Send at","timezone":"Timezone","throttle":"Send rate (per minute)","reviewRecipients":"Recipients","reviewSuppressed":"Suppressed","reviewSchedule":"Schedule","fromOverride":"From (optional override)","replyToLabel":"Reply-to (optional)","sendButton":"Send broadcast","scheduleButton":"Schedule broadcast","starting":"Starting…","startedToast":"Broadcast started","scheduledToast":"Broadcast scheduled","testTitle":"Send a test","testTo":"Test recipient","testHint":"Sends one message to you (or a typed address). Not affected by the send switch.","testButton":"Send test","testSentTo":"Test sent to","testRecorded":"Test recorded (no email key configured in this environment).","progressTitle":"Send progress","progressSent":"Sent","progressSuppressed":"Suppressed","progressFailed":"Failed","progressQueued":"Queued","pause":"Pause","resume":"Resume","cancel":"Cancel","viewLog":"Open delivery log","suppressionTitle":"Suppression list","suppressionHint":"The global do-not-email list. Opt-outs, bounces and complaints land here.","suppressionAdd":"Add","suppressionEmail":"Email","suppressionReason":"Reason","suppressionRemove":"Remove","suppressionEmpty":"No suppressed addresses.","channelsTitle":"Other channels","channelsStub":"WhatsApp, LinkedIn, Meta, X and SMS lanes arrive in Phase 5.","next":"Next","back":"Back","noRecipients":"No recipients resolved yet.","needContent":"Add a subject and body to continue.","noAccessTitle":"Broadcast sending","noAccessHint":"You need the “Send / broadcast a campaign” permission. Ask an admin to grant campaign.send in Admin → Roles."},"ayvaSkills":{"personalHeading":"Your personal skills"},"migrationCenter":{"apiExtract":"API extract","downloadReport":"Download the replication-ready automations report (markdown)","reResolveHint":"Once the referenced board is migrated, re-resolve to wire this automation to its counterpart"},"portalUsage":{"onlineNow":"Online now","activeSessions":"Active sessions","activeUsers24h":"Active users (24h)","onlineNowHint":"active in last 5 min","onlineNowHintRealm":"across all portals · last 5 min","recentActivity":"Recent activity","recentActivityAll":"Recent activity — all portals","topBoardsViewed":"Top boards viewed","activeUsersTitle":"Active users · last {days} days","activeUsersHint":"Distinct external users with audited activity each day.","loginsSubmissionsTitle":"Logins & submissions · last {days} days","realmLoginsSubmissionsTitle":"Realm logins & submissions · last {days} days","loginsSubmissionsSummary":"{logins} logins · {submissions} submissions","legendLogins":"Logins","legendSubmissions":"Submissions","viewsCount":"{n} views","portals":"Portals","activeCount":"{n} active","colPortal":"Portal","colOnline":"Online","colUsers24h":"24h users","colSubs24h":"Subs 24h","colSubs7d":"Subs 7d","noActivePortals":"No active portals.","noRecentActivityPortal":"No recent activity for this portal.","noRecentActivityRealm":"No recent portal activity.","noBoardViews":"No board views recorded yet.","reconnecting":"Reconnecting… showing last snapshot","liveUpdated":"Live · updated {time}","pageTitle":"Portal usage","eyebrow":"Portal usage","overviewDescription":"Live presence, activity, and usage analytics across every client and vendor portal.","perPortalTitle":"{name} — usage","perPortalDescription":"Live presence, activity, and usage analytics for this portal.","trendAria":"Daily usage trend","noActiveUsers":"No active users yet.","noActivityWindow":"No activity in this window yet."},"fieldTechAuth":{"forgotLink":"Forgot your password?","loginUnavailable":"This app is temporarily unavailable. Please try again later.","loginMissingFields":"Enter your email and password.","loginTooManyAttempts":"Too many attempts. Please try again later, or contact your coordinator.","loginInvalidCredentials":"Invalid email or password.","forgotTitle":"Reset your password","forgotSubtitle":"Enter the email your coordinator registered. If it matches a tech account, we'll send you a link to set a new password.","emailLabel":"Email","forgotSubmit":"Send reset link","forgotSubmitting":"Sending…","forgotDone":"If that email matches a tech account, a password-reset link is on its way. Check your inbox (and your spam folder).","backToLogin":"Back to sign in","enterEmail":"Enter your email address.","forgotThrottled":"Too many requests. Please wait a few minutes before trying again.","resetTitle":"Set a new password","resetSubtitle":"Choose a new password for your tech account.","newPasswordLabel":"New password","confirmPasswordLabel":"Confirm new password","resetSubmit":"Set password","resetSubmitting":"Saving…","passwordsDontMatch":"The passwords do not match.","passwordTooShort":"Your password must be at least {n} characters.","resetLinkInvalid":"This reset link is invalid or has expired.","accountTitle":"Account & security","accountSubtitle":"Manage your password and two-factor authentication.","deleteAccountTitle":"Delete my account","deleteAccountBody":"Removes your TechOne login and signs you out everywhere. If your email does not open another Redsis portal, your name, email, phone and home base are erased too; tickets and history stay with the client under «Deleted technician». The board change history keeps the earlier values.","deleteAccountOpen":"Delete my account","deleteAccountConfirmPrompt":"This cannot be undone. To confirm, type {word} below.","deleteAccountConfirmWord":"DELETE","deleteAccountConfirmLabel":"Confirmation word","deleteAccountSubmit":"Delete permanently","deleteAccountDeleting":"Deleting…","deleteAccountCancel":"Cancel","deleteAccountWrongWord":"Type {word} exactly to confirm.","deleteAccountUnavailable":"Account deletion is not available right now.","deleteAccountFailed":"We could not finish deleting your account. If you can still sign in, try again; if not, ask your Redsis coordinator to delete it.","deleteAccountInternalNote":"Your account is managed by Redsis. Contact your coordinator to delete it.","deleteAccountPartial":"Your TechOne access was removed, and so was your access to Redsis portal chats. Your email also gives access to another Redsis portal, so your name and email were kept; to delete the account completely, write to {contact}.","deleteAccountContactFallback":"your coordinator","deleteAccountDoneNotice":"Your account was deleted.","deleteAccountSignIn":"Go to sign in","legalDeleteTitle":"Delete your TechOne account","legalBack":"Back","legalDeleteIntro":"You can delete your TechOne technician account at any time.","legalDeleteInAppTitle":"From the app","legalDeleteInAppBody":"Open TechOne, go to Account → Delete my account, type the confirmation word and confirm. You are signed out right away.","legalDeleteOtherTitle":"Without the app","legalDeleteOtherBody":"Write to {contact} from the email address of your account and ask for it to be deleted, or ask your coordinator.","legalDeleteOtherBodyNoContact":"Ask your Redsis coordinator to delete it for you, from the email address of your account.","legalDeleteRemovedTitle":"What is removed","legalDeleteRemovedBody":"Always: your TechOne login (you can no longer sign in), all your sessions, your access to Redsis portal chats and TechOne notifications. If your email does not open another Redsis portal: also your name, email address, password, phone and home base location, and your technician record is renamed «Deleted technician». If it does open another portal: your name and email are kept for that portal, and you are told how to request the full deletion.","legalDeleteKeptTitle":"What is kept","legalDeleteKeptBody":"Service records required by the client contract (tickets, visits, readings). They keep pointing to your technician record, which after a full deletion is named «Deleted technician» and has no contact details. If your technician record was on a Redsis board, its card is renamed «Deleted technician», its name, email and phone are emptied and it is archived; the board change history keeps the earlier values.","legalPrivacyTitle":"TechOne Privacy Policy","legalPrivacyUpdated":"Last updated: {date}","legalPrivacyIntro":"This policy explains what data the TechOne app handles, why, who it is shared with, how long it is kept and how you can ask for it to be deleted.","legalPrivacyWhoTitle":"Who we are","legalPrivacyWhoBody":"TechOne is an app by Redsis Corp. («Redsis», «we»), 2201 SW 145th Ave, Suite 209, Miramar, FL 33027, USA, which is responsible for the data the app handles. It is for field technicians who deliver service with Redsis, as employees or contractors. It is not intended for the general public: it can only be used with an account created or approved by Redsis.","legalPrivacyDataTitle":"Data we handle","legalPrivacyDataAccount":"Account: your name, email and phone, to identify you, give you access and contact you about work. Your password is stored hashed, never in plain text, and you can turn on two-step verification.","legalPrivacyDataWork":"Work: the tickets, visits, diagnoses, quotes, notes and inventory you record while you work, to deliver and document the service.","legalPrivacyDataPhotos":"Photos and videos: the ones you take or attach as evidence of the work or expense receipts, and the equipment codes you scan with the camera.","legalPrivacyDataSignature":"Customer signature: when you close a job that asks for it, as proof that the customer received the service.","legalPrivacyDataChat":"Chat messages: what you write in the customer portal conversations of the jobs assigned to you. They are read by Redsis dispatch and by that customer's portal users.","legalPrivacyDataHours":"Hours and expenses: the ones you log, to track time worked and process your expenses.","legalPrivacyDataLocation":"Precise location: only with your permission and while the app is open (see «Location»).","legalPrivacyDataBase":"Your home base location: the one dispatch records on your technician record, to plan your routes.","legalPrivacyDataNoGps":"«No location» reason: if Redsis requires your location when you tap En route or On site and the phone cannot provide it, the system records on the job the cause it detected (location permission denied, timeout or location unavailable).","legalPrivacyDataPush":"Notifications: if you allow them, the browser/device notification subscription (web push) your browser creates —its delivery address, its encryption keys and the browser type—, to alert you about new tickets and messages.","legalPrivacyDataPushNative":"Notifications: if you allow them, in the TechOne app for Android or iOS we store your device notification identifier (Firebase Cloud Messaging token) and the device system (Android or iOS); if you use TechOne in the browser, the browser/device notification subscription (web push) your browser creates —its delivery address, its encryption keys and the browser type—. They are used to alert you about new tickets and messages. The device identifier is deleted when you sign out or delete your account.","legalPrivacyDataTechnical":"Technical data: the IP address and the browser or device type you sign in with, for security and abuse prevention, and, when Redsis turns it on, app errors and slow or failed requests, for troubleshooting.","legalPrivacyLocationTitle":"Location","legalPrivacyLocationBody":"TechOne only uses your location while the app is open: it does not collect it in the background or when the app is closed. Continuous sharing of your position requires you to accept the app location notice (we record which version of the notice you accepted) and the phone permission. While it is on, the app sends your position when the phone updates it, at most once every 15 seconds while you are moving and once a minute while you are still, to show your daily route, estimate arrival time and let dispatch know where you are during the workday. The customer of a job (or anyone with its tracking link) can also see your location while you are on your way to it: a dot on the map, the distance and the estimated arrival time, only from a position less than 5 minutes old and never your route history; while you are working on it, they only see that you are on site, with no coordinates, and at any other time they see nothing. With the phone permission, it also records where you were when you tap Accept, En route, On site or Complete on a job. You can pause continuous sharing at any time from the app, or deny or revoke the permission in your phone settings; the app keeps working, but without your position on the map.","legalPrivacyCameraTitle":"Camera and photos","legalPrivacyCameraBody":"The app uses the camera and photo library only when you choose to take or attach a photo or video, or scan equipment. It does not access your photos on its own.","legalPrivacyNotDoTitle":"What we do not do","legalPrivacyNotDoBody":"We do not sell your data or show ads. The app contains no third-party advertising tools and has no purchases.","legalPrivacyShareTitle":"Who we share data with","legalPrivacyShareCustomer":"The customer the work is done for sees the information about their job, including your name as the assigned technician, and their portal users read the chat messages you write in their conversations. When Redsis has it turned on, they also receive the close-out report (which may include job photos, the signature, the diagnosis and your name) and live tracking: while you are En route to their job they see your name, your current position and the estimated arrival time; never your earlier trail, your phone or your email.","legalPrivacyShareRedsis":"Redsis dispatch and management, who assign and oversee jobs.","legalPrivacyShareProviders":"Providers that run the platform on behalf of Redsis and only for that purpose: infrastructure providers contracted by Redsis (hosting and file storage); Cloudflare (network and the Turnstile anti-bot check when you sign in, register or recover your password; it may also measure page performance with Cloudflare Web Analytics); Twilio (SMS codes); Resend (email); OpenStreetMap (map images are downloaded from its servers, which receive the map area requested and your device IP address, not your TechOne identity); when Redsis has it turned on, Google Maps Platform (computes traffic-aware drive time from origin and destination coordinates, without your name); and, when Redsis has it turned on, Anthropic (the Ayva assistant summarizes tickets and drafts replies with the ticket context, which includes your name as the assigned technician). Web push notifications are delivered by the notification service of your browser or device. The «Navigate» buttons open Google Maps outside the app.","legalPrivacyShareNativePush":"App notifications: on Android and iOS they are delivered by Firebase Cloud Messaging (Google), which receives your device notification identifier and the title and text of each alert; on iPhone and iPad, Firebase hands them to the Apple Push Notification service (Apple), which shows them on your device.","legalPrivacyFirebaseSdkOff":"The phone app (Android and iOS) includes the Firebase SDK (Google), but does not use it to send notifications or for analytics while this feature is off: no device notification identifier is created or stored.","legalPrivacyShareAuthorities":"Authorities, when required by law.","legalPrivacyTransfersTitle":"International transfers","legalPrivacyTransfersBody":"Your data may be processed in the United States and in other countries where Redsis and its providers operate.","legalPrivacySecurityTitle":"Security","legalPrivacySecurityBody":"Data travels encrypted (HTTPS). Signing in requires an account, and you can turn on two-step verification. Your password is stored hashed. Job evidence photos and videos are kept for the customer and may be accessible to anyone who has their link.","legalPrivacyRetentionTitle":"How long we keep data","legalPrivacyRetentionBody":"We keep your data while the account is active and afterwards for as long as the law and customer contracts require. Service records (tickets, visits, reports, photos, videos, hours and expenses) are kept even if you delete your account. Your location history and the positions recorded on jobs may also be kept after you delete your account, linked to your technician record.","legalPrivacyDeleteTitle":"How to delete your account","legalPrivacyDeleteBody":"In the app: open TechOne and go to Account → Delete my account; you are signed out right away. Without the app, or if your account is managed by Redsis, use the channel in the «Contact» section. What is deleted and what is kept is explained at:","legalPrivacyRightsTitle":"Your rights","legalPrivacyRightsBody":"Depending on the law that applies to you, you can ask for access to, correction, a copy or deletion of your data, and object to certain uses. Use the channel in the «Contact» section. We respond within a reasonable time and as required by applicable law.","legalPrivacyMinorsTitle":"Children","legalPrivacyMinorsBody":"TechOne is a work tool for adults. It is not intended for anyone under 18 and we do not knowingly collect data from minors.","legalPrivacyContactTitle":"Contact","legalPrivacyContactBody":"For questions or requests about your data, contact {contact} or your Redsis coordinator.","legalPrivacyContactBodyNoContact":"For questions or requests about your data, talk to your Redsis coordinator.","legalPrivacyChangesTitle":"Changes to this policy","legalPrivacyChangesBody":"If we change this policy, we will post the new version at this same address with its update date.","accountLink":"Account & security","internalManagedTitle":"Signed in with Redsis One","internalManagedBody":"You use your Redsis One account for this app. Your password and two-factor authentication are managed in Redsis One, not here.","passwordSectionTitle":"Password","currentPasswordLabel":"Current password","changePasswordSubmit":"Change password","changingPassword":"Changing…","passwordChanged":"Your password has been changed. Your other devices have been signed out.","currentPasswordWrong":"Your current password is incorrect.","samePassword":"Choose a password different from your current one.","sessionExpired":"Your session has expired. Please sign in again.","mfaSectionTitle":"Two-factor authentication","mfaIntro":"Use an authenticator app to add a second step when you sign in. The entry will be labelled {email}.","mfaSetup":"Set up two-factor authentication","mfaStarting":"Starting…","mfaScanInstruction":"Scan this QR code with your authenticator app (for example Google Authenticator, Bitwarden, or Authy), then enter the 6-digit code it shows.","mfaQrAlt":"Two-factor QR code","mfaManualToggle":"Can't scan? Enter the key manually","mfaCodeLabel":"6-digit code","mfaVerifyEnable":"Verify and enable","mfaVerifying":"Verifying…","mfaEnabled":"Two-factor authentication is now enabled.","mfaEnabledStatus":"Two-factor authentication is enabled on your account.","mfaRecoveryTitle":"Save these recovery codes now","mfaRecoveryBody":"Each code works once if you lose your authenticator. They are shown only this one time — store them somewhere safe.","mfaRecoveryRemaining":"{n} recovery codes remaining.","mfaRecoveryRemainingOne":"1 recovery code remaining.","mfaNoRecovery":"You have no recovery codes left.","mfaDisable":"Disable two-factor authentication","mfaDisableCodeLabel":"Authenticator or recovery code","mfaRegenerateCodeRequired":"Enter your authenticator code or a recovery code to generate new recovery codes.","mfaDisableCodeRequired":"Enter your authenticator code or a recovery code to turn off two-factor authentication.","mfaDisableRateLimited":"Too many attempts. Please try again later.","mfaDisableCodeInvalid":"That code did not verify.","mfaDisabling":"Disabling…","mfaRegenerate":"Regenerate recovery codes","mfaRegenerating":"Generating…","mfaRegenerateHint":"This replaces your existing recovery codes — save the new ones.","mfaDisabled":"Two-factor authentication has been disabled and you have been signed out of all sessions. Refresh to sign in again.","mfaEnterCode":"Enter the current 6-digit code from your authenticator app.","appName":"TechOne","signInSubtitle":"Sign in with the credentials your coordinator gave you.","passwordLabel":"Password","signIn":"Sign in","signingIn":"Signing in…","newTech":"New tech?","requestAccess":"Request access","privacyPolicyLink":"Privacy policy","registerSubmitted":"Thanks — we've got your request. A coordinator will review it and reach out once your login is ready.","registerThrottled":"You've submitted a few requests already — please wait a bit before trying again.","registerInvalid":"Check the form and try again.","registerFailed":"Something went wrong. Please try again.","registerUnavailable":"This app is temporarily unavailable. Please try again later.","registerNameEmailRequired":"Enter your name and email address.","registerTypeRequired":"Select whether you are a Redsis employee or an external contractor.","registerTitle":"Request TechOne access","registerSubtitle":"Tell us who you are and a coordinator will set up your login.","fullNameLabel":"Full name","iAmA":"I am a","typeInternal":"Redsis employee","typeExternal":"External contractor","phoneLabel":"Phone (optional)","noteLabel":"Note for your coordinator (optional)","submitting":"Submitting…","haveLogin":"Already have a login?","signInLink":"Sign in","stepUpIntro":"Enter the 6-digit code from your authenticator app. Lost your device? Use one of your recovery codes instead.","stepUpCodeLabel":"Authenticator or recovery code","stepUpVerify":"Verify"},"fieldServiceReturns":{"title":"Part Returns","metaTitle":"Part Returns · Field Service","countZero":"No open return tickets","countAwaiting":"{n} returns awaiting close","countAwaitingOne":"1 return awaiting close","empty":"No return tickets are waiting on you right now.","colPart":"Part","colTech":"Tech","colServiceTicket":"Service ticket","colStatus":"Status","colOpened":"Opened","colAction":"Action","pillHandedIn":"Handed in","pillAwaiting":"Awaiting hand-in","close":"Close return","closing":"Closing…","dash":"—","err":{"NOT_A_RETURN":"That isn’t a return ticket","ALREADY_CLOSED":"This return is already closed","NO_PART_LINKED":"No part is linked to this return ticket","PART_NOT_FOUND":"The linked part could not be found","NO_PERMISSION":"You don’t have permission to do this","GENERIC":"Could not close the return ticket"}},"fieldServiceDispositions":{"kinds":{"repair_to_stock":{"label":"Repair to stock","hint":"Automatic — returns a good unit to stock"},"scrap":{"label":"Scrap","hint":"Needs approval — retires the unit"},"rma":{"label":"Vendor RMA","hint":"Needs approval — files a warranty claim with the vendor"},"return_to_vendor":{"label":"Return to vendor","hint":"Needs approval — ships it back for credit"}},"title":"Part Dispositions","metaTitle":"Part Dispositions · Field Service","colPart":"Part","colDisposition":"Disposition","colReason":"Reason","colAction":"Action","colKind":"Kind","colStatus":"Status","colOpened":"Opened","reasonPlaceholder":"Reason (optional)","restockLocationPlaceholder":"Restock location id (required)"},"fieldTechV2":{"visitClosed":"This visit is already closed. Ask your coordinator to dispatch a new visit.","ticketLocked":{"cancelled":"This ticket was cancelled by the coordinator."},"evidencePhotoRejected":"Photo {n} can't be attached: it isn't a photo taken for this job. Remove it and take it again.","evidenceQuota":{"photo":"This stop already has {max} photos — the maximum.","video":"This stop already has {max} videos — the maximum.","signature":"This stop already has {max} signatures — the maximum."},"videoUploadBusy":"Another video is still uploading. Wait for it to finish, then try again.","videoUploadTimeout":"The upload stalled and was stopped. Check your connection and try again.","videoUploadTooSlow":"The upload is too slow for this connection. Try again on Wi-Fi.","evidenceBusy":"Another upload to this stop is being saved. Try again in a moment.","closedHistory":{"heading":"Closed","searchLabel":"Search closed tickets","searchPlaceholder":"Client, site or ticket number…","fromMonth":"From","toMonth":"To","anyMonth":"Any month","apply":"Search","clear":"Clear","loadMore":"See more","loading":"Loading…","windowRecent":"Last 14 days","windowExtended":"Up to 6 months back","officeNote":"For more than 6 months, ask the office.","empty":"No closed tickets in this period.","closedOn":"Closed {date}","revisit":"Re-visit · previous {date}","serial":"S/N {serial}","onsite":"On site {duration}","travel":"Travel {duration}","porLink":"View POR","porNone":"No POR result","error":"Could not load the history. Try again.","outcome":{"resolved":"Resolved","partially_resolved":"Partially resolved","needs_follow_up":"Needs follow-up","no_fault_found":"No fault found","rejected":"Rejected"}},"visits":{"navTitle":"Tickets","listTitle":"My tickets","listSubtitle":"Your assigned tickets, ready to work in the field.","groupToday":"Today","groupUpcoming":"Upcoming","groupUnscheduled":"Unscheduled","groupRecentlyClosed":"Recently closed","recentlyClosedLink":"Recently closed ({count})","openingTicket":"Opening…","emptyOpenTitle":"No open tickets","searchPlaceholder":"Search by site, description or client…","emptyTitle":"No tickets assigned","emptyBody":"When a coordinator assigns you a ticket, it appears here.","noResults":"No tickets match your search.","assignedShort":"Assigned {date}","descriptionCard":"Description","siteCard":"Site","assetCard":"Related equipment","contactCard":"Contact","contactPhoneMissing":"Phone not on file","stepperLabel":"Visit progress","stepAccepted":"Accepted","stepEnRoute":"En route","stepOnSite":"On site","stepMark":"Mark \"{step}\" + location","stepCapturing":"Capturing location…","stageActionFailed":"Could not update the status. Try again.","gpsRequiredTitle":"Turn on location to mark {step}","gpsRetry":"Retry","gpsShareLocation":"Share location","gpsMarkWithout":"Mark without location","gpsReasonDenied":"Location permission is denied for this app.","gpsReasonTimeout":"The location took too long to arrive.","gpsReasonUnavailable":"Location is not available on this device right now.","gpsReasonNoConsent":"You are not sharing your location with TechOne.","arrivalOutsideFence":"You are {distance} from the site. Your arrival was recorded; your coordinator may review it.","noStopHint":"No active route stop for this ticket — ask your coordinator.","fillPorBtn":"Fill POR — required to close","porRequiredHint":"Available once you are on site.","porDoneChip":"POR saved — visit closed.","porOnHoldNotice":"Report saved — the ticket stays on hold until the part arrives","porReceiptBtn":"View receipt (POR)","porReceiptFailed":"The receipt could not be generated","porReceiptRetry":"Retry","porReceiptAskCoordinator":"Your coordinator can generate it.","porReceiptStillTrying":"Still trying, wait a few seconds","porReceiptRetriedFailed":"We tried again and it didn't work. Your coordinator can generate it.","porReceiptNoReceiptYet":"There is no receipt yet. You can retry.","porReceiptGenerating":"Generating receipt…","porTitle":"Proof of Repair — {incident}","porTicketPre":"Ticket · pre-loaded","porResultLabel":"Result *","porResultRepaired":"Repaired","porResultChange":"Equipment change","porResultNeedsPart":"Needs part","porFindingsLabel":"Findings / work performed *","findingsPlaceholder":"Describe the work performed…","porChangeBlockTitle":"EQUIPMENT CHANGE","porInstalledProduct":"Installed product","porInstalledSerial":"Installed serial *","porRemovedSerial":"Removed serial *","porRemovedSerialHint":"Same serial as the asset — captured once, never asked twice.","porDestination":"Removed equipment destination *","porDestLab":"Lab","porDestWriteoff":"Write-off","porDestReturned":"Returned","porNeedsPartTitle":"PART REQUEST","porPartSkuPlaceholder":"SKU…","porPartCatalogAria":"Part from inventory","porPartCatalogFreeText":"Other part (type it)","porPartSuggestedGroup":"Suggested for this problem","porPartErrCatalogDisabled":"Picking from the catalog is not enabled. Type the PN.","porPartWarehouseGroup":"In the project warehouse","porPartVanGroup":"In my van","porPartSearchPickedGroup":"Picked from search","porPartInVanTag":"in van","porPartSearchOpen":"Search the catalog","porPartSearchClose":"Close search","porPartSearchLabel":"Search by PN or description","porPartSearchPlaceholder":"PN, description, brand…","porPartSearchMinChars":"Type at least 2 characters","porPartSearching":"Searching…","porPartSearchResults":"{n} results","porPartSearchResultsOne":"1 result","porPartSearchMore":"Showing the first {n}; refine the search to narrow it.","porPartSearchEmpty":"No part matches. Type the PN instead.","porPartSearchError":"Search is not available right now. Type the PN.","porPartSearchOffline":"Search needs a connection. Pick from the list or type the PN.","porPartVanTruncated":"Your van has more parts; search the catalog for them.","porPartWarehouseTruncated":"The project warehouse has more parts; search the catalog for them.","porPartErrNotInInventory":"That part is not active in the inventory catalog. Pick another or type it.","porPartQty":"Quantity","porPartAdd":"Add part line","porPartRemove":"Remove line","porSignature":"Technician signature *","porSignatureClear":"Clear","porSignatureHint":"Sign above with mouse, finger or pen.","signedBy":"Signing as: {name}","signatureErrSignerMismatch":"This signature was captured by another technician. Sign again with your own session.","signatureErrCustomerNameRequired":"Enter the name of the person signing.","porMissingRequired":"Fill the required fields (*) before saving.","porErrResult":"Choose a result.","porErrFindings":"Describe the work done.","porErrSignature":"Sign in the box.","porErrInstalledSerial":"Enter the serial of the installed unit.","porErrRemovedSerial":"Enter the serial of the removed unit.","porErrRemovedDestination":"Choose where the removed unit goes.","porErrPartLines":"Add at least one part with its quantity (a whole number, 1 or more).","surveyErrRating":"Choose a rating from 1 to 5 stars.","surveyErrSignature":"The sign-off signature is missing.","porSave":"Save and close POR","porSaveNote":"closes the visit and files the service report","porSubmitting":"Saving…","porSubmitFailed":"Couldn't save the POR. Try again; if it keeps failing, let your coordinator know.","porErrNotSignedIn":"Your session expired. Sign in again.","porErrNotActivated":"Activate the app to continue.","porErrNotOwner":"This job is no longer assigned to you. Let your coordinator know.","porErrSpecialOrderDisabled":"Special orders are not enabled.","assetSerialPlaceholder":"Scan or type the code…","porPhotos":"Photos","surveyOpenBtn":"Manager survey","surveyDoneChip":"Manager survey recorded.","returnedChip":"Returned","returnedTitle":"Returned by the coordinator","returnedBy":"Returned by {name}","notesCard":"Notes","notesEmpty":"No notes yet. Anything you write here reaches the coordinator.","notesPlaceholder":"Write a note for the coordinator…","notesSend":"Send note","liveNewMessageFrom":"New message from {author}","liveNewMessage":"New message","liveSeeMessage":"View","notesFailed":"The note could not be saved. Try again.","notesYou":"You","notesCoordinator":"Coordinator","notesCustomer":"Client","notesSavedOffline":"Saved offline: it will be sent when you get signal back.","notesNotSentReview":"Could not send — check it in «Pending sync».","notesPending":"Pending — not sent yet","notesNotSent":"Not sent. Check it in “Pending sync”.","notesNotYours":"This ticket is no longer assigned to you.","notesSignedOut":"Your session ended. Sign in again to send the note.","acceptedPendingSend":"Accepted (pending send)","surveyPre":"Service survey","surveyTitle":"How was the service?","surveyRating":"Service rating *","surveyComment":"Comments","surveyCommentPlaceholder":"Anything to add? (optional)","surveySigner":"Manager name","surveySignerPlaceholder":"Who is signing…","surveySignature":"Conformity signature *","surveyNoReport":"Save the POR first — the survey signs off on it.","surveyFailed":"Could not record the survey. Try again.","surveySend":"Send","surveySkip":"Later","cancel":"Cancel","porCancelEvidenceKept":"Photos and videos already uploaded stay saved on the ticket."},"techScreens":{"contextMissing":"Open a ticket to use this action.","flagOff":"This action isn't enabled for this portal.","submit":"Submit","done":"Done","cancel":"Cancel","clear":"Clear","confirmRun":"Confirm","actions":{"statusTransition":"Update status","acceptDecline":"Accept / Decline","acknowledge":"Acknowledge","noAccess":"No access","requestHelp":"Request help","enRoute":"En route","arrived":"Arrived","complete":"Complete","accept":"Accept","decline":"Decline","declineReason":"Reason for declining","noAccessReasonLabel":"Reason","customerAbsent":"Customer absent","noAccessLabel":"No access","unableToComplete":"Unable to complete","note":"Note","helpType":"Help type","technicalAdvice":"Technical advice","secondTech":"Second technician","escalate":"Escalate","message":"Message"},"captures":{"meter":"Meter reading","deficiency":"Deficiency","signature":"Signature","photo":"Photo","video":"Video","receipt":"Receipt","partRequest":"Request a part","readingType":"Reading type","value":"Value","unit":"Unit","label":"Label","notes":"Notes","title":"Title","severity":"Severity","description":"Description","recommendation":"Recommendation","signatureName":"Signed by","signHint":"Sign above with finger, pen or mouse.","signatureErrSignerMismatch":"This signature was captured by another technician. Sign again with your own session.","signatureErrCustomerNameRequired":"Enter the name of the person signing.","sku":"Part number","quantity":"Quantity","urgency":"Urgency","urgencyNow":"Now","urgencyToday":"Today","urgencyTomorrow":"Tomorrow"},"meterTypes":{"temperature":"Temperature","pressure":"Pressure","voltage":"Voltage","current":"Current","counter":"Counter","humidity":"Humidity","runtime":"Runtime","flow":"Flow","speed":"Speed","custom":"Custom"},"severities":{"low":"Low","medium":"Medium","high":"High","safety":"Safety"}},"assetHistoryTitle":"This machine before","assetHistoryNone":"No earlier visits recorded for this equipment.","assetHistoryRepaired":"Done","assetHistoryVisits":"{n} earlier","activityTitle":"Activity","activityTabTimeline":"Timeline","activityTabNotes":"Notes","activityInternalBadge":"Internal","activityEmpty":"No activity yet","activityNotesEmpty":"No notes yet","completionTitle":"Service report","completionOutcome":"Outcome","completionWorkPerformed":"Work performed","completionRootCause":"Root cause","completionSummary":"Summary","completionSlaMet":"SLA met","completionSlaMissed":"SLA missed","completionDocuments":"Documents","completionDownload":"Download report (PDF)","completionNoReport":"No service report yet","completionOutcomeResolved":"Resolved","completionOutcomePartial":"Partially resolved","completionOutcomeFollowUp":"Needs follow-up","completionOutcomeNoFault":"No fault found","completionOutcomeRejected":"Rejected","customerTitle":"Customer","customerType":"Type","customerTypeBusiness":"Business","customerTypeResidential":"Residential","customerSlaTier":"SLA tier","customerNotes":"Account notes","customerHistoryTitle":"Past visits to this site","customerHistoryEmpty":"No prior visits on record","ayvaTitle":"Ayva assist","ayvaSummarize":"Summarize job","ayvaDraft":"Draft resolution","ayvaThinking":"Ayva is thinking…","ayvaError":"Ayva could not respond right now","ayvaDisabled":"Assist is unavailable","ayvaDraftWork":"Work performed","ayvaDraftRootCause":"Root cause","ayvaDraftSummary":"Summary","ayvaDraftHint":"A suggestion — review and edit before you submit.","videoEvidenceLabel":"Video evidence","addVideo":"Add video","videoTooLarge":"This video is over {mb} MB. Record a shorter clip (about 30 seconds) and try again.","videoUploadFailed":"The video did not upload. Check your connection and try again.","uploadingVideo":"Uploading video…","videoUploadProgressLabel":"Video upload progress","videoUploadProgressMb":"{done} of {total} MB","videoUploadingSize":"Uploading… {mb} MB","videoUploadCancel":"Cancel upload","videoUploadCanceled":"Upload canceled. The video was not saved.","videoSaving":"Saving…","videoUploadBlocked":"The network blocked the upload. Try another connection (Wi-Fi or mobile data) or tell support.","videoFallbackTooLarge":"This video is over {mb} MB and cannot be sent this way right now. Record a shorter clip or try again in a few minutes.","scanIdentifyTitle":"Scan to identify","scanIdentifyPrompt":"Scan or type a serial / QR","scanIdentifyLookup":"Look up","scanIdentifyScanning":"Looking up…","scanIdentifyOpenTicket":"Open ticket","scanIdentifyAssetSerial":"Serial","scanIdentifyNotFound":"No matching asset found","scanIdentifyInvalid":"That does not look like a valid serial","dayStart":"Start day","dayEnd":"End day","dayStarting":"Starting…","dayEnding":"Ending…","dayInProgressLabel":"Day in progress","dayCompletedLabel":"Day completed","dayControlError":"Could not update the route","searchTitle":"Search tickets","searchPlaceholder":"Search by title or client","searchRun":"Search","searchNoResults":"No matching tickets","searchPastJobs":"Past jobs","searchClose":"Close","searchScopeHint":"Your tickets only","laborTitle":"Time on this job","laborTravel":"Travel","laborOnSite":"On site","laborRunning":"still on site","laborCorrected":"adjusted by the office","laborUnknown":"not recorded","severityCritical":"Critical","severityHigh":"High","severityMedium":"Medium","severityLow":"Low","slaHeading":"SLA","slaArrival":"Arrival","slaResolution":"Resolution","lifecycleHeading":"This job","acceptCta":"Accept","declineCta":"Decline","declineConfirm":"Submit decline","declineReasonPlaceholder":"Reason for declining (required)","declineReasonRequired":"Add a reason to decline.","acceptedNote":"You accepted this job","declinedNote":"You declined this job","acknowledgeCta":"Acknowledge","acknowledgedNote":"Acknowledged","cancel":"Cancel","noAccessHeading":"Unable to complete","noAccessCta":"Can't complete this visit","noAccessReasonCustomerAbsent":"Customer not available","noAccessReasonNoAccess":"No access to site or equipment","noAccessReasonUnable":"Unable to complete","noAccessReasonRequired":"Pick a reason.","noAccessNotePlaceholder":"Add a note for the coordinator (optional)","noAccessSubmit":"Mark stop skipped","helpHeading":"Need help?","helpAdvice":"Technical advice","helpSecondTech":"Send a second tech","helpEscalate":"Escalate to manager","helpMessagePlaceholder":"Describe what you need…","helpMessageRequired":"Add a message.","helpSend":"Send request","helpSent":"Request sent to your coordinator.","eyebrow":"TechOne","myVan":"My Van","signOut":"Sign out","helpContactTitle":"Help & contact","helpContactSubtitle":"Reach dispatch, the office, or support.","helpCall":"Call","helpEmail":"Email","helpCallDispatch":"Call dispatch","helpCallOffice":"Call office","helpCallEmergency":"Emergency line","helpEmergencyBadge":"24/7","helpEmailSupport":"Email support","helpOtherWays":"Other ways to reach us","helpMessageDispatch":"Message dispatch","helpMessageDispatchSub":"Open the chat with dispatch.","helpEmptyTitle":"No contact configured yet","helpEmptyBody":"Your coordinator hasn’t added a dispatch or office number yet. You can still message dispatch from Chat.","helpAccountLink":"Help & contact","settingsTitle":"Settings","settingsSubtitle":"Units, accessibility, and app info.","settingsUnitsTitle":"Units","settingsUnitsSub":"How distances are shown.","settingsUnitMetric":"Metric (km)","settingsUnitImperial":"Imperial (mi)","settingsA11yTitle":"Accessibility","settingsTextSize":"Text size","settingsTextSm":"S","settingsTextMd":"M","settingsTextLg":"L","settingsTextXl":"XL","settingsReduceMotion":"Reduce motion","settingsReduceMotionSub":"Minimize animations and transitions.","settingsHighContrast":"High contrast","settingsHighContrastSub":"Stronger text and borders.","settingsAboutLink":"About & legal","settingsOutboxLink":"Pending sync","aboutTitle":"About","aboutVersion":"Version","aboutBuild":"Build","aboutBuildTime":"Built","aboutLegalTitle":"Legal","aboutLicenses":"Built on open-source software. Redsis is grateful to the maintainers.","aboutCopyright":"© {year} {app}. All rights reserved.","outboxTitle":"Pending sync","outboxSubtitle":"Work saved on this device, waiting to upload.","outboxOnline":"Online","outboxOffline":"Offline","outboxSyncing":"Syncing…","outboxWaiting":"{n} waiting to sync","outboxWaitingOne":"1 item waiting to sync","outboxAllSynced":"Everything is synced.","outboxRetryAll":"Retry sync","outboxRetry":"Retry","outboxDismiss":"Dismiss","outboxAttentionTitle":"Needs your attention","outboxPendingTitle":"Waiting to send","outboxOff":"Offline mode is off on this device.","tabTickets":"Tickets","tabRoute":"Route","tabMap":"Map","tabChat":"Chat","tabDocs":"Docs","chatUnreadAria":"{n} unread messages","chatUnreadAriaOne":"1 unread message","fixesToday":"{n} fixes today","fixesTodayOne":"1 fix today","nativePushAsk":{"title":"Get alerts for new tickets","body":"We let you know when a ticket is assigned to you or one of yours changes.","enable":"Turn on notifications","notNow":"Not now"},"locationConsent":{"title":"Share your location?","body":"We use your GPS to show coordinators where you are on the map and to estimate your arrival time (ETA) at your next stop. While you are on your way to a service or working on it, that service's customer (or anyone with its tracking link) can also see your location. You can pause sharing your location at any time from this same notice.","notNow":"Not now","allow":"Allow location","requesting":"Requesting…","reacceptRequired":"To keep sharing your location, reload the app and accept the updated notice.","saveFailed":"Your location couldn't be saved. It will be retried automatically."},"locationTracker":{"offTitle":"Location off.","offBody":"Coordinator can't see you on the map.","turnOn":"Turn on","androidSettingsHelp":"If \"Turn on\" doesn't show a prompt, location may be turned off for TechOne — open Settings → Apps → TechOne → Permissions → Location to re-enable.","appSettingsHelp":"If \"Turn on\" doesn't show a prompt, location may be turned off for TechOne — open Settings → TechOne → Location to re-enable.","safariHelp":"If \"Turn on\" doesn't show a prompt, you may have blocked location in Safari settings — open Safari → Settings → Websites → Location to re-enable.","pausedTitle":"⏸ Location sharing paused.","pausedBody":"Coordinator can't see where you are. No breadcrumb is being recorded.","resume":"Resume","notSaved":"⚠ Location not being saved: {error}","linkSpHint":"Ask an admin to add you at /admin/field-service/sps using the \"Link existing portal user\" option.","pauseSharing":"Pause sharing","stopSharing":"Stop sharing location","sharing":"📍 Sharing location","lastFix":"last fix {s}s ago","waitingFix":"waiting for first fix…","pause":"Pause"},"today":"Today","daySummaryStops":"{n} stops","daySummaryStopsOne":"1 stop","daySummaryDone":"{n} done","daySummaryDoneOne":"1 done","noRouteTitle":"No route for today","noRouteBody":"No route published for today. A coordinator will set up your day; check back later.","noStopsTitle":"No stops on your route yet.","noStopsBody":"Your coordinator will assign tickets to you during the day. This screen refreshes automatically.","currentStop":"Current — stop {x} of {n}","statusScheduled":"Stop scheduled","statusEnRoute":"En route","statusOnSite":"On site","statusDone":"Done","statusSkipped":"Skipped","plannedLine":"Planned {time} · {dur} min","navigate":"Navigate ▸","openStop":"Open stop ▸","startTravel":"Start travel ▸","arrivedStartWork":"Arrived — start work","completeStop":"Complete stop ✓","working":"Working…","upNext":"Up next","doneToday":"Done today","minPlanned":"{time} · {dur} min planned","routeComplete":"Route complete","routeCompleteBody":"{k} of {n} stops done. Nice work — see you tomorrow.","routeCompleteBodyOne":"{k} of 1 stop done. Nice work — see you tomorrow.","todaysPath":"Today's path","gpsWindow":"GPS · last 24h","statFixes":"Fixes","statFixesOne":"Fix","statCovered":"Covered","statFirstFix":"First fix","pathPauseNote":"Pause sharing anytime (lunch, end of shift). Your coordinator only sees points while sharing is on.","backToRoute":"← Today's route","stopRef":"Stop #{n}","bringParts":"Bring these parts","vanStock":"Van stock","requestedPart":"Requested","noPartsForStop":"No parts linked to this stop.","partsStatusOpen":"Requested","partsStatusSourcing":"Sourcing","partsStatusDispatched":"On the way","partsStatusFulfilled":"Fulfilled","partsStatusCancelled":"Declined","partsDeclinedReason":"Declined: {reason}","partsRequestCard":{"heading":"Parts requests for this ticket","statusApproved":"Approved","origin":"Source: {source}","originPending":"Your coordinator is deciding","cancelledTicketClosed":"Cancelled: the ticket was closed","cancelledTicketCancelled":"Cancelled: the ticket was cancelled","hasPartCta":"I have the part","hasPartSending":"Notifying…","hasPartSent":"Your coordinator was notified.","hasPartNotNotified":"Saved, but we could not notify your coordinator. Please call them.","hasPartAlready":"You already reported this part.","hasPartError":"Could not notify. Try again.","hasPartNotAvailable":"This request is no longer active."},"vanReplenishOption":"Restock my van (no ticket)","myReplenishRequests":"My replenishment requests","noReplenishRequests":"No van replenishment requests yet.","onSiteContact":"On-site contact","call":"Call","evidence":"Evidence","addPhoto":"Photo","takePhoto":"Take photo","chooseFromGallery":"Choose from gallery","uploadingPhoto":"Uploading…","photoCount":"{n} photos attached","photoCountOne":"1 photo attached","mediaViewerTitle":"Photo viewer","mediaViewerOpen":"Open photo {n}","mediaViewerClose":"Close","mediaViewerPrev":"Previous photo","mediaViewerNext":"Next photo","mediaViewerCounter":"{i} of {n}","mediaViewerLoadFailed":"This photo couldn't load. Close the viewer and reopen the screen to try again.","porViewerTitle":"Receipt (POR)","porViewerLoading":"Loading receipt…","porViewerFailed":"The receipt couldn't open. Check your connection and tap Retry.","porViewerRetry":"Retry","porViewerClose":"Close","porViewerCloseLabel":"Close receipt","porViewerPage":"Page {i} of {n}","porViewerUnavailable":"This receipt isn't available right now. Tap Retry; if it keeps happening, tell the office.","porViewerSessionExpired":"Your session expired. Sign in again to see the receipt.","porViewerSignIn":"Sign in","mediaThumbFailed":"Couldn't load the photo. Refresh the screen.","mediaThumbRefresh":"Refresh","signatureLabel":"Customer signature","signatureClear":"Clear","signatureHint":"Have the customer sign here with a finger or stylus.","signatureOptional":"Optional — you can complete the stop without a signature.","signatureCaptured":"Signature captured — it will be saved when you submit.","signatureUploadFailed":"Could not save the signature. Clear it to submit without one, or try again.","signatureProof":"Proof of service","signedBy":"Signed by {name}","noSignature":"No signature collected","mapTitle":"Route map","loadingMap":"Loading map…","noMapStops":"No stops with a location on today’s route.","youAreHere":"You are here","seeOnMap":"View on map","mapEmptyToday":"No stops today","mapLocationDenied":"Location access is off. Turn it on in your phone settings to see where you are on the map.","mapLocationUnavailable":"This device cannot share its location, so your position is not shown on the map.","mapLocationPaused":"Location paused — the map does not use your position","mapLocationNoConsent":"Location sharing is off — the map does not use your position","etaNoPosition":"No ETA","etaHeuristicNote":"Estimated drive time (no live traffic) — straight-line distance at ~40 km/h","nextStopLabel":"Next stop","etaLine":"{dist} km from you · {min} min drive · arrive ~{time}","etaLineNoDrive":"{dist} km from you","etaSourceNote":"Live ETA via Google Routes — updates with traffic","etaNoProviderNote":"Drive time unavailable — distance is straight-line","navigateGoogle":"Navigate with Google Maps","plannedShort":"planned {time}","chatTitle":"Chat","hostedOn":"Hosted on","conversations":"Conversations","noConversationsTitle":"No conversations yet","noConversationsBody":"When a coordinator or client opens a portal conversation with you, it appears here.","messagePlaceholder":"Message client or coordinator…","send":"Send","sendFailed":"Could not send the message. Try again.","relatedRefs":"Related","unreadBadge":"{n} unread","docsTitle":"Technical library","docsSub":"Manuals, drivers and SOPs for today's equipment","searchDocs":"Search documents…","stopTag":"Stop #{n}","openDoc":"Open","noEquipmentTitle":"No equipment on today’s route","noEquipmentBody":"Documents are matched to the equipment on your assigned stops. No stops with equipment today.","noDocsForEquipment":"No documents published for this equipment yet.","noSearchResults":"No documents match your search.","docsFooter":"Documents are matched to the equipment on your route. Full catalogue in Redsis One.","backToDocs":"← Technical library","offlinePill":"Offline","offlineBanner":"Offline — data as of {time}","offlineBannerNoTime":"Offline — showing your last loaded data","offlineBannerPageToday":"Offline — this page is from today at {time}","offlineBannerPage":"Offline — this page is from {date} at {time}","offlineBannerOpening":"Offline — opening this page…","offlineBannerNotSaved":"Offline — this ticket is not saved on the phone","offlineTicketNotSaved":"This ticket is not saved on the phone; open it with signal to have it offline.","offlineBackToTickets":"Back to my tickets","offlineSheetTitle":"You're offline","offlineSheetBody":"This screen needs a connection. What you already opened is still available.","offlineSheetAccountBody":"Account and security needs a connection. Your pending sync is right here.","offlineSheetBack":"Back","offlineSheetPending":"Pending sync","offlineSheetSeePending":"See pending","offlineSheetSlowTitle":"The connection is not responding","offlineSheetSlowBody":"This screen is taking long to open. You can go back or keep waiting.","offlineSheetKeepWaiting":"Keep waiting","offlineQueued":"{n} queued","offlineSyncing":"Syncing…","offlineRetry":"Retry sync","offlineSavedNote":"Saved offline — will send when you reconnect.","offlineQueuedRefused":"Could not send — check «Pending sync».","offlineNeedsAttention":"Needs attention","offlineQueuedAt":"Queued {time}","offlineAttentionStale":"Not sent — this stop had already moved ahead on the server.","offlineAttentionSuperseded":"Not applied — the server already had a newer status.","offlineAttentionRejected":"The server rejected this change: {error}","offlineAttentionUnreadable":"Not sent — the stop could not be verified. It may have been reassigned.","offlineAttentionBlobMissing":"The queued photo could not be found on this device.","offlineDismiss":"Dismiss","offlineRetryOne":"Try again","offlineKindTransition":"Status update","offlineKindPartRequest":"Part request","offlineKindPartReplacement":"Part replacement","offlineKindPhoto":"Photo","offlinePhotoQueued":"{n} queued to upload when you reconnect","offlinePhotoBudgetWarn":"Offline photo storage is almost full — reconnect soon to sync.","offlinePhotoBudgetFull":"Offline photo storage is full — reconnect to sync before adding more photos.","photoUploadFailed":"The photo didn't upload. Check your connection and try again.","photoUnreadable":"We couldn't read that image. Try another photo.","evidenceStorageMisconfigured":"We couldn't save the evidence. Let your coordinator know.","evidenceUploadFailed":"The file didn't upload. Check your connection and try again.","assignedSubtitle":"Every ticket assigned to you, across your projects.","assignedEmptyTitle":"No tickets assigned to you","assignedEmptyBody":"When a coordinator assigns you a ticket it shows up here — even before it lands on a route.","groupToday":"Today","groupUpcoming":"Upcoming","groupUnscheduled":"Unscheduled","groupRecentlyClosed":"Recently closed","noProject":"Field service","scheduledOn":"Scheduled {date}","unscheduledHint":"Not scheduled yet","backToAssigned":"← All assigned tickets","issueHeading":"What's the issue","needPartHeading":"Need a part?","swappedPartHeading":"Swapped a part?","arrivedLabel":"Arrived","completedLabel":"Completed","statusLabel":"Status","ticketStatus":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed"},"language":"Language","languageAria":"Change language","languageCurrent":"Language: {name}","languageSaving":"Saving language…","languageSaveFailed":"Couldn't change the language. Check your connection and try again.","languageOptions":"Choose a language","offlineKindSignature":"Signature","offlineKindExpense":"Expense","offlineKindNote":"Note","offlineAcceptRejectedNotOwner":"This ticket is no longer assigned to you.","offlineAcceptRejectedNotFound":"This ticket no longer exists.","offlineAcceptRejectedSignedOut":"Your session ended. Sign in again to send it.","offlineAcceptRejectedGeneric":"The ticket could not be accepted.","closeoutHeader":"Complete work","closeoutBackToStop":"← Back to stop","closeoutAlreadyCompleted":"This stop is already completed.","closeoutDescribeRequired":"Describe what you did.","closeoutWorkLabel":"What did you do?","closeoutWorkPlaceholder":"Replaced the print head, tested 20 receipts, customer confirms working.","closeoutOutcomeLabel":"Outcome","closeoutIncidentSolvedLabel":"Incident solved on this visit","visitsTitle":"Visits","visitLabel":"Visit {n}","visitStageAccepted":"Accepted","visitStageEnRoute":"En route","visitStageOnSite":"On site","visitStageCompleted":"Completed","visitIncidentSolved":"Incident solved","visitPorTag":"POR","visitScheduledLabel":"Scheduled","visitNoneYet":"No visits recorded yet.","outcomeResolved":"Resolved","outcomePartiallyResolved":"Partially resolved","outcomeNeedsFollowUp":"Needs follow-up","outcomeNoFaultFound":"No fault found","outcomeRejected":"Rejected","closeoutRootCauseLabel":"Root cause (optional)","closeoutRootCausePlaceholder":"What caused the fault?","closeoutLaborLabel":"Labor time (minutes)","closeoutLaborPlaceholder":"Leave blank to use the on-site clock","closeoutPartsLegend":"Parts used","closeoutPartsRemove":"remove","closeoutPartsSkuPlaceholder":"SKU","closeoutPartsAdd":"+ Add","closeoutPartsQuickPick":"Quick pick:","closeoutSignoffLabel":"Customer sign-off (name)","closeoutSignoffPlaceholder":"e.g. Carla Mejía","closeoutNotesLabel":"Notes (optional)","closeoutSubmit":"Submit and continue ▸","closeoutLocating":"Locating…","closeoutSubmitting":"Submitting…","closeoutStockDeductHint":"Parts you add here are deducted from your van stock on sign-off.","closeoutSerialLegend":"Installed serial numbers","closeoutSerialHint":"Capture the serial/lot of any serialized part you installed — it binds the unit to this equipment.","closeoutSerialPlaceholder":"Scan or type the serial / lot","closeoutSerialSkuPlaceholder":"Part SKU (optional)","closeoutSerialAdd":"+ Add","closeoutSerialRemove":"remove","closeoutFaultLegend":"Fault code","closeoutFaultProblemLabel":"Problem type","closeoutFaultSymptomLabel":"Symptom (optional)","closeoutFaultSymptomPlaceholder":"e.g. intermittent paper jam","closeoutFaultResolutionLabel":"Resolution (optional)","closeoutFaultResolutionPlaceholder":"e.g. replaced feed roller","faultProblemHardware":"Hardware","faultProblemSoftware":"Software","faultProblemNetwork":"Network","faultProblemConsumable":"Consumable","faultProblemInstall":"Install / setup","faultProblemPreventive":"Preventive maintenance","faultProblemOther":"Other","signatureQueueFailed":"Couldn't save the signature to send later — it has NOT been discarded. Reconnect and submit again.","boardFormSection":"Board fields","boardFormSectionNamed":"{board} fields","boardFormContext":"Ticket context","boardFormNoEditable":"This board has no editable fields — complete the closeout below.","boardFormScanPlaceholder":"Scan or type…","boardFormSelectPlaceholder":"Select…","boardFormNotesHeader":"Board fields:","boardFormYes":"Yes","boardFormMoreFields":"(+{count} more)","vanNoTruckTitle":"No van set up yet.","vanNoTruckBody":"Ask your coordinator to add a truck location for you — once that’s done, your parts will show up here.","vanEmptyTitle":"Your van is empty.","vanEmptyBody":"No parts recorded on your truck yet.","urgencyLabel":"Urgency","urgencyNow":"Now (within an hour)","urgencyToday":"Today","urgencyTomorrow":"Tomorrow","notesOptionalLabel":"Notes (optional)","notesPlaceholder":"Print head shows visible burn marks…","whichPartRemoved":"Which part did you remove?","selectPartPlaceholder":"Select a part from your van…","requestPartCta":"+ Request part","requestMoreCta":"+ Request more","partSkuLabel":"Part SKU","skuScan":{"scan":"Scan","scanning":"Scanning…","close":"Close","cameraError":"Camera unavailable.","typeInstead":"Enter it by hand instead."},"onYourVan":"On your van:","quantityLabel":"Quantity","attachToTicket":"Attach to ticket","replenishNeedsTicket":"Parts requests need an open ticket — open one from today’s route first.","replacedPartCta":"Replaced a part","replacePartHint":"This opens a return ticket for the coordinator and marks the part pending return — it stays in your van until the coordinator receives it.","openReturnTicket":"Open return ticket","sending":"Sending…","sendRequest":"Send request","saving":"Saving…","errPickSku":"Pick or enter a SKU","errPickTicket":"Pick a ticket to attach this request to","errPickPart":"Pick which part you removed","errFailed":"Failed","requestSentOk":"✓ Request sent. Coordinator notified.","returnOpenedOk":"✓ Return ticket opened. Hand the part in, then mark it handed in below.","partReturns":{"heading":"Parts returned on this ticket","pillClosed":"Closed","pillHandedIn":"Handed in","pillAwaiting":"Awaiting hand-in","markHandedIn":"Mark handed in","err":{"MISSING_FIELDS":"Missing required fields","NOT_YOUR_TICKET":"That ticket isn’t assigned to you","NOT_SERVICE_TICKET":"You can only record a part replacement on a service ticket","NO_VAN":"No van set up for you yet — ask your coordinator","PART_NOT_IN_VAN":"That part isn’t in your van","ALREADY_FLAGGED":"That part is already flagged for return","RACE":"That part is already being returned — refresh and try again","NOT_YOUR_RETURN":"That return ticket isn’t yours","ALREADY_CLOSED":"This return has already been closed","GENERIC":"Could not update the return"}},"onHand":"On hand","serializedUnits":"Serialized units","minTarget":"Min {min} · Target {target}","updatedLabel":"Updated {time}","unitCount":"{n} units","unitCountOne":"1 unit","unitState":{"in_stock":"In stock","pending_return":"Pending return","installed":"Installed","returned":"Returned","rma_outbound":"RMA outbound","scrapped":"Scrapped"},"diagnose":{"title":"Guided diagnostic","introTitle":"Run a guided diagnostic","introBody":"Walk the symptom-to-root-cause checks for this equipment and get the recommended fix and likely parts.","startCta":"Start diagnostic","startNew":"Start a new diagnostic","starting":"Starting…","noFlow":"No guided flow is published for this equipment yet — record the root cause you found below.","rootCausePlaceholder":"What caused the fault?","completeCta":"Finish diagnosis","completeManually":"Finish now with a root cause","recordAndContinue":"Record and continue","no":"No","narrative":"Steps recorded","startOver":"Discard and start over","errGeneric":"Something went wrong. Try again.","resultRecorded":"Recorded","rootCause":"Root cause","diagnosisRecorded":"Diagnosis","recommendedFix":"Recommended fix","likelyParts":"Likely parts","noParts":"No parts suggested.","requestPart":"Request","recordedNote":"The diagnosis has been recorded on this ticket.","addItemPhoto":"Add photo","takeItemPhoto":"Take photo","chooseItemPhotoFromGallery":"Choose from gallery","photoUploading":"Uploading…","photoAttached":"Photo attached","photoQueued":"Photo queued","photoFailed":"Couldn't attach the photo."},"checklist":{"title":"Checklist","pmHeading":"Maintenance checklist","taskHeading":"Task steps","progress":"{done}/{total} done","allDone":"All done","addStepPlaceholder":"Add a step…","addStep":"Add","removeStep":"Remove step","emptyTasks":"No steps yet — add what you need to do on this visit.","itemDone":"Done","markDone":"Mark done","saveFailed":"Couldn't save. Try again."},"ppe":{"title":"Required PPE","intro":"Put on the required protective equipment before you start.","acknowledge":"I have my PPE on","acknowledging":"Saving…","acknowledged":"PPE acknowledged","acknowledgedAt":"PPE acknowledged at {time}","ackFailed":"Couldn't record it. Try again."},"assetCard":{"title":"Equipment record","serialLabel":"Serial","installedLabel":"Installed","warrantyIn":"In warranty","warrantyExpired":"Warranty expired","warrantyUnknown":"Warranty unknown","warrantyUntil":"until {date}","daysLeft":"{n} days left","daysLeftOne":"1 day left","daysAgo":"expired {n} days ago","daysAgoOne":"expired 1 day ago","notRecorded":"Not recorded"},"meter":{"title":"Meter readings","typeLabel":"Reading type","valueLabel":"Value","unitLabel":"Unit","labelLabel":"Label","labelPlaceholder":"Label (optional)","noteLabel":"Note","notePlaceholder":"Note (optional)","addCta":"Add","valueRequired":"Enter a numeric value.","saveFailed":"Couldn't save. Try again.","justNow":"just now","noReadings":"No readings yet — capture the first one above.","entries":"{n} readings","entriesOne":"1 reading","range":"min {min} · max {max}","types":{"temperature":"Temperature","pressure":"Pressure","voltage":"Voltage","current":"Current","counter":"Counter","humidity":"Humidity","runtime":"Runtime","flow":"Flow","speed":"Speed","custom":"Custom"}},"fieldAdmin":{"heading":"Field admin","expensesTitle":"My Expenses","expensesSub":"Snap a receipt, log a cost","hoursTitle":"My Hours","hoursSub":"Your weekly time — travel + on site"},"expenses":{"title":"My Expenses","subtitle":"Log a receipt against your work.","categoryLabel":"Category","currencyLabel":"Currency","amountLabel":"Amount","noteLabel":"What was it for?","notePlaceholder":"e.g. Fuel — return trip","addReceipt":"Receipt","takeReceiptPhoto":"Take photo","receiptFromGallery":"From gallery","receiptHint":"Add a photo of the receipt (optional).","receiptAlt":"Receipt","removeReceipt":"Remove receipt","submitCta":"Add expense","saving":"Saving…","amountInvalid":"Enter an amount greater than zero.","noteRequired":"Add a short note.","saveFailed":"Couldn't save. Try again.","receiptBudgetFull":"Offline storage is full — send queued items first.","queuedOffline":"Saved offline — it will sync when you reconnect.","pendingHeading":"Pending","listHeading":"Your expenses","emptyTitle":"No expenses yet","emptyBody":"Add your first expense above.","noReceipt":"No photo","rejectedReason":"Rejected: {reason}","categories":{"fuel":"Fuel","parts":"Parts","tools":"Tools","meals":"Meals","lodging":"Lodging","travel":"Travel","other":"Other"},"statuses":{"pending":"Pending","approved":"Approved","rejected":"Rejected","reimbursed":"Reimbursed"}},"hours":{"title":"My Hours","subtitle":"Your weekly time, from the jobs you completed.","prevWeek":"Previous week","nextWeek":"Next week","thisWeek":"This week","travel":"Travel","onSite":"On site","jobs":{"one":"{n} job","other":"{n} jobs"},"stops":{"one":"{n} stop","other":"{n} stops"},"inProgress":"a job is still open","noteLabel":"Note (optional)","notePlaceholder":"Anything the office should know","submitCta":"Submit week","resubmitCta":"Re-submit week","submitting":"Submitting…","submitFailed":"Couldn't submit. Try again.","submitted":"Week submitted.","submitHint":"Submit to confirm your hours for this week.","submittedOn":"Submitted {date}","attested":"Confirmed {travel} travel · {onsite} on site"},"shipments":{"heading":"Inbound shipments","empty":"No inbound shipments right now.","statusReserved":"Being prepared","statusInTransit":"In transit","fromLabel":"From {from}","forTicket":"For #{number} · {title}","serialsLabel":"Serials: {serials}","reservedAt":"Set up {time}","shippedAt":"Shipped {time}","confirmCta":"Confirm receipt","confirming":"Confirming…","confirmedOk":"Receipt confirmed.","confirmFailed":"Couldn't confirm. Try again."},"fulfillment":{"label":"How should this be fulfilled?","hint":"Optional — leave blank to let the coordinator decide.","pickSpError":"Pick which service provider the transfer comes from.","fromSpLabel":"Transfer from","fromSpPlaceholder":"Choose a service provider","sources":{"warehouse":"Warehouse pickup","other_sp":"Transfer from another SP","vendor_po":"Vendor PO","client_stock":"Client stock"}},"mentionPickerLabel":"Mention a coworker or coordinator","mentionInsert":"Mention someone","receiptSeen":"Seen","receiptDelivered":"Delivered","receiptSeenBy":"Seen by {n}","porHeading":"Proof of Repair","porView":"View / Share POR","porVersion":"v{n}","porRegenerate":"Regenerate","porGenerate":"Generate POR","porGenerating":"Generating…","porNotReady":"No Proof of Repair has been generated yet.","porGenerateFailed":"Couldn't generate the POR. Try again.","optimizeCta":"Optimize my day","optimizeRunning":"Optimizing…","optimizeImproved":"Route optimized.","optimizeAlready":"Already optimal.","optimizeFailed":"Couldn't optimize. Try again.","loading":{"route":"Loading…","ticket":"Loading this job…","closeout":"Loading close-out…"},"errorBoundary":{"retry":"Try again","app":{"title":"This screen hit a snag","body":"It couldn't load. This is usually temporary — try again. Nothing you captured is lost."},"ticket":{"title":"Couldn't open this job","body":"The job details failed to load. Try again — anything you already captured is safe."},"closeout":{"title":"Close-out didn't go through","body":"Your notes and signature are saved on this device. Try again to finish the job.","backToStop":"Back to the job"}},"evidenceEmpty":{"readyTitle":"No proof captured yet","readyBody":"Add a photo of the finished work before you close this job.","lockedTitle":"Evidence capture is not open yet","lockedBody":"Photo capture opens once this job is on your route."},"t1v2":{"tabTickets":"Tickets","tabRoute":"Route","tabExpenses":"Expenses","tabAccount":"Account","navLabel":"Navigation","locationOn":"Location on","locationPaused":"Location paused","locationPause":"Pause location","locationResume":"Resume location","locationStats":"{n} fixes today · {distance} · since {time}","locationStatsOne":"1 fix today · {distance} · since {time}","locationWaiting":"Finding location","locationNotSaved":"Location not saved","pendingSend":"waiting to send","sendFailed":"Couldn't record \"{step}\": {detail}","retry":"Retry","discard":"Discard","alreadySent":"Already sent","search":"Search site, ticket or customer","groupToday":"Today","groupUpcoming":"Upcoming","groupUnscheduled":"Unscheduled","allTickets":"All tickets","emptyTickets":"You have no assigned tickets","noMatch":"No ticket matches","pickTicket":"Pick a ticket from the list","returned":"Returned","address":"Address","equipment":"Equipment","description":"Description","contact":"Contact","navigate":"Navigate","call":"Call","noPhone":"No phone","porRow":"Fill out POR","porLocked":"Unlocks when you arrive","porDone":"POR recorded","notes":"Notes","notesNone":"No notes yet","notesCount":"{n} notes","notesCountOne":"1 note","actAccept":"Accept","actOnMyWay":"On my way","actArrived":"I've arrived","actFillPor":"Fill out POR","actSurvey":"Survey","toastAccepted":"Accepted","toastEnRoute":"Marked en route","toastArrived":"Marked on site","undo":"Undo","statusAccepted":"Accepted","today":"Today","stopsToday":"{n} stops today","stopsTodayOne":"1 stop today","ofTotal":"{k} of {n}","startDay":"Start workday","endDay":"End workday","stopOf":"Stop {x} of {n}","upNext":"Up next","doneToday":"Done today","openStop":"Open stop","startTrip":"Start trip","seeMap":"See map","noRoute":"No route today","routeDone":"Route complete · {k} of {n}","amount":"Amount","category":"Category","currency":"Currency","whatFor":"What was it for?","whatForHint":"E.g.: refuel on the way back","addReceipt":"Add receipt photo","removeReceipt":"Remove","saveExpense":"Save expense","thisWeek":"This week","earlier":"Earlier","pendingSendList":"Waiting to send","myHours":"My hours","hoursWeek":"{h} h {m} min this week","messages":"Messages","unread":"{n} unread","password":"Password","twoStep":"Two-step verification","on":"On","off":"Off","language":"Language","notifications":"Notifications","settings":"Settings","help":"Help and contact","myVan":"My van","boards":"Boards","docs":"Documents","more":"More","pendingSync":"Pending sync","about":"About and legal","signOut":"Sign out","authBy":"by RedsisOne","loginEmail":"Email","loginSubmit":"Sign in","loginNewTech":"New tech?","loginSubtitle":"Sign in with the credentials your coordinator gave you.","loginSigningIn":"Signing in…","loginBack":"Back to sign in","langEs":"Español","langEn":"English","langPt":"Português","location":{"notUpdating":"Location not updating","lastFixAgo":"Last location {n} min ago"}}},"fieldQuote":{"title":"Build quote","backToStop":"← Back to stop","entryTitle":"Quote","entryCta":"Build or view quote","statusDraft":"Draft","statusSent":"Sent","statusApproved":"Approved","statusDeclined":"Declined","statusDraftHint":"Draft — not sent to the customer yet.","statusSentBanner":"Quote sent to the customer. Waiting on their response.","statusApprovedBanner":"Approved — {option}","statusDeclinedBanner":"The customer declined this quote.","revise":"Revise quote","revising":"Revising…","reviseHint":"To change an approved or declined quote, revise it: the customer's decision is cleared and the quote goes back to draft, to be sent or presented again.","optionsHeading":"Options","addOption":"Add option","removeOption":"Remove option","optionCount":"Option {n}","defaultOptionLabel":"Standard","optionLabelPlaceholder":"Option name","optionDescriptionPlaceholder":"Short description (optional)","recommended":"Recommended","recommendedBadge":"Recommended","laborHeading":"Labor","addLabor":"Add labor","laborDescriptionPlaceholder":"Work description","hours":"Hours","rate":"Rate","partsHeading":"Parts","addPart":"Add part","skuPlaceholder":"SKU","partNamePlaceholder":"Part name","qty":"Qty","unitPrice":"Unit price","billable":"Billable","warranty":"Warranty","removeLine":"Remove line","pricebookHeading":"Price book","pricebookPlaceholder":"Search products, services, labor…","pricebookSearch":"Search","pricebookSearching":"Searching…","pricebookNoResults":"No matching items.","pricebookAdd":"Add","kindAll":"All","kindLabor":"Labor","kindProduct":"Product","kindService":"Service","suggestButton":"Suggested items","suggestLoading":"Finding suggestions…","suggestNone":"No suggestions for this ticket.","suggestAdd":"Add","adjustmentsHeading":"Adjustments","discount":"Discount","discountAmount":"Amount","discountPercent":"Percent","discountValue":"Value","tripCharge":"Trip charge","taxRate":"Tax rate %","subtotal":"Subtotal","discountTotal":"Discount","tripTotal":"Trip charge","taxTotal":"Tax","total":"Total","coveredTotal":"Covered by warranty","nonBillableTotal":"Non-billable","currency":"Currency","notes":"Notes","notesPlaceholder":"Notes for the customer (optional)","save":"Save quote","saving":"Saving…","saved":"Saved","sendHeading":"Send to customer","channelEmail":"Email","channelSms":"SMS","emailPlaceholder":"customer@email.com","phonePlaceholder":"Phone number","send":"Send quote","sending":"Sending…","sentSuccess":"Quote sent.","deliveredVia":"Delivered via {channels}.","noDelivery":"The quote was not delivered — check the email address or phone number.","approvalLink":"Approval link","copyLink":"Copy","copied":"Copied","chooseChannel":"Choose at least one way to send.","presentButton":"Present to customer","presentExit":"Back to editing","presentIntro":"Hand the device to the customer to choose an option and sign.","choose":"Choose","chosen":"Chosen","signature":"Signature","signatureClear":"Clear","signatureHint":"Sign above with a finger or stylus.","signedName":"Your name","signedNamePlaceholder":"Full name","approve":"Approve","approving":"Approving…","decline":"Decline","declining":"Declining…","selectFirst":"Choose an option first.","decisionApproved":"Approved — thank you.","decisionDeclined":"Declined.","laborLineMeta":"{hours}h × {price}","partLineMeta":"{qty} × {price} each","errGeneric":"Something went wrong. Try again.","errNotYourTicket":"This ticket is not assigned to you.","errDisabled":"On-site quotes are turned off.","errUnauthenticated":"Your session expired. Sign in again.","errNotActivated":"Activate your account to build quotes.","errNoQuote":"Save the quote before sending it.","errEmptyQuote":"Add at least one line before sending.","errInvalidQuote":"The quote has invalid values — check the lines.","errInvalidDecision":"Could not record the decision.","errQuoteLocked":"This quote was already approved or declined. Use “Revise quote” to change it.","errSendLimit":"You reached today’s send limit for this quote. Show it to the customer on your phone, or try again tomorrow.","errInvalidDestination":"Enter one valid email or one mobile number with country code (e.g. +13055550123).","publicPage":{"heading":"Your service quote","poweredBy":"Secured by Redsis","intro":"Review your options and approve the one that works best for you.","linkInactive":"This link is no longer active.","alreadyApproved":"You have already approved this quote. Thank you!","alreadyDeclined":"You have already declined this quote.","choose":"Choose this option","chosen":"Chosen","notePlaceholder":"Add a note (optional)","approve":"Approve","approving":"Approving…","decline":"Decline","declining":"Declining…","mustSelect":"Please choose an option first.","approvedDone":"Thank you — your approval has been recorded.","declinedDone":"Your response has been recorded.","alreadyDone":"This quote has already been responded to.","invalidDone":"This link is no longer valid.","errorDone":"Something went wrong. Please try again."}},"coverage":{"title":"Coverage","warrantyHeading":"Warranty","statusInWarranty":"In warranty","statusExpired":"Out of warranty","statusUnknown":"Warranty unknown","untilLine":"Covered until {date}","daysLeft":"{n} days left","daysLeftOne":"1 day left","expiredLine":"Expired on {date}","unknownReason":"No warranty data for this equipment","sourceDerived":"Derived from install date and term","serialLine":"Serial {serial}","noAsset":"No equipment linked to this job","contractHeading":"Contract","slaLabel":"SLA tier","billingLabel":"Billing","billingIguala":"Retainer (iguala)","billingPerEvent":"Per event","billingBillableExtra":"Billable extra","notSpecified":"Not specified","partsLabel":"Parts","partsCovered":"Covered","partsBillable":"Billable","noContract":"No service contract covers this client","appliedTitle":"Coverage applied","appliedSourceLine":"Covered as {source}","appliedLine":"Applied {date}","appliedNoteLine":"Note: {note}","linkedClaim":"Linked to the warranty claim","clearCta":"Remove coverage","clearing":"Removing…","sourceLabel":"Coverage type","sourceWarranty":"Warranty","sourceContract":"Contract","sourceGoodwill":"Goodwill","noteLabel":"Note (optional)","notePlaceholder":"Why is this covered?","submit":"Apply","submitting":"Applying…","applyCta":"Apply coverage","okApplied":"Coverage recorded","okCleared":"Coverage removed","errFailed":"Could not save. Try again."},"deficiency":{"title":"Deficiencies & recommendations","addCta":"Add","empty":"No deficiencies logged on this job yet.","recommendationTag":"Recommendation:","changeStatusLabel":"Change status","fieldTitle":"What did you find?","titlePlaceholder":"e.g. Compressor bearing worn","fieldSeverity":"Severity","fieldDescription":"Details","descriptionPlaceholder":"What you saw, where, and why it matters","fieldRecommendation":"Recommendation","recommendationPlaceholder":"e.g. Replace the bearing on the next visit","cancel":"Cancel","save":"Save deficiency","saving":"Saving…","errTitleRequired":"Describe what you found.","errFailed":"Could not save. Please try again.","severity":{"low":"Low","medium":"Medium","high":"High","safety":"Safety"},"status":{"open":"Open","quoted":"Quoted","scheduled":"Scheduled","resolved":"Resolved","dismissed":"Dismissed"}},"fieldTechManifest":{"name":"TechOne","shortName":"TechOne","description":"TechOne — your assigned tickets and today's route"},"portalBoards":{"title":"Boards","techSubtitle":"Boards shared with your team.","vendorSubtitle":"Boards shared with you across your assigned work.","noBoards":"No boards have been shared with you yet.","noBoardsInWorkspace":"No boards in this workspace yet.","openBoard":"Open board","back":"Back to boards","backToWork":"Back to your work","table":{"item":"Item","untitled":"Untitled","noRows":"There are no rows to show on this board.","ungrouped":"Ungrouped","unitOne":"item","unitOther":"items"}},"portalBuilder":{"techContact":{"intro":"The dispatch/office numbers your field technicians one-tap to call from the TechOne app (Help & contact). Leave a field blank to hide that row. Nothing here is shown to customers.","dispatchPhoneLabel":"Dispatch phone","dispatchPhoneHint":"The primary \"Call dispatch\" number.","dispatchLabelLabel":"Dispatch label","dispatchLabelHint":"Optional — e.g. \"Dispatch\", \"Coordinador\".","dispatchPlaceholder":"Dispatch","officePhoneLabel":"Office phone","officePhoneHint":"Optional back-office / branch line.","officeLabelLabel":"Office label","officeLabelHint":"Optional — e.g. \"Office\", \"Sucursal\".","officePlaceholder":"Office","emergencyPhoneLabel":"Emergency / on-call phone","emergencyPhoneHint":"Optional 24/7 line; shown with an alert style.","supportEmailLabel":"Support email","supportEmailHint":"Optional — a mailto row for non-urgent questions."},"techScreens":{"pageTitle":"Tech Screens","pageDescription":"Author the TechOne field app screens for this portal over your One Boards views.","notFieldService":"Tech Screens apply to field-service portals (the TechOne app). This portal is a {kind} portal.","editorHeading":"Tech screens","introPrefix":"Author the TechOne app screens for this field-service portal. A screen with id","introMiddle":"replaces the built-in Assigned Tickets screen when the","introSuffix":"flag is on.","addScreen":"Add screen","emptyState":"No screens yet. Add one to start authoring the TechOne app.","removeScreen":"Remove screen","saving":"Saving…","save":"Save tech screens","savedOne":"Saved {count} screen.","savedMany":"Saved {count} screens.","livePreview":"Live preview","untitledScreen":"(untitled screen)","noBlocksYet":"No blocks yet.","moveUp":"Move up","moveDown":"Move down","removeBlock":"Remove block","noBoardsGranted":"No field-service boards granted","grantDefault":"Grant default (all permitted rows)","grantDefaultShort":"grant default","filterNotPortalSafe":"(filter not portal-safe)","noColumnsToChoose":"No columns to choose.","allPermitted":"all permitted","allColumns":"all columns","columnsCount":"{count} columns","headingFallback":"(heading)","richTextFallback":"(rich text)","boardNotGranted":"(board not granted)","blocks":{"boardView":"Board view","heading":"Heading","richText":"Rich text","action":"Action","capture":"Capture"},"fields":{"label":"Label","screenId":"Screen id (URL slug)","navIcon":"Nav icon (lucide key, optional)","navIconPlaceholder":"e.g. list","navPosition":"Nav position","showInNav":"Show in nav","blocksLabel":"Blocks","board":"Board","view":"View","titleOptional":"Title (optional)","columns":"Columns","headingText":"Heading text","subtext":"Subtext (optional)","markdown":"Markdown","context":"Context","reservedId":"Replaces","action":"Action","labelOptional":"Button label (optional)","confirmStep":"Require a confirm step","capture":"Capture","hideOptional":"Hide optional fields","rowActions":"Per-row actions","rowActionsHint":"Show these actions on each row of the board (list screens)."},"contexts":{"none":"List (no single ticket)","ticket":"Ticket detail","stop":"Route stop detail"},"needs":{"ticketId":"a ticket","stopId":"a route stop"},"needsContext":"Runs on a screen scoped to {need}.","reservedReplaces":"This id replaces the built-in \"{id}\" screen.","reservedCustom":"A custom screen, reachable from its nav entry.","reservedContextMismatch":"This reserved id needs the \"{context}\" context.","actionLabels":{"status.transition":"Update status","accept.decline":"Accept / Decline","acknowledge":"Acknowledge","no.access":"No access","request.help":"Request help"},"captureLabels":{"meter":"Meter reading","deficiency":"Deficiency","signature":"Signature","photo":"Photo","video":"Video","receipt":"Receipt","part.request":"Request a part"}},"pageBlocks":{"modeBlocks":"Blocks","modeMarkdown":"Markdown","modeHint":"Compose the page from typed blocks, or switch to raw Markdown.","addBlock":"Add a block","empty":"No blocks yet — add one to start composing this page.","moveUp":"Move up","moveDown":"Move down","dragHandle":"Drag to reorder","remove":"Remove block","blockLabel":"Block {n}","optional":"optional","preview":"Preview","fromTemplate":"Start from a template","fromTemplateHint":"Insert a pre-composed page, then bind its boards and forms. Blocks are added to what you already have.","templateBack":"Back to templates","templateBindHint":"Choose a board or form for each section:","templateInsert":"Insert template","templateCancel":"Cancel","blocksCount":"blocks","kinds":{"hero":"Hero","richText":"Rich text","imageBanner":"Image banner","featureGrid":"Feature grid","cta":"Call to action","boardList":"Board list","faq":"FAQ","contactForm":"Contact form","stats":"Stats band","testimonial":"Testimonial","divider":"Divider","downloads":"Downloads","team":"Team","gallery":"Gallery"},"kindDesc":{"hero":"A headline, blurb, optional image and button.","richText":"A block of formatted Markdown text.","imageBanner":"A full-width image, optionally linked.","featureGrid":"A grid of titled features with icons.","cta":"A prompt with a single action button.","boardList":"A connected board, shown to the client.","faq":"A list of questions and answers.","contactForm":"One of this portal’s intake forms.","stats":"A band of key numbers or metrics.","testimonial":"A pull quote with an optional author.","divider":"A line or blank space between blocks.","downloads":"A list of files or links to download.","team":"A grid of people with contact details.","gallery":"A grid of images, optionally linked."},"fields":{"heading":"Heading","subheading":"Subheading","imageUrl":"Image URL","imageUrlHint":"Must be an https:// image link.","alt":"Alt text","markdown":"Content (Markdown)","buttonLabel":"Button label","href":"Link","hrefHint":"A page path (/…) or an https:// link.","title":"Title","featureTitle":"Title","featureBody":"Description","featureIcon":"Icon","addFeature":"Add feature","removeItem":"Remove","faqQuestion":"Question","faqAnswer":"Answer","addFaq":"Add question","board":"Board","pickBoard":"Pick a connected board…","noBoards":"No boards are connected to this portal yet.","limit":"Max items","form":"Form","pickForm":"Pick a form…","noForms":"No forms exist in this portal yet.","draftForm":"draft","skin":"Style","skinDefault":"Default","statValue":"Value","statLabel":"Label","statHint":"Note","addStat":"Add stat","quote":"Quote","author":"Author","role":"Role","dividerStyle":"Style","dividerLine":"Line","dividerSpace":"Space","downloadLabel":"Label","note":"Note","addDownload":"Add link","memberName":"Name","email":"Email","phone":"Phone","addMember":"Add member","addImage":"Add image"}},"dataStudio":{"searchLabel":"Find a board to connect","searchHint":"Search by name, short ID (BRD-… / WS-…), or paste a board link.","searchPlaceholder":"Board name, BRD-… , or a pasted link","searchButton":"Search","noResults":"No boards matched.","inWorkspace":"in {workspace}","connect":"Connect","emptyState":"No workspaces or boards connected yet — search above to connect one.","deleted":"deleted","unassignWorkspace":"Unassign workspace","noBoardsInWorkspace":"No boards connected in this workspace yet.","quickConnect":"Quick connect:","disconnect":"Disconnect","assignWorkspaceTitle":"Connect a whole workspace","pickWorkspace":"Pick a workspace…","assignWorkspace":"Connect workspace","rowsTitle":"Rows","rowWhole":"Whole board","rowEmail":"Filter by email column","rowPerson":"Filter by person column","pickColumn":"Pick the deciding column…","noEmailColumns":"No email column on this board","noPersonColumns":"No person column on this board","columnsTitle":"Columns","columnsAll":"All columns","columnsCustom":"Choose columns","noColumns":"This board has no visible columns.","viewsTitle":"Views","viewsHint":"Restrict rows to a saved view's filter: the audience sees only rows that view keeps (leave empty for no view restriction). A view whose filter can't be enforced shows NO rows until removed.","noViews":"This board has no saved views.","viewUnsupportedTip":"This view's saved filter can't be enforced for the portal — selecting it would hide ALL rows. Simplify the view's filter or leave it unselected.","audienceTitle":"Audience","audienceName":{"client":"Client","field-service":"Technician","vendor":"Vendor","service-partner":"Service partner"},"save":"Save board","saving":"Saving…","saved":"Saved","validPass":"Everything checks out.","errorsBlock":"{errors} error(s) block saving · {warnings} warning(s)","warningsNote":"{warnings} warning(s) — review before going live","issues":{"no_boards_connected":"No boards connected — this portal shows no board data.","deciding_unset":"This board is row-filtered but has no deciding column — it would show nothing.","deciding_column_missing":"The chosen deciding column was deleted — pick another or use the whole board.","audience_unset":"No audience selected — nobody would see this board.","column_allowlist_empty":"The column list is empty — the audience would see no data columns.","workspace_deleted":"This workspace was deleted — unassign it.","whole_board_no_filter":"No row filter — every user of this audience sees ALL rows.","workspace_no_boards":"This workspace has no connected boards.","column_deleted":"{count} chosen column(s) were deleted and will be skipped.","view_deleted":"{count} selected view(s) were deleted — this board now shows NO rows until fixed.","view_filter_unsupported":"{count} selected view(s) have a filter that can't be enforced — this board shows NO rows until they're removed or simplified.","board_deleted":"This board no longer exists — disconnect it.","person_filter_note":"A person filter only matches clients who share an internal account email."},"previewTitle":"Live preview","previewAs":"Preview as:","sampleEmailPlaceholder":"Sample email (optional)","reloadDraftsNote":"Connecting or assigning reloads this page and discards unsaved board edits — save any open board first.","peopleCrosslinkPre":"Deciding which people can sign in from a board?","peopleCrosslinkLink":"That lives on the People tab.","validateAdvisory":"Advisory only — saving is per board, with each board’s own Save button.","showsNothingNoColumn":"This board shows NO rows yet: a filter mode is selected but no deciding column is set. Pick a column, or choose “Whole board”.","showsNothingNoAudience":"No audience is selected, so no one can see this board. Pick at least one audience below.","audienceFieldServiceHint":" (the field-service audience)","previewResolvedNote":"Previewing as {email} — the portal’s first active member (you left the sample email blank).","runPreview":"Preview","previewRunning":"Loading…","previewHidden":"This board is NOT shown to this audience.","previewViewFailClosed":"A selected view is deleted or has an unenforceable filter — this audience sees NO rows.","previewRowsAll":"Whole board — {n} rows visible.","previewRowsFiltered":"{n} rows visible for {email}.","previewRowsNone":"No rows match {email}.","previewNoColumns":"No data columns are shared — only the item title shows.","previewEmpty":"No rows to show for this sample.","previewTitleCol":"Item","previewDroppedNote":"Some chosen columns no longer exist and were skipped.","health":{"title":"Connection health","subtitle":"Live status of the boards connected to this portal.","connectedBoards":"connected","allGood":"All good","errorsWarnings":"{errors} error(s) · {warnings} warning(s)","noBoards":"No boards connected yet.","colBoard":"Board","colAudiences":"Audiences","colRows":"Rows","colColumns":"Columns","colLastViewed":"Last viewed","colIssues":"Issues","rowWhole":"Whole board","rowFiltered":"Filtered","rowUnconfigured":"Not configured","columnsAll":"All","columnsCustom":"Custom","columnsNone":"None","neverViewed":"Never","deleted":"Deleted","viewTrackingOff":"View tracking is off — turn on the portal usage dashboard to see when boards were last opened."}},"designStudio":{"title":"Design system","subtitle":"Choose the portal style, colors, and logo. Redsis owns the frame; the client owns the accent.","direction":"Direction","petrolConsole":"Petrol Console","petrolConsoleHint":"Dense operational portals — repairs, SLAs, fleets, tickets. Squared, data-first.","yellowCanvas":"Yellow Canvas","yellowCanvasHint":"Customer-facing portals — parts, self-service, guides. Rounded, generous, cream tints.","clientColor":"Client color","clientColorHint":"One brand color for buttons, links, and active marks. Never the status colors or Redsis yellow.","contrastAdjusted":"Adjusted to {color} to meet AA contrast","reservedYellow":"Redsis yellow is reserved — choose a client color","reach":"Color reach","reachAccent":"Accent only","reachAccentHint":"Client color on controls only. Default.","reachSurface":"Client surface","reachSurfaceHint":"The sub-header / hero band also takes the client color. The Redsis frame never changes.","density":"Table density","comfortable":"Comfortable","dense":"Dense","darkOps":"Dark ops console","darkOpsHint":"Monitoring / SLA dark variant (Petrol Console only).","brandLogo":"Brand logo","uploadLogo":"Upload logo","uploadLogoHint":"PNG, SVG, JPG or WebP, up to 2 MB. Shown next to the Redsis One lockup.","uploading":"Uploading…","uploadFailed":"Upload failed — try again","logoUrlFallback":"Or paste an image URL","noCoBrand":"Portal default (no co-brand)","themePack":"Theme pack","themePackHint":"Optional. Start from a curated design — full color system, fonts, and component styles. You can change or fine-tune it later in the Design tab.","noThemePack":"No pack (blank portal)","assetLibrary":"Asset library","assetLoading":"Loading…","copyUrl":"Copy URL","darkMode":"Dark mode","versionsSaveHeading":"Save this design as a version","versionSaved":"Version saved.","versionsHistory":"History","versionsEmpty":"No versions yet — save one above.","versionRestored":"Version restored.","versionDelete":"Delete version"},"statActivePortals":"Active portals","statExternalUsers":"External users","statPublishes7d":"Publishes · 7 days","colPortal":"Portal","colKind":"Kind","colHostname":"Hostname","colUsers":"Users","colStatus":"Status","colActivity":"Activity","unresolved":"unresolved","underParent":"under {name}","tenantRowNote":"tenant","kind":{"tenant":"Tenant","client":"Client","vendor":"Vendor","mixed":"Mixed","field-service":"Field Service"},"portalStatus":{"draft":"Draft","active":"Active","suspended":"Suspended","archived":"Archived"},"backToPortals":"Portals","openPortal":"Open portal ↗","viewAsClient":"View as client","tabs":{"overview":"Overview","general":"General","branding":"Branding","modules":"Modules & Features","sources":"Sources","signin":"Sign-in","domain":"Domain","danger":"Danger","pages":"Pages","invite":"Invite users","publish":"Publish","fieldApp":"Field App"},"fieldApp":{"intro":"This portal configures the field tech app (techone.redsis.app): which boards it reads, who its technicians are, and which surfaces the techs see.","bindingTitle":"Field App Binding","bindingIntro":"The workspace and board/column roles that drive the tech app. Connect the project workspace here; map the board and column roles in the Mobile App Module.","workspacesLabel":"Workspaces","boardsLabel":"Boards granted","connectBoards":"Connect boards & workspaces","editBinding":"Edit board & column roles","techScopeTitle":"Technician scope","techScopeIntro":"The technicians who can sign in to this app and the tickets they are assigned. Managed in the portal’s People area.","manageTechnicians":"Manage technicians","surfacesTitle":"Tech surfaces","surfacesIntro":"The tabs the tech shell shows. Toggle them on the Modules tab — Route is always on.","surfaceOn":"On","surfaceOff":"Off","surfacesReadOnly":"You need manage access to change the enabled surfaces.","previewTitle":"Tech app preview"},"techPreview":{"eyebrow":"Field Tech","today":"Today","sampleStopTitle":"Stop {n} · Service call","sampleStopMeta":"Assigned · SLA on track","sampleStatus":"On the way","tabRoute":"Route","tabMap":"Map","tabChat":"Chat","tabDocs":"Docs","tabVan":"My Van","caption":"A faithful preview of the branded tech app, from this portal’s branding and enabled surfaces."},"previewPage":{"back":"← Back to portal","clientEyebrow":"Client Portal","clientTitle":"Preview as client","clientDescription":"See exactly what a member of \"{name}\" sees — their shared boards, scoped rows and columns, and pages. Read-only.","techEyebrow":"Field Tech","techTitle":"Preview the tech app","techDescription":"See the branded field tech app that \"{name}\" configures — its logo, colors, and enabled surfaces, exactly as a technician sees it on tech.redsis.app."},"readinessTitle":"Launch readiness","readinessCount":"{ready} of {total}","readinessReady":"ready","readiness":{"branding":"Branding configured","members":"First client user invited","modules":"Modules enabled","sources":"Data source mapped or content published","signin":"Sign-in method reviewed","hostname":"Hostname resolves (portal active)"},"readinessAction":{"branding":"Customize →","members":"Invite →","modules":"Configure →","sources":"Map →","signin":"Review →","hostname":"Activate →"},"statMembers":"Members","pendingInvites":"{n} pending invites","statPublishedItems":"Published items","lastPublish":"last publish {time}","noPublishesYet":"none yet","statOpenTickets":"Open tickets","openTicketsNoBinding":"No portal→client binding yet — counts appear once this portal is linked to a service client.","auditTitle":"Recent audit trail","auditEmpty":"No audit activity yet.","fullAudit":"Full audit log →","managePeople":"People & invites →","usageLink":"Usage →","saveChanges":"Save changes","saving":"Saving…","saved":"Saved","genericError":"Something went wrong.","slugLabel":"Slug","parentLabel":"Parent","topLevelTenant":"Top-level tenant","nameLabel":"Name","kindLabel":"Kind","statusLabel":"Status","statusHint":"Suspended and archived portals are unreachable by their users.","domainLabel":"Domain","rootDomainHint":"Which root this portal lives on. redsis.app for internal/demo, redsisone.com for clients. Changing it moves the portal’s hostname.","nestedDomainHint":"Nested portals inherit their tenant’s domain.","inheritedSuffix":"(inherited)","accentLabel":"Accent color","accentHint":"Used for the client’s primary buttons and active nav. Redsis yellow stays reserved for Redsis surfaces.","accentName":{"crimson":"Crimson","ocean":"Ocean blue","forest":"Forest green","ink":"Ink","plum":"Plum","ember":"Ember orange"},"logoUrlLabel":"Logo URL","logoUrlHint":"A public https URL to the portal’s logo. Drag-and-drop upload comes later.","welcomeLabel":"Welcome message","welcomeHint":"Shown on the client portal’s home hero.","livePreview":"Live preview","previewGreeting":"Welcome, {name}","previewCta":"Open a ticket","fullAppearanceEditor":"Full appearance editor →","modulesIntro":"Which surfaces appear in this portal’s client navigation.","alwaysOn":"Always on","moreModules":"More modules","modulesFootnote":"Disabled modules disappear from the client’s navigation immediately.","features":{"heading":"Features","intro":"Turn individual features on or off for THIS portal only, layered over the global settings. “Inherit” follows the global setting; “Force on” / “Force off” override it just here.","inherit":"Inherit","forceOn":"Force on","forceOff":"Force off","inheritOn":"Inherit (on)","inheritOff":"Inherit (off)","globalOnLabel":"global: on","globalOffLabel":"global: off","killed":"Off globally","killedHint":"This feature is turned off globally, so it can’t be forced on for a portal.","effectiveOn":"Now on for this portal","effectiveOff":"Now off for this portal","empty":"No portal-configurable features for this portal type.","saveError":"Could not save that change."},"module":{"home":{"label":"Home dashboard","desc":"KPIs from the client’s own tickets and repairs."},"tickets":{"label":"Tickets","desc":"My tickets list + intake form + conversation."},"warranties":{"label":"Warranties","desc":"Shipment stepper with carrier tracking."},"repairs":{"label":"Repairs","desc":"Read-only depot Kanban."},"announcements":{"label":"Announcements","desc":"Maintenance windows and service notes."},"chat":{"label":"Chat","desc":"Native chat, hosted on Redsis infra — connects portal, tech app and Redsis One."},"forms":{"label":"Forms","desc":"Custom intake forms beyond tickets."},"boards":{"label":"Boards","desc":"Read-scoped access to assigned One Boards."},"my-views":{"label":"My Views","desc":"Row-filtered \"My Tickets / My Orders\" views."},"reports":{"label":"Reports","desc":"Reports published to this portal."},"dashboards":{"label":"Dashboards","desc":"Client-safe dashboard widgets."},"pages":{"label":"Pages","desc":"Published content pages."},"map":{"label":"Map","desc":"Live route map with numbered pins and ETAs."},"docs":{"label":"Docs","desc":"Equipment-matched documentation for the assigned work."},"inventory":{"label":"My Van","desc":"The tech's parts loadout / van inventory."}},"techPeople":{"sectionTitle":"Technicians","sectionDesc":"Field techs with a tech-app login. Provision or link a login for a service provider below.","empty":"No service providers yet.","statusEnabled":"Tech login enabled","statusOffboarded":"Tech login revoked","statusNone":"No tech login","manageRosterLink":"Full SP roster & skills →"},"memberBoards":{"title":"Members from boards","intro":"Tie a board whose rows hold people, then add specific people from it as portal users. A person must be on the board to be addable — nobody is added automatically.","loading":"Loading…","noBoards":"No member boards tied yet. Search for a board above to use its people as the member roster.","filterPlaceholder":"Filter people by name, email or company","filterApply":"Filter","searchPlaceholder":"Search a board to tie (name, ID, or paste a link)…","noResults":"No matching boards.","cancel":"Cancel","mapIntro":"Confirm which columns hold each person field (auto-detected — adjust if needed).","needEmail":"Pick the email column first.","pickColumn":"Pick a column","none":"None","colEmail":"Email column","colName":"Name column","colCompany":"Company column","colPhone":"Phone column","colStatus":"Access status column","alsoData":"Also show this board's data in the portal","tieAsMember":"Tie as member source","addSelected":"Add selected ({n})","addResult":"Added {added}, skipped {skipped}.","addIssues":"Some people need attention:","emptyRoster":"No people with an email on this board yet.","statusActive":"Active","statusInvited":"Invited","statusSuspended":"Suspended","statusNotAdded":"Not added"},"sourcesIntro":"Every portal surface is a projection of something real in Redsis One — a board, a board view, a dashboard or a form. Nothing lives only in the portal.","srcColSurface":"Surface","srcColSource":"Source","srcColKind":"Kind","surface":{"home":"Home dashboard","tickets":"My tickets","progress":"Ticket progress","intake":"Open a ticket","warranties":"Warranties","repairs":"Repairs","library":"Technical library","announcements":"Announcements","chat":"Chat"},"srcKind":{"dashboard":"Dashboard","boardView":"Board view","projection":"Projection","statusMap":"Status map","form":"Form","feed":"Feed","chatSpace":"Chat space"},"srcName":{"home":"Portal dashboards","ticketsProjection":"FS tickets — client projection","progress":"Ticket stages → 6-step tape","intake":"Portal intake form","warranties":"Parts dispatches — client projection","repairs":"Depot tickets — client projection","library":"Published product docs","announcements":"Portal announcements","chat":"Native chat — Redsis-hosted"},"srcOpen":"Open ↗","srcConfigure":"Configure ↓","moreCount":"+{n} more","clientBindingTitle":"Client binding","clientBindingIntro":"Pin this portal to one field-service client. Every service surface — Home KPIs, My tickets, warranties, repairs, chat and notifications — then shows only that client’s data.","clientBindingNone":"Not bound — each member sees their own linked client","clientBindingHint":"Leave unbound to scope by each signed-in member’s own account. An unresolved binding shows no data — never another client’s.","clientBindingUnknown":"Current binding: {id}","bindingReadoutUnbound":"Unbound — each member is scoped by their own account.","bindingReadoutOk":"Resolves to {name}: {count} tickets.","bindingReadoutBroken":"Broken — key {key} matches no client, so this portal shows 0 tickets. Re-pick the client or clear the binding.","intakeTitle":"Intake form — fields","intakeIntro":"Choose which fields the client sees on \"Open a ticket\". Changes go live immediately.","requiredPill":"Required","intakeField":{"category":{"label":"Category","desc":"Routes the ticket to the right team"},"type":{"label":"Type","desc":"Incident / request / question"},"priority":{"label":"Priority","desc":"Client-declared urgency"},"site":{"label":"Branch / site","desc":"Pick from the client’s sites"},"product":{"label":"Product / equipment","desc":"Free text or picker"},"serial":{"label":"Serial number","desc":"Optional S/N field"},"problem":{"label":"Problem description","desc":"Free text + attachments"},"impact":{"label":"Operational impact","desc":"What it’s costing them"},"contact":{"label":"Contact","desc":"Who we call back"},"phone":{"label":"Phone","desc":"Callback number"},"attachments":{"label":"Attachments","desc":"Up to 50 MB per file"}},"statusMapTitle":"Status map","statusMapIntro":"How ticket stages map to the client’s 6-step progress tape. Give this portal its own step labels if needed.","stepN":"Step {n}","stepName":{"received":"Received","assigned":"Assigned","part_dispatched":"Part dispatched","on_site":"On site","resolved":"Resolved","confirmed":"Confirmed"},"fromStatuses":"From: {statuses}","confirmedExtra":"+ client receipt confirmation","labelOverridePlaceholder":"Custom label (optional)","widgetsTitle":"Home dashboard — widgets","widgetsIntro":"The client home is a dashboard view. Toggle or reorder widgets; each one reads the client’s own rows.","widget":{"kpi_cards":"KPI cards","recent_updates":"Recent updates","sla_summary":"SLA summary","service_team":"Service team"},"addWidget":"+ Add widget","lastWidgetNote":"At least one widget stays on.","moveUp":"Move up","moveDown":"Move down","liveTrackingTitle":"Live technician tracking","liveTrackingIntro":"Show the “technician on the way” map and ETA on a ticket while the assigned tech is en route. Turn off to hide it for this portal even when the platform feature is on.","signinMethodTitle":"Sign-in method","signinPassword":"Password + email invite","signinPasswordDesc":"Invite → activate → sign in. The default for client portals.","signinMagic":"Magic link","signinMagicDesc":"Passwordless sign-in by email link.","signinSso":"SSO (SAML / OIDC)","signinSsoDesc":"Enterprise identity providers.","comingSoon":"Coming soon","mfaLabel":"Require MFA","mfaDesc":"One-time code on new devices.","bindSessionLabel":"Bind sessions to device","bindSessionDesc":"Tie each session to its browser fingerprint; a stolen cookie replayed elsewhere is rejected.","sessionLengthLabel":"Session length","sessionHours8":"8 hours","sessionHours24":"24 hours","sessionDays7":"7 days","sessionDays14":"14 days","sessionHint":"Stored now — enforced at sign-in when the auth rollout lands.","allowedDomainsLabel":"Allowed email domains","allowedDomainsHint":"Comma-separated. Leave blank to allow any invited email. e.g. acme.com, acme.mx","subdomainLabel":"Subdomain","computedHostLabel":"Computed hostname","hostUnresolvedLong":"— (parent chain unresolved)","customDomainLabel":"Custom domain (optional)","customDomainHint":"A vanity hostname to map to this portal, e.g. portal.clientco.com. Without scheme or path.","dangerTitle":"Danger zone","suspendTitle":"Suspend portal","suspendDesc":"External users can’t sign in; data and config are kept. Reversible.","suspendCta":"Suspend","suspendConfirm":"Suspend this portal now?","suspendNote":"External sign-in stops immediately and live member sessions end now; reactivate any time.","reactivateCta":"Reactivate","suspendedBanner":"This portal is suspended — external users cannot sign in.","archiveTitle":"Archive portal","archiveDesc":"Hostname is released and sign-in disabled permanently. Audit history is retained.","archiveCta":"Archive portal","archiveTypeSlug":"Type the slug \"{slug}\" to confirm","archiveConfirm":"Archive this portal?","archiveNote":"Soft delete — data is retained and it can be restored from General.","archivedBanner":"This portal is archived. Its users can no longer reach it. To bring it back, set its status in the General tab.","archivedOn":"Archived {date}","needManage":"You need the portals.manage permission to change this.","designer":{"centerTitle":"Live preview","techCenterTitle":"Tech app preview","previewAs":"Previewing as","viewAs":"View as","viewAsDesign":"Design (no member)","designPill":"Design preview","refreshNow":"Refresh","readOnlyPill":"Read-only preview","previewOff":"Live preview is turned off (feature flag portal_admin_preview).","noActiveMembers":"Invite a member from the People tab to see the live preview here.","starting":"Starting the live preview…","previewLaunchError":"Could not start the live preview.","iframeTitle":"Live portal preview","pagesIntro":"Content pages published to this portal.","pagesEmpty":"No pages yet.","pagesNew":"New page","pagesEdit":"Edit","pagesEditing":"Editing \"{title}\"","pagesCancel":"Cancel","pagesPublished":"Published","pagesDraft":"Draft","inviteSlotTitle":"Invite users","inviteSlotBody":"The rich invite panel from the invite lane isn’t on this branch yet — this is a placeholder.","inviteSlotLink":"Open Manage people & invites →","publishSlotTitle":"Publish / Go live","publishSlotBody":"The rich publish panel from the publish lane isn’t on this branch yet — this is a placeholder.","publishSlotLink":"Open Publish updates →"},"chatRoster":{"show":"Participants","hide":"Hide participants","kindStaff":"Staff","kindClient":"Client","kindTech":"Tech","kindExternal":"External","removed":"Removed","remove":"Remove","removeConfirm":"Confirm remove","cancel":"Cancel","techReattachNote":"Techs re-attach automatically on their next visit while they still have open tickets for this client.","addTitle":"Add clients","addCta":"Add selected","addNone":"All active portal clients are already on this conversation.","empty":"No participants.","loadError":"Could not load participants."},"goLive":{"cardTitle":"Go live on subdomain","cardDesc":"Publishing registers this hostname with Cloudflare for SaaS, which issues and auto-renews its edge TLS certificate. Registration is idempotent — publish again any time to re-check.","publish":"Publish / go live","publishing":"Publishing…","refresh":"Refresh status","refreshing":"Refreshing…","configureZones":"Configure provisioning zones","configuring":"Saving…","stateNotConfigured":"Provisioning not configured","stateReady":"Ready to publish","stateNotRegistered":"Not registered","statePending":"Pending validation","stateAwaitingBackbone":"Awaiting Cloudflare-for-SaaS backbone","stateActive":"Active — live","stateError":"Error","hostnameStatusLabel":"Hostname status","certStatusLabel":"Certificate (SSL)","dvRecordsTitle":"Publish these DNS record(s) to validate the certificate:","dvType":"Type","dvName":"Name","dvValue":"Value","notConfiguredTokenMissing":"Cloudflare provisioning isn’t configured (API token + zone ids).","notConfiguredZoneMissing":"A Cloudflare zone id for this portal’s root isn’t set yet.","notConfiguredHint":"Portal creation and this page keep working regardless — publishing is simply a no-op until it’s configured.","needConfigurePermission":"Set the Cloudflare zone ids in Setup Center (needs the “Configure platform” permission).","zoneApplied":"set","zoneAlreadySet":"already set","wildcardNote":"Internal redsis.app hosts are covered by an automatic wildcard certificate — custom-hostname registration is optional for them.","draftStatusNote":"Note: this portal is {status}. Set its status to Active in the General tab so its users can sign in once the hostname is live.","notProvisionableHint":"This portal has no resolvable, provisionable hostname yet.","cnameLabel":"Proxied CNAME to add","publishOptionalHint":"Optional for redsis.app hosts — they’re served by the wildcard certificate plus the CNAME above. Publishing registers a Cloudflare-for-SaaS custom hostname too, which these hosts don’t require.","infraNoteTitle":"One-time infrastructure step still required","infraNoteCustomHostname":"Before any subdomain can actually serve traffic, Cloudflare-for-SaaS must be enabled on the {zone} zone (with the app set as fallback origin) and *.{zone} repointed off the retired Vercel target. This is a one-time host-owner step — publishing here only registers the hostname.","infraNoteWildcardTitle":"DNS step to serve this subdomain","infraNoteWildcard":"This host is covered by the automatic *.redsis.app wildcard certificate, so no Cloudflare-for-SaaS entitlement is needed. To serve it, add a proxied CNAME {host} → {origin} in the redsis.app zone. Publishing below (Cloudflare for SaaS) is optional for these hosts.","loadError":"Could not load go-live status.","disabledNote":"This tool is currently turned off for your account.","probeSectionLabel":"Live host check","probeServing":"Resolves & serves (HTTP {status})","probeServingNotApp":"The host returned 200 but not the expected app health response — verify it points at RedsisOne, not a placeholder page.","probeReachableError":"Reachable but not serving yet (HTTP {status})","probeUnreachable":"Not resolving yet","probeSkipped":"Not checked (no resolvable hostname).","probeAwaitingDns":"The hostname does not resolve or serve yet — awaiting DNS / certificate propagation.","probeAwaitingBackboneHint":"The edge responded but did not serve the app — usually the Cloudflare-for-SaaS backbone (fallback origin) isn’t wired yet.","probeReasonTimeout":"The request timed out before the host responded.","probeReasonDns":"The hostname could not be resolved (no DNS record yet).","probeReasonRefused":"The connection was refused (no origin serving this host yet).","probeReasonTls":"The TLS certificate is not valid/active for this host yet.","probeReasonNetwork":"The host could not be reached over the network.","probeUrlLabel":"Probed","probeLatency":"took {ms} ms","cfAutomationTitle":"Cloudflare routing","cfStepDnsLabel":"DNS record (proxied CNAME)","cfStepTunnelLabel":"Tunnel route","cfStepProvisioned":"Provisioned","cfStepExists":"Already set","cfStepUpdated":"Corrected","cfStepNotConfigured":"Not configured","cfStepError":"Failed","cfStepPending":"Not run yet","cfAutomationHint":"Publishing provisions the DNS record and the tunnel route automatically — no manual step.","cfRetryHint":"A step failed (see the message). Fix the cause, then click Publish to retry — re-running is safe.","cfConfigNeededTitle":"Tunnel automation needs configuration","cfConfigNeededHint":"Set these in Setup Center before the tunnel route can be provisioned:","cfConfigKeyOptional":"(optional)"},"builder":{"groups":{"overview":"Overview","design":"Design","content":"Content","data":"Data","people":"People","operate":"Operate"},"previewAction":"Preview","publishAction":"Publish","showPreview":"Show preview","hidePreview":"Hide preview","previewCollapsed":"The live preview is hidden.","pagesTitle":"Pages","formsTitle":"Forms","formsIntro":"Custom intake forms beyond tickets — build and share client-facing forms.","formsManage":"Manage forms →","announcementsTitle":"Announcements","announcementsIntro":"Post updates and service notes your client reads inside their portal.","announcementsManage":"Manage announcements →","modulesTitle":"Modules","boardsTitle":"Boards & data sources","dashboardsTitle":"Dashboards","dashboardsIntro":"The client home dashboard and its widgets.","dashboardsManage":"Edit dashboards →","inviteTitle":"Invite a user","membersTitle":"Members","membersIntro":"Everyone with access to this portal, and their invite status.","membersManage":"Manage members & invites →","signinTitle":"Sign-in","settingsTitle":"General settings","domainTitle":"Domain & hostname","usageTitle":"Usage","usageIntro":"Live presence, activity, and adoption for this portal.","usageManage":"Open usage dashboard →","usageOff":"The usage dashboard is turned off. Ask an admin to enable “Portal usage dashboard” to see live presence and adoption here.","auditTitle":"Audit log","auditIntro":"Every change made to this portal, with who and when.","auditManage":"Open full audit log →","dangerTitle":"Danger zone","publishTitle":"Publish","publishIntro":"Review what is currently in draft before it goes live. For now, publish pages and announcements from their own surfaces — full review & rollback is coming.","publishDraftPagesTitle":"Pages in draft","publishNoDrafts":"Nothing is waiting to publish — every page is live.","publishOpenPage":"Open page →","publishDraftBadge":"Draft","publishAllLive":"Everything is live","inspectorLabel":"Portal options","formFactor":{"label":"Portal type","web":"Web","webDesktop":"Web / Desktop","mobile":"Mobile"}},"announcements":{"eyebrow":"Announcements","title":"Announcements — {name}","description":"Post updates and service notes into this portal. The client reads only what you publish here.","newTitle":"New announcement","fieldTitle":"Title","fieldTitlePlaceholder":"e.g. Your order has shipped","fieldBody":"Body","fieldBodyPlaceholder":"Write the announcement the client will see…","post":"Post announcement","posting":"Posting…","posted":"Announcement posted — it’s now visible to this portal’s users.","removed":"Announcement removed.","needManage":"You can view what’s posted here, but posting requires the “Manage portals” permission.","listTitle":"Posted announcements ({n})","empty":"Nothing posted to this portal yet.","badge":"Announcement","remove":"Remove","removeConfirm":"Remove this announcement?","removeConfirmCta":"Remove","removeCancel":"Cancel","removing":"Removing…","fallbackTitle":"Announcement"},"library":{"title":"Technical library — {name}","description":"Curate the product library and publish documents into this portal. The client sees only cleared, published assets.","addTitle":"Add an asset","sourceFile":"Upload file","sourceLink":"External link","sourceDoc":"Internal document","fieldProductLine":"Product line","fieldProductLinePlaceholder":"e.g. RB-2000 series","fieldTitle":"Title","fieldTitlePlaceholder":"e.g. Installation manual","fieldKind":"Type","fieldFile":"File (max 50 MB)","fieldUrl":"URL","fieldUrlPlaceholder":"https://…","fieldDoc":"Internal document","fieldDocPlaceholder":"Select a document…","fieldDescription":"Description","fieldDescriptionPlaceholder":"Optional — a short note shown to the client.","clearedLabel":"Cleared for clients — publish to this portal now","add":"Add asset","adding":"Adding…","added":"Asset added.","needManage":"You can view the library, but managing it requires the “Manage portals” permission.","listTitle":"Catalogue ({n})","empty":"No assets yet. Add manuals, drivers, firmware or guides above.","sourceFileBadge":"File","sourceLinkBadge":"Link","sourceDocBadge":"Doc","clearedBadge":"Cleared","notClearedBadge":"Not cleared","publishedBadge":"Published here","publish":"Publish to this portal","unpublish":"Unpublish","publishNeedsCleared":"Clear the asset for clients before publishing.","clear":"Clear for clients","unclear":"Un-clear","archive":"Archive","archiveConfirm":"Archive this asset? It will be removed from every portal.","archiveConfirmCta":"Archive","archiveCancel":"Cancel","kinds":{"manual":"Manual","driver":"Driver","firmware":"Firmware","installer":"Installer","sop":"SOP","tutorial":"Tutorial","video":"Video","document":"Document"}},"boardsCtl":{"unassignWorkspace":"Unassign workspace","revoke":"Revoke","saveScope":"Save scope","grantBoard":"Grant board","assignWorkspace":"Assign workspace","confirm":"Confirm","cancel":"Cancel","working":"Working…"}},"externalOffboard":{"offboardCta":"Offboard","offboardConfirm":"Offboard {name}?","offboardNote":"Sign-in is disabled, live sessions end now, and chat access is revoked. Chat history is kept. Re-enable restores sign-in only.","offboardDone":"Offboarded. Sessions ended: {sessions} · Chat memberships revoked: {chat}.","reenableCta":"Re-enable","reenableConfirm":"Re-enable {name}?","reenableNote":"Restores sign-in and portal membership. Revoked chat memberships stay revoked — they return only through normal grants.","reenableDone":"Re-enabled. Chat access returns only through normal grants.","offboardedBadge":"Offboarded","working":"Working…","genericError":"Something went wrong. Please try again.","cancel":"Cancel","techOffboardCta":"Offboard tech login","techOffboardConfirm":"Offboard this tech login?","techOffboardNote":"Blocks tech-app sign-in, ends live sessions and revokes chat access (history kept). Re-provision with \"Create tech login\".","techOffboardDone":"Tech login offboarded. Sessions ended: {sessions} · Chat memberships revoked: {chat}.","techOffboardedPill":"Tech login off","techEnabledPill":"Tech app"},"techActivation":{"heading":"Activate the app","intro":"Enter the 6-digit code we sent you to unlock the app.","introAdmin":"Ask your coordinator for your activation code, then enter it below to unlock the app.","codeLabel":"Activation code","codePlaceholder":"6-digit code","activate":"Activate","activating":"Activating…","resendTitle":"Didn’t get a code?","resendSms":"Text me a code","resendEmail":"Email me a code","resending":"Sending…","resentNotice":"A new code is on its way.","waitingForAdmin":"Your coordinator is generating a code for you. Enter it here once you have it.","signOut":"Sign out","errInvalid":"That code is incorrect. Please check and try again.","errExpired":"Your code has expired. Request a new one.","errTooMany":"Too many incorrect attempts. Request a new code.","errNoChallenge":"No active code. Request a new one or ask your coordinator.","errNotSent":"We couldn’t send a code just now. Please try again.","errCooldown":"Please wait a moment before requesting another code.","errMaxSends":"You’ve requested too many codes. Please try again later.","errCapped":"Too many attempts. Please contact your coordinator.","errGeneric":"Something went wrong. Please try again.","deliveryLabel":"Send activation code by","methodSms":"SMS","methodEmail":"Email","methodBoth":"SMS + Email","methodSkip":"No code now (admin generates)","createdSms":"Login created. Code texted to the tech.","createdEmail":"Login created. Code emailed to the tech.","createdBoth":"Login created. Code texted and emailed to the tech.","createdSkip":"Login created (pending). Generate a code below and hand it to the tech.","createdUnsent":"Login created (pending), but the code could not be delivered — generate one below or ask the tech to resend.","generateCode":"Generate activation code","generating":"Generating…","codeReady":"Activation code (share once):","pendingPill":"Activation pending","lastError":"Last delivery error:","grantNeedsEmail":"Add an email first — a tech login needs one.","inviteTabTitle":"Tech access is granted on the roster","inviteTabWhere":"Find this technician’s row on the Service Providers list and use “Create tech login”. That is the only path that links their record to a login, so they can see their tickets.","inviteTabPortalBuilderNote":"Adding someone in the Portal Builder (portal → People) creates their portal person, but it does not link this record — they would sign in and see no tickets."},"techInternalActivation":{"open":"Activate Redsis One user","panelTitle":"Activate a Redsis One user","panelHelp":"Give a Redsis One staff member TechOne access. They sign in with their existing Redsis One login — no separate password to hand over.","selectPlaceholder":"Select a Redsis One user…","activateCta":"Activate","activating":"Activating…","rowCta":"Activate Redsis One access","noUsers":"Every active Redsis One user is already linked to a service provider.","done":"Activated — they can open TechOne with their Redsis One login.","genericError":"Could not activate this user. Please try again.","cancel":"Cancel","adoptedExisting":"Linked the existing service provider record: {name}","blockedInactive":"This email already has a service provider record, \"{name}\", but it is inactive. Reactivate it first, then activate again.","blockedProvisioning":"This email already has a service provider record, \"{name}\", that is still a pending access request. Finish or discard that request first."},"techRequests":{"emailedSignIn":"We emailed the tech instructions for signing in.","emailNotSent":"We couldn't email the tech — share the sign-in details below with them directly.","title":"Tech Requests","metaTitle":"Tech Requests · Field Service","noPending":"No pending requests","awaitingOne":"1 request awaiting review","awaitingMany":"{n} requests awaiting review","emptyBody":"No tech access requests are waiting on you right now.","typeInternal":"Redsis employee","typeExternal":"External contractor","approveFailed":"Could not approve the request.","spDetailsInvalid":"This tech's details can't be saved: a name, email or phone is missing or too long, or there are more than 50 skills or regions (80 characters each). Fix them and try again.","spCreateRefused":"You can only add a tech from an access request you are approving right now.","rejectFailed":"Could not reject the request.","addedToPool":"{name} added to the tech pool — login ready.","tempPassword":"Temp password (share once, won't be shown again):","alreadyHadCredentials":"This email already had working credentials — only the link was updated.","done":"Done","reject":"Reject","approve":"Approve","approving":"Approving…","colTech":"Tech","colType":"Type","colPhone":"Phone","colNote":"Note","colRequested":"Requested","colAction":"Action"},"navEditor":{"pageTitle":"Menu Layout","pageDescription":"Arrange the left menu platform-wide — set where each icon lives by default (in a hub or on its own), reorder hubs and anchors, and rename or hide any entry.","flagOffTitle":"The editable menu is off.","flagOffBody":"Arranging is disabled — this is a read-only preview of the current menu. Turn on the nav_editor flag to start editing.","flagOffLink":"Apps → Feature Flags","saveFailed":"Save failed.","hubs":"Hubs","topLevel":"Top level (outside hubs)","topLevelHint":"Icons that live on their own, not inside a hub.","topLevelEmpty":"Nothing here yet — drag a module out of a hub, or use its “Move to → Top level”.","topAnchors":"Top anchors","hubEmpty":"No modules — drag one here or use a module’s “Move to”.","moduleCount":"{count} module","moduleCountPlural":"{count} modules","linkTag":"link","moveHubUp":"Move hub up","moveHubDown":"Move hub down","moveUp":"Move up","moveDown":"Move down","moveTo":"Move to","show":"Show","hide":"Hide","showTitle":"Show in the default menu","hideTitle":"Hide from the default menu","resetToDefault":"Reset to default","clickToRename":"Click to rename","editMenuLabel":"Edit menu layout","editMenuTitle":"Edit menu layout (admin)","selectHint":"Click an icon to select it (Shift for a range, Cmd/Ctrl to add). Then use “Move to” or drag the selection onto a hub or Top level.","selectedCount":"{count} selected","chooseDestination":"Move to…","clearSelection":"Clear selection","selectAria":"Select {name}","changeIcon":"Change icon for {name}","iconSearchPlaceholder":"Search icons…","useCodeIcon":"Use code icon","iconNoResults":"No matching icons.","previewAs":"Preview as","previewCurrent":"My current view","previewBannerTitle":"Previewing as {role} — read-only.","previewBannerBody":"This is what this role sees. Editing is paused; saving still writes the platform default (per-role layouts come later).","previewEmpty":"This role sees no hubs or modules.","exportBtn":"Export","importBtn":"Import","importInvalidJson":"That file is not valid JSON.","importFailed":"Import failed.","importSummary":"Applied {modulesApplied} module + {navApplied} menu rows; skipped {modulesSkipped} module + {navSkipped} menu rows.","resetAllBtn":"Reset entire menu","resetAllConfirm":"Clear ALL menu overrides?","resetAllYes":"Yes, reset","cancel":"Cancel","resetAllDone":"Cleared {modules} module + {nav} menu overrides — back to code default."},"menuScopeLayout":{"pageTitle":"Menu Layout by Role & Department","pageDescription":"Set the default left menu each role or department starts from — reorder, hide, rename, and (for modules) re-icon any entry. Individual users can still personalize on top.","flagOffTitle":"Per-scope menu layouts are off.","flagOffBody":"This is a read-only preview. Turn on the menu_scope_layouts flag (Apps → Feature Flags) to start editing.","saveFailed":"Save failed.","scopePickerLabel":"Editing menu for","scopePickerPlaceholder":"Choose a role or department…","rolesGroup":"Roles","departmentsGroup":"Departments","externalTag":"(external)","resetScope":"Reset this scope","resetScopeTitle":"Clear every override for this role/department","pickScopeHint":"Pick a role or department above to set its default menu.","editingHint":"Setting the default menu for {scope}. Blank fields keep the platform default.","hubsSection":"Hubs","modulesSection":"Modules","anchorsSection":"Top anchors","staticsSection":"Static links","hiddenByDefaultTag":"hidden by default","renameAria":"Rename for this scope","orderAria":"Order for this scope","iconPlaceholder":"icon name","iconAria":"Icon override for this scope","showTitle":"Show in this scope’s default menu","hideTitle":"Hide from this scope’s default menu","hidden":"Hidden","visible":"Visible","resetEntryTitle":"Reset this entry to the platform default"},"menuCustomLinks":{"pageTitle":"Menu Custom Links","pageDescription":"Add your own left-menu entries — a label, an internal route, and an icon. They appear in the menu alongside modules and can still be personalized by each user.","flagOffTitle":"Menu custom links are off.","flagOffBody":"This is a read-only preview. Turn on the menu_custom_links flag (Apps → Feature Flags) to add and edit links.","internalOnlyHint":"Links point to internal routes inside Redsis One (paths that start with “/”). External web addresses are not supported yet.","addLink":"Add link","addTitle":"New custom link","editTitle":"Edit custom link","cancel":"Cancel","fieldLabel":"Label","fieldLabelPlaceholder":"e.g. Monthly Reports","fieldHref":"Route","fieldHrefHint":"An internal path starting with “/”, e.g. /reports/monthly.","fieldIcon":"Icon","fieldIconPlaceholder":"Lucide icon name, e.g. FileText","fieldHub":"Placement","fieldHubHint":"v1 renders every custom link at the top level; the chosen hub is saved for a future update.","fieldOrder":"Order","fieldAdminOnly":"Admin only","topLevel":"Top level","saveChanges":"Save changes","createLink":"Create link","empty":"No custom links yet. Add one to show it in the left menu.","adminOnlyTag":"Admin","edit":"Edit","delete":"Delete","errLabelRequired":"Enter a label.","errHrefInternal":"Enter an internal route that starts with “/”.","errIconUnknown":"That icon name isn’t in the icon set."},"personalMenu":{"title":"My menu","hint":"Reorder, hide, rename or re-group the left-menu entries. This applies to your account only — everyone else keeps the default menu.","moveUp":"Move up","moveDown":"Move down","hide":"Hide","show":"Show","hideTitle":"Hide from my menu","showTitle":"Show in my menu","hiddenBadge":"Hidden","renameAria":"Rename {name}","renamePlaceholder":"Custom name","sectionAria":"Section for {name}","sectionDefault":"Default section","resetAll":"Reset my menu","resetAllTitle":"Clear every personal change and go back to the default menu","empty":"There are no menu entries to personalize yet.","saveFailed":"Could not save — please try again.","ownerNote":"As the Owner you always see every entry, so hiding one here changes nothing for you — order, name and section still apply."},"techContext":{"specialOrderToggle":"Special order / non-stock part","specialOrderDescriptionLabel":"What do you need?","specialOrderDescriptionPlaceholder":"Describe the part — make, model, spec…","specialOrderVendorLabel":"Suggested vendor (optional)","specialOrderVendorPlaceholder":"Where could we source it?","specialOrderDescribeRequired":"Describe the special-order part first.","partSkuOptionalLabel":"Part number (optional)","quickReplyLabel":"Quick replies","pmChecklistTitle":"Maintenance checklist","pmChecklistNote":"Steps for this scheduled visit — record the work in the closeout.","accountTitle":"Customer & account","accountContractLabel":"Contract","accountNoContract":"No active contract on file for this customer.","accountSlaLabel":"SLA:","accountContactLabel":"Contact","accountTermsLabel":"Terms to know","accountTermPricingRules":"Pricing rules","accountTermPartsPolicy":"Parts policy","accountTermOther":"Special term","accountClientBusiness":"Business","accountClientResidential":"Residential","accountStatusPrefix":"Status:","meterLegend":"Meter readings","meterLabelPlaceholder":"What did you measure?","meterValuePlaceholder":"Reading","meterUnitPlaceholder":"Unit","meterMinPlaceholder":"Min","meterMaxPlaceholder":"Max","meterAdd":"Add reading","meterAdding":"Saving…","meterAddRequired":"Enter a label and a reading.","meterPass":"Pass","meterFail":"Fail","meterNotEvaluated":"Logged","readingsTitle":"Captured readings","readingsRangePrefix":"Range","catalogTitle":"Catalog lookup","catalogSearchPlaceholder":"Search a part number or name…","catalogSearchButton":"Search","catalogSearching":"Searching…","catalogNotConfigured":"The parts catalog is not connected yet.","catalogNoResults":"No parts matched that search.","catalogBrandLabel":"Brand:","catalogWhereUsed":"Used on","catalogCompatibleModels":"Compatible models","catalogOnHand":"On hand","catalogMasked":"Locations only","catalogNoStock":"No stock on record.","catalogBack":"← Back to results","catalogDetailError":"Could not open that product.","catalogHint":"Look up a part before you request it."},"adminUserDetail":{"eyebrow":"System / People & Access / Users · Detail","noDepartment":"— No department —","additionalRoles":{"title":"Additional Roles","introBefore":"Give this user more than one role so permissions mix and match. Their primary role (set above) always applies; anything ticked here is added on top, and the user gets the","combined":"combined","introAfter":"permissions of every role. Effective tier follows the highest role held.","empty":"No other roles are available to add for this user’s realm.","saving":"Saving…","saved":"Saved","save":"Save additional roles","unsaved":"Unsaved changes","saveFailed":"Save failed."}},"boardApps":{"availableTitle":"Available Apps","availableHint":"One-click templates that spin up a fresh workspace populated with boards, groups, columns and statuses for a workflow.","noApps":"No apps registered yet. Built-ins seed on first visit; reload if this is empty.","installedTitle":"Installed","installedHint":"Each install creates its own workspace with isolated data. Same App can be installed many times (e.g. one per team).","noInstalls":"Nothing installed yet. Click an App above to create the first instance.","pickTargetWorkspace":"Pick the target workspace.","notInstalled":"Not installed","install":"Install","modeNewWorkspace":"New workspace","modeExistingWorkspace":"Existing workspace","modeExistingBoard":"Existing board","loadingWorkspaces":"Loading workspaces…","pickWorkspace":"Pick the workspace…","instanceNamePlaceholder":"Instance name (e.g. Sales)","installedOn":"Installed {date}","open":"Open","uninstall":"Uninstall","resultOk":"ok","resultFailed":"failed","installCount":{"one":"{n} install","other":"{n} installs"}},"keystoneProvisioner":{"title":"Service Platform · Keystone provisioner","desc":"One-time in-place cutover for the three Service workspaces (Masters · Supply-Chain · Project-Template). Archives the empty column-less shell boards and installs the real blueprints into the same workspaces, then wires the Project cross-workspace connects. Start with a dry run.","dryRun":"Dry run","running":"Running…","runCutover":"Run cutover…","confirmPrompt":"Archive shells + install for real?","confirm":"Confirm","cancel":"Cancel","force":"Force (archive even boards that hold data)","cutoverResult":"Cutover result","dryRunResult":"Dry run — nothing was changed","colWorkspace":"Workspace","colResult":"Result","colShells":"Shells","colConnects":"Connects","colNote":"Note"},"microsoftGraphAccess":{"adminNeeded":"An admin needs to grant access","teamsAdminNeeded":"An admin must grant Teams access in Microsoft Entra."},"fsKit":{"status":{"new":"New","accepted":"Accepted","dispatched":"Dispatched","en_route":"En route","on_site":"On site","parts_pending":"Parts pending","on_hold":"On hold","completed":"Completed","cancelled":"Cancelled","closed":"Closed","pendingReview":"Pending review"},"milestone":{"met":"Met","pending":"Pending","breached":"Breached"},"band":{"met":"Met","breached":"Breached","paused":"Paused","critical":"Critical","warning":"At risk","ok":"On track","none":"No SLA"},"nextStep":{"atRiskPrefix":"Breaching soon — ","assign":{"body":"Assign a technician to start the SLA clock.","cta":"Assign technician"},"complete_intake":{"body":"With no site or contract this ticket never starts the SLA clock, cannot be placed on the map for distance-based dispatch, and site-scoped rules never match it. Complete it before assigning.","cta":"Complete intake"},"dispatch":{"body":"Build the route and set an ETA, then hand to the tech.","cta":"Open in Dispatch"},"track":{"body":"Tech is en route — watch the arrival clock.","cta":"Track on map"},"resolve":{"body":"Tech on site — capture findings and resolve.","cta":"Open Proof of Repair"},"approve_part":{"body":"Approve the parts request to keep the fix moving.","cta":"Approve part"},"request_part":{"body":"On hold with no parts request. Request the part or resume.","cta":"Request part"},"follow_up":{"body":"Waiting on client authorization — the clock is paused. Follow up.","cta":"Log follow-up"},"close":{"body":"Work done. Review the Proof of Repair and close the ticket.","cta":"Close ticket"},"reopen":{"body":"Ticket closed. Reopen it if the issue recurs.","cta":"Reopen"},"closed":{"body":"Ticket closed — nothing more to do.","cta":""},"rejected":{"body":"Ticket rejected.","cta":""},"none":{"body":"No action needed.","cta":""},"blocked":{"needs_por":"Capture a signed Proof of Repair on the POR tab first."}}},"fsDashboards":{"title":"Operations dashboard","subtitle":"Live results across SLA, volumes, techs and contracts.","windowToday":"Today","window7d":"7d","window30d":"30d","sectionOverview":"Overview","sectionSla":"SLA","sectionVolumes":"Volumes & Aging","sectionScorecard":"Tech Scorecard","sectionContracts":"Contracts","allClear":"All clear — no SLA breaches and nothing breaching in the next 2 hours.","breachingSoon":"tickets breaching in < 2h","openAtRiskQueue":"Open at-risk queue","contractsEmpty":"No active contracts. Contracts are created in Setup & Systems.","noActivity":"No service activity in this window.","loadErrorTitle":"The dashboard couldn’t load","loadErrorBody":"The service metrics couldn’t be fetched. This is usually transient — try again.","retry":"Try again","eyebrow":"Service Hub","unitPercent":"%","unitHour":"h","unitMin":"m","windowLabel":"Reporting period","attentionTitle":"Needs your attention","attentionBreachedLabel":"already breached","attentionOpenPrefix":"Across","attentionOpenSuffix":"open tickets in flight.","attentionAllClearTitle":"All clear — nothing is breaching","kpiSlaCompliance":"SLA compliance","kpiResolutionRate":"Resolution rate","kpiMttr":"Mean time to resolve","kpiFtf":"First-time fix","kpiOpen":"Open tickets","kpiReceived":"Received","kpiResolved":"Resolved","kpiReopen":"Reopen rate","deltaVsPrior":"vs prior period","metHint":"met","resolvedHint":"resolved","ftfHint":"first-time","reopenHint":"reopened","slaArrival":"Arrival SLA","slaResolution":"Resolution SLA","slaOverall":"Overall","agingTitle":"Aging — open work","agingEmpty":"No open tickets — the queue is clear.","scorecardEmptyTitle":"No completions in this period","scorecardEmptyBody":"Once technicians resolve tickets in this window, their timings and first-time-fix rates appear here.","colTech":"Technician","colCompletions":"Done","colMttr":"MTTR","colFtf":"FTF","contractsEmptyTitle":"No active contracts","colContract":"Contract","colClient":"Client","colSla":"SLA","colResolution":"Resolved","colOpen":"Open","colAtRisk":"At risk","degradedTitle":"Some numbers are approximate","degradedCompletion":"Completion time falls back to last-updated for tickets with no recorded service report.","degradedVisits":"First-time-fix is derived from status events, not service reports.","loading":"Loading the numbers…","filtersTitle":"Filters","filtersToggle":{"one":"Filters ({n} active)","other":"Filters ({n} active)"},"filtersToggleNone":"Filters","filterWindow":"Period","windowCustom":"Custom","filterFrom":"From","filterTo":"To","filterContract":"Contract","filterClient":"Client","filterAll":"All","filterClientFixed":"Set by the chosen contract","filterApply":"Apply","filterClear":"Clear filters","noticeInvalidRange":"That date range isn’t valid; showing the last 7 days.","noticeForeignContract":"That contract isn’t one of yours; showing all of yours.","noticeForeignClient":"That client isn’t one of yours; showing all of yours.","emptyScopeTitle":"You don’t coordinate any contract yet","emptyScopeBody":"Ask an administrator to add you as a coordinator on the contract’s page.","emptyRange":"No tickets came in during this range.","sectionSlaLegs":"SLA in this period","kpiSlaResponse":"Response SLA","kpiSlaResolution":"Resolution SLA","kpiSlaArrival":"Arrival SLA","slaNoBase":"No tickets with a deadline in this range","slaOnTimeHint":"{met}/{total} on time","slaHelp":"Response and resolution are measured in the business hours of each contract’s SLA tier.","slaHelpLink":"See SLA tiers","sectionVolumeTiles":"Volumes","sectionDaily":"Tickets per day","sectionWeekly":"Tickets per week","dailyPartial":"partial","dailyWeekOf":"Week of {date}","dailyTz":"Days in the {tz} time zone","dailyClipped":"Off the scale: {n}","sectionOpenNow":"Open now","openNowHint":"Current status — it doesn’t depend on the date range.","openNowTotal":{"one":"{n} open ticket","other":"{n} open tickets"},"statusPendingReview":"To review","sectionTechs":"Performance by technician","colAttentions":"Jobs","colAttentionTime":"Service time (avg.)","colAttentionTimeHint":"From receipt to resolution, on average.","colArrivalTime":"Arrival (avg.)","colTravelTime":"Travel (median)","colCsat":"CSAT (avg.)","travelTrips":{"one":"{n} trip","other":"{n} trips"},"csatResponses":{"one":"{n} response","other":"{n} responses"},"techsFullLink":"See full performance","sectionParts":"Parts requests · open now","partsTotal":{"one":"{n} open","other":"{n} open"},"partsShown":"Showing {shown} of {total}.","colTicket":"Ticket","colSku":"SKU","colQty":"Qty.","colAge":"Age","partsTicketClosed":"Ticket already closed","partsEmpty":"There are no open parts requests.","partsQueueLink":"See the parts queue","updatedAt":"Updated at {time}","openNowReview":"{n} to review","colSlaClosed":"SLA arrival + resolution (closed)","colSlaReceived":"SLA arrival + resolution (received)","partsQueueScopeNote":"The queue shows the requests of the projects you can see. It doesn’t apply the contract or client chosen here.","filterRangeInvalid":"Pick «From» and «To»: «From» can’t be after «To», «To» can’t be after today, and the range is at most 90 days."},"fsDispatch":{"title":"Dispatch","subtitle":"Plan the day — build a route, set ETAs, track live.","unassigned":"Unassigned tickets","dragToTech":"Drag a ticket to a technician to start building a route.","build":"Build","track":"Track","replay":"Replay","empty":"No open tickets to dispatch — the queue is clear.","loadError":"Couldn’t load Dispatch. Retry, and if it persists check Setup & Systems.","retry":"Retry","selectToStart":"Select a ticket on the map, then Build a route.","deepLinkBuilding":"Dispatching {ticket} — pick a technician to build the route.","deepLinkNotFound":"That ticket isn’t on the dispatch map — it may be outside your connected boards, already resolved, or missing a location."},"fsAdminSweep":{"meta":{"setup":"Setup & Systems · Service Hub","calendar":"Calendar · Field Service","providers":"Service providers · Field Service","boardEditor":"Board editor · Service Hub","systems":"Service systems health · Service Hub","dashboards":"Operations dashboard · Service Hub"},"slaAssignment":{"source":{"contract_term":"Explicit SLA term","tier":"Assigned tier","system_default":"System default"},"hint":{"contract_term":"An «SLA» term on this contract","tier":"The contract's SLA tier, by severity","system_default":"Platform fallback when neither is set"},"explicitWins":"An explicit SLA contract term (written in the contract editor) always wins over the tier."},"calendars":{"windowOpenAria":"{day} window {n} opens","windowCloseAria":"{day} window {n} closes","removeWindowAria":"Remove {day} window {n}","holidayAria":"Holiday {n}","removeHolidayAria":"Remove holiday {n}","errInvalidSchedule":"Check the hours: a time is not valid (use HH:MM between 00:00 and 23:59, opening before closing).","errInvalidHoliday":"A holiday date does not exist (use a real YYYY-MM-DD date).","dayShort":{"mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat","sun":"Sun"},"dayLong":{"mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday","sun":"Sunday"},"noHours":"No open hours set","archived":"Archived","active":"Active","inactive":"Inactive","addHoursFor":"Add hours for {day}"},"routeEditor":{"addStopTrigger":"+ Add stop","addStop":"Add stop","reorder":"Reorder","reoptimize":"Re-optimize","publish":"Publish","unpublishTrigger":"Unpublish…","failed":"Something went wrong. Try again.","addTitle":"Add a stop","addHelp":"Unassigned tickets. Click a row to add it as a new stop at the end of {sp}'s route; the ticket is assigned to {sp} and moves to dispatched.","noUnassigned":"No unassigned tickets right now.","adding":"Adding…","reasonRequired":"A reason is required.","reorderTitle":"Reorder stops","reorderHelp":"Use ▲ ▼ to move stops, then apply. Completed and on-site stops cannot be passed.","moveUp":"Move up","moveDown":"Move down","removeStop":"Remove stop","removeReason":"Why are you removing this stop?","remove":"Remove","cancel":"Cancel","applying":"Applying…","applyOrder":"Apply new order","noChanges":"No changes","reoptimizeTitle":"Re-optimize route","reoptimizeHelp":"Visits the stops with the tightest SLA first, then the nearest one each time. Drive times are an estimate at about 40 km/h.","totalDrive":"Total drive","totalService":"Total service","minutes":"{n} min","slaMisses":{"one":"{n} stop would miss its SLA in this order:","other":"{n} stops would miss their SLA in this order:"},"slip":"{title} — {n} min past the deadline","proposed":"Proposed order","alreadyOptimal":"The order is already optimal","unpublishTitle":"Unpublish route","unpublishHelp":"Unpublishing returns the route to draft. It is blocked if a stop has already started ({sp} en route or on site); cancel individual stops instead.","reason":"Reason","unpublishConfirm":"Click to confirm","publishTitle":"Publish route","publishHelp":"Publishing sends this route to {sp}'s phone as their day plan. Its status changes from draft to published.","stopsCount":"Stops: {n}","publishing":"Publishing…","addStopsFirst":"Add stops first","publishSubmit":"Publish to the SP","stopStatus":{"on_site":"on site","completed":"completed"}},"ticketCreate":{"failed":"Couldn't create the ticket. Try again.","created":"✓ Ticket created. If you assigned someone, the stop is already on their phone.","title":"New ticket","needClient":"You need at least one client with a site before you can create a ticket. Add one in","clientsLink":"Clients","intro":"Manual creation. Assigning an SP here also puts the stop straight on their phone.","client":"Client","site":"Site","unspecified":"(not specified)","noSites":"This client has no sites yet. Add one in Clients.","titleLabel":"Title","titlePlaceholder":"e.g. POS terminal won't power on","problemType":"Problem type","description":"Description","descriptionPlaceholder":"What did the customer report?","severity":"Severity","s1":"S1 — Critical / system down","s2":"S2 — Major impact","s3":"S3 — Normal","s4":"S4 — Cosmetic / low","assign":"Assign to (optional — the stop goes to their phone right away)","unassigned":"(leave unassigned)","creating":"Creating…","submit":"Create ticket","contract":"Contract","contractChoose":"Choose the contract","contractHint":"This client has more than one active contract. The ticket takes the SLA, the coordinator and the technicians of the one you choose.","contractAmbiguous":"This client has more than one active contract. Choose the contract for this ticket.","contractNotAllowed":"That contract is no longer active for this client. Reload and choose again.","introScoped":"Only the clients of the contracts you coordinate appear here, except those with more than one active contract. The ticket is created without a technician.","createdScoped":"✓ Ticket created, without a technician yet.","needClientScoped":"The clients of your contracts aren’t active right now. Ask an administrator to check them.","noSitesScoped":"This client has no sites yet. You can create the ticket without one, or ask an administrator to add them.","secondFactorRequired":"Turn on two-step verification in Settings → Security to create tickets.","noAccess":"You don’t have permission to do this. Ask an administrator to check your access to this contract.","rateLimited":"You’ve created many tickets in a short time. Wait a few minutes and try again.","clientRequired":"Choose a client for this ticket.","titleRequired":"Write a title for the ticket.","titleTooLong":"The title is too long: 200 characters at most.","problemTypeTooLong":"The problem type is too long: 80 characters at most.","descriptionTooLong":"The description is too long: 4,000 characters at most.","problemTypePlaceholder":"e.g. Hardware failure, network, software","notConfirmedRetry":"The ticket may have been created, but we could not confirm it. What you typed is still here: check the ticket list before trying again.","notConfirmedOffline":"The connection was lost and we could not confirm whether the ticket was created. What you typed is still here: once you are back online, check the ticket list before trying again.","sessionExpired":"The ticket was not created because your session expired. What you typed is still here: sign in and try again.","signInLink":"Sign in (opens a new tab)","appUpdated":"The app was updated while this page was open, so the ticket was not created. Copy what you typed and reload the page.","reloadPage":"Reload the page","mfaHint":"Turn on two-step verification to create tickets","severalContractsHint":"You can’t create tickets here: your client has more than one active contract. Ask an administrator for help."},"videoEditor":{"untitled":"Untitled video","createFailed":"Couldn't create the video. Try again.","tooLarge":"That file is {mb} MB. Clips are limited to 200 MB — compress it or split it.","streamOff":"Video uploads are not available yet: Cloudflare Stream is not connected. An administrator has to enable Stream on the Cloudflare account and add its API token (CLOUDFLARE_STREAM_API_TOKEN).","uploaded":"Uploaded — it is being processed and can be selected when ready.","uploadFailed":"The clip didn't upload. Check your connection and try again.","pickSource":"Pick a source clip first.","endAfterStart":"The end must be after the start.","sectionAdded":"Section added.","addSectionFailed":"Couldn't add the section. Try again.","actionFailed":"Couldn't update the video. Try again.","published":"Published. You can keep editing — changes save as you go.","deleteFailed":"Couldn't delete the video. Try again.","back":"← Disassembly videos","newTitle":"New disassembly video","notSaved":"not saved","publish":"Publish","archive":"Archive","deleteConfirm":"Delete permanently?","deleting":"Deleting…","yesDelete":"Yes, delete","cancel":"Cancel","delete":"Delete","titleLabel":"Title","titlePlaceholder":"e.g. ATM cassette teardown","machine":"Machine / model","optional":"optional","category":"Category","select":"— Select —","uploadTitle":"Upload footage","uploading":"Uploading…","uploadClip":"+ Upload a clip","uploadHelp":"Up to 200 MB per clip. Add several clips and combine their sections into one video.","sources":"Source clips","remove":"Remove","cutTitle":"Cut into sections","sourceClip":"Source clip","sourcePreview":"Source preview","start":"Start (s)","end":"End (s)","usePosition":"⟲ use position","sectionLabel":"Name (optional)","sectionPlaceholder":"e.g. Remove the top cover","mute":"Remove audio (mute)","addSection":"+ Add section","sections":"Sections","noSections":"No sections yet. Upload a clip, scrub to a spot, mark the start and end, and add a section. They play in this order.","sectionN":"Section {n}","unmute":"Muted — click to unmute","muteClick":"Click to mute","status":{"draft":"draft","published":"published","archived":"archived"},"sourceStatus":{"ready":"ready","processing":"processing","error":"error","uploading":"uploading"}},"videos":{"title":"Disassembly videos","description":"Step-by-step teardown and repair guides for field technicians","newVideo":"New video","all":"All","uncategorized":"Uncategorized","noPreview":"No preview","deleteConfirm":"Delete?","deleting":"Deleting…","yes":"Yes","no":"No","edit":"Edit","delete":"Delete","deleteNamed":"Delete {name}","deleteFailed":"Couldn't delete that video. Try again.","emptyManage":"No videos yet. Use «New video» to upload a disassembly and cut it into sections.","emptyView":"No videos yet. Check back soon.","status":{"draft":"draft","processing":"processing","archived":"archived"}},"providers":{"eyebrow":"Services","title":"Service providers","description":"Field technicians and partners — skills, coverage and live status","statProviders":"Providers","sharingGps":"Sharing GPS","linked":"Linked accounts","pendingInvite":"Pending invite","allSkills":"All skills","empty":"No service providers yet. Add them in Settings › Field Service › Service providers.","emptySkill":"No providers with that skill.","pending":"Pending","noRegion":"No region set","offline":"Offline"},"slaTierPanel":{"clock":{"wall_clock_24h":{"label":"24/7 clock","hint":"Time runs continuously, day and night."},"business_hours":{"label":"Business hours","hint":"Time runs only during the calendar’s working hours."},"business_hours_with_holidays":{"label":"Business hours + holidays","hint":"Only working hours, and holidays do not count either."}},"name":"Tier name","namePlaceholder":"e.g. Platinum","description":"Description","descriptionPlaceholder":"A short description of what this tier covers…","calendar":"Business calendar","calendarDefault":"Default (Mon–Fri 9–5)","calendarNotUsed":"— not used with 24/7 —","targets":"SLA targets per severity","targetsHint":"(minutes — leave blank for no target)","sev":"Sev","response":"Response (min)","arrival":"Arrival (min)","resolution":"Resolution (min)","commonValues":"Common values: S1 Critical → 60 min response, 240 min arrival, 480 min resolution. 480 min = 8 h, 1440 min = 1 d, 10080 min = 1 week.","createFailed":"Could not create the tier. Try again.","newTier":"+ New tier","newTitle":"New SLA tier","creating":"Creating…","create":"Create tier","saveFailed":"Could not save. Try again.","edit":"Edit","editTitle":"Edit tier — {name}","saving":"Saving…","saveChanges":"Save changes","deactivate":"Deactivate","reactivate":"Reactivate"},"slaTiers":{"title":"SLA tier catalog","description":"Named SLA tiers set response, arrival and resolution targets per severity. Assign a tier to a contract to give it a default SLA without writing each term.","empty":"No SLA tiers yet. Create one to get started.","inactive":"Inactive","contracts":{"one":"{n} contract","other":"{n} contracts"},"clock24":"24/7 clock","clockBusiness":"Business hours","clockBusinessHolidays":"Business hours + holidays","calendarRemoved":"calendar removed","defaultCalendar":"default calendar","colSeverity":"Severity","colResponse":"Response","colArrival":"Arrival","colResolution":"Resolution","sev":{"S1":"Critical","S2":"High","S3":"Medium","S4":"Low"},"footnote":"Assign a tier to a contract from the contract editor. An explicit «SLA» term on the contract always overrides the tier."},"routeDetail":{"mixedRouteNotice":"This route also has stops on another contract, so only someone who sees all contracts can reorder, re-optimize or publish it. You can still add your own tickets.","foreignStop":"Stop on another contract","allRoutes":"← All routes","eyebrow":"Route","title":"{sp} — route of {date}","stops":{"one":"{n} stop","other":"{n} stops"},"kmPlanned":"{n} km planned","minPlanned":"{n} min planned","stopsTitle":"Stops","planned":"Planned: {at} · {min} min","eta":"ETA {at}","late":"{n} min late vs SLA","arrived":"Arrived: {at}","completed":"Completed: {at}","mapTitle":"Route map","stopStatus":{"planned":"planned","en_route":"en route","on_site":"on site","completed":"completed","skipped":"skipped","blocked":"blocked"}},"routesPage":{"eyebrow":"Services","title":"Today's routes","description":"One route per SP per day · click to inspect or edit","empty":"No routes today. Routes are created automatically when a coordinator assigns tickets to a service provider.","colSp":"SP","colDate":"Date","colStatus":"Status","colStops":"Stops","colPublished":"Published","status":{"draft":"draft","published":"published","in_progress":"in progress","completed":"completed","cancelled":"cancelled"}},"mapPage":{"title":"Map","description":"Live operations map — SP positions, ticket pins, route plans and history playback","onMap":{"one":"on the map","other":"on the map"},"sharingGps":"sharing GPS","activeTickets":{"one":"active ticket","other":"active tickets"},"atRisk":"at risk (≤1 h)","routesToday":{"one":"route today","other":"routes today"},"tilesHint":"OpenStreetMap tiles · click any pin for details","legendOk":"Ticket — SLA on track","legendTight":"Ticket — tight (1–4 h)","legendRisk":"Ticket — at risk or missed","legendTrail":"SP trail (last 24 h)","legendPlayback":"Playback — path covered"},"boundaries":{"videoPlayer":"Video player","tryAgain":"Try again","ref":"ref: {digest}","calendarTitle":"The calendar couldn't load","calendarBody":"The service visits couldn't be loaded. It is usually temporary — try again.","slaTitle":"The SLA cockpit couldn't load","slaBody":"The SLA data couldn't be loaded. It is usually temporary — try again.","ticketsTitle":"Ticket Central hit a snag","ticketsBody":"The dashboard couldn't render. It is usually temporary — try again. If it keeps happening, resetting your saved layout clears a bad configuration and brings back the default views.","resetting":"Resetting…","resetLayout":"Reset my layout","gridFailed":"This dashboard couldn't load.","loadingCentral":"Loading Ticket Central…","loading":"Loading…"},"dashboardSlaBasis":{"title":"Operations dashboard — per-contract SLA basis","intro":"Which tickets the SLA column of the per-contract table on the Operations dashboard counts.","basisAria":"Per-contract SLA basis","closed":"Closed tickets","closedHelp":"Counts only what was resolved in the period; an open, overdue ticket does not show up until it is closed.","received":"Received tickets","receivedHelp":"Counts the tickets received in the period; an open, overdue ticket already counts as breached (as the cards do).","saveFailed":"Couldn’t save the setting. Try again.","saveFailedConnection":"Couldn’t save the setting. Check your connection or sign in again, then try again.","currentBasis":"Active basis","readOnlyNote":"Only an administrator can change this setting.","saving":"Saving…"},"etaProvider":{"saveFailed":"Could not save the setting. Try again.","testFailed":"Could not run the connection test. Try again.","title":"Routes & ETAs","intro":"How the mobile Route tab estimates arrival times. The free estimate uses distance plus repair time; Google adds live traffic.","providerAria":"ETA provider","heuristic":"Estimate (free)","google":"Google (live traffic)","keyLabel":"Google Maps key:","configured":"✓ Configured","notSet":"Not set","testing":"Testing…","test":"Test connection","routesApi":"Routes API (ETAs with live traffic)","geocodingApi":"Geocoding API (address → map pin)","checked":"Checked {at}. A red row usually means that API is not enabled in the Google Cloud project, billing is not active, or the key restrictions leave it out.","howToEnable":"To turn on Google: set GOOGLE_MAPS_SERVER_KEY in Setup Center with a server key from a Google Cloud project that has the Routes API and the Geocoding API enabled and active billing. It takes effect after the next restart or deploy.","fallback":"Google is selected but there is no key — arrival times fall back to the free estimate until the key is added.","billing":"Google Maps Platform is billed to Redsis but stays within the free monthly credit at the current volume. It stays off (free estimate) until you switch it here.","saving":"Saving…"},"routeGeometry":{"title":"Route line on the maps","intro":"How the TechOne map and the customer tracking map draw the route: as straight segments between stops, or along the streets.","providerAria":"Route line provider","straight":"Straight line (default)","osrm":"Along the streets (OSRM server)","valhalla":"Along the streets (Valhalla — own server or Stadia Maps)","valhallaHint":"Uses Valhalla, on your own server or a hosted one such as Stadia Maps. The result is saved for a few hours per route, so opening a map or the tracking page again does not call the server again. If the server fails, the maps go back to the straight line without showing an error.","testEngine":"Test {engine}","straightHint":"No external service is called. The line goes straight from stop to stop, as it always has.","osrmHint":"Uses your own OSRM routing server. The result is saved for a few hours per route, so opening a map or the tracking page again does not call the server again. If the server fails, the maps go back to the straight line without showing an error.","googleNote":"Why Google is not offered here: the Google Routes API terms (section 19.2) forbid showing its routes on a map that is not from Google, and these maps use OpenStreetMap. Google is still used for arrival times, which are shown as text (Routes & ETAs, above).","engineLabel":"Routing server:","configured":"✓ Configured","notConfigured":"Not configured","invalidUrl":"The address is not valid","keyPresent":"with access key","howToConfigure":"To use it: set ROUTING_BASE_URL with the address of your routing server. For your own server, the server address (for example, an internal server on the company network). For Stadia Maps, https://api.stadiamaps.com/route/v1. If the service needs a key, put it in ROUTING_API_KEY. Both are environment variables of the server; they take effect after the next restart or deploy. There is no public server by default because the free public ones do not allow commercial use.","fallbackNotConfigured":"Along the streets is selected but the routing server is not configured: the maps keep drawing the straight line until it is.","test":"Test connection","testing":"Testing…","testOk":"✓ It works: a test route of {km} km with {points} points in {ms} ms.","testNotNeeded":"The straight line does not use any external service: there is nothing to test.","errNotConfigured":"The routing server is not configured (ROUTING_BASE_URL).","errInvalidConfig":"The routing server address is not valid. Check ROUTING_BASE_URL: it must start with http:// or https:// and have no parameters.","errInvalidInput":"The test route could not be sent. Try again.","errHttp":"The routing server answered with an error ({status}). Check the address, the key and that the server is running.","errBadResponse":"The routing server answered, but not in the expected format. Check that the selected engine (OSRM or Valhalla) matches the server in ROUTING_BASE_URL.","errNoRoute":"The routing server has no roads for the test area (Barranquilla). Check that its map covers that region.","errTimeout":"The routing server took too long to answer. Check that it is running and reachable from the app.","errNetwork":"The app could not reach the routing server. Check the address and the network.","checked":"Checked {at}.","saving":"Saving…","saveFailed":"Could not save the setting. Try again.","notAdmin":"Only an administrator can change this. Ask an administrator of the portal.","invalidProvider":"That option is not valid. Reload the page and try again.","readOnlyNote":"Only an administrator can change this setting.","attributionNote":"While the streets option is on, the maps show the credit of the road data (OpenStreetMap), as its licence requires."},"importWizard":{"fields":{"clientName":{"label":"Client name","hint":"The customer or store name. One row = one client."},"siteLabel":{"label":"Site name (optional)","hint":"A short name for the site. If blank, the client name is used."},"addressFull":{"label":"Address (full, one column)","hint":"Use this OR the four address-part fields below — not both."},"addressStreet":{"label":"Street / line 1","hint":""},"addressCity":{"label":"City","hint":""},"addressState":{"label":"State / region","hint":""},"addressCountry":{"label":"Country","hint":""},"lat":{"label":"Latitude","hint":"If blank, the row is queued for geocoding after the import."},"lng":{"label":"Longitude","hint":""},"phone":{"label":"Phone","hint":""},"contactName":{"label":"Contact name","hint":""},"redixClientId":{"label":"Redix client ID (optional)","hint":"An identifier from another system, kept as a cross-reference."},"timezone":{"label":"Time zone (optional)","hint":""},"siteCode":{"label":"Branch / site code (optional)","hint":"The client's own branch number. Unique per client."},"region":{"label":"Service region (optional)","hint":"Groups the coverage universe and the stock-by-region view."},"siteStatus":{"label":"Coverage status (optional)","hint":"active/closed (also accepts activa/cerrada, alta/baja). Blank = active."}},"readFailed":"Could not read the file. Check that it is a valid CSV or XLSX.","importFailed":"The import failed. Try again.","step1":"1. Upload the file","uploadHelp":"CSV or XLSX (up to 10 MB). In workbooks with several sheets the first one is used. Up to 5,000 rows are imported.","reading":"Reading…","readFile":"Read file →","stepUpload":"Upload","stepMap":"Map columns","stepPreview":"Preview","stepDone":"Done","step2":"2. Map columns","mapIntro":"Tell us which column of {file} holds each piece of information. {n} rows will be processed.","truncated":"(Cut to the first 5,000 rows.)","colTarget":"Field","colSource":"Column in the file","colExample":"Example value","skip":"— skip —","empty":"empty","mapNeeded":"Pick the «Client name» column and at least one address column before continuing.","back":"← Back","toPreview":"Preview →","step3":"3. Preview","previewIntro":"Showing the first {shown} of {n} rows. Rows without a name or address are skipped automatically (you will see the count after the import).","colClient":"Client name","colSite":"Site name","colAddress":"Address","colContact":"Contact","missing":"missing","willGeocode":"will be geocoded","backToMap":"← Back to the mapping","importing":"Importing {n} rows…","importN":"Import {n} rows →","complete":"✓ Import complete","imported":"{done} of {n} rows imported.","skipped":"{n} were skipped because of validation errors (see below).","skippedRows":"Skipped rows ({n})","row":"Row {n}:","goClients":"Go to clients →","another":"Import another file"},"techLogin":{"failed":"Could not create the tech login.","open":"Create tech login","ready":"Tech login ready.","tempPassword":"Temp password (share it once; it won't be shown again):","alreadyHad":"This email already had a working login — only the link was updated.","close":"Close","tempPlaceholder":"Temp password (blank = generate one)","cancel":"Cancel","creating":"Creating…","create":"Create"},"spEdit":{"eyebrow":"Service provider","noEmail":"No email on file","close":"Close","tabDetails":"Details","tabInvite":"Invite","tabManage":"Manage","failedSave":"Could not save. Try again.","saved":"✓ Saved.","failed":"Something went wrong. Try again.","suspended":"✓ Suspended.","activated":"✓ Activated.","failedDelete":"Could not delete. Try again.","deleted":"✓ Deleted.","railTitle":"Edit service provider","displayName":"Display name","email":"Email","emailReadOnly":"Linked to a portal user — the email cannot be changed here.","phone":"Phone","homeLat":"Home base lat.","homeLng":"Home base lng.","shiftStart":"Shift start","shiftEnd":"Shift end","timezone":"Time zone","skills":"Skills (comma-separated)","regions":"Regions (comma-separated)","saving":"Saving…","saveChanges":"Save changes","suspendTitle":"Suspend SP","activateTitle":"Activate SP","suspendBody":"No new assignments go to this SP; they still see their current route. You can undo it.","activateBody":"The SP can be assigned again.","working":"Working…","suspend":"Suspend","activate":"Activate","deleteTitle":"Delete SP","deleteBody":"Removes this SP from the active roster and unlinks their portal user. Past routes and tickets stay for the audit trail. You can invite the same email again later as a new SP.","reasonRequired":"Reason (required)","reasonPlaceholder":"e.g. Left the company","cancel":"Cancel","deleting":"Deleting…","confirmDelete":"Confirm deletion","deleteOpen":"Delete SP…"},"assetCreate":{"add":"+ Add asset","closeForm":"Close form","failed":"Could not create the asset. Try again.","created":"✓ Asset created.","title":"New asset","intro":"A specific unit (by serial number), so contract rules can target it.","client":"Client","noClients":"(no clients)","site":"Site","none":"(none)","sku":"Product SKU","serial":"Serial number","label":"Name","labelPlaceholder":"Cash-counting room scale","notes":"Notes","creating":"Creating…","submit":"Create asset"},"clientEdit":{"eyebrow":"Client","siteCount":{"one":"{n} site","other":"{n} sites"},"close":"Close","tabDetails":"Details","tabSites":"Sites ({n})","tabManage":"Manage","failedSave":"Could not save. Try again.","saved":"✓ Saved.","failedAddSite":"Could not add the site. Try again.","siteAdded":"✓ Site added.","failedRemoveSite":"Could not remove the site. Try again.","siteRemoved":"✓ Site removed.","failedDelete":"Could not delete. Try again.","deleted":"✓ Client deleted.","archived":"✓ Client archived (it had operational data, kept for history).","railTitle":"Edit client","name":"Client name","redixId":"Redix client ID","redixHelp":"Fill it in when this client is linked to its Redix account.","timezone":"Default time zone","contactNotes":"Contact notes","notes":"Internal notes","saving":"Saving…","saveChanges":"Save changes","noSites":"No sites yet. Add one below so this client can be routed.","unnamedSite":"Unnamed site","remove":"Remove","reasonRequired":"Reason (required)","cancel":"Cancel","removing":"Removing…","confirmRemove":"Confirm removal","addSite":"+ Add site","newSite":"New site","siteLabel":"Name (optional)","address":"Address","lat":"Lat","lng":"Lng","siteTimezone":"Time zone","adding":"Adding…","addSiteSubmit":"Add site","deleteTitle":"Delete client","deleteBody":"If the client has no tickets, contracts or assets, this removes the client and all its sites. Otherwise it is archived (hidden from the list) so the history stays intact.","reasonPlaceholder":"e.g. Wrong client, replaced by ABC Holdings","deleting":"Deleting…","confirmDelete":"Confirm deletion","deleteOpen":"Delete client…"},"clientCreate":{"add":"+ Add client","closeForm":"Close form","failed":"Could not create the client. Try again.","created":{"one":"✓ Client created with {n} site.","other":"✓ Client created with {n} sites."},"formAria":"Create client","title":"New client","identity":"Identity","name":"Client name","namePlaceholder":"ABC Supermarkets","redixId":"Redix client ID (optional)","redixPlaceholder":"Leave blank for now","redixHelp":"Used later to link this client to its Redix account. You can fill it in anytime from Edit.","defaults":"Defaults","timezone":"Default time zone","contactNotes":"Contact notes","contactPlaceholder":"Maria, operations manager — +57 312…","notes":"Internal notes","notesPlaceholder":"Anything the dispatcher should know…","sites":"Sites ({n})","addSite":"+ Add site","sitesHelp":"Add every place where the SP may serve this client (stores, warehouses, offices). You can add more later.","siteN":"Site #{n}","remove":"Remove","siteLabel":"Name (optional)","siteLabelPlaceholder":"Main warehouse","address":"Address","lat":"Lat (optional)","lng":"Lng (optional)","siteTimezone":"Time zone (optional)","inherits":"Same as the client","creating":"Creating…","submit":"Create client"},"landing":{"description":"Configuration of the Field Service module: clients, sites, contracts, regions, dispatch rules and SP onboarding. The day-to-day dashboard (tickets, routes, live map) lives in the Field Service module.","openDashboard":"Open dashboard →","cards":{"clients":{"title":"Clients","description":"Customer accounts and their sites. Link each one to its Redix client when you are ready."},"contracts":{"title":"Contracts","description":"One contract per customer, with terms by client, site, product and asset. Clone an existing one instead of starting from scratch; one Monday board per contract."},"sps":{"title":"Service Providers","description":"The SP roster: skills, regions, van stock and shifts. Each SP is a portal user, suspended until invited."},"assets":{"title":"Assets","description":"Individual equipment by serial number, so a rule can target one specific unit."},"regions":{"title":"Regions","description":"Region tags used for SP coverage and to filter dispatch."},"rules":{"title":"Rules & weights","description":"Priority weights of the dispatch scorer, the auto-dispatch matrix and the defaults for contracts without explicit terms."},"integrations":{"title":"Integrations","description":"Health of the Monday, Redix and Google Maps integrations. A Monday board is linked to a contract from the contract editor."},"qa":{"title":"Service QA data","description":"Create or remove demo dispatch tickets and set up the QA workspace. Restricted, audited and fully reversible from here."},"audit":{"title":"Audit log","description":"Every action that matters: dispatch overrides, contract changes, severity changes and SP roster edits."}}},"integrationsPage":{"healthTitle":"Monday & Redix health","healthBody":"Coming soon: last sync, errors, API quota and cache freshness of the Monday and Redix integrations. The Monday board itself is linked in the contract editor (one board per contract), not here."},"importPage":{"title":"Import clients from a file","intro":"CSV or XLSX: each row becomes one client and one site. Lat/lng are optional — sites with an address but no coordinates wait to be geocoded with one click in","clientsLink":"Clients","back":"← Back to clients"},"auditPage":{"title":"Audit log","description":"The full audit trail of Field Service: dispatch overrides (with their reason), contract changes, severity changes, SP roster edits, parts request approvals and declines, and manual route changes that broke the SLA — filterable by person, action, record and date.","soon":"Coming soon"},"regionsPage":{"title":"Regions","add":"+ Add region","addSoon":"Coming soon. For now a region is created when you assign its tag to a service provider.","intro":"Regions are text tags. Service providers and coordinators work in one or more regions.","empty":"No regions yet. A region appears when it is assigned to a service provider.","spCount":{"one":"{n} SP","other":"{n} SPs"},"more":"+{n} more"},"clientsPage":{"title":"Clients","importFile":"⬆ Import from file","missingSites":{"one":"{n} site","other":"{n} sites"},"missingGeoBody":"still need lat/lng. Without coordinates the dispatch map cannot show them and the routing distance is estimated per client.","intro":"Each client can have several sites. When you are ready, fill in the Redix client ID in the client’s edit panel to link the record to Redix.","empty":"No clients yet. Use «+ Add client» to create one; you can add its sites in the same form.","colClient":"Client","colSites":"Sites","colTimezone":"Time zone","colRedix":"Redix link","colActions":"Actions","noSites":"no sites","moreSites":"+{n} more…","notLinked":"Not linked"},"assetsPage":{"title":"Assets","intro":"Specific equipment tracked by serial number, so a rule can apply to one particular unit.","empty":"No assets yet. Use «+ Add asset» to register equipment by serial number.","colLabel":"Label","colClient":"Client","colSite":"Site","colProduct":"Product","colSerial":"Serial #","colStatus":"Status","active":"Active","inactive":"Inactive"},"spCreate":{"title":"New Service Provider","formAria":"Create or link a service provider","pickUser":"Pick a user to link.","failed":"Something went wrong. Try again.","linked":"✓ Linked. Ask them to refresh the app on their phone.","createdWithLink":"✓ SP created. Copy the invite link below and send it to them.","createdNoLink":"✓ SP created, but no invite link was generated. Use «Resend invite» on its row.","createdLater":"✓ SP created. You can send the invite later from its row.","modeNew":"Create new","modeNewHelp":"A new SP record. Invite them to the portal by email.","modeLink":"Link an existing portal user","modeLinkHelp":"An existing portal user becomes an SP. Useful for testing.","pickPortalUser":"Pick the portal user","change":"change","searchUsers":"Search portal users…","onlyActive":"Only active portal users not yet linked to an SP are listed.","noEligible":"(No eligible users — everyone is already an SP.)","email":"Email","sendInvite":"Send the portal invite now","sendInviteHelp":"Emails them a sign-in link. You will also see the link here, to copy it if you prefer to send it yourself (WhatsApp, SMS…).","displayName":"Display name","phone":"Phone","homeLat":"Home base lat.","homeLng":"Home base lng.","shiftStart":"Shift start","shiftEnd":"Shift end","timezone":"Time zone","skills":"Skills (comma-separated)","regions":"Regions (comma-separated)","inviteLink":"Invite link (share it with the SP)","copyLink":"Copy link","sendSms":"Send by SMS","shareText":"Your Field Service portal access: {url}","alsoEmailed":"It was also emailed to them.","noEmail":"Email delivery is not set up — share the link directly.","linking":"Linking…","creating":"Creating…","linkSubmit":"Link as SP","createSubmit":"Create SP"},"contractCreate":{"cloneExisting":"Clone existing","newContractTrigger":"+ New contract","newContract":"New contract","failed":"Something went wrong. Try again.","created":"✓ Contract created as a draft. Opening it…","createHelp":"Creates a new contract as a DRAFT. Add its terms on the contract page once it is created.","client":"Client (Redix ID)","name":"Contract name","namePlaceholder":"ABC — Master Service Agreement 2026","from":"Effective from","to":"Effective to","toPlaceholder":"2026-12-31 (optional)","pdf":"Signed PDF URL (Redix)","notes":"Notes","creating":"Creating…","createSubmit":"Create draft contract","cloned":"✓ Cloned. Opening the new contract…","cloneEmpty":"There are no contracts to clone from. Create one first in the «New contract» tab.","cloneHelp":"Copies every term of a source contract into a new draft; then you only edit what is different.","source":"Source contract","pickOne":"(pick one)","newClient":"New client (Redix ID)","newName":"New contract name","cloning":"Cloning…","cloneSubmit":"Create clone"}},"fsSetup":{"title":"Setup & Systems","subtitle":"Configure the service department and watch every underlying system.","eyebrow":"Service Hub","tabSetup":"Setup","tabSystems":"Systems health","configHeading":"Configure the service system","configIntro":"Each card opens a live configuration surface. Set these up first — the systems on the health tab run on what you configure here.","sectionSla":"SLA engine","bodySla":"Tiers, contract assignment and precedence, calendars, pause rules and governance.","sectionParameters":"Parameter Studio","bodyParameters":"Service catalogue, problem-to-part mapping and SLA parameters.","sectionConnector":"ServiceNow connector","bodyConnector":"Connect a ServiceNow instance, choose which tables sync and provision per client.","sectionOnboarding":"Client onboarding","bodyOnboarding":"Stand up a new service client end to end — intake, masters, boards and portals.","noAccessTitle":"You don’t have access to Setup & Systems","noAccessBody":"This page is for whoever configures the service system. Ask your administrator for access.","noAccessOnboardingBody":"To set up a new service client, use the client onboarding wizard.","noAccessOnboardingCta":"Open client onboarding","sectionServiceTypes":"Service types","bodyServiceTypes":"Add or rename the ticket service types and decide how each one is billed.","noAccessServiceTypesBody":"To add or rename service types, use the service types page.","noAccessServiceTypesCta":"Open service types","sectionRoles":"Roles & access","bodyRoles":"Grant the service capabilities — triage, tickets, dispatch, parts, close and admin.","sectionFieldSettings":"Field Service settings","bodyFieldSettings":"Module-level configuration for the field service system.","boardsHeading":"Boards & automations","boardsIntro":"The service process is defined on boards — columns, statuses, forms and automations, no code. Open a board to edit its process in place; your changes take effect live.","open":"Open","boardTickets":"Tickets","boardIntake":"Intake","boardRoutes":"Routes","boardPartsRequests":"Parts Requests","boardProofOfRepair":"Proof of Repair","boardPreventiveMaintenance":"Preventive Maintenance","systemsTitle":"Service Systems health","systemsSubtitle":"Every cron, the mirror, the intake feed, the bridge and the ServiceNow connector — what each one does, whether it is healthy right now, and what to do if it goes red.","overallLabel":"Overall","overallHealthy":"All systems healthy","overallAttention":"Some systems need attention","overallDown":"A system is down","overallUnknown":"System health is unavailable","systemsCount":"{count} systems","generatedAt":"Read at {time}","refresh":"Refresh","whatItDoes":"What it does","ifRed":"What to do if red","lastRun":"Last run","never":"Never","scheduleLabel":"Runs","statusOn":"On","statusOff":"Off","toggleOn":"Turn on","toggleOff":"Turn off","toggling":"Saving…","toggleError":"Couldn’t change the switch. You may not have permission, or the flag is not registered.","diagnostic":"Diagnostic","light":{"healthy":"Healthy","degraded":"Degraded","down":"Down","off":"Off","idle":"Idle","unknown":"Unknown"},"category":{"connector":"Connector","mirror":"Mirror","feed":"Feed","bridge":"Bridge","cron":"Cron","engine":"Engine"},"metric":{"connected":"Connected","tickets":"Tickets mirrored","syncStatus":"Sync status","oauthAccounts":"OAuth accounts","feedBoards":"Feed boards","created":"Created","updated":"Updated","failed":"Failed","destBoards":"Destination boards","slaBoards":"SLA-tracked boards","slaOutbox":"Pending SLA events"},"system":{"connector":{"name":"ServiceNow connector","does":"Holds the connection to each ServiceNow instance — credentials, which tables sync, and per-client provisioning. Nothing below can run without a connected, authorised account.","ifRed":"Open the ServiceNow connector and reconnect the account, or re-authorise it if the token was revoked."},"mirror":{"name":"Ticket mirror","does":"The local copy of ServiceNow incidents (servicenow_tickets). Every service surface reads the mirror, not ServiceNow directly, so the mirror is only as fresh as the sync keeps it.","ifRed":"Check the ServiceNow sync cron below and the connector — a stale mirror means sync stopped or the connection dropped."},"servicenow-sync":{"name":"ServiceNow sync","does":"Pulls changed incidents from every connected instance into the mirror on a schedule. This is the heartbeat that keeps the mirror fresh.","ifRed":"Confirm the connector is connected and the token is valid; if it is, check the cron runner is delivering /api/cron/servicenow-sync."},"servicenow-token-refresh":{"name":"Token refresh","does":"Refreshes each OAuth account’s access token before it expires so sync and writes never fail on an expired credential.","ifRed":"Reconnect the flagged account in the ServiceNow connector — its refresh token was likely revoked and needs a fresh sign-in."},"servicenow-schema-watch":{"name":"Schema watch","does":"Watches each instance’s field dictionary and records drift, so a renamed or new ServiceNow field is caught instead of silently dropped.","ifRed":"If off, turn it on to resume drift detection; if degraded, the account likely lacks read access to sys_dictionary — grant it in ServiceNow."},"servicenow-intake-feed":{"name":"Intake feed","does":"Projects each mirrored incident onto every board bound to the intake source, so new incidents appear as triage cards. Finds its boards by their source marker, never a hard-coded board.","ifRed":"If off, turn it on; if idle, bind a board to the intake source (settings → source). Otherwise check the sync cron — the feed is only as live as the mirror."},"servicenow-board-reconcile":{"name":"Board bridge (reconcile)","does":"Routes each changed incident to the right destination board by the active rules, keeping boards and ServiceNow in agreement. This is the bridge between the mirror and the working boards.","ifRed":"If off, turn it on; if degraded, open a destination board’s sync detail — a rule or column mapping likely needs fixing."},"sla-check":{"name":"SLA engine","does":"Recomputes SLA clocks and breach state on every tracked board and drains the breach-alert queue, so due and breaching work is always current.","ifRed":"If off, turning it on resumes SLA computation platform-wide; if the pending-events count keeps climbing, the alert queue is backing up — check the cron runner."}},"recentHeading":"Recent system events","recentEmpty":"No system events recorded yet.","recentIntro":"The latest sync, write, auth and error events across the ServiceNow systems.","empty":"Nothing configured yet.","loadingSystems":"Reading live system health…","systemsError":"Couldn’t read system health. Retry — if it persists the shared database may be degraded.","loadError":"Couldn’t load Setup. Retry, and if it persists the DB may be degraded.","retry":"Retry"},"listingStudio":{"search":{"heading":"Research a part","blurb":"Search the Redsis parts database, the eBay catalog and your live eBay listings. Open a result to research it; nothing is listed until you say so.","placeholder":"Part number or keyword","search":"Search","clear":"Clear","sourceRedsis":"Redsis parts DB","sourceCatalog":"eBay catalog","sourceLive":"Live on eBay","exact":"Exact part number","research":"Research","createListing":"Create listing","creating":"Starting…","openDraft":"Open draft","empty":"No match in the Redsis parts DB, the eBay catalog or your live listings.","results":"{n} result(s) for {q}","unavailable":"Not reachable right now: {sources}"},"research":{"eyebrow":"Research","backToSearch":"Back to search","createListing":"Create listing","creating":"Starting…","summary":"Everything we know about {pn}, from our own data and from eBay. Listing it is a separate, explicit step.","redsisHeading":"Redsis parts database","redsisNotConfigured":"The Redsis parts database is not connected yet (no connector or no US site configured).","partNotFound":"This part number is not in the Redsis parts database.","sectionFailed":"Could not load this from the Redsis parts database: {error}","sectionNotConfigured":"Not connected yet.","description":"Description","brand":"Brand","manufacturer":"Manufacturer","category":"Category","specsHeading":"Specifications","specsEmpty":"No specifications on file.","altPnsHeading":"Alternative part numbers","altPnsEmpty":"No cross-references on file.","altIbm":"IBM","altGroup":"Same group","altClient":"Client PN","stockHeading":"On hand","stockTotal":"{n} in stock","stockEmpty":"No stock on file.","colLocation":"Location","colCondition":"Condition","colQty":"Qty","photosHeading":"Photos","photosEmpty":"No photos on file.","photosNotConnected":"{n} photo(s) are on file, but photo access is not connected yet.","photosOpen":"Open the full-size photo","photosLanOnly":"{n} photo(s) are on file only on the office file share, which a browser outside the office network cannot load.","soldHeading":"eBay sold history","soldDegraded":"Sold history is not available: {reason}. Showing active listings instead.","soldNotGranted":"Sold history needs eBay's Marketplace Insights API, which eBay has not granted to this app (it is a limited-release API eBay approves on request). Showing active listings instead.","soldEmpty":"No recent sales found on eBay.","activeHeading":"eBay active listings (competition)","activeEmpty":"No active listings found on eBay.","statMin":"Low","statMedian":"Median","statMax":"High","statCount":"{n} comps","colTitle":"Title","colPrice":"Price","colSold":"Sold","colCond":"Condition","historyHeading":"Pricing history","historyEmpty":"Not enough sales to chart a history.","liveHeading":"Your live eBay listings for this part","liveEmpty":"You have no live listing for this part.","draftsHeading":"Drafts for this part","draftsEmpty":"No drafts yet.","openDraft":"Open draft","viewOnEbay":"View on eBay","datasheets":"Datasheet links are not available from the current sources (the Redsis parts database holds no document links)."},"intake":{"sectionLabel":"Find a part","heading":"Enter a part number","blurb":"The studio looks the part up in the Redsis parts database, the eBay catalog and Ayva, and shows you every match. You choose the right one before anything is drafted.","findPart":"Find part","finding":"Searching…","bulkToggle":"Bulk","bulkPlaceholder":"Paste part numbers — one per line or comma-separated.","bulkSubmit":"Identify all","bulkQueued":"Queued {n} part(s) for identification.","bulkEmpty":"Paste at least one part number.","startFailed":"Could not start the search."},"candidates":{"heading":"Which part is this?","blurb":"These are the matches for {pn}. Pick the right one; nothing is drafted until you do.","found":"{n} candidate(s) from {sources}","sourceEbay":"eBay catalog","sourceRedsis":"Redsis parts DB","sourceAyva":"Ayva","sourceManual":"Entered by you","exact":"Exact part number","confidence":"Confidence {pct}%","specs":"{n} specs","use":"Use this part","chosen":"Chosen","createListing":"Create listing","creating":"Studying the market and drafting…","created":"Listing drafted — review it below.","change":"Change","searchAgain":"Search again","searching":"Searching…","none":"No match in the Redsis parts DB, the eBay catalog or Ayva. Enter the part yourself below.","manualHeading":"Enter the part yourself","brand":"Brand","mpn":"MPN","title":"Product title (optional)","manualSubmit":"Use what I typed","identifiedAs":"Identified as","chooseFailed":"Could not record the choice.","sourcesUnavailable":"Not reachable when these matches were found, so a right match may be missing: {sources}"},"live":{"heading":"Live on eBay","blurb":"Your listings as of the last eBay sync. Convert one to a draft to rework it here; Revise listing pushes the changes back to eBay.","searchPlaceholder":"Search by SKU, title or item id","search":"Search","clear":"Clear","colSku":"SKU","colTitle":"Title","colPrice":"Price","colQty":"Qty","colSynced":"Synced","convert":"Convert to draft","converting":"Converting…","openDraft":"Open draft","viewOnEbay":"View on eBay","empty":"No live listings match this search.","emptyNoSync":"No listings have been synced from eBay yet. The eBay inventory sync fills this list.","unavailable":"The live listings could not be loaded right now.","showing":"Showing {from}–{to} of {total}","prev":"Previous","next":"Next","convertFailed":"Could not convert this listing to a draft.","convertedFromCache":"Draft created from the local copy only — {warning}"},"imported":{"banner":"This draft mirrors live eBay listing {itemId}. Edit it here, then use Revise listing to push the changes to eBay.","revised":"Changes pushed to eBay for listing {itemId}."},"shortlist":{"heading":"Your shortlist","blurb":"Parts you saved to come back to. Only you see this list. Tick 2 to 4 of them to compare side by side.","empty":"Nothing saved yet. Use Save on a search result or on a research page.","unavailable":"Your shortlist could not be loaded right now.","count":"{n} of {max} saved","save":"Save","saved":"Saved","saving":"Saving…","saveTitle":"Save {pn} to your shortlist","savedTitle":"{pn} is on your shortlist. Click to remove it.","remove":"Remove","notePlaceholder":"Why you saved it, a price to beat…","addNote":"Add note","editNote":"Edit note","saveNote":"Save note","cancel":"Cancel","research":"Research","select":"Select {pn} to compare","compare":"Compare ({n})","compareHint":"Pick 2 to 4 parts to compare.","savedFrom":"Saved from {source}","sourceRedsis":"Redsis parts DB","sourceCatalog":"eBay catalog","sourceLive":"Live on eBay","sourceResearch":"research view","savedOn":"saved {date}","errorDisabled":"The shortlist is not enabled for your account.","errorInvalid":"That part number cannot be saved.","errorFull":"Your shortlist is full ({max} parts). Remove one first.","errorNotFound":"That part is no longer on your shortlist.","errorFailed":"Could not update your shortlist. Try again.","added":"Saved to your shortlist.","removed":"Removed from your shortlist.","noteSaved":"Note saved."},"compare":{"eyebrow":"Compare","title":"Compare parts","summary":"{n} parts side by side, from the same data as the research view. Highlighted rows differ between the parts.","backToStudio":"Back to Listing Studio","tooFew":"Pick at least 2 parts to compare (up to 4). Tick them in your shortlist on the Listing Studio page.","legend":"Top marks the part with the most on hand and the one with the highest sold median. A tie marks none.","top":"Top","differs":"Differs","groupRedsis":"Redsis parts database","groupMarket":"eBay market","groupOurs":"Our listings and drafts","groupSpecs":"Specifications","rowDescription":"Description","rowBrand":"Brand","rowManufacturer":"Manufacturer","rowCategory":"Category","rowOnHand":"On hand","rowAltPns":"Alternative part numbers","rowPhotos":"Photos on file","rowSoldMedian":"Sold median","rowSoldRange":"Sold low to high","rowSoldCount":"Sold comps","rowActiveMedian":"Active median","rowActiveRange":"Active low to high","rowActiveCount":"Active comps","rowLiveListings":"Our live listings","rowLivePrice":"Our asking price","rowDrafts":"Drafts","notInRedsis":"Not in the Redsis parts database","soldNotGranted":"eBay sold history not granted to this app","noSpecs":"No specifications on file for these parts.","couldNotLoad":"Could not load","specsCouldNotLoad":"Specifications could not be loaded from the Redsis parts database for {pns}. Open Research for the error.","research":"Research","createListing":"Create listing","creating":"Starting…","removeColumn":"Remove {pn} from the comparison"}},"ebaySalesInsights":{"heading":"What sells, to whom, and why","blurb":"Computed from your own synced eBay orders and live listings: net of refunds, canceled orders left out.","windowLabel":"Period","windowDays":"Last {n} days","windowAll":"All synced","empty":"No sales in this period.","failed":"Sales insights could not be computed: {error}","kpiNet":"Net revenue","kpiGrossHint":"{gross} before refunds","kpiOrders":"Orders","kpiCanceledHint":"{n} canceled, not counted","kpiUnits":"Units sold","kpiAov":"Average order","kpiRefundRate":"Refunded","kpiSellThrough":"Sell-through","kpiSellThroughHint":"lifetime, over {listings} live listings","whyPriceHeading":"Price realized","whyPrice":"Items sold at a median {pct} of their current asking price.","whyPriceNone":"No sold line could be matched to its listing price.","whySpeedHeading":"Time to first sale","whySpeed":"Median {median} days from listing start to the first sale (75% within {p75} days), over {n} listings started since the sales history begins.","whySpeedNone":"No listing started since the sales history begins has sold in this period yet.","bestRevenue":"Best sellers by net revenue","bestUnits":"Best sellers by units","colSku":"SKU","colUnits":"Units","colNet":"Net","colRealized":"Avg price","colVsAsking":"vs asking","trendHeading":"Monthly net revenue","trendOrders":"{n} orders","byCountry":"Buyers by country","byState":"US buyers by state","colWhere":"Where","colOrders":"Orders","whoNote":"eBay does not share the buyer identity with sellers, so buyers are shown by where they ship to; repeat buyers cannot be counted.","deadHeading":"Not selling: listed {days}+ days, stock on hand, no sale in this period","deadBlurb":"{never} of {listings} live listings have never sold. Ranked by the money tied up in them.","deadEmpty":"Every older listing with stock sold at least once in this period.","colPrice":"Price","colAvailable":"Available","colCapital":"Tied up","colDaysListed":"Days listed","viewOnEbay":"View on eBay","categoryNote":"Category and brand performance are not shown: the eBay listing sync does not receive a category for Seller Hub listings."},"companyWall":{"tabWall":"Wall","peopleIntro":"Which company each person belongs to is decided in Central One; Redsis One mirrors it. This list shows where each person stands on the company wall.","openCentralOne":"Open Central One","searchPeople":"Search people…","peopleCount":"{n} people","noPeople":"No matching people.","basisCentralOne":"Placed by Central One","basisLegacy":"Existed before the wall","basisRedsisOne":"Set in Redsis One before the wall","basisUnplaced":"Not placed — sees no company data","basisRefused":"Placement ignored — only Central One can place someone there","basisExternal":"Outside account (client, vendor or guest) — not behind the company wall","basisInactive":"Wall not configured","groupLevel":"Holding level — sees every company","sideLabel":"{side} side","title":"Company wall","intro":"Separate companies of the group see only their own records and people, unless the owning company shares. Choose which companies are separated and what each one shares.","statusLabel":"Status","modeOff":"Off — nothing is separated yet","modeShadow":"Watching — the wall counts what it would hide, but hides nothing","modeEnforce":"On — each company sees only its own side","modeHint":"Switched in Modules: company_wall, then company_wall_enforce.","colCompany":"Company","colSeparated":"Separated","colDefault":"Owns existing data","colSharePeople":"Others can see our people","colShareCatalog":"Others can read our catalog","ownerOnly":"Only the Owner changes which companies are separated. Each company decides what it shares.","readinessTitle":"Go-live readiness","readinessAccounts":"{n} accounts","readinessUnplaced":"Accounts that see nothing (not placed)","readinessConnection":"Central One connection","connSignIn":"Sign-in","connApi":"Directory reads","connPush":"Pushes","connected":"connected","notConnected":"not connected","readinessNote":"People of a separated company can only be placed by Central One, so all three connections must be in place before they start.","saveFailed":"Could not save: {reason}","shadowTitle":"Would have hidden (last 3 days)","shadowNone":"nothing — clean","shadowRow":"{surface} — {n} for a {side} viewer","modulesTitle":"Parts of Redsis One checked for the wall","moduleCertified":"checked","modulePending":"not yet","modulesNote":"People of a separated company (other than the default) can only open checked parts; everything else answers “not found” for them.","moduleLabels":{"shell":"App shell: home, menu, right rail, notifications, search","boards":"Boards & workspaces, dashboards, forms","collab":"Chat, Updates, Docs, Sheets, Files, Announcements","service":"Service hub, TechOne, service inventory","hr":"HR hub, org chart, people"},"saving":"Saving…"}}