1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/InboxDashboard-B9Coke4P.js","assets/react-vendor-BbKb1M84.js","assets/popover-D0oX9fBv.js","assets/collapsible-CstqZJon.js","assets/index-CHCCHJ44.js","assets/calendar-ClFM1tI8.js","assets/isSameDay-DaGwWpuc.js","assets/subDays-BlwqquLy.js","assets/chevron-left-CXy3js90.js","assets/ExpiringInstancesAlert-CdGPHXEc.js","assets/sheet-BOuBVZKs.js","assets/tabs-BpMDw5Fx.js","assets/index-BRD7ffHU.js","assets/scroll-area-CxqxXcu6.js","assets/inboxContactsCache-BahLJzf7.js","assets/useInboxTags-DAP1QnQB.js","assets/TagColorSwatch-qIyKpa5O.js","assets/phoneFormatter-CIgqqPlz.js","assets/countryDdi-BvyH1gQc.js","assets/tag-XklUMGYj.js","assets/plus-DdSIX70L.js","assets/refresh-cw-Chj8AZm5.js","assets/FreeTrialPixGateModal-D8lMieZY.js","assets/puzzle-BnSw4QrK.js","assets/youtube-uT0kGfhb.js","assets/shopping-cart-DmIV9dnf.js","assets/command-CfW3d7Sk.js","assets/search-aINhXfaY.js","assets/map-pin-CaR2qotR.js","assets/chevrons-up-down-BYEjFa8S.js","assets/pencil-D4lSFOtA.js","assets/wifi-623lMjHy.js","assets/colored-switch-TTsjh76Q.js","assets/pause-Bc2OIy41.js","assets/badge-check-irgV1Bea.js","assets/alert-D8iFQdRa.js","assets/collaboratorInstances-DwCVJy0o.js","assets/message-square-B-HkfzZp.js","assets/git-branch-ebwz3WHW.js","assets/filter-CI1U3R-4.js","assets/calendar-BZGTt6Fw.js","assets/generateCategoricalChart-Dlrm_WXz.js","assets/value-3LWPH8SZ.js","assets/AreaChart-y0CocEcz.js","assets/phone-jw5f5rkY.js","assets/phone-off-By_QQf_u.js","assets/power-off-DF96nImk.js","assets/circle-x-BziJMpUq.js","assets/supabase-DuPJfW10.js","assets/InboxPage-C0MA1Gyw.js","assets/radio-group-DelD8PqZ.js","assets/circle-EqptAzJW.js","assets/useAIFlows-imATUx8v.js","assets/eye-off-DgHcAQEZ.js","assets/dropdown-menu-BUMft0I0.js","assets/rotate-cw-_uyUZTLL.js","assets/TagManagerPopover-Dyfdm4U2.js","assets/settings-2-xKcToKyT.js","assets/mic-BDkWIfaK.js","assets/languages-Ntj-VZ9F.js","assets/file-text-Tb9TVo2m.js","assets/play-Db7Ja857.js","assets/audioAI-models-BrJ76qcf.js","assets/useFreeTierUsage-CmEKbg2b.js","assets/user-plus-ueYzr4Gr.js","assets/inboxVariables-B5sx8UjO.js","assets/useGlobalVariables-DyNMplte.js","assets/folder-CwUDftQL.js","assets/assignedInstances-CTcP76Bw.js","assets/usePrivacyMode-BuRmTmX5.js","assets/paperclip-D1VxtUZV.js","assets/square-Bo39xETe.js","assets/timer-uENZkvte.js","assets/ban-CcDOb7Ft.js","assets/separator-Ce_u8gDk.js","assets/history-CqusD0c_.js","assets/pen-BhZw_PO_.js","assets/useGroupFlows-D90z1r2s.js","assets/log-in-Cocyw0FO.js","assets/square-pen-y-er01NN.js","assets/ellipsis-CNRA_wh1.js","assets/FlowListPage-DyjBHoJP.js","assets/sortable.esm-z8zcgmKj.js","assets/useIsFreeTrialUser-BuCM7bq3.js","assets/MiniFlowBuilder-CYM0YKJV.js","assets/style-CktfCRy7.js","assets/style-BZV40eAE.css","assets/iaGenerator-models-DZYqko-q.js","assets/zenith-C4p7evEM.js","assets/variable-e1Ib5q1h.js","assets/globe-BzafZ427.js","assets/shuffle-Bf7q_ExT.js","assets/bot-MVkF5N71.js","assets/user-x-BXjzDQ7H.js","assets/folder-open-CIoc7C7Y.js","assets/chart-column-Bji3deVA.js","assets/usePixGatewayCredentials-CVELFJmo.js","assets/minus-DvM9KSD2.js","assets/link-Cx5jsYbL.js","assets/grip-vertical-AIO06uLm.js","assets/package-D9ZnWMHH.js","assets/dollar-sign-QPqvQICb.js","assets/folder-plus-Oy_NRCDD.js","assets/link-2-Bm_dtFvL.js","assets/InboxKanbanPage-JBzS9APP.js","assets/Trans-B4C99klR.js","assets/QuickRepliesPage-W_0kTw6B.js","assets/Settings-CCnuPf1H.js","assets/accordion-BFGcHiXJ.js","assets/shopping-bag-DhnEK_gj.js","assets/SubscriptionPage-yoSUMmq5.js","assets/UpgradePlanDialog-DsVS4PP9.js","assets/Marketplace-asxSQE4P.js","assets/animated-tabs-DRHzhHz1.js","assets/smmLink-DpkcSHov.js","assets/animated-search-bar-DuJpr-V8.js","assets/combo-diamond-BatrSamB.js","assets/server-DUmI374D.js","assets/palette-0E-DXYvk.js","assets/AffiliateDashboard-C3PConFt.js","assets/table-CJ1-fMBH.js","assets/parseISO-DTgiXms9.js","assets/Index-D0rh-7DT.js","assets/storage-BzROZvh2.js","assets/percent-Bzb8RmEC.js","assets/coins-CYOtjiLH.js","assets/BarChart-B91sD4gI.js","assets/MessageBlaster-DvYn9Z0S.js","assets/wifi-off-DLbPnv8a.js","assets/CreativeCanvasProjects-B59S_efy.js","assets/ImportShareDialog-BT0zS6Rf.js","assets/AdsLayout-CDh_2jLs.js","assets/subMonths-DQDx3
1Nz3.js","assets/circle-help-6fdm1dZX.js","assets/facebook-O8SAZZgk.js","assets/Tutoriais-B4nUSoFd.js","assets/tutorial-cover-VW0pNVFJ.js","assets/AudioGenerator-yxIJxIht.js","assets/AudioTranscriber-fEXvGWhh.js","assets/VideoDownloader-BRd16IAH.js","assets/music-EoomtEkN.js","assets/ZapdataConverter-CEOZwYck.js","assets/TrackOfertas-Db0D9pwE.js","assets/maximize-2-BE6cNB-w.js","assets/LineChart-Cq-zYRi0.js","assets/ExtensaoAdsWhatsApp-Rjnug-PO.js","assets/GroupFlowsPage-CspvTbEj.js","assets/FlowCanvas-BKXHnaym.js","assets/IAGeneratorNode-BwwHap4i.js","assets/useFlowAnalytics-D0e3HQkg.js","assets/PassageMetricsDialog-Cgq4wYtW.js","assets/LandingPage-DMYzLNLN.js","assets/StatusPage-CMKVFBVt.js","assets/ProductMetrics-lHkjUCca.js","assets/arrow-up-down-BmIIzvas.js","assets/GeradorPalavrasChaves-B7GVV2HV.js","assets/useQualifiedPlanAccess-BOM1zoB2.js","assets/PlanRequiredModal-B4dr62Y1.js","assets/key-uLMwt2Ao.js","assets/arrow-up-CA1y0Msx.js","assets/ProductAnalysis-BT6eRVW4.js","assets/safeHtml-C6FlPkxq.js","assets/NumberOrganizer-Bei8J3IY.js","assets/arrow-down-D40sLrAF.js","assets/SMSBot-B8tqngy2.js","assets/SMMPanel-Dr8MsNBu.js","assets/AdminPanelNew-ClKHzzY1.js","assets/key-round-Cp4IuIqQ.js","assets/DisparaZapOficial-AxWETfqm.js","assets/SiteCloner-DNCnE8a8.js","assets/ZernioCallback-C3B5avqH.js","assets/PaymentThankYou-BX6fCeyW.js","assets/PaymentCancelled-CrxTGcNI.js","assets/ZernioBroadcast-cS_8iBHT.js","assets/NotifyAdminPage-DgmdxSxC.js","assets/NotifyAdminAddNumber-BI4JUaf9.js","assets/GlobalSettingsPage-BC8W1xtA.js","assets/ContactsPage-Djo_S8VL.js","assets/SaleNotificationSettings-Bw2S8OtO.js","assets/Item-DxZapDra.js","assets/LogzzNotificationSettings-DLIqNjjU.js","assets/IntegrationsPage-Cz8gG3Ad.js","assets/mcpScopes-BRN6ztV1.js","assets/FlowPreviewPage-C0ozdPOS.js","assets/CreativeCanvas-COy__SzP.js","assets/CreativeShareImport-SinIM-Qv.js","assets/TutorialPublic-BzqS3qfD.js","assets/AdminProviders-DW5MjTW2.js","assets/PrivacyPolicy-zzhi7uc7.js","assets/McpAuthorize-B2skLVAq.js","assets/ZenithOAuthConnect-BaoHHHPg.js","assets/ZenithOAuthCallback-Dop89M6p.js","assets/TermsOfService-CmiTWrrV.js","assets/DataDeletion-yRt8sV8j.js","assets/Ferramentas-DMpIhDy3.js"])))=>i.map(i=>d[i]); 2var xm=e=>{throw TypeError(e)};var Cl=(e,t,a)=>t.has(e)||xm("Cannot "+a);var W=(e,t,a)=>(Cl(e,t,"read from private field"),a?a.call(e):t.get(e)),Ne=(e,t,a)=>t.has(e)?xm("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a),Ce=(e,t,a,o)=>(Cl(e,t,"write to private field"),o?o.call(e,a):t.set(e,a),a),ze=(e,t,a)=>(Cl(e,t,"access private method"),a);var Pi=(e,t,a,o)=>({set _(n){Ce(e,t,n,a)},get _(){return W(e,t,o)}});import{r as g,j as i,u as Ao,a as Vs,R as Sg,b as Ng,$ as ee,c as Rt,d as kg,L as ds,e as Ai,f as Tg,h as Ig,N as t0,B as a0,i as Rg,k as xe,l as wm,m as o0}from"./react-vendor-BbKb1M84.js";import{_ as ge,c as n0,a as ro,b as Dg,d as r0}from"./supabase-DuPJfW10.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))o(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const s of r.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&o(s)}).observe(document,{childList:!0,subtree:!0});function a(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(n){if(n.ep)return;n.ep=!0;const r=a(n);fetch(n.href,r)}})();const Mg="zapdata-theme",Fg=g.createContext(void 0),i0=()=>{if(typeof window<"u"){const e=localStorage.getItem(Mg);if(e==="light"||e==="dark")return e}return"light"},s0=({children:e})=>{const[t,a]=g.useState(i0);g.useEffect(()=>{const r=window.document.documentElement;r.classList.remove("light","dark"),r.classList.add(t),localStorage.setItem(Mg,t)},[t]);const o=g.useCallback(r=>{a(r)},[]),n=g.useCallback(()=>{a(r=>r==="dark"?"light":"dark")},[]);return i.jsx(Fg.Provider,{value:{theme:t,setTheme:o,toggleTheme:n},children:e})},Ld=()=>{const e=g.useContext(Fg);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};/** 3 * @license lucide-react v0.462.0 - ISC 4 * 5 * This source code is licensed under the ISC license. 6 * See the LICENSE file in the root directory of this source tree. 7 */const l0=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Lg=(...e)=>e.filter((t,a,o)=>!!t&&t.trim()!==""&&o.indexOf(t)===a).join(" ").trim();/** 8 * @license lucide-react v0.462.0 - ISC 9 * 10 * This source code is licensed under the ISC license. 11 * See the LICENSE file in the root directory of this source tree. 12 */var c0={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** 13 * @license lucide-react v0.462.0 - ISC 14 * 15 * This source code is licensed under the ISC license. 16 * See the LICENSE file in the root directory of this source tree. 17 */const d0=g.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:o,className:n="",children:r,iconNode:s,...l},c)=>g.createElement("svg",{ref:c,...c0,width:t,height:t,stroke:e,strokeWidth:o?Number(a)*24/Number(t):a,className:Lg("lucide",n),...l},[...s.map(([d,u])=>g.createElement(d,u)),...Array.isArray(r)?r:[r]]));/** 18 * @license lucide-react v0.462.0 - ISC 19 * 20 * This source code is licensed under the ISC license. 21 * See the LICENSE file in the root directory of this source tree. 22 */const me=(e,t)=>
22{const a=g.forwardRef(({className:o,...n},r)=>g.createElement(d0,{ref:r,iconNode:t,className:Lg(`lucide-${l0(e)}`,o),...n}));return a.displayName=`${e}`,a};/** 23 * @license lucide-react v0.462.0 - ISC 24 * 25 * This source code is licensed under the ISC license. 26 * See the LICENSE file in the root directory of this source tree. 27 */const u0=me("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** 28 * @license lucide-react v0.462.0 - ISC 29 * 30 * This source code is licensed under the ISC license. 31 * See the LICENSE file in the root directory of this source tree. 32 */const _r=me("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** 33 * @license lucide-react v0.462.0 - ISC 34 * 35 * This source code is licensed under the ISC license. 36 * See the LICENSE file in the root directory of this source tree. 37 */const Or=me("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** 38 * @license lucide-react v0.462.0 - ISC 39 * 40 * This source code is licensed under the ISC license. 41 * See the LICENSE file in the root directory of this source tree. 42 */const m0=me("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);/** 43 * @license lucide-react v0.462.0 - ISC 44 * 45 * This source code is licensed under the ISC license. 46 * See the LICENSE file in the root directory of this source tree. 47 */const p0=me("BellRing",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}]]);/** 48 * @license lucide-react v0.462.0 - ISC 49 * 50 * This source code is licensed under the ISC license. 51 * See the LICENSE file in the root directory of this source tree. 52 */const h0=me("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** 53 * @license lucide-react v0.462.0 - ISC 54 * 55 * This source code is licensed under the ISC license. 56 * See the LICENSE file in the root directory of this source tree. 57 */const jg=me("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** 58 * @license lucide-react v0.462.0 - ISC 59 * 60 * This source code is licensed under the ISC license. 61 * See the LICENSE file in the root directory of this source tree. 62 */const f0=me("CalendarClock",[["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M17.5 17.5 16 16.3V14",key:"akvzfd"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);/** 63 * @license lucide-react v0.462.0 - ISC 64 * 65 * This source code is licensed under the ISC license. 66 * See the LICENSE file in the root directory of this source tree. 67 */const g0=me("CalendarX",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m14 14-4 4",key:"rymu2i"}],["path",{d:"m10 14 4 4",key:"3sz06r"}]]);/** 68 * @license lucide-react v0.462.0 - ISC 69 * 70 * This source code is licensed under the ISC license. 71 * See the LICENSE file in the root directory of this source tree. 72 */const v0=me("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** 73 * @license lucide-react v0.462.0 - ISC 74 * 75 * This source code is licensed under the ISC license. 76 * See the LICENSE file in the root directory of this source tree. 77 */const fn=me("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** 78 * @license lucide-react v0.462.0 - ISC 79 * 80 * This source code is licensed under the ISC license. 81 * See the LICENSE file in the root directory of this source tree. 82 */const _g=me("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** 83 * @license lucide-react v0.462.0 - ISC 84 * 85 * This source code is licensed under the ISC license. 86 * See the LICENSE file in the root directory of this source tree. 87 */const b0=me("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** 88 * @license lucide-react v0.462.0 - ISC 89 * 90 * This source code is licensed under the ISC license. 91 * See the LICENSE file in the root directory of this source tree. 92 */const y0=me("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** 93 * @license lucide-react v0.462.0 - ISC 94 * 95 * This source code is licensed under the ISC license. 96 * See the LICENSE file in the root directory of this source tree. 97 */const x0=me("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** 98 * @license lucide-react v0.462.0 - ISC 99 * 100 * This source code is licensed under the ISC license. 101 * See the LICENSE file in the root directory of this source tree. 102 */const w0=me("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** 103 * @license lucide-react v0.462.0 - ISC 104 * 105 * This source code is licensed under the ISC license. 106 * See the LICENSE file in the root directory of this source tree. 107 */const ri=me("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** 108 * @license lucide-react v0.462.0 - ISC 109 * 110 * This source code is licensed under the ISC license. 111 * See the LICENSE file in the root directory of this source tree. 112 */const C0=me("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/** 113 * @license lucide-react v0.462.0 - ISC 114 * 115 * This source code is licensed under the ISC license. 116 * See the LICENSE file in the root directory of this source tree. 117 */const P0=me("CircleUser",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]]);/** 118 * @license lucide-react v0.462.0 - ISC 119 * 120 * This source code is licensed under the ISC license. 121 * See the LICENSE file in the root directory of this source tree. 122 */const A0=me("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** 123 * @license lucide-react v0.462.0 - ISC 124 * 125 * This source code is licensed under the ISC license. 126 * See the LICENSE file in the root directory of this source tree. 127 */const E0=me("Cookie",[["path",{d:"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5",key:"laymnq"}],["path",{d:"M8.5 8.5v.01",key:"ue8clq"}],["path",{d:"M16 15.5v.01",key:"14dtrp"}],["path",{d:"M12 12v.01",key:"u5ubse"}],["path",{d:"M11 17v.01",key:"1hyl5a"}],["path",{d:"M7 14v.01",key:"uct60s"}]]);/** 128 * @license lucide-react v0.462.0 - ISC 129 * 130 * This source code is licensed under the ISC license. 131 * See the LICENSE file in the root directory of this source tree.
132 */const Og=me("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** 133 * @license lucide-react v0.462.0 - ISC 134 * 135 * This source code is licensed under the ISC license. 136 * See the LICENSE file in the root directory of this source tree. 137 */const ii=me("CreditCard",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);/** 138 * @license lucide-react v0.462.0 - ISC 139 * 140 * This source code is licensed under the ISC license. 141 * See the LICENSE file in the root directory of this source tree. 142 */const us=me("Crown",[["path",{d:"M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z",key:"1vdc57"}],["path",{d:"M5 21h14",key:"11awu3"}]]);/** 143 * @license lucide-react v0.462.0 - ISC 144 * 145 * This source code is licensed under the ISC license. 146 * See the LICENSE file in the root directory of this source tree. 147 */const S0=me("Dot",[["circle",{cx:"12.1",cy:"12.1",r:"1",key:"18d7e5"}]]);/** 148 * @license lucide-react v0.462.0 - ISC 149 * 150 * This source code is licensed under the ISC license. 151 * See the LICENSE file in the root directory of this source tree. 152 */const N0=me("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** 153 * @license lucide-react v0.462.0 - ISC 154 * 155 * This source code is licensed under the ISC license. 156 * See the LICENSE file in the root directory of this source tree. 157 */const k0=me("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** 158 * @license lucide-react v0.462.0 - ISC 159 * 160 * This source code is licensed under the ISC license. 161 * See the LICENSE file in the root directory of this source tree. 162 */const pc=me("EyeClosed",[["path",{d:"m15 18-.722-3.25",key:"1j64jw"}],["path",{d:"M2 8a10.645 10.645 0 0 0 20 0",key:"1e7gxb"}],["path",{d:"m20 15-1.726-2.05",key:"1cnuld"}],["path",{d:"m4 15 1.726-2.05",key:"1dsqqd"}],["path",{d:"m9 18 .722-3.25",key:"ypw2yx"}]]);/** 163 * @license lucide-react v0.462.0 - ISC 164 * 165 * This source code is licensed under the ISC license. 166 * See the LICENSE file in the root directory of this source tree. 167 */const hc=me("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** 168 * @license lucide-react v0.462.0 - ISC 169 * 170 * This source code is licensed under the ISC license. 171 * See the LICENSE file in the root directory of this source tree. 172 */const Cm=me("FileCheck",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m9 15 2 2 4-4",key:"1grp1n"}]]);/** 173 * @license lucide-react v0.462.0 - ISC 174 * 175 * This source code is licensed under the ISC license. 176 * See the LICENSE file in the root directory of this source tree. 177 */const T0=me("FlaskConical",[["path",{d:"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2",key:"pzvekw"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M7 16h10",key:"wp8him"}]]);/** 178 * @license lucide-react v0.462.0 - ISC 179 * 180 * This source code is licensed under the ISC license. 181 * See the LICENSE file in the root directory of this source tree. 182 */const I0=me("Footprints",[["path",{d:"M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z",key:"1dudjm"}],["path",{d:"M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z",key:"l2t8xc"}],["path",{d:"M16 17h4",key:"1dejxt"}],["path",{d:"M4 13h4",key:"1bwh8b"}]]);/** 183 * @license lucide-react v0.462.0 - ISC 184 * 185 * This source code is licensed under the ISC license. 186 * See the LICENSE file in the root directory of this source tree. 187 */const R0=me("Gem",[["path",{d:"M6 3h12l4 6-10 13L2 9Z",key:"1pcd5k"}],["path",{d:"M11 3 8 9l4 13 4-13-3-6",key:"1fcu3u"}],["path",{d:"M2 9h20",key:"16fsjt"}]]);/** 188 * @license lucide-react v0.462.0 - ISC 189 * 190 * This source code is licensed under the ISC license. 191 * See the LICENSE file in the root directory of this source tree. 192 */const Bg=me("Gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]);/** 193 * @license lucide-react v0.462.0 - ISC 194 * 195 * This source code is licensed under the ISC license. 196 * See the LICENSE file in the root directory of this source tree. 197 */const Pm=me("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}
197]]);/** 198 * @license lucide-react v0.462.0 - ISC 199 * 200 * This source code is licensed under the ISC license. 201 * See the LICENSE file in the root directory of this source tree. 202 */const D0=me("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** 203 * @license lucide-react v0.462.0 - ISC 204 * 205 * This source code is licensed under the ISC license. 206 * See the LICENSE file in the root directory of this source tree. 207 */const M0=me("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** 208 * @license lucide-react v0.462.0 - ISC 209 * 210 * This source code is licensed under the ISC license. 211 * See the LICENSE file in the root directory of this source tree. 212 */const zg=me("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** 213 * @license lucide-react v0.462.0 - ISC 214 * 215 * This source code is licensed under the ISC license. 216 * See the LICENSE file in the root directory of this source tree. 217 */const F0=me("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** 218 * @license lucide-react v0.462.0 - ISC 219 * 220 * This source code is licensed under the ISC license. 221 * See the LICENSE file in the root directory of this source tree. 222 */const xt=me("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** 223 * @license lucide-react v0.462.0 - ISC 224 * 225 * This source code is licensed under the ISC license. 226 * See the LICENSE file in the root directory of this source tree. 227 */const Nr=me("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/** 228 * @license lucide-react v0.462.0 - ISC 229 * 230 * This source code is licensed under the ISC license. 231 * See the LICENSE file in the root directory of this source tree. 232 */const jd=me("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** 233 * @license lucide-react v0.462.0 - ISC 234 * 235 * This source code is licensed under the ISC license. 236 * See the LICENSE file in the root directory of this source tree. 237 */const Ei=me("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** 238 * @license lucide-react v0.462.0 - ISC 239 * 240 * This source code is licensed under the ISC license. 241 * See the LICENSE file in the root directory of this source tree. 242 */const L0=me("Megaphone",[["path",{d:"m3 11 18-5v12L3 14v-3z",key:"n962bs"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}]]);/** 243 * @license lucide-react v0.462.0 - ISC 244 * 245 * This source code is licensed under the ISC license. 246 * See the LICENSE file in the root directory of this source tree. 247 */const Am=me("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** 248 * @license lucide-react v0.462.0 - ISC 249 * 250 * This source code is licensed under the ISC license. 251 * See the LICENSE file in the root directory of this source tree. 252 */const j0=me("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** 253 * @license lucide-react v0.462.0 - ISC 254 * 255 * This source code is licensed under the ISC license. 256 * See the LICENSE file in the root directory of this source tree. 257 */const _0=me("MessageSquareText",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M13 8H7",key:"14i4kc"}],["path",{d:"M17 12H7",key:"16if0g"}]]);/** 258 * @license lucide-react v0.462.0 - ISC 259 * 260 * This source code is licensed under the ISC license. 261 * See the LICENSE file in the root directory of this source tree. 262 */const _d=me("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** 263 * @license lucide-react v0.462.0 - ISC 264 * 265 * This source code is licensed under the ISC license. 266 * See the LICENSE file in the root directory of this source tree. 267 */const O0=me("PackageOpen",[["path",{d:"M12 22v-9",key:"x3hkom"}],["path",{d:"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z",key:"2ntwy6"}],["path",{d:"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13",key:"1pmm1c"}],["path",{d:"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z",key:"12ttoo"}]]);/** 268 * @license lucide-react v0.462.0 - ISC 269 * 270 * This source code is licensed under the ISC license. 271 * See the LICENSE file in the root directory of this source tree. 272 */const B0=me("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}
272],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** 273 * @license lucide-react v0.462.0 - ISC 274 * 275 * This source code is licensed under the ISC license. 276 * See the LICENSE file in the root directory of this source tree. 277 */const z0=me("QrCode",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]]);/** 278 * @license lucide-react v0.462.0 - ISC 279 * 280 * This source code is licensed under the ISC license. 281 * See the LICENSE file in the root directory of this source tree. 282 */const V0=me("RefreshCcw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);/** 283 * @license lucide-react v0.462.0 - ISC 284 * 285 * This source code is licensed under the ISC license. 286 * See the LICENSE file in the root directory of this source tree. 287 */const q0=me("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** 288 * @license lucide-react v0.462.0 - ISC 289 * 290 * This source code is licensed under the ISC license. 291 * See the LICENSE file in the root directory of this source tree. 292 */const U0=me("Rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]);/** 293 * @license lucide-react v0.462.0 - ISC 294 * 295 * This source code is licensed under the ISC license. 296 * See the LICENSE file in the root directory of this source tree. 297 */const Pl=me("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** 298 * @license lucide-react v0.462.0 - ISC 299 * 300 * This source code is licensed under the ISC license. 301 * See the LICENSE file in the root directory of this source tree. 302 */const Em=me("Rss",[["path",{d:"M4 11a9 9 0 0 1 9 9",key:"pv89mb"}],["path",{d:"M4 4a16 16 0 0 1 16 16",key:"k0647b"}],["circle",{cx:"5",cy:"19",r:"1",key:"bfqh0e"}]]);/** 303 * @license lucide-react v0.462.0 - ISC 304 * 305 * This source code is licensed under the ISC license. 306 * See the LICENSE file in the root directory of this source tree. 307 */const W0=me("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** 308 * @license lucide-react v0.462.0 - ISC 309 * 310 * This source code is licensed under the ISC license. 311 * See the LICENSE file in the root directory of this source tree. 312 */const $0=me("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** 313 * @license lucide-react v0.462.0 - ISC 314 * 315 * This source code is licensed under the ISC license. 316 * See the LICENSE file in the root directory of this source tree. 317 */const Od=me("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** 318 * @license lucide-react v0.462.0 - ISC 319 * 320 * This source code is licensed under the ISC license. 321 * See the LICENSE file in the root directory of this source tree. 322 */const ms=me("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",ke
322y:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** 323 * @license lucide-react v0.462.0 - ISC 324 * 325 * This source code is licensed under the ISC license. 326 * See the LICENSE file in the root directory of this source tree. 327 */const Sm=me("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** 328 * @license lucide-react v0.462.0 - ISC 329 * 330 * This source code is licensed under the ISC license. 331 * See the LICENSE file in the root directory of this source tree. 332 */const qs=me("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** 333 * @license lucide-react v0.462.0 - ISC 334 * 335 * This source code is licensed under the ISC license. 336 * See the LICENSE file in the root directory of this source tree. 337 */const G0=me("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/** 338 * @license lucide-react v0.462.0 - ISC 339 * 340 * This source code is licensed under the ISC license. 341 * See the LICENSE file in the root directory of this source tree. 342 */const Un=me("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** 343 * @license lucide-react v0.462.0 - ISC 344 * 345 * This source code is licensed under the ISC license. 346 * See the LICENSE file in the root directory of this source tree. 347 */const H0=me("Sprout",[["path",{d:"M7 20h10",key:"e6iznv"}],["path",{d:"M10 20c5.5-2.5.8-6.4 3-10",key:"161w41"}],["path",{d:"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z",key:"9gtqwd"}],["path",{d:"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z",key:"bkxnd2"}]]);/** 348 * @license lucide-react v0.462.0 - ISC 349 * 350 * This source code is licensed under the ISC license. 351 * See the LICENSE file in the root directory of this source tree. 352 */const K0=me("SquareKanban",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M8 7v7",key:"1x2jlm"}],["path",{d:"M12 7v4",key:"xawao1"}],["path",{d:"M16 7v9",key:"1hp2iy"}]]);/** 353 * @license lucide-react v0.462.0 - ISC 354 * 355 * This source code is licensed under the ISC license. 356 * See the LICENSE file in the root directory of this source tree. 357 */const X0=me("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/** 358 * @license lucide-react v0.462.0 - ISC 359 * 360 * This source code is licensed under the ISC license. 361 * See the LICENSE file in the root directory of this source tree. 362 */const Vg=me("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** 363 * @license lucide-react v0.462.0 - ISC 364 * 365 * This source code is licensed under the ISC license. 366 * See the LICENSE file in the root directory of this source tree. 367 */const Y0=me("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** 368 * @license lucide-react v0.462.0 - ISC 369 * 370 * This source code is licensed under the ISC license. 371 * See the LICENSE file in the root directory of this source tree. 372 */const fc=me("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}
372],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** 373 * @license lucide-react v0.462.0 - ISC 374 * 375 * This source code is licensed under the ISC license. 376 * See the LICENSE file in the root directory of this source tree. 377 */const Q0=me("TrendingDown",[["polyline",{points:"22 17 13.5 8.5 8.5 13.5 2 7",key:"1r2t7k"}],["polyline",{points:"16 17 22 17 22 11",key:"11uiuu"}]]);/** 378 * @license lucide-react v0.462.0 - ISC 379 * 380 * This source code is licensed under the ISC license. 381 * See the LICENSE file in the root directory of this source tree. 382 */const Z0=me("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** 383 * @license lucide-react v0.462.0 - ISC 384 * 385 * This source code is licensed under the ISC license. 386 * See the LICENSE file in the root directory of this source tree. 387 */const Wa=me("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** 388 * @license lucide-react v0.462.0 - ISC 389 * 390 * This source code is licensed under the ISC license. 391 * See the LICENSE file in the root directory of this source tree. 392 */const J0=me("Undo2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);/** 393 * @license lucide-react v0.462.0 - ISC 394 * 395 * This source code is licensed under the ISC license. 396 * See the LICENSE file in the root directory of this source tree. 397 */const eA=me("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** 398 * @license lucide-react v0.462.0 - ISC 399 * 400 * This source code is licensed under the ISC license. 401 * See the LICENSE file in the root directory of this source tree. 402 */const tA=me("UserMinus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** 403 * @license lucide-react v0.462.0 - ISC 404 * 405 * This source code is licensed under the ISC license. 406 * See the LICENSE file in the root directory of this source tree. 407 */const aA=me("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** 408 * @license lucide-react v0.462.0 - ISC 409 * 410 * This source code is licensed under the ISC license. 411 * See the LICENSE file in the root directory of this source tree. 412 */const qg=me("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** 413 * @license lucide-react v0.462.0 - ISC 414 * 415 * This source code is licensed under the ISC license. 416 * See the LICENSE file in the root directory of this source tree. 417 */const oA=me("Video",[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]]);/** 418 * @license lucide-react v0.462.0 - ISC 419 * 420 * This source code is licensed under the ISC license. 421 * See the LICENSE file in the root directory of this source tree. 422 */const Nm=me("Wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);/** 423 * @license lucide-react v0.462.0 - ISC 424 * 425 * This source code is licensed under the ISC license. 426 * See the LICENSE file in the root directory of this source tree. 427 */const nA=me("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);/** 428 * @license lucide-react v0.462.0 - ISC 429 * 430 * This source code is licensed under the ISC license. 431 * See the LICENSE file in the root directory of this source tree. 432 */const Ug=me("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** 433 * @license lucide-react v0.462.0 - ISC 434 * 435 * This source code is licensed under the ISC license. 436 * See the LICENSE file in the root directory of this source tree. 437 */const Ma=me("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}
437],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** 438 * @license lucide-react v0.462.0 - ISC 439 * 440 * This source code is licensed under the ISC license. 441 * See the LICENSE file in the root directory of this source tree. 442 */const Wg=me("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),Bd=()=>i.jsxs("aside",{className:"hidden md:flex w-60 shrink-0 flex-col border-r border-border/40 bg-card/30",children:[i.jsx("div",{className:"h-14 border-b border-border/40"}),i.jsx("div",{className:"flex-1 p-3 space-y-2",children:Array.from({length:10}).map((e,t)=>i.jsx("div",{className:"h-8 w-full rounded-md bg-muted/30 animate-pulse",style:{animationDelay:`${t*40}ms`}},t))})]}),si=()=>i.jsxs("div",{className:"h-14 w-full border-b border-border/40 bg-card/40 flex items-center px-4 gap-3",children:[i.jsx("div",{className:"h-6 w-40 rounded bg-muted/40 animate-pulse"}),i.jsx("div",{className:"ml-auto h-8 w-8 rounded-full bg-muted/40 animate-pulse"})]}),rA=()=>i.jsxs("div",{className:"flex h-screen w-full bg-background",children:[i.jsx(Bd,{}),i.jsxs("div",{className:"flex-1 flex flex-col min-w-0",children:[i.jsx(si,{}),i.jsxs("div",{className:"flex-1 flex min-h-0",children:[i.jsx("div",{className:"w-80 border-r border-border/40 p-3 space-y-2",children:Array.from({length:8}).map((e,t)=>i.jsx("div",{className:"h-16 rounded-lg bg-muted/30 animate-pulse",style:{animationDelay:`${t*60}ms`}},t))}),i.jsxs("div",{className:"flex-1 p-6 space-y-3",children:[i.jsx("div",{className:"h-5 w-48 rounded bg-muted/40 animate-pulse"}),i.jsx("div",{className:"h-4 w-72 rounded bg-muted/30 animate-pulse"}),i.jsx("div",{className:"mt-8 space-y-3",children:[0,1,2,3].map(e=>i.jsx("div",{className:`h-12 rounded-xl bg-muted/30 animate-pulse ${e%2?"ml-auto w-2/3":"w-2/3"}`,style:{animationDelay:`${e*80}ms`}},e))})]})]})]})]}),Al=({cols:e=3,rows:t=2})=>i.jsxs("div",{className:"flex h-screen w-full bg-background",children:[i.jsx(Bd,{}),i.jsxs("div",{className:"flex-1 flex flex-col min-w-0",children:[i.jsx(si,{}),i.jsxs("div",{className:"p-6 space-y-4",children:[i.jsx("div",{className:"h-6 w-56 rounded bg-muted/50 animate-pulse"}),i.jsx("div",{className:"h-4 w-80 rounded bg-muted/30 animate-pulse"}),i.jsx("div",{className:"mt-4 grid gap-3",style:{gridTemplateColumns:`repeat(${e}, minmax(0, 1fr))`},children:Array.from({length:e*t}).map((a,o)=>i.jsx("div",{className:"h-32 rounded-lg bg-muted/30 animate-pulse",style:{animationDelay:`${o*50}ms`}},o))})]})]})]}),km=()=>i.jsxs("div",{className:"flex h-screen w-full bg-background",children:[i.jsx(Bd,{}),i.jsxs("div",{className:"flex-1 flex flex-col min-w-0",children:[i.jsx(si,{}),i.jsxs("div",{className:"p-6 space-y-3",children:[i.jsx("div",{className:"h-6 w-48 rounded bg-muted/50 animate-pulse"}),Array.from({length:8}).map((e,t)=>i.jsx("div",{className:"h-14 rounded-lg bg-muted/30 animate-pulse",style:{animationDelay:`${t*50}ms`}},t))]})]})]}),$g=({label:e="Carregando sistema..."})=>i.jsx("div",{className:"pointer-events-none fixed inset-0 z-[80] flex items-center justify-center",children:i.jsx(xt,{className:"h-10 w-10 animate-spin text-accent","aria-label":e})}),iA=()=>i.jsxs("div",{className:"min-h-screen w-full bg-background relative",children:[i.jsx(si,{}),i.jsx("div",{className:"px-6 py-8",children:i.jsxs("div",{className:"max-w-5xl mx-auto space-y-4",children:[i.jsx("div",{className:"h-6 w-48 rounded bg-muted/60 animate-pulse"}),i.jsx("div",{className:"h-4 w-72 rounded bg-muted/40 animate-pulse"}),i.jsx("div",{className:"mt-6 grid grid-cols-1 md:grid-cols-3 gap-3",children:[0,1,2].map(e=>i.jsx("div",{className:"h-24 rounded-lg bg-muted/30 animate-pulse",style:{animationDelay:`${e*80}ms`}},e))})]})}),i.jsx($g,{label:"Carregando..."})]}),sA=()=>i.jsxs("div",{className:"min-h-screen w-full bg-background relative",children:[i.jsx(si,{}),i.jsx("div",{className:"px-6 py-8",children:i.jsxs("div",{className:"max-w-5xl mx-auto space-y-4",children:[i.jsx("div",{className:"h-6 w-56 rounded bg-muted/60 animate-pulse"}),i.jsx("div",{className:"h-4 w-80 rounded bg-muted/40 animate-pulse"}),i.jsx("div",{className:"mt-6 grid grid-cols-1 md:grid-cols-3 gap-3",children:[0,1,2].map(e=>i.jsx("div",{className:"h-24 rounded-lg bg-muted/30 animate-pulse",style:{animationDelay:`${e*80}ms`}},e))})]})}),i.jsx($g,{})]}),lA=e=>e.startsWith("/inbox")?i.jsx(rA,{}):e.startsWith("/marketplace")?i.jsx(Al,{cols:3,rows:3}):e.startsWith("/ads")||e.startsWith("/facebook-ads")?i.jsx(Al,{cols:4,rows:2}):e.startsWith("/groups")||e.startsWith("/grupos")?i.jsx(km,{}):e.startsWith("/ia-studio")||e.startsWith("/ai-studio")?i.jsx(Al,{cols:2,rows:3}):e.startsWith("/gerador-audio")||e.startsWith("/transcricao-audio")||e.startsWith("/video-downloader")||e.startsWith("/zap-converter")||e.startsWith("/track-ofertas")||e.startsWith("/extensao-ads")?i.jsx(sA,{}):e.startsWith("/disparazap")||e.startsWith("/automatizap")?i.jsx(km,{}):i.jsx(iA,{}),cA=()=>{const e=Ao();return lA(e.pathname)},dA={"/inbox":()=>ge(()=>import("./InboxDashboard-B9Coke4P.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48])),"/inbox/chat":()=>ge(()=>import("./InboxPage-C0MA1Gyw.js"),__vite__mapDeps([49,1,2,50,12,51,52,14,36,9,10,11,13,15,16,17,18,19,20,21,53,39,8,26,27,29,37,47,54,6,55,7,56,57,35,58,59,28,44,60,33,61,62,48,63,64,65,66,67,68,69,70,71,72,73,74,40,75,76,77,30,78,79,80])),"/inbox/flows":()=>ge(()=>import("./FlowListPage-DyjBHoJP.js"),__vite__mapDeps([81,1,54,12,51,82,14,83,84,85,42,86,87,37,58,57,33,61,62,88,60,71,21,20,73,18,38,89,19,90,91,92,93,94,30,48,2,56,13,15,16,3,4,55,11,95,96,97,98,99,100,52,36,27,67,53,101,76,77,39,102,34,80,103])),"/inbox/flows/_editor":()=>ge(()=>Promise.resolve().then(()=>jQ),void 0),"/inbox/kanban":()=>ge(()=>import("./InboxKanbanPage-JBzS9APP.js"),__vite__mapDeps([104,1,13,54,12,51,17,18,15,16,82,27,40,44,21,20,99,53,19,37,105,100,48])),"/inbox/quick-replies":()=>ge(()=>import("./QuickRepliesPage-W_0kTw6B.js"),__vite__mapDeps([106,1,2,65,68,66,20,37,76,48])),"/settings":()=>ge(()=>import("./Settings-CCnuPf1H.js"),__vite__mapDeps([107,1,13,32,108,4,2,20,3,27,53,66,30,109,100,89,8,48])),"/subscription":()=>ge(()=>import("./SubscriptionPage-yoSUMmq5.js"),__vite__mapDeps([110,1,83,111,35,11,12,40,48])),"/marketplace":()=>ge(()=>import("./Marketplace-asxSQE4P.js"),__vite__mapDeps([112,1,113,11,12,35,114,115,27,116,3,4,2,26,90,29,21,30,31,117,60,118,109,20,95,97,48])),"/affiliate":()=>ge(()=>import("./AffiliateDashboard-C3PConFt.js"),__vite__mapDeps([119,1,120,2,5,6,7,8,41,42,121,95,101,98,40,64,43,48])),"/metricas":()=>ge(()=>import("./Index-D0rh-7DT.js"),__vite__mapDeps([122,1,11,12,123,2,5,6,7,8,40,124,101,25,125,120,20,30,41,42,126,43,48])),"/disparador":()=>ge(()=>import("./MessageBlaster-DvYn9Z0S.js"),__vite__mapDeps([127,1,11,12,20,37,105,47,128,61,21,33,71,48])),"/criativos":()=>ge(()=>import("./CreativeCanvasProjects-B59S_efy.js"),__vite__mapDeps([129,1,11,12,54,51,130,103,102,20,94,67,80,30,48])),"/ads":()=>ge(()=>import("./AdsLayout-CDh_2jLs.js"),__vite__mapDeps([131,1,2,12,5,6,7,8,132,74,20,30,120,37,40,41,42,43,126,82,27,99,61,33,101,94,44,45,47,21,133,3,4,134,48])),"/tutoriais":()=>ge(()=>import("./Tutoriais-B4nUSoFd.js"),__vite__mapDeps([135,1,136,27,103,48])),"/gerador-audio":()=>ge(()=>
442import("./AudioGenerator-yxIJxIht.js"),__vite__mapDeps([137,1,62,63,58,20,105,33,61,48])),"/transcricao-audio":()=>ge(()=>import("./AudioTranscriber-fEXvGWhh.js"),__vite__mapDeps([138,1,48])),"/video-downloader":()=>ge(()=>import("./VideoDownloader-BRd16IAH.js"),__vite__mapDeps([139,1,140,48])),"/zap-converter":()=>ge(()=>import("./ZapdataConverter-CEOZwYck.js"),__vite__mapDeps([141,1,21,48])),"/track-ofertas":()=>ge(()=>import("./TrackOfertas-Db0D9pwE.js"),__vite__mapDeps([142,1,20,79,143,21,41,42,144,97,7,48])),"/extensao-ads":()=>ge(()=>import("./ExtensaoAdsWhatsApp-Rjnug-PO.js"),__vite__mapDeps([145,1,11,12,108,4,39,103,105,48])),"/inbox/flows/groups":()=>ge(()=>import("./GroupFlowsPage-CspvTbEj.js"),__vite__mapDeps([146,1,77,20,48]))},El=new Set;function Gg(e){if(typeof window>"u")return;const t=[e];/^\/inbox\/flows\/[^/]+$/.test(e)&&e!=="/inbox/flows/groups"&&t.unshift("/inbox/flows/_editor");const a=e.lastIndexOf("/");a>0&&t.push(e.slice(0,a));for(const o of t){if(El.has(o))return;const n=dA[o];if(n){El.add(o);const r=()=>n().catch(()=>El.delete(o)),s=window.requestIdleCallback;s?s(r,{timeout:1500}):setTimeout(r,50);return}}}function uA(){["/inbox","/inbox/chat","/inbox/flows","/inbox/flows/groups","/marketplace","/gerador-audio","/ads","/criativos","/disparador","/affiliate","/settings","/subscription"].forEach((t,a)=>{setTimeout(()=>Gg(t),1200+a*300)})}function qe(e,t,{checkForDefaultPrevented:a=!0}={}){return function(n){if(e==null||e(n),a===!1||!n.defaultPrevented)return t==null?void 0:t(n)}}function Tm(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Hg(...e){return t=>{let a=!1;const o=e.map(n=>{const r=Tm(n,t);return!a&&typeof r=="function"&&(a=!0),r});if(a)return()=>{for(let n=0;n<o.length;n++){const r=o[n];typeof r=="function"?r():Tm(e[n],null)}}}}function Qe(...e){return g.useCallback(Hg(...e),e)}function mA(e,t){const a=g.createContext(t),o=r=>{const{children:s,...l}=r,c=g.useMemo(()=>l,Object.values(l));return i.jsx(a.Provider,{value:c,children:s})};o.displayName=e+"Provider";function n(r){const s=g.useContext(a);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${r}\` must be used within \`${e}\``)}return[o,n]}function La(e,t=[]){let a=[];function o(r,s){const l=g.createContext(s),c=a.length;a=[...a,s];const d=m=>{var y;const{scope:h,children:p,...v}=m,f=((y=h==null?void 0:h[e])==null?void 0:y[c])||l,b=g.useMemo(()=>v,Object.values(v));return i.jsx(f.Provider,{value:b,children:p})};d.displayName=r+"Provider";function u(m,h){var f;const p=((f=h==null?void 0:h[e])==null?void 0:f[c])||l,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${m}\` must be used within \`${r}\``)}return[d,u]}const n=()=>{const r=a.map(s=>g.createContext(s));return function(l){const c=(l==null?void 0:l[e])||r;return g.useMemo(()=>({[`__scope${e}`]:{...l,[e]:c}}),[l,c])}};return n.scopeName=e,[o,pA(n,...t)]}function pA(...e){const t=e[0];if(e.length===1)return t;const a=()=>{const o=e.map(n=>({useScope:n(),scopeName:n.scopeName}));return function(r){const s=o.reduce((l,{useScope:c,scopeName:d})=>{const m=c(r)[`__scope${d}`];return{...l,...m}},{});return g.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return a.scopeName=t.scopeName,a}function Wn(e){const t=fA(e),a=g.forwardRef((o,n)=>{const{children:r,...s}
442=o,l=g.Children.toArray(r),c=l.find(gA);if(c){const d=c.props.children,u=l.map(m=>m===c?g.Children.count(d)>1?g.Children.only(null):g.isValidElement(d)?d.props.children:null:m);return i.jsx(t,{...s,ref:n,children:g.isValidElement(d)?g.cloneElement(d,void 0,u):null})}return i.jsx(t,{...s,ref:n,children:r})});return a.displayName=`${e}.Slot`,a}var hA=Wn("Slot");function fA(e){const t=g.forwardRef((a,o)=>{const{children:n,...r}=a;if(g.isValidElement(n)){const s=bA(n),l=vA(r,n.props);return n.type!==g.Fragment&&(l.ref=o?Hg(o,s):s),g.cloneElement(n,l)}return g.Children.count(n)>1?g.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Kg=Symbol("radix.slottable");function Xg(e){const t=({children:a})=>i.jsx(i.Fragment,{children:a});return t.displayName=`${e}.Slottable`,t.__radixId=Kg,t}function gA(e){return g.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Kg}function vA(e,t){const a={...t};for(const o in t){const n=e[o],r=t[o];/^on[A-Z]/.test(o)?n&&r?a[o]=(...l)=>{const c=r(...l);return n(...l),c}:n&&(a[o]=n):o==="style"?a[o]={...n,...r}:o==="className"&&(a[o]=[n,r].filter(Boolean).join(" "))}return{...e,...a}}function bA(e){var o,n;let t=(o=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:o.get,a=t&&"isReactWarning"in t&&t.isReactWarning;return a?e.ref:(t=(n=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:n.get,a=t&&"isReactWarning"in t&&t.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}var yA=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],_e=yA.reduce((e,t)=>{const a=Wn(`Primitive.${t}`),o=g.forwardRef((n,r)=>{const{asChild:s,...l}=n,c=s?a:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(c,{...l,ref:r})});return o.displayName=`Primitive.${t}`,{...e,[t]:o}},{});function xA(e,t){e&&Vs.flushSync(()=>e.dispatchEvent(t))}function bo(e){const t=g.useRef(e);return g.useEffect(()=>{t.current=e}),g.useMemo(()=>(...a)=>{var o;return(o=t.current)==null?void 0:o.call(t,...a)},[])}function wA(e,t=globalThis==null?void 0:globalThis.document){const a=bo(e);g.useEffect(()=>{const o=n=>{n.key==="Escape"&&a(n)};return t.addEventListener("keydown",o,{capture:!0}),()=>t.removeEventListener("keydown",o,{capture:!0})},[a,t])}var CA="DismissableLayer",gc="dismissableLayer.update",PA="dismissableLayer.pointerDownOutside",AA="dismissableLayer.focusOutside",Im,Yg=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Us=g.forwardRef((e,t)=>{const{disableOutsidePointerEvents:a=!1,onEscapeKeyDown:o,onPointerDownOutside:n,onFocusOutside:r,onInteractOutside:s,onDismiss:l,...c}=e,d=g.useContext(Yg),[u,m]=g.useState(null),h=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=g.useState({}),v=Qe(t,S=>m(S)),f=Array.from(d.layers),[b]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),y=f.indexOf(b),x=u?f.indexOf(u):-1,w=d.layersWithOutsidePointerEventsDisabled.size>0,P=x>=y,E=NA(S=>{const R=S.target,I=[...d.branches].some(M=>M.contains(R));!P||I||(n==null||n(S),s==null||s(S),S.defaultPrevented||l==null||l())},h),k=kA(S=>{const R=S.target;[...d.branches].some(M=>M.contains(R))||(r==null||r(S),s==null||s(S),S.defaultPrevented||l==null||l())},h);return wA(S=>{x===d.layers.size-1&&(o==null||o(S),!S.defaultPrevented&&l&&(S.preventDefault(),l()))},h),g.useEffect(()=>{if(u)return a&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(Im=h.body.style.pointerEvents,h.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(u)),d.layers.add(u),Rm(),()=>{a&&d.layersWithOutsidePointerEventsDisabled.size===1&&(h.body.style.pointerEvents=Im)}},[u,h,a,d]),g.useEffect(()=>()=>{u&&(d.layers.delete(u),d.layersWithOutsidePointerEventsDisabled.delete(u),Rm())},[u,d]),g.useEffect(()=>{const S=()=>p({});return document.addEventListener(gc,S),()=>document.removeEventListener(gc,S)},[]),i.jsx(_e.div,{...c,ref:v,style:{pointerEvents:w?P?"auto":"none":void 0,...e.style},onFocusCapture:qe(e.onFocusCapture,k.onFocusCapture),onBlurCapture:qe(e.onBlurCapture,k.onBlurCapture),onPointerDownCapture:qe(e.onPointerDownCapture,E.onPointerDownCapture)})});Us.displayName=CA;var EA="DismissableLayerBranch",SA=g.forwardRef((e,t)=>
442{const a=g.useContext(Yg),o=g.useRef(null),n=Qe(t,o);return g.useEffect(()=>{const r=o.current;if(r)return a.branches.add(r),()=>{a.branches.delete(r)}},[a.branches]),i.jsx(_e.div,{...e,ref:n})});SA.displayName=EA;function NA(e,t=globalThis==null?void 0:globalThis.document){const a=bo(e),o=g.useRef(!1),n=g.useRef(()=>{});return g.useEffect(()=>{const r=l=>{if(l.target&&!o.current){let c=function(){Qg(PA,a,d,{discrete:!0})};const d={originalEvent:l};l.pointerType==="touch"?(t.removeEventListener("click",n.current),n.current=c,t.addEventListener("click",n.current,{once:!0})):c()}else t.removeEventListener("click",n.current);o.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",r)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",r),t.removeEventListener("click",n.current)}},[t,a]),{onPointerDownCapture:()=>o.current=!0}}function kA(e,t=globalThis==null?void 0:globalThis.document){const a=bo(e),o=g.useRef(!1);return g.useEffect(()=>{const n=r=>{r.target&&!o.current&&Qg(AA,a,{originalEvent:r},{discrete:!1})};return t.addEventListener("focusin",n),()=>t.removeEventListener("focusin",n)},[t,a]),{onFocusCapture:()=>o.current=!0,onBlurCapture:()=>o.current=!1}}function Rm(){const e=new CustomEvent(gc);document.dispatchEvent(e)}function Qg(e,t,a,{discrete:o}){const n=a.originalEvent.target,r=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:a});t&&n.addEventListener(e,t,{once:!0}),o?xA(n,r):n.dispatchEvent(r)}var Pt=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},TA=Sg[" useId ".trim().toString()]||(()=>{}),IA=0;function Xo(e){const[t,a]=g.useState(TA());return Pt(()=>{a(o=>o??String(IA++))},[e]),t?`radix-${t}`:""}const RA=["top","right","bottom","left"],yo=Math.min,Qt=Math.max,ps=Math.round,Si=Math.floor,Ia=e=>({x:e,y:e}),DA={left:"right",right:"left",bottom:"top",top:"bottom"},MA={start:"end",end:"start"};function vc(e,t,a){return Qt(e,yo(t,a))}function $a(e,t){return typeof e=="function"?e(t):e}function Ga(e){return e.split("-")[0]}function Qn(e){return e.split("-")[1]}function zd(e){return e==="x"?"y":"x"}function Vd(e){return e==="y"?"height":"width"}const FA=new Set(["top","bottom"]);function ka(e){return FA.has(Ga(e))?"y":"x"}function qd(e){return zd(ka(e))}function LA(e,t,a){a===void 0&&(a=!1);const o=Qn(e),n=qd(e),r=Vd(n);let s=n==="x"?o===(a?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[r]>t.floating[r]&&(s=hs(s)),[s,hs(s)]}function jA(e){const t=hs(e);return[bc(e),t,bc(t)]}function bc(e){return e.replace(/start|end/g,t=>MA[t])}const Dm=["left","right"],Mm=["right","left"],_A=["top","bottom"],OA=["bottom","top"];function BA(e,t,a){switch(e){case"top":case"bottom":return a?t?Mm:Dm:t?Dm:Mm;case"left":case"right":return t?_A:OA;default:return[]}}function zA(e,t,a,o){const n=Qn(e);let r=BA(Ga(e),a==="start",o);return n&&(r=r.map(s=>s+"-"+n),t&&(r=r.concat(r.map(bc)))),r}function hs(e){return e.replace(/left|right|bottom|top/g,t=>DA[t])}function VA(e){return{top:0,right:0,bottom:0,left:0,...e}}function Zg(e){return typeof e!="number"?VA(e):{top:e,right:e,bottom:e,left:e}}function fs(e){const{x:t,y:a,width:o,height:n}=e;return{width:o,height:n,top:a,left:t,right:t+o,bottom:a+n,x:t,y:a}}function Fm(e,t,a){let{reference:o,floating:n}=e;const r=ka(t),s=qd(t),l=Vd(s),c=Ga(t),d=r==="y",u=o.x+o.width/2-n.width/2,m=o.y+o.height/2-n.height/2,h=o[l]/2-n[l]/2;let p;switch(c){case"top":p={x:u,y:o.y-n.height};break;case"bottom":p={x:u,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:m};break;case"left":p={x:o.x-n.width,y:m};break;default:p={x:o.x,y:o.y}}switch(Qn(t)){case"start":p[s]-=h*(a&&d?-1:1);break;case"end":p[s]+=h*(a&&d?-1:1);break}return p}const qA=async(e,t,a)=>{const{placement:o="bottom",strategy:n="absolute",middleware:r=[],platform:s}=a,l=r.filter(Boolean),c=await(s.isRTL==null?void 0:s.isRTL(t));let d=await s.getElementRects({reference:e,floating:t,strategy:n}),{x:u,y:m}=Fm(d,o,c),h=o,p={},v=0;for(let f=0;f<l.length;f++){const{name:b,fn:y}=l[f],{x,y:w,data:P,reset:E}=await y({x:u,y:m,initialPlacement:o,placement:h,strategy:n,middlewareData:p,rects:d,platform:s,elements:{reference:e,floating:t}});u=x??u,m=w??m,p={...p,[b]:{...p[b],...P}},E&&v<=50&&(v++,typeof E=="object"&&(E.placement&&(h=E.placement),E.rects&&(d=E.rects===!0?await s.getElementRects({reference:e,floating:t,strategy:n}):E.rects),{x:u,y:m}=Fm(d,h,c)),f=-1)}return{x:u,y:m,placement:h,strategy:n,middlewareData:p}};async function Br(e,t){var a;t===void 0&&(t={});
442const{x:o,y:n,platform:r,rects:s,elements:l,strategy:c}=e,{boundary:d="clippingAncestors",rootBoundary:u="viewport",elementContext:m="floating",altBoundary:h=!1,padding:p=0}=$a(t,e),v=Zg(p),b=l[h?m==="floating"?"reference":"floating":m],y=fs(await r.getClippingRect({element:(a=await(r.isElement==null?void 0:r.isElement(b)))==null||a?b:b.contextElement||await(r.getDocumentElement==null?void 0:r.getDocumentElement(l.floating)),boundary:d,rootBoundary:u,strategy:c})),x=m==="floating"?{x:o,y:n,width:s.floating.width,height:s.floating.height}:s.reference,w=await(r.getOffsetParent==null?void 0:r.getOffsetParent(l.floating)),P=await(r.isElement==null?void 0:r.isElement(w))?await(r.getScale==null?void 0:r.getScale(w))||{x:1,y:1}:{x:1,y:1},E=fs(r.convertOffsetParentRelativeRectToViewportRelativeRect?await r.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:x,offsetParent:w,strategy:c}):x);return{top:(y.top-E.top+v.top)/P.y,bottom:(E.bottom-y.bottom+v.bottom)/P.y,left:(y.left-E.left+v.left)/P.x,right:(E.right-y.right+v.right)/P.x}}const UA=e=>({name:"arrow",options:e,async fn(t){const{x:a,y:o,placement:n,rects:r,platform:s,elements:l,middlewareData:c}=t,{element:d,padding:u=0}=$a(e,t)||{};if(d==null)return{};const m=Zg(u),h={x:a,y:o},p=qd(n),v=Vd(p),f=await s.getDimensions(d),b=p==="y",y=b?"top":"left",x=b?"bottom":"right",w=b?"clientHeight":"clientWidth",P=r.reference[v]+r.reference[p]-h[p]-r.floating[v],E=h[p]-r.reference[p],k=await(s.getOffsetParent==null?void 0:s.getOffsetParent(d));let S=k?k[w]:0;(!S||!await(s.isElement==null?void 0:s.isElement(k)))&&(S=l.floating[w]||r.floating[v]);const R=P/2-E/2,I=S/2-f[v]/2-1,M=yo(m[y],I),q=yo(m[x],I),N=M,F=S-f[v]-q,A=S/2-f[v]/2+R,_=vc(N,A,F),K=!c.arrow&&Qn(n)!=null&&A!==_&&r.reference[v]/2-(A<N?M:q)-f[v]/2<0,V=K?A<N?A-N:A-F:0;return{[p]:h[p]+V,data:{[p]:_,centerOffset:A-_-V,...K&&{alignmentOffset:V}},reset:K}}}),WA=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var a,o;const{placement:n,middlewareData:r,rects:s,initialPlacement:l,platform:c,elements:d}=t,{mainAxis:u=!0,crossAxis:m=!0,fallbackPlacements:h,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:f=!0,...b}=$a(e,t);if((a=r.arrow)!=null&&a.alignmentOffset)return{};const y=Ga(n),x=ka(l),w=Ga(l)===l,P=await(c.isRTL==null?void 0:c.isRTL(d.floating)),E=h||(w||!f?[hs(l)]:jA(l)),k=v!=="none";!h&&k&&E.push(...zA(l,f,v,P));const S=[l,...E],R=await Br(t,b),I=[];let M=((o=r.flip)==null?void 0:o.overflows)||[];if(u&&I.push(R[y]),m){const A=LA(n,s,P);I.push(R[A[0]],R[A[1]])}if(M=[...M,{placement:n,overflows:I}],!I.every(A=>A<=0)){var q,N;const A=(((q=r.flip)==null?void 0:q.index)||0)+1,_=S[A];if(_&&(!(m==="alignment"?x!==ka(_):!1)||M.every(H=>H.overflows[0]>0&&ka(H.placement)===x)))return{data:{index:A,overflows:M},reset:{placement:_}};let K=(N=M.filter(V=>V.overflows[0]<=0).sort((V,H)=>V.overflows[1]-H.overflows[1])[0])==null?void 0:N.placement;if(!K)switch(p){case"bestFit":{var F;const V=(F=M.filter(H=>{if(k){const B=ka(H.placement);return B===x||B==="y"}return!0}).map(H=>[H.placement,H.overflows.filter(B=>B>0).reduce((B,te)=>B+te,0)]).sort((H,B)=>H[1]-B[1])[0])==null?void 0:F[0];V&&(K=V);break}case"initialPlacement":K=l;break}if(n!==K)return{reset:{placement:K}}}return{}}}};function Lm(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function jm(e){return RA.some(t=>e[t]>=0)}const $A=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:a}=t,{strategy:o="referenceHidden",...n}=$a(e,t);switch(o){case"referenceHidden":{const r=await Br(t,{...n,elementContext:"reference"}),s=Lm(r,a.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:jm(s)}}}case"escaped":{const r=await Br(t,{...n,altBoundary:!0}),s=Lm(r,a.floating);return{data:{escapedOffsets:s,escaped:jm(s)}}}default:return{}}}}},Jg=new Set(["left","top"]);async function GA(e,t){const{placement:a,platform:o,elements:n}=e,r=await(o.isRTL==null?void 0:o.isRTL(n.floating)),s=Ga(a),l=Qn(a),c=ka(a)==="y",d=Jg.has(s)?-1:1,u=r&&c?-1:1,m=$a(t,e);let{mainAxis:h,crossAxis:p,alignmentAxis:v}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}
442:{mainAxis:m.mainAxis||0,crossAxis:m.crossAxis||0,alignmentAxis:m.alignmentAxis};return l&&typeof v=="number"&&(p=l==="end"?v*-1:v),c?{x:p*u,y:h*d}:{x:h*d,y:p*u}}const HA=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var a,o;const{x:n,y:r,placement:s,middlewareData:l}=t,c=await GA(t,e);return s===((a=l.offset)==null?void 0:a.placement)&&(o=l.arrow)!=null&&o.alignmentOffset?{}:{x:n+c.x,y:r+c.y,data:{...c,placement:s}}}}},KA=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:a,y:o,placement:n}=t,{mainAxis:r=!0,crossAxis:s=!1,limiter:l={fn:b=>{let{x:y,y:x}=b;return{x:y,y:x}}},...c}=$a(e,t),d={x:a,y:o},u=await Br(t,c),m=ka(Ga(n)),h=zd(m);let p=d[h],v=d[m];if(r){const b=h==="y"?"top":"left",y=h==="y"?"bottom":"right",x=p+u[b],w=p-u[y];p=vc(x,p,w)}if(s){const b=m==="y"?"top":"left",y=m==="y"?"bottom":"right",x=v+u[b],w=v-u[y];v=vc(x,v,w)}const f=l.fn({...t,[h]:p,[m]:v});return{...f,data:{x:f.x-a,y:f.y-o,enabled:{[h]:r,[m]:s}}}}}},XA=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:a,y:o,placement:n,rects:r,middlewareData:s}=t,{offset:l=0,mainAxis:c=!0,crossAxis:d=!0}=$a(e,t),u={x:a,y:o},m=ka(n),h=zd(m);let p=u[h],v=u[m];const f=$a(l,t),b=typeof f=="number"?{mainAxis:f,crossAxis:0}:{mainAxis:0,crossAxis:0,...f};if(c){const w=h==="y"?"height":"width",P=r.reference[h]-r.floating[w]+b.mainAxis,E=r.reference[h]+r.reference[w]-b.mainAxis;p<P?p=P:p>E&&(p=E)}if(d){var y,x;const w=h==="y"?"width":"height",P=Jg.has(Ga(n)),E=r.reference[m]-r.floating[w]+(P&&((y=s.offset)==null?void 0:y[m])||0)+(P?0:b.crossAxis),k=r.reference[m]+r.reference[w]+(P?0:((x=s.offset)==null?void 0:x[m])||0)-(P?b.crossAxis:0);v<E?v=E:v>k&&(v=k)}return{[h]:p,[m]:v}}}},YA=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var a,o;const{placement:n,rects:r,platform:s,elements:l}=t,{apply:c=()=>{},...d}=$a(e,t),u=await Br(t,d),m=Ga(n),h=Qn(n),p=ka(n)==="y",{width:v,height:f}=r.floating;let b,y;m==="top"||m==="bottom"?(b=m,y=h===(await(s.isRTL==null?void 0:s.isRTL(l.floating))?"start":"end")?"left":"right"):(y=m,b=h==="end"?"top":"bottom");const x=f-u.top-u.bottom,w=v-u.left-u.right,P=yo(f-u[b],x),E=yo(v-u[y],w),k=!t.middlewareData.shift;let S=P,R=E;if((a=t.middlewareData.shift)!=null&&a.enabled.x&&(R=w),(o=t.middlewareData.shift)!=null&&o.enabled.y&&(S=x),k&&!h){const M=Qt(u.left,0),q=Qt(u.right,0),N=Qt(u.top,0),F=Qt(u.bottom,0);p?R=v-2*(M!==0||q!==0?M+q:Qt(u.left,u.right)):S=f-2*(N!==0||F!==0?N+F:Qt(u.top,u.bottom))}await c({...t,availableWidth:R,availableHeight:S});const I=await s.getDimensions(l.floating);return v!==I.width||f!==I.height?{reset:{rects:!0}}:{}}}};function Ws(){return typeof window<"u"}function Zn(e){return ev(e)?(e.nodeName||"").toLowerCase():"#document"}function Zt(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function ja(e){var t;return(t=(ev(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function ev(e){return Ws()?e instanceof Node||e instanceof Zt(e).Node:!1}function va(e){return Ws()?e instanceof Element||e instanceof Zt(e).Element:!1}function Fa(e){return Ws()?e instanceof HTMLElement||e instanceof Zt(e).HTMLElement:!1}function _m(e){return!Ws()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Zt(e).ShadowRoot}const QA=new Set(["inline","contents"]);function li(e){const{overflow:t,overflowX:a,overflowY:o,display:n}=ba(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+a)&&!QA.has(n)}const ZA=new Set(["table","td","th"]);function JA(e){return ZA.has(Zn(e))}const eE=[":popover-open",":modal"];function $s(e){return eE.some(t=>{try{return e.matches(t)}catch{return!1}})}const tE=["transform","translate","scale","rotate","perspective"],aE=["transform","translate","scale","rotate","perspective","filter"],oE=["paint","layout","strict","content"];function Ud(e){const t=Wd(),a=va(e)?ba(e):e;return tE.some(o=>a[o]?a[o]!=="none":!1)||(a.containerType?a.containerType!=="normal":!1)||!t&&(a.backdropFilter?a.backdropFilter!=="none":!1)||!t&&(a.filter?a.filter!=="none":!1)||aE.some(o=>(a.willChange||"").includes(o))||oE.some(o=>(a.contain||"").includes(o))}function nE(e){let t=xo(e);for(;Fa(t)&&!$n(t);){if(Ud(t))return t;if($s(t))return null;t=xo(t)}return null}function Wd(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const rE=new Set(["html","body","#document"]);function $n(e){return rE.has(Zn(e))}function ba(e){return Zt(e).getComputedStyle(e)}function Gs(e){return va(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function xo(e){if(Zn(e)==="html")return e;const t=e.assignedSlot||e.parentNode||_m(e)&&e.host||ja(e);return _m(t)?t.host:t}function tv(e){const t=xo(e);return $n(t)?e.ownerDocument?e.ownerDocument.body:e.body:Fa(t)&&li(t)?t:tv(t)}function zr(e,t,a){var o;t===void 0&&(t=[]),a===void 0&&(a=!0);const n=tv(e),r=n===((o=e.ownerDocument)==null?void 0:o.body),s=Zt(n);if(r){const l=yc(s);
442return t.concat(s,s.visualViewport||[],li(n)?n:[],l&&a?zr(l):[])}return t.concat(n,zr(n,[],a))}function yc(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function av(e){const t=ba(e);let a=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const n=Fa(e),r=n?e.offsetWidth:a,s=n?e.offsetHeight:o,l=ps(a)!==r||ps(o)!==s;return l&&(a=r,o=s),{width:a,height:o,$:l}}function $d(e){return va(e)?e:e.contextElement}function An(e){const t=$d(e);if(!Fa(t))return Ia(1);const a=t.getBoundingClientRect(),{width:o,height:n,$:r}=av(t);let s=(r?ps(a.width):a.width)/o,l=(r?ps(a.height):a.height)/n;return(!s||!Number.isFinite(s))&&(s=1),(!l||!Number.isFinite(l))&&(l=1),{x:s,y:l}}const iE=Ia(0);function ov(e){const t=Zt(e);return!Wd()||!t.visualViewport?iE:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function sE(e,t,a){return t===void 0&&(t=!1),!a||t&&a!==Zt(e)?!1:t}function Jo(e,t,a,o){t===void 0&&(t=!1),a===void 0&&(a=!1);const n=e.getBoundingClientRect(),r=$d(e);let s=Ia(1);t&&(o?va(o)&&(s=An(o)):s=An(e));const l=sE(r,a,o)?ov(r):Ia(0);let c=(n.left+l.x)/s.x,d=(n.top+l.y)/s.y,u=n.width/s.x,m=n.height/s.y;if(r){const h=Zt(r),p=o&&va(o)?Zt(o):o;let v=h,f=yc(v);for(;f&&o&&p!==v;){const b=An(f),y=f.getBoundingClientRect(),x=ba(f),w=y.left+(f.clientLeft+parseFloat(x.paddingLeft))*b.x,P=y.top+(f.clientTop+parseFloat(x.paddingTop))*b.y;c*=b.x,d*=b.y,u*=b.x,m*=b.y,c+=w,d+=P,v=Zt(f),f=yc(v)}}return fs({width:u,height:m,x:c,y:d})}function Gd(e,t){const a=Gs(e).scrollLeft;return t?t.left+a:Jo(ja(e)).left+a}function nv(e,t,a){a===void 0&&(a=!1);const o=e.getBoundingClientRect(),n=o.left+t.scrollLeft-(a?0:Gd(e,o)),r=o.top+t.scrollTop;return{x:n,y:r}}function lE(e){let{elements:t,rect:a,offsetParent:o,strategy:n}=e;const r=n==="fixed",s=ja(o),l=t?$s(t.floating):!1;if(o===s||l&&r)return a;let c={scrollLeft:0,scrollTop:0},d=Ia(1);const u=Ia(0),m=Fa(o);if((m||!m&&!r)&&((Zn(o)!=="body"||li(s))&&(c=Gs(o)),Fa(o))){const p=Jo(o);d=An(o),u.x=p.x+o.clientLeft,u.y=p.y+o.clientTop}const h=s&&!m&&!r?nv(s,c,!0):Ia(0);return{width:a.width*d.x,height:a.height*d.y,x:a.x*d.x-c.scrollLeft*d.x+u.x+h.x,y:a.y*d.y-c.scrollTop*d.y+u.y+h.y}}function cE(e){return Array.from(e.getClientRects())}function dE(e){const t=ja(e),a=Gs(e),o=e.ownerDocument.body,n=Qt(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),r=Qt(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let s=-a.scrollLeft+Gd(e);const l=-a.scrollTop;return ba(o).direction==="rtl"&&(s+=Qt(t.clientWidth,o.clientWidth)-n),{width:n,height:r,x:s,y:l}}function uE(e,t){const a=Zt(e),o=ja(e),n=a.visualViewport;let r=o.clientWidth,s=o.clientHeight,l=0,c=0;if(n){r=n.width,s=n.height;const d=Wd();(!d||d&&t==="fixed")&&(l=n.offsetLeft,c=n.offsetTop)}return{width:r,height:s,x:l,y:c}}const mE=new Set(["absolute","fixed"]);function pE(e,t){const a=Jo(e,!0,t==="fixed"),o=a.top+e.clientTop,n=a.left+e.clientLeft,r=Fa(e)?An(e):Ia(1),s=e.clientWidth*r.x,l=e.clientHeight*r.y,c=n*r.x,d=o*r.y;return{width:s,height:l,x:c,y:d}}function Om(e,t,a){let o;if(t==="viewport")o=uE(e,a);else if(t==="document")o=dE(ja(e));else if(va(t))o=pE(t,a);else{const n=ov(e);o={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return fs(o)}function rv(e,t){const a=xo(e);return a===t||!va(a)||$n(a)?!1:ba(a).position==="fixed"||rv(a,t)}function hE(e,t){const a=t.get(e);if(a)return a;let o=zr(e,[],!1).filter(l=>va(l)&&Zn(l)!=="body"),n=null;const r=ba(e).position==="fixed";let s=r?xo(e):e;for(;va(s)&&!$n(s);){const l=ba(s),c=Ud(s);!c&&l.position==="fixed"&&(n=null),(r?!c&&!n:!c&&l.position==="static"&&!!n&&mE.has(n.position)||li(s)&&!c&&rv(e,s))?o=o.filter(u=>u!==s):n=l,s=xo(s)}return t.set(e,o),o}function fE(e){let{element:t,boundary:a,rootBoundary:o,strategy:n}=e;const s=[...a==="clippingAncestors"?$s(t)?[]:hE(t,this._c):[].concat(a),o],l=s[0],c=s.reduce((d,u)=>{const m=Om(t,u,n);return d.top=Qt(m.top,d.top),d.right=yo(m.right,d.right),d.bottom=yo(m.bottom,d.bottom),d.left=Qt(m.left,d.left),d},Om(t,l,n));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function gE(e){const{width:t,height:a}=av(e);return{width:t,height:a}}function vE(e,t,a){const o=Fa(t),n=ja(t),r=a==="fixed",s=Jo(e,!0,r,t);let l={scrollLeft:0,scrollTop:0};const c=Ia(0);function d(){c.x=Gd(n)}if(o||!o&&!r)if((Zn(t)!=="body"||li(n))&&(l=Gs(t)),o){const p=Jo(t,!0,r,t);c.x=p.x+t.clientLeft,c.y=p.y+t.clientTop}else n&&d();r&&!o&&n&&d();const u=n&&!o&&!r?nv(n,l):Ia(0),m=s.left+l.scrollLeft-c.x-u.x,h=s.top+l.scrollTop-c.y-u.y;return{x:m,y:h,width:s.width,height:s.height}}function Sl(e){return ba(e).position==="static"}function Bm(e,t){if(!Fa(e)||ba(e).position==="fixed")return null;if(t)return t(e);let a=e.offsetParent;return ja(e)===a&&(a=a.ownerDocument.body),a}function iv(e,t){const a=Zt(e);
442if($s(e))return a;if(!Fa(e)){let n=xo(e);for(;n&&!$n(n);){if(va(n)&&!Sl(n))return n;n=xo(n)}return a}let o=Bm(e,t);for(;o&&JA(o)&&Sl(o);)o=Bm(o,t);return o&&$n(o)&&Sl(o)&&!Ud(o)?a:o||nE(e)||a}const bE=async function(e){const t=this.getOffsetParent||iv,a=this.getDimensions,o=await a(e.floating);return{reference:vE(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function yE(e){return ba(e).direction==="rtl"}const xE={convertOffsetParentRelativeRectToViewportRelativeRect:lE,getDocumentElement:ja,getClippingRect:fE,getOffsetParent:iv,getElementRects:bE,getClientRects:cE,getDimensions:gE,getScale:An,isElement:va,isRTL:yE};function sv(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function wE(e,t){let a=null,o;const n=ja(e);function r(){var l;clearTimeout(o),(l=a)==null||l.disconnect(),a=null}function s(l,c){l===void 0&&(l=!1),c===void 0&&(c=1),r();const d=e.getBoundingClientRect(),{left:u,top:m,width:h,height:p}=d;if(l||t(),!h||!p)return;const v=Si(m),f=Si(n.clientWidth-(u+h)),b=Si(n.clientHeight-(m+p)),y=Si(u),w={rootMargin:-v+"px "+-f+"px "+-b+"px "+-y+"px",threshold:Qt(0,yo(1,c))||1};let P=!0;function E(k){const S=k[0].intersectionRatio;if(S!==c){if(!P)return s();S?s(!1,S):o=setTimeout(()=>{s(!1,1e-7)},1e3)}S===1&&!sv(d,e.getBoundingClientRect())&&s(),P=!1}try{a=new IntersectionObserver(E,{...w,root:n.ownerDocument})}catch{a=new IntersectionObserver(E,w)}a.observe(e)}return s(!0),r}function CE(e,t,a,o){o===void 0&&(o={});const{ancestorScroll:n=!0,ancestorResize:r=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,d=$d(e),u=n||r?[...d?zr(d):[],...zr(t)]:[];u.forEach(y=>{n&&y.addEventListener("scroll",a,{passive:!0}),r&&y.addEventListener("resize",a)});const m=d&&l?wE(d,a):null;let h=-1,p=null;s&&(p=new ResizeObserver(y=>{let[x]=y;x&&x.target===d&&p&&(p.unobserve(t),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(t)})),a()}),d&&!c&&p.observe(d),p.observe(t));let v,f=c?Jo(e):null;c&&b();function b(){const y=Jo(e);f&&!sv(f,y)&&a(),f=y,v=requestAnimationFrame(b)}return a(),()=>{var y;u.forEach(x=>{n&&x.removeEventListener("scroll",a),r&&x.removeEventListener("resize",a)}),m==null||m(),(y=p)==null||y.disconnect(),p=null,c&&cancelAnimationFrame(v)}}const PE=HA,AE=KA,EE=WA,SE=YA,NE=$A,zm=UA,kE=XA,TE=(e,t,a)=>{const o=new Map,n={platform:xE,...a},r={...n.platform,_c:o};return qA(e,t,{...n,platform:r})};var IE=typeof document<"u",RE=function(){},Hi=IE?g.useLayoutEffect:RE;function gs(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let a,o,n;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(o=a;o--!==0;)if(!gs(e[o],t[o]))return!1;return!0}if(n=Object.keys(e),a=n.length,a!==Object.keys(t).length)return!1;for(o=a;o--!==0;)if(!{}.hasOwnProperty.call(t,n[o]))return!1;for(o=a;o--!==0;){const r=n[o];if(!(r==="_owner"&&e.$$typeof)&&!gs(e[r],t[r]))return!1}return!0}return e!==e&&t!==t}function lv(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Vm(e,t){const a=lv(e);return Math.round(t*a)/a}function Nl(e){const t=g.useRef(e);return Hi(()=>{t.current=e}),t}function DE(e){e===void 0&&(e={});const{placement:t="bottom",strategy:a="absolute",middleware:o=[],platform:n,elements:{reference:r,floating:s}={},transform:l=!0,whileElementsMounted:c,open:d}=e,[u,m]=g.useState({x:0,y:0,strategy:a,placement:t,middlewareData:{},isPositioned:!1}),[h,p]=g.useState(o);gs(h,o)||p(o);const[v,f]=g.useState(null),[b,y]=g.useState(null),x=g.useCallback(H=>{H!==k.current&&(k.current=H,f(H))},[]),w=g.useCallback(H=>{H!==S.current&&(S.current=H,y(H))},[]),P=r||v,E=s||b,k=g.useRef(null),S=g.useRef(null),R=g.useRef(u),I=c!=null,M=Nl(c),q=Nl(n),N=Nl(d),F=g.useCallback(()=>{if(!k.current||!S.current)return;const H={placement:t,strategy:a,middleware:h};q.current&&(H.platform=q.current),TE(k.current,S.current,H).then(B=>{const te={...B,isPositioned:N.current!==!1};
442A.current&&!gs(R.current,te)&&(R.current=te,Vs.flushSync(()=>{m(te)}))})},[h,t,a,q,N]);Hi(()=>{d===!1&&R.current.isPositioned&&(R.current.isPositioned=!1,m(H=>({...H,isPositioned:!1})))},[d]);const A=g.useRef(!1);Hi(()=>(A.current=!0,()=>{A.current=!1}),[]),Hi(()=>{if(P&&(k.current=P),E&&(S.current=E),P&&E){if(M.current)return M.current(P,E,F);F()}},[P,E,F,M,I]);const _=g.useMemo(()=>({reference:k,floating:S,setReference:x,setFloating:w}),[x,w]),K=g.useMemo(()=>({reference:P,floating:E}),[P,E]),V=g.useMemo(()=>{const H={position:a,left:0,top:0};if(!K.floating)return H;const B=Vm(K.floating,u.x),te=Vm(K.floating,u.y);return l?{...H,transform:"translate("+B+"px, "+te+"px)",...lv(K.floating)>=1.5&&{willChange:"transform"}}:{position:a,left:B,top:te}},[a,l,K.floating,u.x,u.y]);return g.useMemo(()=>({...u,update:F,refs:_,elements:K,floatingStyles:V}),[u,F,_,K,V])}const ME=e=>{function t(a){return{}.hasOwnProperty.call(a,"current")}return{name:"arrow",options:e,fn(a){const{element:o,padding:n}=typeof e=="function"?e(a):e;return o&&t(o)?o.current!=null?zm({element:o.current,padding:n}).fn(a):{}:o?zm({element:o,padding:n}).fn(a):{}}}},FE=(e,t)=>({...PE(e),options:[e,t]}),LE=(e,t)=>({...AE(e),options:[e,t]}),jE=(e,t)=>({...kE(e),options:[e,t]}),_E=(e,t)=>({...EE(e),options:[e,t]}),OE=(e,t)=>({...SE(e),options:[e,t]}),BE=(e,t)=>({...NE(e),options:[e,t]}),zE=(e,t)=>({...ME(e),options:[e,t]});var VE="Arrow",cv=g.forwardRef((e,t)=>{const{children:a,width:o=10,height:n=5,...r}=e;return i.jsx(_e.svg,{...r,ref:t,width:o,height:n,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?a:i.jsx("polygon",{points:"0,0 30,0 15,10"})})});cv.displayName=VE;var qE=cv;function Hd(e){const[t,a]=g.useState(void 0);return Pt(()=>{if(e){a({width:e.offsetWidth,height:e.offsetHeight});const o=new ResizeObserver(n=>{if(!Array.isArray(n)||!n.length)return;const r=n[0];let s,l;if("borderBoxSize"in r){const c=r.borderBoxSize,d=Array.isArray(c)?c[0]:c;s=d.inlineSize,l=d.blockSize}else s=e.offsetWidth,l=e.offsetHeight;a({width:s,height:l})});return o.observe(e,{box:"border-box"}),()=>o.unobserve(e)}else a(void 0)},[e]),t}var Kd="Popper",[dv,Hs]=La(Kd),[UE,uv]=dv(Kd),mv=e=>{const{__scopePopper:t,children:a}=e,[o,n]=g.useState(null);return i.jsx(UE,{scope:t,anchor:o,onAnchorChange:n,children:a})};mv.displayName=Kd;var pv="PopperAnchor",hv=g.forwardRef((e,t)=>{const{__scopePopper:a,virtualRef:o,...n}=e,r=uv(pv,a),s=g.useRef(null),l=Qe(t,s);return g.useEffect(()=>{r.onAnchorChange((o==null?void 0:o.current)||s.current)}),o?null:i.jsx(_e.div,{...n,ref:l})});hv.displayName=pv;var Xd="PopperContent",[WE,$E]=dv(Xd),fv=g.forwardRef((e,t)=>{var J,ie,le,pe,ce,oe;const{__scopePopper:a,side:o="bottom",sideOffset:n=0,align:r="center",alignOffset:s=0,arrowPadding:l=0,avoidCollisions:c=!0,collisionBoundary:d=[],collisionPadding:u=0,sticky:m="partial",hideWhenDetached:h=!1,updatePositionStrategy:p="optimized",onPlaced:v,...f}=e,b=uv(Xd,a),[y,x]=g.useState(null),w=Qe(t,ye=>x(ye)),[P,E]=g.useState(null),k=Hd(P),S=(k==null?void 0:k.width)??0,R=(k==null?void 0:k.height)??0,I=o+(r!=="center"?"-"+r:""),M=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},q=Array.isArray(d)?d:[d],N=q.length>0,F={padding:M,boundary:q.filter(HE),altBoundary:N},{refs:A,floatingStyles:_,placement:K,isPositioned:V,middlewareData:H}=DE({strategy:"fixed",placement:I,whileElementsMounted:(...ye)=>CE(...ye,{animationFrame:p==="always"}),elements:{reference:b.anchor},middleware:[FE({mainAxis:n+R,alignmentAxis:s}),c&&LE({mainAxis:!0,crossAxis:!1,limiter:m==="partial"?jE():void 0,...F}),c&&_E({...F}),OE({...F,apply:({elements:ye,rects:C,availableWidth:z,availableHeight:U})=>{const{width:T,height:D}=C.reference,O=ye.floating.style;O.setProperty("--radix-popper-available-width",`${z}px`),O.setProperty("--radix-popper-available-height",`${U}px`),O.setProperty("--radix-popper-anchor-width",`${T}px`),O.setProperty("--radix-popper-anchor-height",`${D}px`)}}),P&&zE({element:P,padding:l}),KE({arrowWidth:S,arrowHeight:R}),h&&BE({strategy:"referenceHidden",...F})]}),[B,te]=bv(K),j=bo(v);Pt(()=>{V&&(j==null||j())},[V,j]);const L=(J=H.arrow)==null?void 0:J.x,Q=(ie=H.arrow)==null?void 0:ie.
442y,$=((le=H.arrow)==null?void 0:le.centerOffset)!==0,[X,fe]=g.useState();return Pt(()=>{y&&fe(window.getComputedStyle(y).zIndex)},[y]),i.jsx("div",{ref:A.setFloating,"data-radix-popper-content-wrapper":"",style:{..._,transform:V?_.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:X,"--radix-popper-transform-origin":[(pe=H.transformOrigin)==null?void 0:pe.x,(ce=H.transformOrigin)==null?void 0:ce.y].join(" "),...((oe=H.hide)==null?void 0:oe.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:i.jsx(WE,{scope:a,placedSide:B,onArrowChange:E,arrowX:L,arrowY:Q,shouldHideArrow:$,children:i.jsx(_e.div,{"data-side":B,"data-align":te,...f,ref:w,style:{...f.style,animation:V?void 0:"none"}})})})});fv.displayName=Xd;var gv="PopperArrow",GE={top:"bottom",right:"left",bottom:"top",left:"right"},vv=g.forwardRef(function(t,a){const{__scopePopper:o,...n}=t,r=$E(gv,o),s=GE[r.placedSide];return i.jsx("span",{ref:r.onArrowChange,style:{position:"absolute",left:r.arrowX,top:r.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[r.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[r.placedSide],visibility:r.shouldHideArrow?"hidden":void 0},children:i.jsx(qE,{...n,ref:a,style:{...n.style,display:"block"}})})});vv.displayName=gv;function HE(e){return e!==null}var KE=e=>({name:"transformOrigin",options:e,fn(t){var b,y,x;const{placement:a,rects:o,middlewareData:n}=t,s=((b=n.arrow)==null?void 0:b.centerOffset)!==0,l=s?0:e.arrowWidth,c=s?0:e.arrowHeight,[d,u]=bv(a),m={start:"0%",center:"50%",end:"100%"}[u],h=(((y=n.arrow)==null?void 0:y.x)??0)+l/2,p=(((x=n.arrow)==null?void 0:x.y)??0)+c/2;let v="",f="";return d==="bottom"?(v=s?m:`${h}px`,f=`${-c}px`):d==="top"?(v=s?m:`${h}px`,f=`${o.floating.height+c}px`):d==="right"?(v=`${-c}px`,f=s?m:`${p}px`):d==="left"&&(v=`${o.floating.width+c}px`,f=s?m:`${p}px`),{data:{x:v,y:f}}}});function bv(e){const[t,a="center"]=e.split("-");return[t,a]}var yv=mv,xv=hv,wv=fv,Cv=vv,XE="Portal",Yd=g.forwardRef((e,t)=>{var l;const{container:a,...o}=e,[n,r]=g.useState(!1);Pt(()=>r(!0),[]);const s=a||n&&((l=globalThis==null?void 0:globalThis.document)==null?void 0:l.body);return s?Ng.createPortal(i.jsx(_e.div,{...o,ref:t}),s):null});Yd.displayName=XE;function YE(e,t){return g.useReducer((a,o)=>t[a][o]??a,e)}var Jn=e=>{const{present:t,children:a}=e,o=QE(t),n=typeof a=="function"?a({present:o.isPresent}):g.Children.only(a),r=Qe(o.ref,ZE(n));return typeof a=="function"||o.isPresent?g.cloneElement(n,{ref:r}):null};Jn.displayName="Presence";function QE(e){const[t,a]=g.useState(),o=g.useRef(null),n=g.useRef(e),r=g.useRef("none"),s=e?"mounted":"unmounted",[l,c]=YE(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const d=Ni(o.current);r.current=l==="mounted"?d:"none"},[l]),Pt(()=>{const d=o.current,u=n.current;if(u!==e){const h=r.current,p=Ni(d);e?c("MOUNT"):p==="none"||(d==null?void 0:d.display)==="none"?c("UNMOUNT"):c(u&&h!==p?"ANIMATION_OUT":"UNMOUNT"),n.current=e}},[e,c]),Pt(()=>{if(t){let d;const u=t.ownerDocument.defaultView??window,m=p=>{const f=Ni(o.current).includes(p.animationName);if(p.target===t&&f&&(c("ANIMATION_END"),!n.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",d=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},h=p=>{p.target===t&&(r.current=Ni(o.current))};return t.addEventListener("animationstart",h),t.addEventListener("animationcancel",m),t.addEventListener("animationend",m),()=>{u.clearTimeout(d),t.removeEventListener("animationstart",h),t.removeEventListener("animationcancel",m),t.removeEventListener("animationend",m)}}else c("ANIMATION_END")},[t,c]),{isPresent:["mounted","unmountSuspended"].includes(l),ref:g.useCallback(d=>{o.current=d?getComputedStyle(d):null,a(d)},[])}}function Ni(e){return(e==null?void 0:e.animationName)||"none"}function ZE(e){var o,n;let t=(o=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:o.get,a=t&&"isReactWarning"in t&&t.isReactWarning;return a?e.ref:(t=(n=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:n.get,a=t&&"isReactWarning"in t&&t.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}var JE=Sg[" useInsertionEffect ".trim().toString()]||Pt;function Gn({prop:e,defaultProp:t,onChange:a=()=>{},caller:o}){const[n,r,s]=eS({defaultProp:t,onChange:a}),l=e!==void 0,c=l?e:n;{const u=g.useRef(e!==void 0);g.useEffect(()=>{const m=u.current;m!==l&&console.warn(`${o} is changing from ${m?"controlled":"uncontrolled"} to ${l?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=l},[l,o])}const d=g.useCallback(u=>{var m;if(l){const h=tS(u)?u(e):u;h!==e&&((m=s.current)==null||m.call(s,h))}else r(u)},[l,e,r,s]);return[c,d]}function eS({defaultProp:e,onChange:t}){const[a,o]=g.useState(e),n=g.useRef(a),r=g.useRef(t);return JE(()=>{r.current=t},[t]),g.useEffect(()=>{var s;n.current!==a&&((s=r.current)==null||s.call(r,a),n.current=a)},[a,n]),[a,o,r]}function tS(e){return typeof e=="function"}var Pv=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),aS="VisuallyHidden",Av=g.forwardRef((e,t)=>
442i.jsx(_e.span,{...e,ref:t,style:{...Pv,...e.style}}));Av.displayName=aS;var oS=Av,[Ks,JZ]=La("Tooltip",[Hs]),Xs=Hs(),Ev="TooltipProvider",nS=700,xc="tooltip.open",[rS,Qd]=Ks(Ev),Sv=e=>{const{__scopeTooltip:t,delayDuration:a=nS,skipDelayDuration:o=300,disableHoverableContent:n=!1,children:r}=e,s=g.useRef(!0),l=g.useRef(!1),c=g.useRef(0);return g.useEffect(()=>{const d=c.current;return()=>window.clearTimeout(d)},[]),i.jsx(rS,{scope:t,isOpenDelayedRef:s,delayDuration:a,onOpen:g.useCallback(()=>{window.clearTimeout(c.current),s.current=!1},[]),onClose:g.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>s.current=!0,o)},[o]),isPointerInTransitRef:l,onPointerInTransitChange:g.useCallback(d=>{l.current=d},[]),disableHoverableContent:n,children:r})};Sv.displayName=Ev;var Vr="Tooltip",[iS,Ys]=Ks(Vr),Nv=e=>{const{__scopeTooltip:t,children:a,open:o,defaultOpen:n,onOpenChange:r,disableHoverableContent:s,delayDuration:l}=e,c=Qd(Vr,e.__scopeTooltip),d=Xs(t),[u,m]=g.useState(null),h=Xo(),p=g.useRef(0),v=s??c.disableHoverableContent,f=l??c.delayDuration,b=g.useRef(!1),[y,x]=Gn({prop:o,defaultProp:n??!1,onChange:S=>{S?(c.onOpen(),document.dispatchEvent(new CustomEvent(xc))):c.onClose(),r==null||r(S)},caller:Vr}),w=g.useMemo(()=>y?b.current?"delayed-open":"instant-open":"closed",[y]),P=g.useCallback(()=>{window.clearTimeout(p.current),p.current=0,b.current=!1,x(!0)},[x]),E=g.useCallback(()=>{window.clearTimeout(p.current),p.current=0,x(!1)},[x]),k=g.useCallback(()=>{window.clearTimeout(p.current),p.current=window.setTimeout(()=>{b.current=!0,x(!0),p.current=0},f)},[f,x]);return g.useEffect(()=>()=>{p.current&&(window.clearTimeout(p.current),p.current=0)},[]),i.jsx(yv,{...d,children:i.jsx(iS,{scope:t,contentId:h,open:y,stateAttribute:w,trigger:u,onTriggerChange:m,onTriggerEnter:g.useCallback(()=>{c.isOpenDelayedRef.current?k():P()},[c.isOpenDelayedRef,k,P]),onTriggerLeave:g.useCallback(()=>{v?E():(window.clearTimeout(p.current),p.current=0)},[E,v]),onOpen:P,onClose:E,disableHoverableContent:v,children:a})})};Nv.displayName=Vr;var wc="TooltipTrigger",kv=g.forwardRef((e,t)=>{const{__scopeTooltip:a,...o}=e,n=Ys(wc,a),r=Qd(wc,a),s=Xs(a),l=g.useRef(null),c=Qe(t,l,n.onTriggerChange),d=g.useRef(!1),u=g.useRef(!1),m=g.useCallback(()=>d.current=!1,[]);return g.useEffect(()=>()=>document.removeEventListener("pointerup",m),[m]),i.jsx(xv,{asChild:!0,...s,children:i.jsx(_e.button,{"aria-describedby":n.open?n.contentId:void 0,"data-state":n.stateAttribute,...o,ref:c,onPointerMove:qe(e.onPointerMove,h=>{h.pointerType!=="touch"&&!u.current&&!r.isPointerInTransitRef.current&&(n.onTriggerEnter(),u.current=!0)}),onPointerLeave:qe(e.onPointerLeave,()=>{n.onTriggerLeave(),u.current=!1}),onPointerDown:qe(e.onPointerDown,()=>{n.open&&n.onClose(),d.current=!0,document.addEventListener("pointerup",m,{once:!0})}),onFocus:qe(e.onFocus,()=>{d.current||n.onOpen()}),onBlur:qe(e.onBlur,n.onClose),onClick:qe(e.onClick,n.onClose)})})});kv.displayName=wc;var sS="TooltipPortal",[eJ,lS]=Ks(sS,{forceMount:void 0}),Hn="TooltipContent",Tv=g.forwardRef((e,t)=>{const a=lS(Hn,e.__scopeTooltip),{forceMount:o=a.forceMount,side:n="top",...r}=e,s=Ys(Hn,e.__scopeTooltip);return i.jsx(Jn,{present:o||s.open,children:s.disableHoverableContent?i.jsx(Iv,{side:n,...r,ref:t}):i.jsx(cS,{side:n,...r,ref:t})})}),cS=g.forwardRef((e,t)=>{const a=Ys(Hn,e.__scopeTooltip),o=Qd(Hn,e.__scopeTooltip),n=g.useRef(null),r=Qe(t,n),[s,l]=g.useState(null),{trigger:c,onClose:d}=a,u=n.current,{onPointerInTransitChange:m}=o,h=g.useCallback(()=>{l(null),m(!1)},[m]),p=g.useCallback((v,f)=>{const b=v.currentTarget,y={x:v.clientX,y:v.clientY},x=hS(y,b.getBoundingClientRect()),w=fS(y,x),P=gS(f.getBoundingClientRect()),E=bS([...w,...P]);l(E),m(!0)},[m]);return g.useEffect(()=>()=>h(),[h]),g.useEffect(()=>{if(c&&u){const v=b=>p(b,u),f=b=>p(b,c);return c.addEventListener("pointerleave",v),u.addEventListener("pointerleave",f),()=>{c.removeEventListener("pointerleave",v),u.removeEventListener("pointerleave",f)}}},[c,u,p,h]),g.useEffect(()=>{if(s){const v=f=>{const b=f.target,y={x:f.clientX,y:f.clientY},x=(c==null?void 0:c.contains(b))||(u==null?void 0:u.contains(b)),w=!vS(y,s);x?h():w&&(h(),d())};return document.addEventListener("pointermove",v),()=>document.removeEventListener("pointermove",v)}},[c,u,s,d,h]),i.jsx(Iv,{...e,ref:r})}),[dS,uS]=Ks(Vr,{isInside:!1}),mS=Xg("TooltipContent"),Iv=g.forwardRef((e,t)=>
442{const{__scopeTooltip:a,children:o,"aria-label":n,onEscapeKeyDown:r,onPointerDownOutside:s,...l}=e,c=Ys(Hn,a),d=Xs(a),{onClose:u}=c;return g.useEffect(()=>(document.addEventListener(xc,u),()=>document.removeEventListener(xc,u)),[u]),g.useEffect(()=>{if(c.trigger){const m=h=>{const p=h.target;p!=null&&p.contains(c.trigger)&&u()};return window.addEventListener("scroll",m,{capture:!0}),()=>window.removeEventListener("scroll",m,{capture:!0})}},[c.trigger,u]),i.jsx(Us,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:r,onPointerDownOutside:s,onFocusOutside:m=>m.preventDefault(),onDismiss:u,children:i.jsxs(wv,{"data-state":c.stateAttribute,...d,...l,ref:t,style:{...l.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[i.jsx(mS,{children:o}),i.jsx(dS,{scope:a,isInside:!0,children:i.jsx(oS,{id:c.contentId,role:"tooltip",children:n||o})})]})})});Tv.displayName=Hn;var Rv="TooltipArrow",pS=g.forwardRef((e,t)=>{const{__scopeTooltip:a,...o}=e,n=Xs(a);return uS(Rv,a).isInside?null:i.jsx(Cv,{...n,...o,ref:t})});pS.displayName=Rv;function hS(e,t){const a=Math.abs(t.top-e.y),o=Math.abs(t.bottom-e.y),n=Math.abs(t.right-e.x),r=Math.abs(t.left-e.x);switch(Math.min(a,o,n,r)){case r:return"left";case n:return"right";case a:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function fS(e,t,a=5){const o=[];switch(t){case"top":o.push({x:e.x-a,y:e.y+a},{x:e.x+a,y:e.y+a});break;case"bottom":o.push({x:e.x-a,y:e.y-a},{x:e.x+a,y:e.y-a});break;case"left":o.push({x:e.x+a,y:e.y-a},{x:e.x+a,y:e.y+a});break;case"right":o.push({x:e.x-a,y:e.y-a},{x:e.x-a,y:e.y+a});break}return o}function gS(e){const{top:t,right:a,bottom:o,left:n}=e;return[{x:n,y:t},{x:a,y:t},{x:a,y:o},{x:n,y:o}]}function vS(e,t){const{x:a,y:o}=e;let n=!1;for(let r=0,s=t.length-1;r<t.length;s=r++){const l=t[r],c=t[s],d=l.x,u=l.y,m=c.x,h=c.y;u>o!=h>o&&a<(m-d)*(o-u)/(h-u)+d&&(n=!n)}return n}function bS(e){const t=e.slice();return t.sort((a,o)=>a.x<o.x?-1:a.x>o.x?1:a.y<o.y?-1:a.y>o.y?1:0),yS(t)}function yS(e){if(e.length<=1)return e.slice();const t=[];for(let o=0;o<e.length;o++){const n=e[o];for(;t.length>=2;){const r=t[t.length-1],s=t[t.length-2];if((r.x-s.x)*(n.y-s.y)>=(r.y-s.y)*(n.x-s.x))t.pop();else break}t.push(n)}t.pop();const a=[];for(let o=e.length-1;o>=0;o--){const n=e[o];for(;a.length>=2;){const r=a[a.length-1],s=a[a.length-2];if((r.x-s.x)*(n.y-s.y)>=(r.y-s.y)*(n.x-s.x))a.pop();else break}a.push(n)}return a.pop(),t.length===1&&a.length===1&&t[0].x===a[0].x&&t[0].y===a[0].y?t:t.concat(a)}var xS=Sv,wS=Nv,CS=kv,Dv=Tv;function Mv(e){var t,a,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var n=e.length;for(t=0;t<n;t++)e[t]&&(a=Mv(e[t]))&&(o&&(o+=" "),o+=a)}else for(a in e)e[a]&&(o&&(o+=" "),o+=a);return o}function Fv(){for(var e,t,a=0,o="",n=arguments.length;a<n;a++)(e=arguments[a])&&(t=Mv(e))&&(o&&(o+=" "),o+=t);return o}const Zd="-",PS=e=>{const t=ES(e),{conflictingClassGroups:a,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:s=>{const l=s.split(Zd);return l[0]===""&&l.length!==1&&l.shift(),Lv(l,t)||AS(s)},getConflictingClassGroupIds:(s,l)=>{const c=a[s]||[];return l&&o[s]?[...c,...o[s]]:c}}},Lv=(e,t)=>{var s;if(e.length===0)return t.classGroupId;const a=e[0],o=t.nextPart.get(a),n=o?Lv(e.slice(1),o):void 0;if(n)return n;if(t.validators.length===0)return;const r=e.join(Zd);return(s=t.validators.find(({validator:l})=>l(r)))==null?void 0:s.classGroupId},qm=/^\[(.+)\]$/,AS=e=>{if(qm.test(e)){const t=qm.exec(e)[1],a=t==null?void 0:t.substring(0,t.indexOf(":"));if(a)return"arbitrary.."+a}},ES=e=>{const{theme:t,prefix:a}=e,o={nextPart:new Map,validators:[]};return NS(Object.entries(e.classGroups),a).forEach(([r,s])=>{Cc(s,o,r,t)}),o},Cc=(e,t,a,o)=>{e.forEach(n=>{if(typeof n=="string"){const r=n===""?t:Um(t,n);r.classGroupId=a;return}if(typeof n=="function"){if(SS(n)){Cc(n(o),t,a,o);return}t.validators.push({validator:n,classGroupId:a});return}
vendor: 4,830 bytes, line 442
442Object.entries(n).forEach(([r,s])=>{Cc(s,Um(t,r),a,o)})})},Um=(e,t)=>{let a=e;return t.split(Zd).forEach(o=>{a.nextPart.has(o)||a.nextPart.set(o,{nextPart:new Map,validators:[]}),a=a.nextPart.get(o)}),a},SS=e=>e.isThemeGetter,NS=(e,t)=>t?e.map(([a,o])=>{const n=o.map(r=>typeof r=="string"?t+r:typeof r=="object"?Object.fromEntries(Object.entries(r).map(([s,l])=>[t+s,l])):r);return[a,n]}):e,kS=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,a=new Map,o=new Map;const n=(r,s)=>{a.set(r,s),t++,t>e&&(t=0,o=a,a=new Map)};return{get(r){let s=a.get(r);if(s!==void 0)return s;if((s=o.get(r))!==void 0)return n(r,s),s},set(r,s){a.has(r)?a.set(r,s):n(r,s)}}},jv="!",TS=e=>{const{separator:t,experimentalParseClassName:a}=e,o=t.length===1,n=t[0],r=t.length,s=l=>{const c=[];let d=0,u=0,m;for(let b=0;b<l.length;b++){let y=l[b];if(d===0){if(y===n&&(o||l.slice(b,b+r)===t)){c.push(l.slice(u,b)),u=b+r;continue}if(y==="/"){m=b;continue}}y==="["?d++:y==="]"&&d--}const h=c.length===0?l:l.substring(u),p=h.startsWith(jv),v=p?h.substring(1):h,f=m&&m>u?m-u:void 0;return{modifiers:c,hasImportantModifier:p,baseClassName:v,maybePostfixModifierPosition:f}};return a?l=>a({className:l,parseClassName:s}):s},IS=e=>{if(e.length<=1)return e;const t=[];let a=[];return e.forEach(o=>{o[0]==="["?(t.push(...a.sort(),o),a=[]):a.push(o)}),t.push(...a.sort()),t},RS=e=>({cache:kS(e.cacheSize),parseClassName:TS(e),...PS(e)}),DS=/\s+/,MS=(e,t)=>{const{parseClassName:a,getClassGroupId:o,getConflictingClassGroupIds:n}=t,r=[],s=e.trim().split(DS);let l="";for(let c=s.length-1;c>=0;c-=1){const d=s[c],{modifiers:u,hasImportantModifier:m,baseClassName:h,maybePostfixModifierPosition:p}=a(d);let v=!!p,f=o(v?h.substring(0,p):h);if(!f){if(!v){l=d+(l.length>0?" "+l:l);continue}if(f=o(h),!f){l=d+(l.length>0?" "+l:l);continue}v=!1}const b=IS(u).join(":"),y=m?b+jv:b,x=y+f;if(r.includes(x))continue;r.push(x);const w=n(f,v);for(let P=0;P<w.length;++P){const E=w[P];r.push(y+E)}l=d+(l.length>0?" "+l:l)}return l};function FS(){let e=0,t,a,o="";for(;e<arguments.length;)(t=arguments[e++])&&(a=_v(t))&&(o&&(o+=" "),o+=a);return o}const _v=e=>{if(typeof e=="string")return e;let t,a="";for(let o=0;o<e.length;o++)e[o]&&(t=_v(e[o]))&&(a&&(a+=" "),a+=t);return a};function LS(e,...t){let a,o,n,r=s;function s(c){const d=t.reduce((u,m)=>m(u),e());return a=RS(d),o=a.cache.get,n=a.cache.set,r=l,l(c)}function l(c){const d=o(c);if(d)return d;const u=MS(c,a);return n(c,u),u}return function(){return r(FS.apply(null,arguments))}}const ct=e=>{const t=a=>a[e]||[];return t.isThemeGetter=!0,t},Ov=/^\[(?:([a-z-]+):)?(.+)\]$/i,jS=/^\d+\/\d+$/,_S=new Set(["px","full","screen"]),OS=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,BS=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,zS=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,VS=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,qS=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Ba=e=>En(e)||_S.has(e)||jS.test(e),Ja=e=>er(e,"length",YS),En=e=>!!e&&!Number.isNaN(Number(e)),kl=e=>er(e,"number",En),cr=e=>!!e&&Number.isInteger(Number(e)),US=e=>e.endsWith("%")&&En(e.slice(0,-1)),Fe=e=>Ov.test(e),eo=e=>OS.test(e),WS=new Set(["length","size","percentage"]),$S=e=>er(e,WS,Bv),GS=e=>er(e,"position",Bv),HS=new Set(["image","url"]),KS=e=>er(e,HS,ZS),XS=e=>er(e,"",QS),dr=()=>!0,er=(e,t,a)=>{const o=Ov.exec(e);return o?o[1]?typeof t=="string"?o[1]===t:t.has(o[1]):a(o[2]):!1},YS=e=>BS.test(e)&&!zS.test(e),Bv=()=>!1,QS=e=>VS.test(e),ZS=e=>qS.test(e),JS=()=>{const e=ct("colors"),t=ct("spacing"),a=ct("blur"),o=ct("brightness"),n=ct("borderColor"),r=ct("borderRadius"),s=ct("borderSpacing"),l=ct("borderWidth"),c=ct("contrast"),d=ct("grayscale"),u=ct("hueRotate"),m=ct("invert"),h=ct("gap"),p=ct("gradientColorStops"),v=ct("gradientColorStopPositions"),f=ct("inset"),b=ct("margin"),y=ct("opacity"),x=ct("padding"),w=ct("saturate"),P=ct("scale"),E=ct("sepia"),k=ct("skew"),S=ct("space"),R=ct("translate"),I=()=>["auto","contain","none"],M=()=>["auto","hidden","clip","visible","scroll"],q=()=>["auto",Fe,t],N=()=>[Fe,t],F=()=>["",Ba,Ja],A=()=>["auto",En,Fe],_=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],K=()=>["solid","dashed","dotted","double","none"],V=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],H=()=>["start","end","center","between","around","evenly","stretch"],B=()=>["","0",Fe],te=()=>["auto","avoid","all","avoid-page","page","left","right","column"],j=()=>[En,Fe];return{cacheSize:500,separator:":",theme:{colors:[dr],spacing:[Ba,Ja],blur:["none","",eo,Fe],brightness:j(),borderColor:[e],borderRadius:["n
442one","","full",eo,Fe],borderSpacing:N(),borderWidth:F(),contrast:j(),grayscale:B(),hueRotate:j(),invert:B(),gap:N(),gradientColorStops:[e],gradientColorStopPositions:[US,Ja],inset:q(),margin:q(),opacity:j(),padding:N(),saturate:j(),scale:j(),sepia:B(),skew:j(),space:N(),translate:N()},classGroups:{aspect:[{aspect:["auto","square","video",Fe]}],container:["container"],columns:[{columns:[eo]}],"break-after":[{"break-after":te()}],"break-before":[{"break-before":te()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[..._(),Fe]}],overflow:[{overflow:M()}],"overflow-x":[{"overflow-x":M()}],"overflow-y":[{"overflow-y":M()}],overscroll:[{overscroll:I()}],"overscroll-x":[{"overscroll-x":I()}],"overscroll-y":[{"overscroll-y":I()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[f]}],"inset-x":[{"inset-x":[f]}],"inset-y":[{"inset-y":[f]}],start:[{start:[f]}],end:[{end:[f]}],top:[{top:[f]}],right:[{right:[f]}],bottom:[{bottom:[f]}],left:[{left:[f]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",cr,Fe]}],basis:[{basis:q()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Fe]}],grow:[{grow:B()}],shrink:[{shrink:B()}],order:[{order:["first","last","none",cr,Fe]}],"grid-cols":[{"grid-cols":[dr]}],"col-start-end":[{col:["auto",{span:["full",cr,Fe]},Fe]}],"col-start":[{"col-start":A()}],"col-end":[{"col-end":A()}],"grid-rows":[{"grid-rows":[dr]}],"row-start-end":[{row:["auto",{span:[cr,Fe]},Fe]}],"row-start":[{"row-start":A()}],"row-end":[{"row-end":A()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Fe]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Fe]}],gap:[{gap:[h]}],"gap-x":[{"gap-x":[h]}],"gap-y":[{"gap-y":[h]}],"justify-content":[{justify:["normal",...H()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...H(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...H(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[x]}],px:[{px:[x]}],py:[{py:[x]}],ps:[{ps:[x]}
vendor: 8,339 bytes, line 442
442],pe:[{pe:[x]}],pt:[{pt:[x]}],pr:[{pr:[x]}],pb:[{pb:[x]}],pl:[{pl:[x]}],m:[{m:[b]}],mx:[{mx:[b]}],my:[{my:[b]}],ms:[{ms:[b]}],me:[{me:[b]}],mt:[{mt:[b]}],mr:[{mr:[b]}],mb:[{mb:[b]}],ml:[{ml:[b]}],"space-x":[{"space-x":[S]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[S]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Fe,t]}],"min-w":[{"min-w":[Fe,t,"min","max","fit"]}],"max-w":[{"max-w":[Fe,t,"none","full","min","max","fit","prose",{screen:[eo]},eo]}],h:[{h:[Fe,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Fe,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Fe,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Fe,t,"auto","min","max","fit"]}],"font-size":[{text:["base",eo,Ja]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",kl]}],"font-family":[{font:[dr]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Fe]}],"line-clamp":[{"line-clamp":["none",En,kl]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Ba,Fe]}],"list-image":[{"list-image":["none",Fe]}],"list-style-type":[{list:["none","disc","decimal",Fe]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[y]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[y]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...K(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Ba,Ja]}],"underline-offset":[{"underline-offset":["auto",Ba,Fe]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:N()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Fe]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Fe]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[y]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[..._(),GS]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",$S]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},KS]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[r]}],"rounded-s":[{"rounded-s":[r]}],"rounded-e":[{"rounded-e":[r]}],"rounded-t":[{"rounded-t":[r]}],"rounded-r":[{"rounded-r":[r]}],"rounded-b":[{"rounded-b":[r]}],"rounded-l":[{"rounded-l":[r]}],"rounded-ss":[{"rounded-ss":[r]}],"rounded-se":[{"rounded-se":[r]}],"rounded-ee":[{"rounded-ee":[r]}],"rounded-es":[{"rounded-es":[r]}],"rounded-tl":[{"rounded-tl":[r]}],"rounded-tr":[{"rounded-tr":[r]}],"rounded-br":[{"rounded-br":[r]}],"rounded-bl":[{"rounded-bl":[r]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[y]}],"border-style":[{border:[...K(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[y]}],"divide-style":[{divide:K()}],"border-color":[{border:[n]}],"border-color-x":[{"border-x":[n]}],"border-color-y":[{"border-y":[n]}],"border-color-s":[{"border-s":[n]}],"border-color-e":[{"border-e":[n]}],"border-color-t":[{"border-t":[n]}],"border-color-r":[{"border-r":[n]}],"border-color-b":[{"border-b":[n]}],"border-color-l":[{"border-l":[n]}],"divide-color":[{divide:[n]}],"outline-style":[{outline:["",...K()]}],"outline-offset":[{"outline-offset":[Ba,Fe]}],"outline-w":[{outline:[Ba,Ja]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:F()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[y]}],"ring-offset-w":[{"ring-offset":[Ba,Ja]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",eo,XS]}],"shadow-color":[{shadow:[dr]}],opacity:[{opacity:[y]}],"mix-blend":[{"mix-blend":[...V(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":V()}],filter:[{filter:["","none"]}],blur:[{blur:[a]}],brightness:[{brightness:[o]}],contrast:[{contrast:[c]}],"drop-shadow":[{"drop-shadow":["","none",eo,Fe]}],grayscale:[{grayscale:[d]}],"hue-rotate":[{"hue-rotate":[u]}],invert:[{invert:[m]}],saturate:[{saturate:[w]}],sepia:[{sepia:[E]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[a]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[c]}],"backdrop-grayscale":[{"backdrop-grayscale":[d]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u]}],"backdrop-invert":[{"backdrop-invert":[m]}],"backdrop-opacity":[{"backdrop-opacity":[y]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[E]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Fe]}],duration:[{duration:j()}],ease:[{ease:["linear","in","out","in-out",Fe]}],delay:[{delay:j()}],animate:[{animate:["none","spin","ping","pulse","bounce",Fe]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[P]}],"scale-x":[{"scale-x":[P]}],"scale-y":[{"scale-y":[P]}],rotate:[{rotate:[cr,Fe]}],"translate-x":[{"translate-x":[R]}],"translate-y":[{"translate-y":[R]}],"skew-x":[{"skew-x":[k]}],"skew-y":[{"skew-y":[k]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Fe]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Fe]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":N()}],"scroll-mx":[{"scroll-mx":N()}],"scroll-my":[{"scroll-my":N()}],"scroll-ms":[{"scroll-ms":N()}],"scroll-me":[{"scroll-me":N()}],"scroll-mt":[{"scroll-mt":N()}],"scroll-mr":[{"scroll-mr":N()}],"scroll-mb":[{"scroll-mb":N()}],"scroll-ml":[{"scroll-ml":N()}],"scroll-p":[{"scroll-p":N()}],"scroll-px":[{"scroll-px":N()}],"scroll-py":[{"scroll-py":N()}],"scroll-ps":[{"scroll-ps":N()}],"scroll-pe":[{"scroll-pe":N()}],"scroll-pt":[{"scroll-pt":N()}],"scroll-pr":[{"scroll-pr":N()}],"scroll-pb":[{"scroll-pb":N()}],"scroll-pl":[{"scroll-pl":N()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}
442],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Fe]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Ba,Ja,kl]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},eN=LS(JS);function ve(...e){return eN(Fv(e))}const Jd=xS,zv=wS,Vv=CS,eu=g.forwardRef(({className:e,sideOffset:t=4,...a},o)=>i.jsx(Dv,{ref:o,sideOffset:t,className:ve("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...a}));eu.displayName=Dv.displayName;var ci=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},en=typeof window>"u"||"Deno"in globalThis;function Wt(){}function tN(e,t){return typeof e=="function"?e(t):e}function Pc(e){return typeof e=="number"&&e>=0&&e!==1/0}function qv(e,t){return Math.max(e+(t||0)-Date.now(),0)}function fo(e,t){return typeof e=="function"?e(t):e}function aa(e,t){return typeof e=="function"?e(t):e}function Wm(e,t){const{type:a="all",exact:o,fetchStatus:n,predicate:r,queryKey:s,stale:l}=e;if(s){if(o){if(t.queryHash!==tu(s,t.options))return!1}else if(!Ur(t.queryKey,s))return!1}if(a!=="all"){const c=t.isActive();if(a==="active"&&!c||a==="inactive"&&c)return!1}return!(typeof l=="boolean"&&t.isStale()!==l||n&&n!==t.state.fetchStatus||r&&!r(t))}function $m(e,t){const{exact:a,status:o,predicate:n,mutationKey:r}=e;if(r){if(!t.options.mutationKey)return!1;if(a){if(qr(t.options.mutationKey)!==qr(r))return!1}else if(!Ur(t.options.mutationKey,r))return!1}return!(o&&t.state.status!==o||n&&!n(t))}function tu(e,t){return((t==null?void 0:t.queryKeyHashFn)||qr)(e)}function qr(e){return JSON.stringify(e,(t,a)=>Ec(a)?Object.keys(a).sort().reduce((o,n)=>(o[n]=a[n],o),{}):a)}function Ur(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(a=>Ur(e[a],t[a])):!1}function Uv(e,t){if(e===t)return e;const a=Gm(e)&&Gm(t);if(a||Ec(e)&&Ec(t)){const o=a?e:Object.keys(e),n=o.length,r=a?t:Object.keys(t),s=r.length,l=a?[]:{},c=new Set(o);let d=0;for(let u=0;u<s;u++){const m=a?u:r[u];(!a&&c.has(m)||a)&&e[m]===void 0&&t[m]===void 0?(l[m]=void 0,d++):(l[m]=Uv(e[m],t[m]),l[m]===e[m]&&e[m]!==void 0&&d++)}return n===s&&d===n?e:l}return t}function Ac(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const a in e)if(e[a]!==t[a])return!1;return!0}function Gm(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Ec(e){if(!Hm(e))return!1;const t=e.constructor;if(t===void 0)return!0;const a=t.prototype;return!(!Hm(a)||!a.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function Hm(e){return Object.prototype.toString.call(e)==="[object Object]"}function aN(e){return new Promise(t=>{setTimeout(t,e)})}function Sc(e,t,a){return typeof a.structuralSharing=="function"?a.structuralSharing(e,t):a.structuralSharing!==!1?Uv(e,t):t}function oN(e,t,a=0){const o=[...e,t];return a&&o.length>a?o.slice(1):o}function nN(e,t,a=0){const o=[t,...e];return a&&o.length>a?o.slice(0,-1):o}var au=Symbol();function Wv(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===au?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function rN(e,t){return typeof e=="function"?e(...t):!!e}var zo,io,Rn,vg,iN=(vg=class extends ci{constructor(){super();Ne(this,zo);Ne(this,io);Ne(this,Rn);Ce(this,Rn,t=>{if(!en&&window.addEventListener){const a=()=>t();return window.addEventListener("visibilitychange",a,!1),()=>{window.removeEventListener("visibilitychange",a)}}})}onSubscribe(){W(this,io)||this.setEventListener(W(this,Rn))}onUnsubscribe(){var t;this.hasListeners()||((t=W(this,io))==null||t.call(this),Ce(this,io,void 0))}setEventListener(t){var a;Ce(this,Rn,t),(a=W(this,io))==null||a.call(this),Ce(this,io,t(o=>{typeof o=="boolean"?this.setFocused(o):this.onFocus()}))}setFocused(t){W(this,zo)!==t&&(Ce(this,zo,t),this.onFocus())}onFocus(){const t=this.isFocused();
442this.listeners.forEach(a=>{a(t)})}isFocused(){var t;return typeof W(this,zo)=="boolean"?W(this,zo):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},zo=new WeakMap,io=new WeakMap,Rn=new WeakMap,vg),ou=new iN,Dn,so,Mn,bg,sN=(bg=class extends ci{constructor(){super();Ne(this,Dn,!0);Ne(this,so);Ne(this,Mn);Ce(this,Mn,t=>{if(!en&&window.addEventListener){const a=()=>t(!0),o=()=>t(!1);return window.addEventListener("online",a,!1),window.addEventListener("offline",o,!1),()=>{window.removeEventListener("online",a),window.removeEventListener("offline",o)}}})}onSubscribe(){W(this,so)||this.setEventListener(W(this,Mn))}onUnsubscribe(){var t;this.hasListeners()||((t=W(this,so))==null||t.call(this),Ce(this,so,void 0))}setEventListener(t){var a;Ce(this,Mn,t),(a=W(this,so))==null||a.call(this),Ce(this,so,t(this.setOnline.bind(this)))}setOnline(t){W(this,Dn)!==t&&(Ce(this,Dn,t),this.listeners.forEach(o=>{o(t)}))}isOnline(){return W(this,Dn)}},Dn=new WeakMap,so=new WeakMap,Mn=new WeakMap,bg),vs=new sN;function Nc(){let e,t;const a=new Promise((n,r)=>{e=n,t=r});a.status="pending",a.catch(()=>{});function o(n){Object.assign(a,n),delete a.resolve,delete a.reject}return a.resolve=n=>{o({status:"fulfilled",value:n}),e(n)},a.reject=n=>{o({status:"rejected",reason:n}),t(n)},a}function lN(e){return Math.min(1e3*2**e,3e4)}function $v(e){return(e??"online")==="online"?vs.isOnline():!0}var Gv=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function Tl(e){return e instanceof Gv}function Hv(e){let t=!1,a=0,o=!1,n;const r=Nc(),s=f=>{var b;o||(h(new Gv(f)),(b=e.abort)==null||b.call(e))},l=()=>{t=!0},c=()=>{t=!1},d=()=>ou.isFocused()&&(e.networkMode==="always"||vs.isOnline())&&e.canRun(),u=()=>$v(e.networkMode)&&e.canRun(),m=f=>{var b;o||(o=!0,(b=e.onSuccess)==null||b.call(e,f),n==null||n(),r.resolve(f))},h=f=>{var b;o||(o=!0,(b=e.onError)==null||b.call(e,f),n==null||n(),r.reject(f))},p=()=>new Promise(f=>{var b;n=y=>{(o||d())&&f(y)},(b=e.onPause)==null||b.call(e)}).then(()=>{var f;n=void 0,o||(f=e.onContinue)==null||f.call(e)}),v=()=>{if(o)return;let f;const b=a===0?e.initialPromise:void 0;try{f=b??e.fn()}catch(y){f=Promise.reject(y)}Promise.resolve(f).then(m).catch(y=>{var k;if(o)return;const x=e.retry??(en?0:3),w=e.retryDelay??lN,P=typeof w=="function"?w(a,y):w,E=x===!0||typeof x=="number"&&a<x||typeof x=="function"&&x(a,y);if(t||!E){h(y);return}a++,(k=e.onFail)==null||k.call(e,a,y),aN(P).then(()=>d()?void 0:p()).then(()=>{t?h(y):v()})})};return{promise:r,cancel:s,continue:()=>(n==null||n(),r),cancelRetry:l,continueRetry:c,canStart:u,start:()=>(u()?v():p().then(v),r)}}var cN=e=>setTimeout(e,0);function dN(){let e=[],t=0,a=l=>{l()},o=l=>{l()},n=cN;const r=l=>{t?e.push(l):n(()=>{a(l)})},s=()=>{const l=e;e=[],l.length&&n(()=>{o(()=>{l.forEach(c=>{a(c)})})})};return{batch:l=>{let c;t++;try{c=l()}finally{t--,t||s()}return c},batchCalls:l=>(...c)=>{r(()=>{l(...c)})},schedule:r,setNotifyFunction:l=>{a=l},setBatchNotifyFunction:l=>{o=l},setScheduler:l=>{n=l}}}var It=dN(),Vo,yg,Kv=(yg=class{constructor(){Ne(this,Vo)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Pc(this.gcTime)&&Ce(this,Vo,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(en?1/0:5*60*1e3))}clearGcTimeout(){W(this,Vo)&&(clearTimeout(W(this,Vo)),Ce(this,Vo,void 0))}},Vo=new WeakMap,yg),Fn,qo,ta,Uo,Dt,ti,Wo,ha,Va,xg,uN=(xg=class extends Kv{constructor(t){super();Ne(this,ha);Ne(this,Fn);Ne(this,qo);Ne(this,ta);Ne(this,Uo);Ne(this,Dt);Ne(this,ti);Ne(this,Wo);Ce(this,Wo,!1),Ce(this,ti,t.defaultOptions),this.setOptions(t.options),this.observers=[],Ce(this,Uo,t.client),Ce(this,ta,W(this,Uo).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,Ce(this,Fn,mN(this.options)),this.state=t.state??W(this,Fn),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=W(this,Dt))==null?void 0:t.promise}setOptions(t){this.options={...W(this,ti),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&W(this,ta).remove(this)}setData(t,a){const o=Sc(this.state.data,t,this.options);return ze(this,ha,Va).call(this,{data:o,type:"success",dataUpdatedAt:a==null?void 0:a.updatedAt,manual:a==null?void 0:a.manual}),o}setState(t,a){ze(this,ha,Va).call(this,{type:"setState",state:t,setStateOptions:a})}cancel(t){var o,n;const a=(o=W(this,Dt))==null?void 0:o.promise;return(n=W(this,Dt))==null||n.cancel(t),a?a.then(Wt).catch(Wt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(W(this,Fn))}isActive(){return this.observers.some(t=>aa(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===au||this.state.dataUpdateCount+this.state.errorUpdate
442Count===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>fo(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!qv(this.state.dataUpdatedAt,t)}onFocus(){var a;const t=this.observers.find(o=>o.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(a=W(this,Dt))==null||a.continue()}onOnline(){var a;const t=this.observers.find(o=>o.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(a=W(this,Dt))==null||a.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),W(this,ta).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(a=>a!==t),this.observers.length||(W(this,Dt)&&(W(this,Wo)?W(this,Dt).cancel({revert:!0}):W(this,Dt).cancelRetry()),this.scheduleGc()),W(this,ta).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ze(this,ha,Va).call(this,{type:"invalidate"})}fetch(t,a){var d,u,m;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(a!=null&&a.cancelRefetch))this.cancel({silent:!0});else if(W(this,Dt))return W(this,Dt).continueRetry(),W(this,Dt).promise}if(t&&this.setOptions(t),!this.options.queryFn){const h=this.observers.find(p=>p.options.queryFn);h&&this.setOptions(h.options)}const o=new AbortController,n=h=>{Object.defineProperty(h,"signal",{enumerable:!0,get:()=>(Ce(this,Wo,!0),o.signal)})},r=()=>{const h=Wv(this.options,a),v=(()=>{const f={client:W(this,Uo),queryKey:this.queryKey,meta:this.meta};return n(f),f})();return Ce(this,Wo,!1),this.options.persister?this.options.persister(h,v,this):h(v)},l=(()=>{const h={fetchOptions:a,options:this.options,queryKey:this.queryKey,client:W(this,Uo),state:this.state,fetchFn:r};return n(h),h})();(d=this.options.behavior)==null||d.onFetch(l,this),Ce(this,qo,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((u=l.fetchOptions)==null?void 0:u.meta))&&ze(this,ha,Va).call(this,{type:"fetch",meta:(m=l.fetchOptions)==null?void 0:m.meta});const c=h=>{var p,v,f,b;Tl(h)&&h.silent||ze(this,ha,Va).call(this,{type:"error",error:h}),Tl(h)||((v=(p=W(this,ta).config).onError)==null||v.call(p,h,this),(b=(f=W(this,ta).config).onSettled)==null||b.call(f,this.state.data,h,this)),this.scheduleGc()};return Ce(this,Dt,Hv({initialPromise:a==null?void 0:a.initialPromise,fn:l.fetchFn,abort:o.abort.bind(o),onSuccess:h=>{var p,v,f,b;if(h===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(h)}catch(y){c(y);return}(v=(p=W(this,ta).config).onSuccess)==null||v.call(p,h,this),(b=(f=W(this,ta).config).onSettled)==null||b.call(f,h,this.state.error,this),this.scheduleGc()},onError:c,onFail:(h,p)=>{ze(this,ha,Va).call(this,{type:"failed",failureCount:h,error:p})},onPause:()=>{ze(this,ha,Va).call(this,{type:"pause"})},onContinue:()=>{ze(this,ha,Va).call(this,{type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode,canRun:()=>!0})),W(this,Dt).start()}},Fn=new WeakMap,qo=new WeakMap,ta=new WeakMap,Uo=new WeakMap,Dt=new WeakMap,ti=new WeakMap,Wo=new WeakMap,ha=new WeakSet,Va=function(t){const a=o=>{switch(t.type){case"failed":return{...o,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...o,fetchStatus:"paused"};case"continue":return{...o,fetchStatus:"fetching"};case"fetch":return{...o,...Xv(o.data,this.options),fetchMeta:t.meta??null};case"success":return Ce(this,qo,void 0),{...o,data:t.data,dataUpdateCount:o.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const n=t.error;return Tl(n)&&n.revert&&W(this,qo)?{...W(this,qo),fetchStatus:"idle"}
442:{...o,error:n,errorUpdateCount:o.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:o.fetchFailureCount+1,fetchFailureReason:n,fetchStatus:"idle",status:"error"};case"invalidate":return{...o,isInvalidated:!0};case"setState":return{...o,...t.state}}};this.state=a(this.state),It.batch(()=>{this.observers.forEach(o=>{o.onQueryUpdate()}),W(this,ta).notify({query:this,type:"updated",action:t})})},xg);function Xv(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:$v(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function mN(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,a=t!==void 0,o=a?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:a?o??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:a?"success":"pending",fetchStatus:"idle"}}var Pa,wg,pN=(wg=class extends ci{constructor(t={}){super();Ne(this,Pa);this.config=t,Ce(this,Pa,new Map)}build(t,a,o){const n=a.queryKey,r=a.queryHash??tu(n,a);let s=this.get(r);return s||(s=new uN({client:t,queryKey:n,queryHash:r,options:t.defaultQueryOptions(a),state:o,defaultOptions:t.getQueryDefaults(n)}),this.add(s)),s}add(t){W(this,Pa).has(t.queryHash)||(W(this,Pa).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const a=W(this,Pa).get(t.queryHash);a&&(t.destroy(),a===t&&W(this,Pa).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){It.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return W(this,Pa).get(t)}getAll(){return[...W(this,Pa).values()]}find(t){const a={exact:!0,...t};return this.getAll().find(o=>Wm(a,o))}findAll(t={}){const a=this.getAll();return Object.keys(t).length>0?a.filter(o=>Wm(t,o)):a}notify(t){It.batch(()=>{this.listeners.forEach(a=>{a(t)})})}onFocus(){It.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){It.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Pa=new WeakMap,wg),Aa,_t,$o,Ea,ao,Cg,hN=(Cg=class extends Kv{constructor(t){super();Ne(this,Ea);Ne(this,Aa);Ne(this,_t);Ne(this,$o);this.mutationId=t.mutationId,Ce(this,_t,t.mutationCache),Ce(this,Aa,[]),this.state=t.state||fN(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){W(this,Aa).includes(t)||(W(this,Aa).push(t),this.clearGcTimeout(),W(this,_t).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){Ce(this,Aa,W(this,Aa).filter(a=>a!==t)),this.scheduleGc(),W(this,_t).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){W(this,Aa).length||(this.state.status==="pending"?this.scheduleGc():W(this,_t).remove(this))}continue(){var t;return((t=W(this,$o))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var r,s,l,c,d,u,m,h,p,v,f,b,y,x,w,P,E,k,S,R;const a=()=>{ze(this,Ea,ao).call(this,{type:"continue"})};Ce(this,$o,Hv({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(I,M)=>{ze(this,Ea,ao).call(this,{type:"failed",failureCount:I,error:M})},onPause:()=>{ze(this,Ea,ao).call(this,{type:"pause"})},onContinue:a,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>W(this,_t).canRun(this)}));const o=this.state.status==="pending",n=!W(this,$o).canStart();try{if(o)a();else{ze(this,Ea,ao).call(this,{type:"pending",variables:t,isPaused:n}),await((s=(r=W(this,_t).config).onMutate)==null?void 0:s.call(r,t,this));const M=await((c=(l=this.options).onMutate)==null?void 0:c.call(l,t));M!==this.state.context&&ze(this,Ea,ao).call(this,{type:"pending",context:M,variables:t,isPaused:n})}const I=await W(this,$o).start();return await((u=(d=W(this,_t).config).onSuccess)==null?void 0:u.call(d,I,t,this.state.context,this)),await((h=(m=this.options).onSuccess)==null?void 0:h.call(m,I,t,this.state.context)),await((v=(p=W(this,_t).config).onSettled)==null?void 0:v.call(p,I,null,this.state.variables,this.state.context,this)),await((b=(f=this.options).onSettled)==null?void 0:b.call(f,I,null,t,this.state.context)),ze(this,Ea,ao).call(this,{type:"success",data:I}),I}catch(I){try{throw await((x=(y=W(this,_t).config).onError)==null?void 0:x.call(y,I,t,this.state.context,this)),await((P=(w=this.options).onError)==null?void 0:P.call(w,I,t,this.state.context)),await((k=(E=W(this,_t).config).onSettled)==null?void 0:k.call(E,void 0,I,this.state.variables,this.state.context,this)),await((R=(S=this.options).onSettled)==null?void 0:R.call(S,void 0,I,t,this.state.context)),I}finally{ze(this,Ea,ao).call(this,{type:"error",error:I})}}finally{W(this,_t).runNext(this)}}},Aa=new WeakMap,_t=new WeakMap,$o=new WeakMap,Ea=new WeakSet,ao=function(t){const a=o=>{switch(t.type){case"failed":return{...o,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...o,isPaused:!0};case"continue":return{...o,isPaused:!1};
442case"pending":return{...o,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...o,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...o,data:void 0,error:t.error,failureCount:o.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=a(this.state),It.batch(()=>{W(this,Aa).forEach(o=>{o.onMutationUpdate(t)}),W(this,_t).notify({mutation:this,type:"updated",action:t})})},Cg);function fN(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var qa,fa,ai,Pg,gN=(Pg=class extends ci{constructor(t={}){super();Ne(this,qa);Ne(this,fa);Ne(this,ai);this.config=t,Ce(this,qa,new Set),Ce(this,fa,new Map),Ce(this,ai,0)}build(t,a,o){const n=new hN({mutationCache:this,mutationId:++Pi(this,ai)._,options:t.defaultMutationOptions(a),state:o});return this.add(n),n}add(t){W(this,qa).add(t);const a=ki(t);if(typeof a=="string"){const o=W(this,fa).get(a);o?o.push(t):W(this,fa).set(a,[t])}this.notify({type:"added",mutation:t})}remove(t){if(W(this,qa).delete(t)){const a=ki(t);if(typeof a=="string"){const o=W(this,fa).get(a);if(o)if(o.length>1){const n=o.indexOf(t);n!==-1&&o.splice(n,1)}else o[0]===t&&W(this,fa).delete(a)}}this.notify({type:"removed",mutation:t})}canRun(t){const a=ki(t);if(typeof a=="string"){const o=W(this,fa).get(a),n=o==null?void 0:o.find(r=>r.state.status==="pending");return!n||n===t}else return!0}runNext(t){var o;const a=ki(t);if(typeof a=="string"){const n=(o=W(this,fa).get(a))==null?void 0:o.find(r=>
442r!==t&&r.state.isPaused);return(n==null?void 0:n.continue())??Promise.resolve()}else return Promise.resolve()}clear(){It.batch(()=>{W(this,qa).forEach(t=>{this.notify({type:"removed",mutation:t})}),W(this,qa).clear(),W(this,fa).clear()})}getAll(){return Array.from(W(this,qa))}find(t){const a={exact:!0,...t};return this.getAll().find(o=>$m(a,o))}findAll(t={}){return this.getAll().filter(a=>$m(t,a))}notify(t){It.batch(()=>{this.listeners.forEach(a=>{a(t)})})}resumePausedMutations(){const t=this.getAll().filter(a=>a.state.isPaused);return It.batch(()=>Promise.all(t.map(a=>a.continue().catch(Wt))))}},qa=new WeakMap,fa=new WeakMap,ai=new WeakMap,Pg);function ki(e){var t;return(t=e.options.scope)==null?void 0:t.id}function Km(e){return{onFetch:(t,a)=>{var u,m,h,p,v;const o=t.options,n=(h=(m=(u=t.fetchOptions)==null?void 0:u.meta)==null?void 0:m.fetchMore)==null?void 0:h.direction,r=((p=t.state.data)==null?void 0:p.pages)||[],s=((v=t.state.data)==null?void 0:v.pageParams)||[];let l={pages:[],pageParams:[]},c=0;const d=async()=>{let f=!1;const b=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(t.signal.aborted?f=!0:t.signal.addEventListener("abort",()=>{f=!0}),t.signal)})},y=Wv(t.options,t.fetchOptions),x=async(w,P,E)=>{if(f)return Promise.reject();if(P==null&&w.pages.length)return Promise.resolve(w);const S=(()=>{const q={client:t.client,queryKey:t.queryKey,pageParam:P,direction:E?"backward":"forward",meta:t.options.meta};return b(q),q})(),R=await y(S),{maxPages:I}=t.options,M=E?nN:oN;return{pages:M(w.pages,R,I),pageParams:M(w.pageParams,P,I)}};if(n&&r.length){const w=n==="backward",P=w?vN:Xm,E={pages:r,pageParams:s},k=P(o,E);l=await x(E,k,w)}else{const w=e??r.length;do{const P=c===0?s[0]??o.initialPageParam:Xm(o,l);if(c>0&&P==null)break;l=await x(l,P),c++}while(c<w)}return l};t.options.persister?t.fetchFn=()=>{var f,b;return(b=(f=t.options).persister)==null?void 0:b.call(f,d,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},a)}:t.fetchFn=d}}}function Xm(e,{pages:t,pageParams:a}){const o=t.length-1;return t.length>0?e.getNextPageParam(t[o],t,a[o],a):void 0}function vN(e,{pages:t,pageParams:a}){var o;return t.length>0?(o=e.getPreviousPageParam)==null?void 0:o.call(e,t[0],t,a[0],a):void 0}var ft,lo,co,Ln,jn,uo,_n,On,Ag,bN=(Ag=class{constructor(e={}){Ne(this,ft);Ne(this,lo);Ne(this,co);Ne(this,Ln);Ne(this,jn);Ne(this,uo);Ne(this,_n);Ne(this,On);Ce(this,ft,e.queryCache||new pN),Ce(this,lo,e.mutationCache||new gN),Ce(this,co,e.defaultOptions||{}),Ce(this,Ln,new Map),Ce(this,jn,new Map),Ce(this,uo,0)}mount(){Pi(this,uo)._++,W(this,uo)===1&&(Ce(this,_n,ou.subscribe(async e=>{e&&(await this.resumePausedMutations(),W(this,ft).onFocus())})),Ce(this,On,vs.subscribe(async e=>{e&&(await this.resumePausedMutations(),W(this,ft).onOnline())})))}unmount(){var e,t;Pi(this,uo)._--,W(this,uo)===0&&((e=W(this,_n))==null||e.call(this),Ce(this,_n,void 0),(t=W(this,On))==null||t.call(this),Ce(this,On,void 0))}isFetching(e){return W(this,ft).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return W(this,lo).findAll({...e,status:"pending"}).length}getQueryData(e){var a;const t=this.defaultQueryOptions({queryKey:e});return(a=W(this,ft).get(t.queryHash))==null?void 0:a.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),a=W(this,ft).build(this,t),o=a.state.data;return o===void 0?this.fetchQuery(e):(e.revalidateIfStale&&a.isStaleByTime(fo(t.staleTime,a))&&this.prefetchQuery(t),Promise.resolve(o))}getQueriesData(e){return W(this,ft).findAll(e).map(({queryKey:t,state:a})=>{const o=a.data;return[t,o]})}setQueryData(e,t,a){const o=this.defaultQueryOptions({queryKey:e}),n=W(this,ft).get(o.queryHash),r=n==null?void 0:n.state.data,s=tN(t,r);if(s!==void 0)return W(this,ft).build(this,o).setData(s,{...a,manual:!0})}setQueriesData(e,t,a){return It.batch(()=>W(this,ft).findAll(e).map(({queryKey:o})=>[o,this.setQueryData(o,t,a)]))}getQueryState(e){var a;const t=this.defaultQueryOptions({queryKey:e});return(a=W(this,ft).get(t.queryHash))==null?void 0:a.state}removeQueries(e){const t=W(this,ft);It.batch(()=>
442{t.findAll(e).forEach(a=>{t.remove(a)})})}resetQueries(e,t){const a=W(this,ft);return It.batch(()=>(a.findAll(e).forEach(o=>{o.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const a={revert:!0,...t},o=It.batch(()=>W(this,ft).findAll(e).map(n=>n.cancel(a)));return Promise.all(o).then(Wt).catch(Wt)}invalidateQueries(e,t={}){return It.batch(()=>(W(this,ft).findAll(e).forEach(a=>{a.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const a={...t,cancelRefetch:t.cancelRefetch??!0},o=It.batch(()=>W(this,ft).findAll(e).filter(n=>!n.isDisabled()&&!n.isStatic()).map(n=>{let r=n.fetch(void 0,a);return a.throwOnError||(r=r.catch(Wt)),n.state.fetchStatus==="paused"?Promise.resolve():r}));return Promise.all(o).then(Wt)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const a=W(this,ft).build(this,t);return a.isStaleByTime(fo(t.staleTime,a))?a.fetch(t):Promise.resolve(a.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Wt).catch(Wt)}fetchInfiniteQuery(e){return e.behavior=Km(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Wt).catch(Wt)}ensureInfiniteQueryData(e){return e.behavior=Km(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return vs.isOnline()?W(this,lo).resumePausedMutations():Promise.resolve()}getQueryCache(){return W(this,ft)}getMutationCache(){return W(this,lo)}getDefaultOptions(){return W(this,co)}setDefaultOptions(e){Ce(this,co,e)}setQueryDefaults(e,t){W(this,Ln).set(qr(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...W(this,Ln).values()],a={};return t.forEach(o=>{Ur(e,o.queryKey)&&Object.assign(a,o.defaultOptions)}),a}setMutationDefaults(e,t){W(this,jn).set(qr(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...W(this,jn).values()],a={};return t.forEach(o=>{Ur(e,o.mutationKey)&&Object.assign(a,o.defaultOptions)}),a}defaultQueryOptions(e){if(e._defaulted)return e;const t={...W(this,co).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=tu(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===au&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...W(this,co).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){W(this,ft).clear(),W(this,lo).clear()}},ft=new WeakMap,lo=new WeakMap,co=new WeakMap,Ln=new WeakMap,jn=new WeakMap,uo=new WeakMap,_n=new WeakMap,On=new WeakMap,Ag),qt,Ve,oi,Ot,Go,Bn,mo,po,ni,zn,Vn,Ho,Ko,ho,qn,He,wr,kc,Tc,Ic,Rc,Dc,Mc,Fc,Yv,Eg,yN=(Eg=class extends ci{constructor(t,a){super();Ne(this,He);Ne(this,qt);Ne(this,Ve);Ne(this,oi);Ne(this,Ot);Ne(this,Go);Ne(this,Bn);Ne(this,mo);Ne(this,po);Ne(this,ni);Ne(this,zn);Ne(this,Vn);Ne(this,Ho);Ne(this,Ko);Ne(this,ho);Ne(this,qn,new Set);this.options=a,Ce(this,qt,t),Ce(this,po,null),Ce(this,mo,Nc()),this.options.experimental_prefetchInRender||W(this,mo).reject(new Error("experimental_prefetchInRender feature flag is not enabled")),this.bindMethods(),this.setOptions(a)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(W(this,Ve).addObserver(this),Ym(W(this,Ve),this.options)?ze(this,He,wr).call(this):this.updateResult(),ze(this,He,Rc).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Lc(W(this,Ve),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Lc(W(this,Ve),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,ze(this,He,Dc).call(this),ze(this,He,Mc).call(this),W(this,Ve).removeObserver(this)}setOptions(t){const a=this.options,o=W(this,Ve);if(this.options=W(this,qt).defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof aa(this.options.enabled,W(this,Ve))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");ze(this,He,Fc).call(this),W(this,Ve).setOptions(this.options),a._defaulted&&!Ac(this.options,a)&&W(this,qt).getQueryCache().notify({type:"observerOptionsUpdated",query:W(this,Ve),observer:this});const n=this.hasListeners();n&&Qm(W(this,Ve),o,this.options,a)&&ze(this,He,wr).call(this),this.updateResult(),n&&(W(this,Ve)!==o||aa(this.options.enabled,W(this,Ve))!==aa(a.enabled,W(this,Ve))||fo(this.options.staleTime,W(this,Ve))!==fo(a.staleTime,W(this,Ve)))&&ze(this,He,kc).call(this);const r=ze(this,He,Tc).call(this);n&&(W(this,Ve)!==o||aa(this.options.enabled,W(this,Ve))!==aa(a.enabled,W(this,Ve))||r!==W(this,ho)
442)&&ze(this,He,Ic).call(this,r)}getOptimisticResult(t){const a=W(this,qt).getQueryCache().build(W(this,qt),t),o=this.createResult(a,t);return wN(this,o)&&(Ce(this,Ot,o),Ce(this,Bn,this.options),Ce(this,Go,W(this,Ve).state)),o}getCurrentResult(){return W(this,Ot)}trackResult(t,a){return new Proxy(t,{get:(o,n)=>(this.trackProp(n),a==null||a(n),Reflect.get(o,n))})}trackProp(t){W(this,qn).add(t)}getCurrentQuery(){return W(this,Ve)}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const a=W(this,qt).defaultQueryOptions(t),o=W(this,qt).getQueryCache().build(W(this,qt),a);return o.fetch().then(()=>this.createResult(o,a))}fetch(t){return ze(this,He,wr).call(this,{...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),W(this,Ot)))}createResult(t,a){var I;const o=W(this,Ve),n=this.options,r=W(this,Ot),s=W(this,Go),l=W(this,Bn),d=t!==o?t.state:W(this,oi),{state:u}=t;let m={...u},h=!1,p;if(a._optimisticResults){const M=this.hasListeners(),q=!M&&Ym(t,a),N=M&&Qm(t,o,a,n);(q||N)&&(m={...m,...Xv(u.data,t.options)}),a._optimisticResults==="isRestoring"&&(m.fetchStatus="idle")}let{error:v,errorUpdatedAt:f,status:b}=m;p=m.data;let y=!1;if(a.placeholderData!==void 0&&p===void 0&&b==="pending"){let M;r!=null&&r.isPlaceholderData&&a.placeholderData===(l==null?void 0:l.placeholderData)?(M=r.data,y=!0):M=typeof a.placeholderData=="function"?a.placeholderData((I=W(this,Vn))==null?void 0:I.state.data,W(this,Vn)):a.placeholderData,M!==void 0&&(b="success",p=Sc(r==null?void 0:r.data,M,a),h=!0)}if(a.select&&p!==void 0&&!y)if(r&&p===(s==null?void 0:s.data)&&a.select===W(this,ni))p=W(this,zn);else try{Ce(this,ni,a.select),p=a.select(p),p=Sc(r==null?void 0:r.data,p,a),Ce(this,zn,p),Ce(this,po,null)}catch(M){Ce(this,po,M)}W(this,po)&&(v=W(this,po),p=W(this,zn),f=Date.now(),b="error");const x=m.fetchStatus==="fetching",w=b==="pending",P=b==="error",E=w&&x,k=p!==void 0,R={status:b,fetchStatus:m.fetchStatus,isPending:w,isSuccess:b==="success",isError:P,isInitialLoading:E,isLoading:E,data:p,dataUpdatedAt:m.dataUpdatedAt,error:v,errorUpdatedAt:f,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:m.dataUpdateCount>0||m.errorUpdateCount>0,isFetchedAfterMount:m.dataUpdateCount>d.dataUpdateCount||m.errorUpdateCount>d.errorUpdateCount,isFetching:x,isRefetching:x&&!w,isLoadingError:P&&!k,isPaused:m.fetchStatus==="paused",isPlaceholderData:h,isRefetchError:P&&k,isStale:nu(t,a),refetch:this.refetch,promise:W(this,mo),isEnabled:aa(a.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const M=F=>{R.status==="error"?F.reject(R.error):R.data!==void 0&&F.resolve(R.data)},q=()=>{const F=Ce(this,mo,R.promise=Nc());M(F)},N=W(this,mo);switch(N.status){case"pending":t.queryHash===o.queryHash&&M(N);break;case"fulfilled":(R.status==="error"||R.data!==N.value)&&q();break;case"rejected":(R.status!=="error"||R.error!==N.reason)&&q();break}}return R}updateResult(){const t=W(this,Ot),a=this.createResult(W(this,Ve),this.options);if(Ce(this,Go,W(this,Ve).state),Ce(this,Bn,this.options),W(this,Go).data!==void 0&&Ce(this,Vn,W(this,Ve)),Ac(a,t))return;Ce(this,Ot,a);const o=()=>{if(!t)return!0;const{notifyOnChangeProps:n}=this.options,r=typeof n=="function"?n():n;if(r==="all"||!r&&!W(this,qn).size)return!0;const s=new Set(r??W(this,qn));return this.options.throwOnError&&s.add("error"),Object.keys(W(this,Ot)).some(l=>{const c=l;return W(this,Ot)[c]!==t[c]&&s.has(c)})};ze(this,He,Yv).call(this,{listeners:o()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&ze(this,He,Rc).call(this)}},qt=new WeakMap,Ve=new WeakMap,oi=new WeakMap,Ot=new WeakMap,Go=new WeakMap,Bn=new WeakMap,mo=new WeakMap,po=new WeakMap,ni=new WeakMap,zn=new WeakMap,Vn=new WeakMap,Ho=new WeakMap,Ko=new WeakMap,ho=new WeakMap,qn=new WeakMap,He=new WeakSet,wr=function(t){ze(this,He,Fc).call(this);let a=W(this,Ve).fetch(this.options,t);return t!=null&&t.throwOnError||(a=a.catch(Wt)),a},kc=function(){ze(this,He,Dc).call(this);const t=fo(this.options.staleTime,W(this,Ve));if(en||W(this,Ot).isStale||!Pc(t))return;const o=qv(W(this,Ot).dataUpdatedAt,t)+1;Ce(this,Ho,setTimeout(()=>{W(this,Ot).isStale||this.updateResult()},o))},Tc=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(W(this,Ve)):this.options.refetchInterval)??!1},Ic=function(t){ze(this,He,Mc).call(this),Ce(this,ho,t),!(en||aa(this.options.enabled,W(this,Ve))===!1||!Pc(W(this,ho)
442)||W(this,ho)===0)&&Ce(this,Ko,setInterval(()=>{(this.options.refetchIntervalInBackground||ou.isFocused())&&ze(this,He,wr).call(this)},W(this,ho)))},Rc=function(){ze(this,He,kc).call(this),ze(this,He,Ic).call(this,ze(this,He,Tc).call(this))},Dc=function(){W(this,Ho)&&(clearTimeout(W(this,Ho)),Ce(this,Ho,void 0))},Mc=function(){W(this,Ko)&&(clearInterval(W(this,Ko)),Ce(this,Ko,void 0))},Fc=function(){const t=W(this,qt).getQueryCache().build(W(this,qt),this.options);if(t===W(this,Ve))return;const a=W(this,Ve);Ce(this,Ve,t),Ce(this,oi,t.state),this.hasListeners()&&(a==null||a.removeObserver(this),t.addObserver(this))},Yv=function(t){It.batch(()=>{t.listeners&&this.listeners.forEach(a=>{a(W(this,Ot))}),W(this,qt).getQueryCache().notify({query:W(this,Ve),type:"observerResultsUpdated"})})},Eg);function xN(e,t){return aa(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&t.retryOnMount===!1)}function Ym(e,t){return xN(e,t)||e.state.data!==void 0&&Lc(e,t,t.refetchOnMount)}function Lc(e,t,a){if(aa(t.enabled,e)!==!1&&fo(t.staleTime,e)!=="static"){const o=typeof a=="function"?a(e):a;return o==="always"||o!==!1&&nu(e,t)}return!1}function Qm(e,t,a,o){return(e!==t||aa(o.enabled,e)===!1)&&(!a.suspense||e.state.status!=="error")&&nu(e,a)}function nu(e,t){return aa(t.enabled,e)!==!1&&e.isStaleByTime(fo(t.staleTime,e))}function wN(e,t){return!Ac(e.getCurrentResult(),t)}var Qv=g.createContext(void 0),CN=e=>{const t=g.useContext(Qv);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},PN=({client:e,children:t})=>(g.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),i.jsx(Qv.Provider,{value:e,children:t})),Zv=g.createContext(!1),AN=()=>g.useContext(Zv);Zv.Provider;function EN(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var SN=g.createContext(EN()),NN=()=>g.useContext(SN),kN=(e,t)=>{(e.suspense||e.throwOnError||e.experimental_prefetchInRender)&&(t.isReset()||(e.retryOnMount=!1))},TN=e=>{g.useEffect(()=>{e.clearReset()},[e])},IN=({result:e,errorResetBoundary:t,throwOnError:a,query:o,suspense:n})=>e.isError&&!t.isReset()&&!e.isFetching&&o&&(n&&e.data===void 0||rN(a,[e.error,o])),RN=e=>{if(e.suspense){const t=o=>o==="static"?o:Math.max(o??1e3,1e3),a=e.staleTime;e.staleTime=typeof a=="function"?(...o)=>t(a(...o)):t(a),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},DN=(e,t)=>e.isLoading&&e.isFetching&&!t,MN=(e,t)=>(e==null?void 0:e.suspense)&&t.isPending,Zm=(e,t,a)=>t.fetchOptimistic(e).catch(()=>{a.clearReset()});function FN(e,t,a){var m,h,p,v,f;const o=AN(),n=NN(),r=CN(),s=r.defaultQueryOptions(e);(h=(m=r.getDefaultOptions().queries)==null?void 0:m._experimental_beforeQuery)==null||h.call(m,s),s._optimisticResults=o?"isRestoring":"optimistic",RN(s),kN(s,n),TN(n);const l=!r.getQueryCache().get(s.queryHash),[c]=g.useState(()=>new t(r,s)),d=c.getOptimisticResult(s),u=!o&&e.subscribed!==!1;if(g.useSyncExternalStore(g.useCallback(b=>{const y=u?c.subscribe(It.batchCalls(b)):Wt;return c.updateResult(),y},[c,u]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),g.useEffect(()=>{c.setOptions(s)},[s,c]),MN(s,d))throw Zm(s,c,n);if(IN({result:d,errorResetBoundary:n,throwOnError:s.throwOnError,query:r.getQueryCache().get(s.queryHash),suspense:s.suspense}))throw d.error;if((v=(p=r.getDefaultOptions().queries)==null?void 0:p._experimental_afterQuery)==null||v.call(p,s,d),s.experimental_prefetchInRender&&!en&&DN(d,o)){const b=l?Zm(s,c,n):(f=r.getQueryCache().get(s.queryHash))==null?void 0:f.promise;b==null||b.catch(Wt).finally(()=>{c.updateResult()})}return s.notifyOnChangeProps?d:c.trackResult(d)}function LN(e,t){return FN(e,yN)}const jN="https://jevbzxxgwsbbxzwwszag.supabase.co",_N="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpldmJ6eHhnd3NiYnh6d3dzemFnIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODM2OTYwMzQsImV4cCI6MjA5OTI3MjAzNH0.hOFQSgGE04I7fhEbiIIF4E2AtOOciicNOL37bCfBJtc",ne=n0(jN,_N,{auth:{storage:localStorage,persistSession:!0,autoRefreshToken:!0}}),tJ=Object.freeze(Object.defineProperty({__proto__:null,supabase:ne},Symbol.toStringTag,{value:"Module"})),ON="2026-07-15",Jv=g.createContext(void 0),BN=({children:e})=>{const[t,a]=g.useState(null),[o,n]=g.useState(null),[r,s]=g.useState(!0);g.useEffect(()=>{const u=async p=>{if(window.dispatchEvent(new Event("zapdata:release-session")),!(p!=null&&p.user)){n(null),a(null),s(!1);return}try{ne.realtime.setAuth().catch(()=>{})}catch{}n(v=>{var f;return((f=v==null?void 0:v.user)==null?void 0:f.id)===p.user.id&&(v==null?void 0:v.access_token)===p.access_token?v:p}),a(v=>(v==null?void 0:v.id)===p.user.id?v:p.user),s(!1)},{data:{subscription:m}}=ne.auth.onAuthStateChange((p,v)=>{if(p==="TOKEN_REFRESH_FAILED"){console.warn("Token refresh failed â signing out user."),n(null),a(null),s(!1);try{ne.auth.signOut()}catch{}window.location.pathname.includes("/auth")||window.location.assign("/auth");return}u(v)}),h=setTimeout(()=>{s(!1)},1e4);return(async()=>{try{const{data:{session:p}}=await ne.auth.getSession();await u(p)}catch(p){console.warn("getSession failed:",p),s(!1)}finally{clearTimeout(h)}})(),()=>{clearTimeout(h),m.unsubscribe()}},[]);const l=async(u,m,h)=>{var p,v,f;try{if(!(u.includes("@")&&u.includes(".")))return{error:{message:"Por favor, use um email válido para se cadastrar"}};const y=u.toLowerCase().trim(),x=`${window.location.origin}/`,{data:w,error:P}=await ne.auth.signUp({email:y,password:m,options:{data:{username:y,terms_accepted_at:new Date().toISOString(),terms_version:ON},emailRedirectTo:x,captchaToken:h}});return P?(p=P.message)!=null&&p.includes("leaked")||(v=P.message)!=null&&v.includes("compromised")?{error:{message:"Esta senha foi encontrada em vazamentos de dados. Por favor, escolha uma senha diferente e única."}}:(f=P.message)!=null&&f.includes("already registered")?{error:{message:"Este email já está cadastrado"}}:/database error|unique|already exists|já está cadastrado/i.test(P.message??"")?{error:{message:"Este email já está cadastrado"}}:/captcha/i.test(P.message??"")?{error:{message:"Verificação de segurança falhou. Recarregue a página e tente novamente."}}:{error:P}:{error:null,data:w}}catch(b){return{error:b}}},c=async(u,m,h)=>{try{const v=u.includes("@")&&u.includes(".")?u.toLowerCase().trim():`${u.toLowerCase().trim()}@metricas.local`,{data:f,error:b}=await ne.auth.signInWithPassword({email:v,password:m,options:{captchaToken:h}});return b?{error:{message:"Usuário ou senha incorretos"},data:null}:{error:null,data:f}}catch(p){return{error:p,data:null}}},d=async()=>{a(null),n(null);try{localStorage.removeItem("zapdata-impersonation"),Object.keys(localStorage).forEach(u=>{(u.startsWith("sb-")||u.startsWith("zapdata-"))&&localStorage.removeItem(u)})}catch(u){console.warn("Failed to clear local caches:",u)}try{await Promise.race([ne.auth.signOut({scope:"local"}),new Promise(u=>setTimeout(u,1500))])}catch(u){console.error("Error signing out:",u)}window.location.replace("/auth")};return i.jsx(Jv.Provider,{value:{user:t,session:o,signUp:l,signIn:c,signOut:d,loading:r},children:e})},ut=()=>{const e=g.useContext(Jv);if(e===void 0)throw new Error("useAuth must be used within an AuthProvider");return e};var zN=e=>{switch(e){case"success":return UN;case"info":return $N;case"warning":return WN;case"error":return GN;default:return null}},VN=Array(12).fill(0),qN=({visible:e,className:t})=>ee.createElement("div",{className:["sonner-loading-wrapper",t].filter(
442Boolean).join(" "),"data-visible":e},ee.createElement("div",{className:"sonner-spinner"},VN.map((a,o)=>ee.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),UN=ee.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ee.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),WN=ee.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ee.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),$N=ee.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ee.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),GN=ee.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ee.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),HN=ee.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ee.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ee.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),KN=()=>{let[e,t]=ee.useState(document.hidden);return ee.useEffect(()=>{let a=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e},jc=1,XN=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var t;let{message:a,...o}=e,n=typeof(e==null?void 0:e.id)=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:jc++,r=this.toasts.find(l=>l.id===n),s=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(n)&&this.dismissedToasts.delete(n),r?this.toasts=this.toasts.map(l=>l.id===n?(this.publish({...l,...e,id:n,title:a}),{...l,...e,id:n,dismissible:s,title:a}):l):this.addToast({title:a,...o,dismissible:s,id:n}),n},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(a=>a({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:"error"}),this.success=(e,t)=>this.create({...t,type:"success",message:e}),this.info=(e,t)=>this.create({...t,type:"info",message:e}),this.warning=(e,t)=>this.create({...t,type:"warning",message:e}),this.loading=(e,t)=>
442this.create({...t,type:"loading",message:e}),this.promise=(e,t)=>{if(!t)return;let a;t.loading!==void 0&&(a=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let o=e instanceof Promise?e:e(),n=a!==void 0,r,s=o.then(async c=>{if(r=["resolve",c],ee.isValidElement(c))n=!1,this.create({id:a,type:"default",message:c});else if(QN(c)&&!c.ok){n=!1;let d=typeof t.error=="function"?await t.error(`HTTP error! status: ${c.status}`):t.error,u=typeof t.description=="function"?await t.description(`HTTP error! status: ${c.status}`):t.description;this.create({id:a,type:"error",message:d,description:u})}else if(t.success!==void 0){n=!1;let d=typeof t.success=="function"?await t.success(c):t.success,u=typeof t.description=="function"?await t.description(c):t.description;this.create({id:a,type:"success",message:d,description:u})}}).catch(async c=>{if(r=["reject",c],t.error!==void 0){n=!1;let d=typeof t.error=="function"?await t.error(c):t.error,u=typeof t.description=="function"?await t.description(c):t.description;this.create({id:a,type:"error",message:d,description:u})}}).finally(()=>{var c;n&&(this.dismiss(a),a=void 0),(c=t.finally)==null||c.call(t)}),l=()=>new Promise((c,d)=>s.then(()=>r[0]==="reject"?d(r[1]):c(r[1])).catch(d));return typeof a!="string"&&typeof a!="number"?{unwrap:l}:Object.assign(a,{unwrap:l})},this.custom=(e,t)=>{let a=(t==null?void 0:t.id)||jc++;return this.create({jsx:e(a),id:a,...t}),a},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Ut=new XN,YN=(e,t)=>{let a=(t==null?void 0:t.id)||jc++;return Ut.addToast({title:e,...t,id:a}),a},QN=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",ZN=YN,JN=()=>Ut.toasts,ek=()=>Ut.getActiveToasts(),rt=Object.assign(ZN,{success:Ut.success,info:Ut.info,warning:Ut.warning,error:Ut.error,custom:Ut.custom,message:Ut.message,promise:Ut.promise,dismiss:Ut.dismiss,loading:Ut.loading},{getHistory:JN,getToasts:ek});function tk(e,{insertAt:t}={}){if(typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",t==="top"&&a.firstChild?a.insertBefore(o,a.firstChild):a.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}tk(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;
442left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}
442:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);
442--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} 443`);function Ti(e){return e.label!==void 0}var ak=3,ok="32px",nk="16px",Jm=4e3,rk=356,ik=14,sk=20,lk=200;function da(...e){return e.filter(Boolean).join(" ")}function ck(e){let[t,a]=e.split("-"),o=[];return t&&o.push(t),a&&o.push(a),o}var dk=e=>{var t,a,o,n,r,s,l,c,d,u,m;let{invert:h,toast:p,unstyled:v,interacting:f,setHeights:b,visibleToasts:y,heights:x,index:w,toasts:P,expanded:E,removeToast:k,defaultRichColors:S,closeButton:R,style:I,cancelButtonStyle:M,actionButtonStyle:q,className:N="",descriptionClassName:F="",duration:A,position:_,gap:K,loadingIcon:V,expandByDefault:H,classNames:B,icons:te,closeButtonAriaLabel:j="Close toast",pauseWhenPageIsHidden:L}=e,[Q,$]=ee.useState(null),[X,fe]=ee.useState(null),[J,ie]=ee.useState(!1),[le,pe]=ee.useState(!1),[ce,oe]=ee.useState(!1),[ye,C]=ee.useState(!1),[z,U]=ee.useState(!1),[T,D]=ee.useState(0),[O,Y]=ee.useState(0),ae=ee.useRef(p.duration||A||Jm),G=ee.useRef(null),re=ee.useRef(null),de=w===0,se=w+1<=y,ue=p.type,Ee=p.dismissible!==!1,Te=p.className||"",Ke=p.descriptionClassName||"",at=ee.useMemo(()=>x.findIndex(Se=>Se.toastId===p.id)||0,[x,p.id]),he=ee.useMemo(()=>{var Se;return(Se=p.closeButton)!=null?Se:R},[p.closeButton,R]),Ie=ee.useMemo(()=>p.duration||A||Jm,[p.duration,A]),be=ee.useRef(0),je=ee.useRef(0),$e=ee.useRef(0),Le=ee.useRef(null),[ot,At]=_.split("-"),Nt=ee.useMemo(()=>x.reduce((Se,Me,Xe)=>Xe>=at?Se:Se+Me.height,0),[x,at]),st=KN(),zt=p.invert||h,kt=ue==="loading";je.current=ee.useMemo(()=>at*K+Nt,[at,Nt]),ee.useEffect(()=>{ae.current=Ie},[Ie]),ee.useEffect(()=>{ie(!0)},[]),ee.useEffect(()=>{let Se=re.current;if(Se){let Me=Se.getBoundingClientRect().height;return Y(Me),b(Xe=>[{toastId:p.id,height:Me,position:p.position},...Xe]),()=>b(Xe=>
443Xe.filter(vt=>vt.toastId!==p.id))}},[b,p.id]),ee.useLayoutEffect(()=>{if(!J)return;let Se=re.current,Me=Se.style.height;Se.style.height="auto";let Xe=Se.getBoundingClientRect().height;Se.style.height=Me,Y(Xe),b(vt=>vt.find(Vt=>Vt.toastId===p.id)?vt.map(Vt=>Vt.toastId===p.id?{...Vt,height:Xe}:Vt):[{toastId:p.id,height:Xe,position:p.position},...vt])},[J,p.title,p.description,b,p.id]);let wt=ee.useCallback(()=>{pe(!0),D(je.current),b(Se=>Se.filter(Me=>Me.toastId!==p.id)),setTimeout(()=>{k(p)},lk)},[p,k,b,je]);ee.useEffect(()=>{if(p.promise&&ue==="loading"||p.duration===1/0||p.type==="loading")return;let Se;return E||f||L&&st?(()=>{if($e.current<be.current){let Me=new Date().getTime()-be.current;ae.current=ae.current-Me}$e.current=new Date().getTime()})():ae.current!==1/0&&(be.current=new Date().getTime(),Se=setTimeout(()=>{var Me;(Me=p.onAutoClose)==null||Me.call(p,p),wt()},ae.current)),()=>clearTimeout(Se)},[E,f,p,ue,L,st,wt]),ee.useEffect(()=>{p.delete&&wt()},[wt,p.delete]);function sr(){var Se,Me,Xe;return te!=null&&te.loading?ee.createElement("div",{className:da(B==null?void 0:B.loader,(Se=p==null?void 0:p.classNames)==null?void 0:Se.loader,"sonner-loader"),"data-visible":ue==="loading"},te.loading):V?ee.createElement("div",{className:da(B==null?void 0:B.loader,(Me=p==null?void 0:p.classNames)==null?void 0:Me.loader,"sonner-loader"),"data-visible":ue==="loading"},V):ee.createElement(qN,{className:da(B==null?void 0:B.loader,(Xe=p==null?void 0:p.classNames)==null?void 0:Xe.loader),visible:ue==="loading"})}return ee.createElement("li",{tabIndex:0,ref:re,className:da(N,Te,B==null?void 0:B.toast,(t=p==null?void 0:p.classNames)==null?void 0:t.toast,B==null?void 0:B.default,B==null?void 0:B[ue],(a=p==null?void 0:p.classNames)==null?void 0:a[ue]),"data-sonner-toast":"","data-rich-colors":(o=p.richColors)!=null?o:S,"data-styled":!(p.jsx||p.unstyled||v),"data-mounted":J,"data-promise":!!p.promise,"data-swiped":z,"data-removed":le,"data-visible":se,"data-y-position":ot,"data-x-position":At,"data-index":w,"data-front":de,"data-swiping":ce,"data-dismissible":Ee,"data-type":ue,"data-invert":zt,"data-swipe-out":ye,"data-swipe-direction":X,"data-expanded":!!(E||H&&J),style:{"--index":w,"--toasts-before":w,"--z-index":P.length-w,"--offset":`${le?T:je.current}px`,"--initial-height":H?"auto":`${O}px`,...I,...p.style},onDragEnd:()=>{oe(!1),$(null),Le.current=null},onPointerDown:Se=>{kt||!Ee||(G.current=new Date,D(je.current),Se.target.setPointerCapture(Se.pointerId),Se.target.tagName!=="BUTTON"&&(oe(!0),Le.current={x:Se.clientX,y:Se.clientY}))},onPointerUp:()=>{var Se,Me,Xe,vt;if(ye||!Ee)return;Le.current=null;let Vt=Number(((Se=re.current)==null?void 0:Se.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Jt=Number(((Me=re.current)==null?void 0:Me.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),la=new Date().getTime()-((Xe=G.current)==null?void 0:Xe.getTime()),Ft=Q==="x"?Vt:Jt,Ue=Math.abs(Ft)/la;if(Math.abs(Ft)>=sk||Ue>.11){D(je.current),(vt=p.onDismiss)==null||vt.call(p,p),fe(Q==="x"?Vt>0?"right":"left":Jt>0?"down":"up"),wt(),C(!0),U(!1);return}oe(!1),$(null)},onPointerMove:Se=>{var Me,Xe,vt,Vt;if(!Le.current||!Ee||((Me=window.getSelection())==null?void 0:Me.toString().length)>0)return;let Jt=Se.clientY-Le.current.y,la=Se.clientX-Le.current.x,Ft=(Xe=e.swipeDirections)!=null?Xe:ck(_);!Q&&(Math.abs(la)>1||Math.abs(Jt)>1)&&$(Math.abs(la)>Math.abs(Jt)?"x":"y");let Ue={x:0,y:0};Q==="y"?(Ft.includes("top")||Ft.includes("bottom"))&&(Ft.includes("top")&&Jt<0||Ft.includes("bottom")&&Jt>0)&&(Ue.y=Jt):Q==="x"&&(Ft.includes("left")||Ft.includes("right"))&&(Ft.includes("left")&&la<0||Ft.includes("right")&&la>0)&&(Ue.x=la),(Math.abs(Ue.x)>0||Math.abs(Ue.y)>0)&&U(!0),(vt=re.current)==null||vt.style.setProperty("--swipe-amount-x",`${Ue.x}px`),(Vt=re.current)==null||Vt.style.setProperty("--swipe-amount-y",`${Ue.y}px`)}},he&&!p.jsx?ee.createElement("button",{"aria-label":j,"data-disabled":kt,"data-close-button":!0,onClick:kt||!Ee?()=>{}:()=>{var Se;wt(),(Se=p.onDismiss)==null||Se.call(p,p)},className:da(B==null?void 0:B.closeButton,(n=p==null?void 0:p.classNames)==null?void 0:n.closeButton)},(r=te==null?void 0:te.close)!=null?r:HN):null,p.jsx||g.isValidElement(p.title)?p.jsx?p.jsx:typeof p.title=="function"?p.title():p.title:ee.createElement(ee.Fragment,null,ue||p.icon||p.promise?ee.createElement("div",{"data-icon":"",className:da(B==null?void 0:B.icon,(s=p==null?void 0:p.classNames)==null?void 0:s.icon)}
443,p.promise||p.type==="loading"&&!p.icon?p.icon||sr():null,p.type!=="loading"?p.icon||(te==null?void 0:te[ue])||zN(ue):null):null,ee.createElement("div",{"data-content":"",className:da(B==null?void 0:B.content,(l=p==null?void 0:p.classNames)==null?void 0:l.content)},ee.createElement("div",{"data-title":"",className:da(B==null?void 0:B.title,(c=p==null?void 0:p.classNames)==null?void 0:c.title)},typeof p.title=="function"?p.title():p.title),p.description?ee.createElement("div",{"data-description":"",className:da(F,Ke,B==null?void 0:B.description,(d=p==null?void 0:p.classNames)==null?void 0:d.description)},typeof p.description=="function"?p.description():p.description):null),g.isValidElement(p.cancel)?p.cancel:p.cancel&&Ti(p.cancel)?ee.createElement("button",{"data-button":!0,"data-cancel":!0,style:p.cancelButtonStyle||M,onClick:Se=>{var Me,Xe;Ti(p.cancel)&&Ee&&((Xe=(Me=p.cancel).onClick)==null||Xe.call(Me,Se),wt())},className:da(B==null?void 0:B.cancelButton,(u=p==null?void 0:p.classNames)==null?void 0:u.cancelButton)},p.cancel.label):null,g.isValidElement(p.action)?p.action:p.action&&Ti(p.action)?ee.createElement("button",{"data-button":!0,"data-action":!0,style:p.actionButtonStyle||q,onClick:Se=>{var Me,Xe;Ti(p.action)&&((Xe=(Me=p.action).onClick)==null||Xe.call(Me,Se),!Se.defaultPrevented&&wt())},className:da(B==null?void 0:B.actionButton,(m=p==null?void 0:p.classNames)==null?void 0:m.actionButton)},p.action.label):null))};function ep(){if(typeof window>"u"||typeof document>"u")return"ltr";let e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function uk(e,t){let a={};return[e,t].forEach((o,n)=>{let r=n===1,s=r?"--mobile-offset":"--offset",l=r?nk:ok;function c(d){["top","right","bottom","left"].forEach(u=>{a[`${s}-${u}`]=typeof d=="number"?`${d}px`:d})}typeof o=="number"||typeof o=="string"?c(o):typeof o=="object"?["top","right","bottom","left"].forEach(d=>{o[d]===void 0?a[`${s}-${d}`]=l:a[`${s}-${d}`]=typeof o[d]=="number"?`${o[d]}px`:o[d]}):c(l)}),a}var mk=g.forwardRef(function(e,t){let{invert:a,position:o="bottom-right",hotkey:n=["altKey","KeyT"],expand:r,closeButton:s,className:l,offset:c,mobileOffset:d,theme:u="light",richColors:m,duration:h,style:p,visibleToasts:v=ak,toastOptions:f,dir:b=ep(),gap:y=ik,loadingIcon:x,icons:w,containerAriaLabel:P="Notifications",pauseWhenPageIsHidden:E}=e,[k,S]=ee.useState([]),R=ee.useMemo(()=>Array.from(new Set([o].concat(k.filter(L=>L.position).map(L=>L.position)))),[k,o]),[I,M]=ee.useState([]),[q,N]=ee.useState(!1),[F,A]=ee.useState(!1),[_,K]=ee.useState(u!=="system"?u:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),V=ee.useRef(null),H=n.join("+").replace(/Key/g,"").replace(/Digit/g,""),B=ee.useRef(null),te=ee.useRef(!1),j=ee.useCallback(L=>{S(Q=>{var $;return($=Q.find(X=>X.id===L.id))!=null&&$.delete||Ut.dismiss(L.id),Q.filter(({id:X})=>X!==L.id)})},[]);return ee.useEffect(()=>Ut.subscribe(L=>{if(L.dismiss){S(Q=>Q.map($=>$.id===L.id?{...$,delete:!0}:$));return}setTimeout(()=>{Ng.flushSync(()=>{S(Q=>{let $=Q.findIndex(X=>X.id===L.id);return $!==-1?[...Q.slice(0,$),{...Q[$],...L},...Q.slice($+1)]:[L,...Q]})})})}),[]),ee.useEffect(()=>{if(u!=="system"){K(u);return}if(u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light")),typeof window>"u")return;let L=window.matchMedia("(prefers-color-scheme: dark)");try{L.addEventListener("change",({matches:Q})=>{K(Q?"dark":"light")})}catch{L.addListener(({matches:$})=>{try{K($?"dark":"light")}catch(X){console.error(X)}})}},[u]),ee.useEffect(()=>{k.length<=1&&N(!1)},[k]),ee.useEffect(()=>{let L=Q=>{var $,X;n.every(fe=>Q[fe]||Q.code===fe)&&(N(!0),($=V.current)==null||$.focus()),Q.code==="Escape"&&(document.activeElement===V.current||(X=V.current)!=null&&X.contains(document.activeElement))&&N(!1)};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[n]),ee.useEffect(()=>{if(V.current)return()=>{B.current&&(B.current.focus({preventScroll:!0}),B.current=null,te.current=!1)}},[V.current]),ee.createElement("section",{ref:t,"aria-label":`${P} ${H}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},R.map((L,Q)=>{var $;let[X,fe]=L.split("-");return k.length?ee.createElement("ol",{key:L,dir:b==="auto"?ep():b,tabIndex:-1,ref:V,className:l,"data-sonner-toaster":!0,"data-theme":_,"data-y-position":X,"data-lifted":q&&k.length>1&&!r,"data-x-position":fe,style:{"--front-toast-height":`${(($=I[0])==null?void 0:$.height)||0}px`,"--width":`${rk}px`,"--gap":`${y}px`,...p,...uk(c,d)},onBlur:J=>{te.current&&!J.currentTarget.contains(J.relatedTarget)&&(te.current=!1,B.current&&(B.current.focus({preventScroll:!0}),B.current=null))},onFocus:J=>{J.target instanceof HTMLElement&&J.target.dataset.dismissible==="false"||te.current||(te.current=!0,B.current=J.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{F||N(!1)},onDragEnd:()=>N(!1),onPointerDown:J=>{J.target instanceof HTMLElement&&J.target.dataset.dismissible==="false"||A(!0)},onPointerUp:()=>A(!1)},k.filter(J=>!J.position&&Q===0||J.position===L).map((J,ie)=>{var le,pe;return ee.createElement(dk,{key:J.id,icons:w,index:ie,toast:J,defaultRichColors:m,duration:(le=f==null?void 0:f.duration)!=null?le:h,className:f==null?void 0:f.className,descriptionClassName:f==null?void 0:f.descriptionClassName,invert:a,visibleToasts:v,closeButton:(pe=f==null?void 0:f.closeButton)!=null?pe
443:s,interacting:F,position:L,style:f==null?void 0:f.style,unstyled:f==null?void 0:f.unstyled,classNames:f==null?void 0:f.classNames,cancelButtonStyle:f==null?void 0:f.cancelButtonStyle,actionButtonStyle:f==null?void 0:f.actionButtonStyle,removeToast:j,toasts:k.filter(ce=>ce.position==J.position),heights:I.filter(ce=>ce.position==J.position),setHeights:M,expandByDefault:r,gap:y,loadingIcon:x,expanded:q,pauseWhenPageIsHidden:E,swipeDirections:e.swipeDirections})})):null}))});const eb=g.createContext(null),Ii="zapdata-impersonation",pk=({children:e})=>{const t=Rt(),[a,o]=g.useState(()=>{const s=localStorage.getItem(Ii);if(s)try{return JSON.parse(s)}catch{return{isImpersonating:!1,impersonatedEmail:null,impersonatedUserId:null,originalAdminId:null,accessLogId:null}}return{isImpersonating:!1,impersonatedEmail:null,impersonatedUserId:null,originalAdminId:null,accessLogId:null}});g.useEffect(()=>{a.isImpersonating?localStorage.setItem(Ii,JSON.stringify(a)):localStorage.removeItem(Ii)},[a]);const n=async(s,l)=>{try{const{data:{user:c}}=await ne.auth.getUser();if(!c){rt.error("Você não está logado");return}let d=null;try{const{data:m,error:h}=await ne.rpc("log_admin_data_access",{p_target_user_id:s,p_target_email:l,p_access_type:"impersonation"});if(h)throw h;d=m}catch(m){console.warn("Falha ao registrar log de auditoria de impersonação (não bloqueante):",m)}const u={isImpersonating:!0,impersonatedEmail:l,impersonatedUserId:s,originalAdminId:c.id,accessLogId:d};localStorage.setItem(Ii,JSON.stringify(u)),o(u),rt.success(`Agora você está visualizando como ${l}`),t("/")}catch(c){console.error("Error starting impersonation:",c),rt.error("Erro ao iniciar impersonação")}},r=()=>{a.accessLogId&&ne.rpc("end_admin_data_access",{p_log_id:a.accessLogId}).then(({error:s})=>{s&&console.warn("Falha ao encerrar log de auditoria de impersonação (não bloqueante):",s)}),o({isImpersonating:!1,impersonatedEmail:null,impersonatedUserId:null,originalAdminId:null,accessLogId:null}),rt.success("Voltou para a conta de admin"),t("/admin-panel")};return i.jsx(eb.Provider,{value:{...a,startImpersonation:n,stopImpersonation:r},children:e})},di=()=>{const e=g.useContext(eb);if(!e)throw new Error("useImpersonation must be used within ImpersonationProvider");return e},Cr={automati_zap:!0,metricas:!0,organizador_numeros:!0,track_ofertas:!1,automati_zap_flows:!1,automati_zap_edit_flows:!1,automati_zap_delete_contacts:!1},tb=g.createContext({isCollaborator:!1,parentUserId:null,permissions:Cr,loading:!0,effectiveUserId:null,canAccessSystem:()=>!0,canManageInstances:!0,collaboratorName:null,collabHideInstances:!1,collabMessageSigning:!1,allowedInstanceIds:null}),tr=()=>g.useContext(tb),Il={"/inbox":"automati_zap","/metricas":"metricas","/organizador-numeros":"organizador_numeros","/track-ofertas":"track_ofertas",automatizap:"automati_zap","automatizap-x1":"automati_zap",metricas:"metricas",organizador:"organizador_numeros","track-ofertas":"track_ofertas"},hk=new Set(["funil","criativos-imagem","criativos-video","entregavel-site","audio-criacao","transcricao","limpa-hash","extensao-ads","gerador-palavras","disparazap","tiktok","zap-converter","settings-sidebar","subscription-sidebar","sms-bot","smm-panel","track-ofertas"]),fk=new Set(["/marketplace","/affiliate","/subscription","/settings","/ads","/gerador-audio","/transcricao-audio","/disparador","/video-downloader","/zap-converter","/limpa-hash","/gerador-palavras-chaves","/extensao-ads","/sms-bot","/smm-panel","/track-ofertas","/criativos"]),ru="collaborator_status_cache_v1",gk=5*60*1e3,vk=e=>{try{const t=sessionStorage.getItem(ru);if(!t)return null;const a=JSON.parse(t);return a.userId!==e||Date.now()-a.ts>gk?null:a}catch{return null}},tp=e=>{try{sessionStorage.setItem(ru,JSON.stringify({...e,ts:Date.now()}))}catch{}},bk=()=>{try{sessionStorage.removeItem(ru)}catch{}},yk=({children:e})=>{const{user:t}=ut(),a=t?vk(t.id):null,[o,n]=g.useState((a==null?void 0:a.isCollaborator)??!1),[r,s]=g.useState((a==null?void 0:a.parentUserId)??null),[l,c]=g.useState((a==null?void 0:a.permissions)??Cr),[d,u]=g.useState(!a),[m,h]=g.useState((a==null?void 0:a.collaboratorName)??null),[p,v]=g.useState((a==null?void 0:a.collabHideInstances)??!1),[f,b]=g.useState((a==null?void 0:a.collabMessageSigning)??!1),[y,x]=g.useState((a==null?void 0:a.allowedInstanceIds)??null),w=g.useRef(!!a);g.useEffect(()=>{const k=async()=>
443{if(!t){n(!1),s(null),c(Cr),h(null),v(!1),b(!1),x(null),u(!1),bk();return}w.current||u(!0);try{const R=await Promise.race([ne.from("collaborators").select("parent_user_id, permissions, is_active, name, allowed_instance_ids").eq("collaborator_user_id",t.id).eq("is_active",!0).maybeSingle(),new Promise(M=>setTimeout(()=>M({data:null,error:"timeout"}),8e3))]);if(typeof R.error=="string"&&R.error==="timeout"){console.warn("[COLLAB] Query timed out, defaulting to non-collaborator"),n(!1),u(!1);return}if(R.error&&typeof R.error!="string"){console.error("[COLLAB] Error checking collaborator status:",R.error),n(!1),u(!1);return}const I=R.data;if(I){const M={...Cr,...I.permissions},q=I.allowed_instance_ids||null;n(!0),s(I.parent_user_id),h(I.name||null),x(q),c(M);const{data:N}=await ne.from("profiles").select("collab_hide_instances, collab_message_signing").eq("id",I.parent_user_id).single(),F=(N==null?void 0:N.collab_hide_instances)||!1,A=(N==null?void 0:N.collab_message_signing)||!1;N&&(v(F),b(A)),tp({userId:t.id,isCollaborator:!0,parentUserId:I.parent_user_id,permissions:M,collaboratorName:I.name||null,collabHideInstances:F,collabMessageSigning:A,allowedInstanceIds:q})}else n(!1),s(null),h(null),x(null),tp({userId:t.id,isCollaborator:!1,parentUserId:null,permissions:Cr,collaboratorName:null,collabHideInstances:!1,collabMessageSigning:!1,allowedInstanceIds:null})}catch(R){console.error("[COLLAB] Error:",R),n(!1)}finally{u(!1),w.current=!0}},S=setTimeout(()=>{u(!1)},1e4);return k().finally(()=>clearTimeout(S)),()=>clearTimeout(S)},[t]);const P=g.useCallback(k=>{if(!o)return!0;if(hk.has(k))return!1;const S=k.startsWith("/")?k:`/${k}`;for(const I of fk)if(S===I||S.startsWith(I+"/"))return!1;const R=Il[k]||Il[S];if(R)return l[R]===!0;for(const[I,M]of Object.entries(Il))if(I.startsWith("/")&&S.startsWith(I))return l[M]===!0;return!1},[o,l]),E=o&&r?r:(t==null?void 0:t.id)||null;return i.jsx(tb.Provider,{value:{isCollaborator:o,parentUserId:r,permissions:l,loading:d,effectiveUserId:E,canAccessSystem:P,canManageInstances:!o,collaboratorName:m,collabHideInstances:p,collabMessageSigning:f,allowedInstanceIds:y},children:e})},ab=g.createContext({isAdmin:!1,isSupport:!1,hasAdminAccess:!1,loading:!0}),iu=()=>g.useContext(ab),su="admin_status_cache";function ap(e){try{const t=sessionStorage.getItem(su);if(!t)return null;const a=JSON.parse(t);return a.userId!==e||Date.now()-a.timestamp>=3e5?null:a}catch{return null}}function xk(e,t,a){try{sessionStorage.setItem(su,JSON.stringify({userId:e,isAdmin:t,isSupport:a,timestamp:Date.now()}))}catch{}}function _c(){try{sessionStorage.removeItem(su)}catch{}}const wk=({children:e})=>{const{user:t,loading:a}=ut(),o=t?ap(t.id):null,[n,r]=g.useState((o==null?void 0:o.isAdmin)??!1),[s,l]=g.useState((o==null?void 0:o.isSupport)??!1),[c,d]=g.useState(!o);g.useEffect(()=>{if(a)return;if(!t){r(!1),l(!1),d(!1),_c();return}const m=ap(t.id);m&&(r(m.isAdmin),l(m.isSupport),d(!1)),(async()=>{try{const{data:p,error:v}=await ne.from("user_roles").select("role").eq("user_id",t.id).in("role",["admin","support"]),f=!v&&p?p.map(x=>x.role):[],b=f.includes("admin"),y=f.includes("support");r(b),l(y),xk(t.id,b,y),!b&&!y&&_c()}catch{r(!1),l(!1)}finally{d(!1)}})()},[t,a]);const u=n||s;return i.jsx(ab.Provider,{value:{isAdmin:n,isSupport:s,hasAdminAccess:u,loading:c},children:e})},ui=()=>iu(),ob=g.createContext(null),nb="credits_system_status_cache",Ck=5*60*1e3,op={status:"inactive",activated_at:null},np=()=>{try{const e=localStorage.getItem(nb);if(!e)return null;const t=JSON.parse(e);return Date.now()-t.timestamp>Ck?null:t.config}catch{return null}},Pk=e=>{try{const t={config:e,timestamp:Date.now()};localStorage.setItem(nb,JSON.stringify(t))}catch{}},rb="credits_system_user_flags_cache_v1",Ak=5*60*1e3,Ek=e=>{try{const t=sessionStorage.getItem(rb);if(!t)return null;const a=JSON.parse(t);return a.userId!==e||Date.now()-a.ts>Ak?null:a}catch{return null}},Sk=e=>
443{try{sessionStorage.setItem(rb,JSON.stringify(e))}catch{}},Nk=({children:e})=>{const{user:t}=ut(),{isAdmin:a}=ui(),[o,n]=g.useState(()=>np()??{status:"inactive",activated_at:null}),[r,s]=g.useState(!1),[l,c]=g.useState(!1),[d,u]=g.useState(()=>!np()),[m,h]=g.useState(!1),p=g.useCallback(async()=>{if(!t){s(!1),c(!1),h(!0);return}const E=Ek(t.id);E&&(s(E.isTestUser),c(E.isSemiFullMember),h(!0));try{const{data:k,error:S}=await ne.from("profiles").select("credits_system_test_user, is_semi_full_member").eq("id",t.id).maybeSingle();if(S){console.error("Error checking user flags:",S),h(!0);return}const R=(k==null?void 0:k.credits_system_test_user)??!1,I=(k==null?void 0:k.is_semi_full_member)??!1;s(R),c(I),Sk({userId:t.id,isTestUser:R,isSemiFullMember:I,ts:Date.now()})}catch(k){console.error("Error:",k)}finally{h(!0)}},[t]),v=g.useCallback(async(E=!1)=>{n(op),Pk(op),u(!1)},[]);g.useEffect(()=>{(async()=>{u(!0),h(!1),await Promise.all([v(),p()])})()},[v,p]);const f=g.useCallback(async E=>!1,[]),b=(()=>{if(!m)return!1;if(r||l)return!0;switch(o.status){case"inactive":return!1;case"admin_test":case"admin_partial_simulation":return a;case"active":return!0;default:return!1}})(),y=o.status==="admin_test"&&a,x=o.status==="admin_partial_simulation"&&a,w=d||!m,P={isActive:b,isAdminTesting:y,isSimulatingPartial:x,isTestUser:r,isSemiFullMember:l,systemStatus:o.status,activatedAt:o.activated_at,loading:w,refresh:()=>v(!0),updateStatus:f};return i.jsx(ob.Provider,{value:P,children:e})},kk=()=>{const e=g.useContext(ob);if(!e)throw new Error("useCreditsSystemContext must be used within a CreditsSystemProvider");return e},Pr="enterprise",Yo=21,ib=100,Tk=20,Ik=519,Rk=25;function sb(e){return e===Pr}function Dk(e){const t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return!Number.isInteger(t)||t<Yo||t>ib?null:t}function lu(e){return Ik+(e-Tk)*Rk}function Ua(e,t){const a=lu(e);return t==="quarterly"?Math.round(a*2.4):t==="yearly"?Math.round(a*8.4):a}function Mk(e,t){const a=Ua(e,t);return t==="quarterly"?Math.round(a/3):t==="yearly"?Math.round(a/12):a}function Fk(e=Yo){const t=Math.max(Yo,e),a=[];for(let o=t;o<=ib;o++)a.push(o);return a}function Lk(e,t){if(!e||!sb(e.id))return e;const a=Dk(t)??Yo;return{...e,name:`${e.name} (${a} números)`,max_instances:a,price_brl:lu(a),price_brl_quarterly:Ua(a,"quarterly"),price_brl_yearly:Ua(a,"yearly")}}const lb=g.createContext(null),cb="subscription_plans_cache_v2",jk=10*60*1e3,cu="user_subscription_cache_v1",_k=2*60*1e3,Ok=()=>{try{const e=localStorage.getItem(cb);if(!e)return null;const t=JSON.parse(e);return Date.now()-t.ts>jk?null:t.data}catch{return null}},Bk=e=>{try{localStorage.setItem(cb,JSON.stringify({ts:Date.now(),data:e}))}catch{}},zk=e=>{try{const t=sessionStorage.getItem(cu);if(!t)return null;const a=JSON.parse(t);return a.userId!==e||Date.now()-a.ts>_k?null:a.data}catch{return null}},Vk=(e,t)=>{try{sessionStorage.setItem(cu,JSON.stringify({ts:Date.now(),userId:e,data:t}))}catch{}},qk=({children:e})=>{const{user:t}=ut(),[a,o]=g.useState(null),[n,r]=g.useState(()=>Ok()??[]),[s,l]=g.useState(!1),[c,d]=g.useState({allExpired:!1,latestExpiry:null}),[u,m]=g.useState(!0),[h,p]=g.useState(!1),v=g.useCallback(async()=>{if(!t){p(!1);return}try{const{data:C}=await ne.rpc("get_my_block_status").maybeSingle();p(!!(C!=null&&C.is_blocked))}catch{}},[t]);g.useEffect(()=>{v()},[v]),g.useEffect(()=>{const C=()=>v();return window.addEventListener("subscription-changed",C),()=>window.removeEventListener("subscription-changed",C)},[v]);const f=g.useCallback(async()=>{if(!t){o(null);return}try{const{data:C}=await ne.from("user_subscriptions").select("*").eq("user_id",t.id).maybeSingle();o(C),Vk(t.id,C)}catch(C){console.error("Error fetching subscription:",C)}},[t]),b=g.useCallback(async()=>{try{const{data:C}=await ne.from("subscription_plans").select("*").eq("is_active",!0).order("sort_order");C&&(r(C),Bk(C))}catch(C){console.error("Error fetching plans:",C)}},[]),y=g.useCallback(async()=>{var C;if(!t){l(!1),d({allExpired:!1,latestExpiry:null});return}try{const{count:z}=await ne.from("instance_subscriptions").select("*",{count:"exact",head:!0}).eq("user_id",t.id).eq("is_free",!1).or(`expires_at.gt.${new Date().toISOString()},expires_at.is.null`),{count:U}=await ne.from("instance_credit_slots").select("*",{count:"exact",head:!0}).eq("user_id",t.id).gt("expires_at",new Date().toISOString());l((z??0)>0||(U??0)>0);const{data:T}=await ne.from("instance_credit_slots").select("expires_at").eq("user_id",t.id).order("expires_at",{ascending:!1}).limit(1),D=(T==null?void 0:T.length)??0,O=(z??0)>0||(U??0)>0;if(D>0&&!O){const Y=(C=T==null?void 0:T[0])!=null&&C.expires_at?new Date(T[0].expires_at):null;d({allExpired:!0,latestExpiry:Y})}else d({allExpired:!1,latestExpiry:null})}catch(z){console.error("Error fetching avulsa instances:",z)}},[t]),x=g.useRef(void 0);g.useEffect(()=>{(async()=>{const z=(t==null?void 0:t.id)??null;if(z&&x.current!==z){const U=zk(z);if(U!==null||sessionStorage.getItem(cu)){o(U),m(!1),x.current=z,Promise.all([f(),b()]).catch(()=>{});return}m(!0)}await Promise.all([f(),b()]),x.current=z,m(!1)})()},[t,f,b]),g.useEffect(()=>{y()},[y]),g.useEffect(()=>{let C=0;const z=5*60*1e3,U=()=>{const D=Date.now();D-C>z&&(C=D,f(),v())},T=()=>{f(),v()};return window.addEventListener("focus",U),window.addEventListener("subscription-changed",T),()=>{window.removeEventListener("focus",U),window.removeEventListener("subscription-changed",T)}},[f,v]);const w=n.find(C=>C.id===(a==null?void 0:a.plan_id))??null,P=a==null?void 0:a.custom_max_instances,E=Lk(w,P),k=P??(E==null?void 0:E.max_instances)??0,S=!!a&&a.plan_id!=="free"&&(a.status==="active"||a.status==="authorized_pending_charge"&&!!a.current_period_end&&new Date(a.current_period_end)>new Date||a.status==="pending_authorization"&&!!a.current_period_end&&new Date(a.current_period_end)>new Date),R=(a==null?void 0:a.plan_id)==="free",I=!!(a!=null&&a.trial_ends_at)&&new Date(a.trial_ends_at)>new Date,M=a!=null&&a.trial_ends_at?new Date(a.trial_ends_at):null,q=!!t&&(!a||a.status==="pending_authorization"&&!S||a.status==="pending"),N=R&&!!(a!=null&&a.trial_ends_at)&&new Date(a.trial_ends_at)<=new Date,F=(a==null?void 0:a.status)==="past_due",A=!!a&&["expired","canceled","suspended"].includes(a.status)&&a.plan_id!=="free"&&a.status!=="incomplete",_=a!=null&&a.grace_peri
443od_end?new Date(a.grace_period_end):null,K=!!a&&a.plan_id!=="free"&&!!a.current_period_end&&new Date(a.current_period_end)>new Date,V=S||!!a&&a.status==="expired"&&a.plan_id!=="free"&&!!_&&_>new Date,H=!S&&!K&&(F||A)&&!!_&&_>new Date,B=!S&&!K&&(F||A)&&!!_&&_<=new Date,te=!!a&&a.status==="active"&&a.cancel_at_period_end,j=a!=null&&a.current_period_end?new Date(a.current_period_end):null,L=A&&!_,Q=c.allExpired&&R,$=c.latestExpiry?new Date(c.latestExpiry.getTime()+3*24*60*60*1e3):null,X=Q&&!!$&&$>new Date,fe=Q&&!!$&&$<=new Date,J=c.allExpired&&S,ie=J&&c.latestExpiry?new Date(c.latestExpiry.getTime()+3*24*60*60*1e3):null,le=J&&!!ie&&ie>new Date,pe=J&&!!ie&&ie<=new Date,ce=g.useCallback(async C=>{if(t)try{const{data:z,error:U}=await ne.functions.invoke("create-plan-checkout",{body:{plan_id:C}});if(U)throw U;z!=null&&z.url&&window.open(z.url,"_blank"),z!=null&&z.success&&C==="free"&&(await f(),window.dispatchEvent(new Event("subscription-changed")))}catch(z){throw console.error("Checkout error:",z),z}},[t,f]),oe=g.useCallback(async()=>{try{const z=(a==null?void 0:a.gateway)==="efi"?"efi-cancel-plan-subscription":"cancel-plan-subscription",{data:U,error:T}=await ne.functions.invoke(z);if(T)throw T;return await f(),U==null?void 0:U.success}catch(C){return console.error("Cancel error:",C),!1}},[f,a]),ye={subscription:a,plans:n,currentPlan:E,effectiveMaxInstances:k,hasActivePlan:S,hasUsablePlan:V,isFreePlan:R,isTrialActive:I,trialEndsAt:M,needsPlanSelection:q,isTrialExpired:N,isPastDue:F,isSubscriptionExpired:A,isInGracePeriod:H,isGraceExpired:B,gracePeriodEnd:_,isCancelScheduled:te,periodEndDate:j,isImmediateBlock:L,suspensionReason:(a==null?void 0:a.suspension_reason)??null,isPaymentFailure:L&&(a==null?void 0:a.suspension_reason)==="payment_failure",isAdminBlocked:h,hasAvulsaInstances:s,hasCreditSlotsExpired:Q,creditSlotGraceEnd:$,isCreditSlotGracePeriod:X,isCreditSlotGraceExpired:fe,hasExpiredAvulsaSlots:J,avulsaSlotGraceEnd:ie,isAvulsaSlotGracePeriod:le,isAvulsaSlotGraceExpired:pe,loading:u,startCheckout:ce,cancelSubscription:oe,refresh:f};return i.jsx(lb.Provider,{value:ye,children:e})},Qs=()=>{const e=g.useContext(lb);if(!e)throw new Error("useUserSubscriptionContext must be used within a UserSubscriptionProvider");return e},rp=["marketplace","metricas","organizador-numeros","track-ofertas"],ip=["gerador-audio","transcricao-audio"],db=g.createContext(null),Uk=({children:e})=>{const{isAdmin:t,loading:a}=iu(),{subscription:o,loading:n,refresh:r}=Qs(),s=(o==null?void 0:o.status)??"",l=o!=null&&o.grace_period_end?new Date(o.grace_period_end).getTime()>Date.now():!1,c=s==="active"||s==="trialing"||l,d=a||n,u=d?null:t||c,m=!1,h=g.useCallback(b=>{if(d||u===null||t||u)return!0;const y=b.replace(/^\//,"").toLowerCase();return rp.some(x=>y===x||y.startsWith(x))},[d,u,t]),p=g.useCallback(b=>{const y=b.replace(/^\//,"").toLowerCase();return ip.some(x=>y===x||y.startsWith(x))},[]),v=g.useCallback(()=>{r()},[r]),f={isFullMember:u,isSemiFullMember:m,isAdmin:t,loading:d,canAccessSystem:h,isRestrictedSystem:p,refreshAccessLevel:v,FREE_SYSTEMS:rp,MEMBER_ONLY_SYSTEMS:ip};return i.jsx(db.Provider,{value:f,children:e})},Wk=()=>{const e=g.useContext(db);if(!e)throw new Error("useAccessLevelContext must be used within an AccessLevelProvider");return e},ub=g.createContext(null),sp=6.5,$k=({children:e})=>{const[t,a]=g.useState(0),[o,n]=g.useState([]),[r,s]=g.useState(!0),l=g.useCallback(async()=>{a(0),s(!1)},[]),c=g.useCallback(async()=>{n([])},[]);g.useEffect(()=>{l()},[l]);const d=g.useCallback(f=>!0,[]),u=g.useCallback(async(f,b,y)=>!0,[]),m=g.useCallback(f=>{const b=f*sp;return new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(b)},[]),h=g.useCallback(f=>f/sp,[]),p=g.useCallback(async()=>{s(!0),await Promise.all([l(),c()])},[l,c]),v={balance:t,loading:r,canAfford:d,deductCredits:u,transactions:o,loadTransactions:c,refresh:p,creditsToReais:m,reaisToCredits:h};return i.jsx(ub.Provider,{value:v,children:e})},Gk=()=>{const e=g.useContext(ub);if(!e)throw new Error("useCreditsContext must be used within a CreditsProvi
443der");return e};let Oc=null,Ki=[];const Lo=e=>{if(Oc){Oc.show(e);return}console.warn("[useSplashedToast] Toaster ainda não montado â enfileirando toast:",e.title||e.message),Ki.push(e)},Bc=e=>{if(Oc=e,e&&Ki.length>0){const t=Ki;Ki=[],t.forEach(a=>e.show(a))}},We={success:(e,t="")=>{Lo({title:e,message:t,variant:"success",highlightTitle:!0})},error:(e,t="")=>{Lo({title:e,message:t,variant:"error",highlightTitle:!0})},warning:(e,t="")=>{Lo({title:e,message:t,variant:"warning",highlightTitle:!0})},info:(e,t="")=>{Lo({title:e,message:t,variant:"default"})},show:e=>{Lo(e)}},Ge=e=>{if(typeof e=="string"){Lo({message:e,variant:"success"});return}const{title:t="",description:a="",variant:o}=e;Lo({title:t,message:a,variant:o==="destructive"?"error":"success",highlightTitle:!0})},Hk=()=>({toast:Ge,toasts:[],dismiss:()=>{}}),aJ=()=>({toastRef:g.useRef(null),setRef:t=>{t&&Bc(t)},toast:We});function du(e){if(e.pathname!=="/")return!1;const t=e.hash.split("?")[0];return t===""||t==="#"||t==="#_=_"||t==="#/"||t==="#/ads/settings"}async function Kk(e,t){let a;try{a=await fetch("https://jevbzxxgwsbbxzwwszag.supabase.co/functions/v1/facebook-oauth",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"omit",body:JSON.stringify({action:"exchange_code",code:e,state:t})})}catch{throw new Error("Não foi possÃvel acessar o servidor. Verifique sua conexão e tente novamente com um novo link.")}const o=await a.json().catch(()=>null);if(!(a.ok&&(o!=null&&o.success)))throw(o==null?void 0:o.error)==="Authorization link expired or already used"?new Error("Este link expirou ou já foi usado. Gere um novo link na aba Ads."):new Error(typeof(o==null?void 0:o.error)=="string"?`Não foi possÃvel conectar: ${o.error}`:`Não foi possÃvel concluir a conexão (erro ${a.status}). Gere um novo link na aba Ads.`)}const Xk="https://zapdata.co/";function Yk(){if(!du(window.location))return null;const t=new URLSearchParams(window.location.search).get("code");if(t)return{code:t};const a=window.location.hash||"",o=a.indexOf("?");if(o===-1)return null;const n=a.slice(o+1),s=new URLSearchParams(n).get("code");return s?{code:s,cleanHash:a.slice(0,o)}:null}function lp(){const{session:e,loading:t}=ut(),a=g.useRef(!1),[o,n]=g.useState(null);return g.useEffect(()=>{if(!du(window.location))return;const r=new URLSearchParams(window.location.search),s=r.get("state");if(!(s!=null&&s.startsWith("fb_"))||a.current)return;if(a.current=!0,window.history.replaceState({},document.title,window.location.pathname),r.has("error")){n("Autorização cancelada. Volte à aba Ads para gerar um novo link.");return}const l=r.get("code");if(!l){n("Link inválido. Volte à aba Ads para gerar um novo link.");return}n("Conectando sua conta do Facebook..."),Kk(l,s).then(()=>{var c;n("Conta do Facebook conectada! Você já pode fechar esta janela e voltar à aba Ads no computador de origem.");try{(c=window.opener)==null||c.postMessage({type:"facebook-connected"},window.location.origin),window.opener&&window.close()}catch{}}).catch(c=>{n(c instanceof Error?c.message:"Não foi possÃvel conectar. Gere um novo link na aba Ads e tente novamente.")})},[]),g.useEffect(()=>{const r=Yk();r&&(a.current||t||e&&(a.current=!0,window.history.replaceState({},document.title,window.location.pathname),(async()=>{let s=!0;try{const{data:l,error:c}=await ne.auth.refreshSession();if(c||!l.session){console.error("Session refresh failed before FB exchange:",c),We.error("Sessão expirada","Faça login novamente e tente conectar o Facebook."),s=!1,window.location.assign("/auth");return}const{data:d,error:u}=await ne.functions.invoke("facebook-oauth",{body:{action:"exchange_code",code:r.code,redirect_uri:Xk},headers:{Authorization:`Bearer ${l.session.access_token}`}});if(u){const m=d??null,h=m==null?void 0:m.error;if(h==="session_expired"){We.error("Sessão expirada","Faça login novamente e tente conectar o Facebook."),s=!1,window.location.assign("/auth");return}if(typeof h=="string"&&/code|expired|used|invalid/i.test(h)){We.error("Link de autorização expirado","Clique em Conectar Facebook novamente.");return}throw u}We.success("Conta do Facebook conectada!")}catch(l){console.error("Facebook OAuth callback error:",l);const c=l instanceof Error?l.message:"Tente novamente em alguns instantes.";We.error("Erro ao conectar com Facebook",c)}finally{s&&window.location.assign("/ads/settings")}})()))},[e,t]),o?i.jsx("div",{role:"status",className:"fixed inset-0 z-[1000] flex items-center justify-center bg-background p-6",children:i.jsxs("div",{className:"max-w-md rounded-xl border bg-card p-8 text-center space-y-4",children:[i.jsx("h1",{className:"text-xl font-semibold",children:"Conexão com o Facebook"}),i.jsx("p",{className:"text-muted-foreground",children:o})]})}):null}const ar=()=>Qs(),uu=()=>Wk();var Rl="focusScope.autoFocusOnMount",Dl="focusScope.autoFocusOnUnmount",cp={bubbles:!1,cancelable:!0},Qk="FocusScope",mu=g.forwardRef((e,t)=>
443{const{loop:a=!1,trapped:o=!1,onMountAutoFocus:n,onUnmountAutoFocus:r,...s}=e,[l,c]=g.useState(null),d=bo(n),u=bo(r),m=g.useRef(null),h=Qe(t,f=>c(f)),p=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(o){let f=function(w){if(p.paused||!l)return;const P=w.target;l.contains(P)?m.current=P:oo(m.current,{select:!0})},b=function(w){if(p.paused||!l)return;const P=w.relatedTarget;P!==null&&(l.contains(P)||oo(m.current,{select:!0}))},y=function(w){if(document.activeElement===document.body)for(const E of w)E.removedNodes.length>0&&oo(l)};document.addEventListener("focusin",f),document.addEventListener("focusout",b);const x=new MutationObserver(y);return l&&x.observe(l,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",b),x.disconnect()}}},[o,l,p.paused]),g.useEffect(()=>{if(l){up.add(p);const f=document.activeElement;if(!l.contains(f)){const y=new CustomEvent(Rl,cp);l.addEventListener(Rl,d),l.dispatchEvent(y),y.defaultPrevented||(Zk(oT(mb(l)),{select:!0}),document.activeElement===f&&oo(l))}return()=>{l.removeEventListener(Rl,d),setTimeout(()=>{const y=new CustomEvent(Dl,cp);l.addEventListener(Dl,u),l.dispatchEvent(y),y.defaultPrevented||oo(f??document.body,{select:!0}),l.removeEventListener(Dl,u),up.remove(p)},0)}}},[l,d,u,p]);const v=g.useCallback(f=>{if(!a&&!o||p.paused)return;const b=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,y=document.activeElement;if(b&&y){const x=f.currentTarget,[w,P]=Jk(x);w&&P?!f.shiftKey&&y===P?(f.preventDefault(),a&&oo(w,{select:!0})):f.shiftKey&&y===w&&(f.preventDefault(),a&&oo(P,{select:!0})):y===x&&f.preventDefault()}},[a,o,p.paused]);return i.jsx(_e.div,{tabIndex:-1,...s,ref:h,onKeyDown:v})});mu.displayName=Qk;function Zk(e,{select:t=!1}={}){const a=document.activeElement;for(const o of e)if(oo(o,{select:t}),document.activeElement!==a)return}function Jk(e){const t=mb(e),a=dp(t,e),o=dp(t.reverse(),e);return[a,o]}function mb(e){const t=[],a=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const n=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||n?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;a.nextNode();)t.push(a.currentNode);return t}function dp(e,t){for(const a of e)if(!eT(a,{upTo:t}))return a}function eT(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function tT(e){return e instanceof HTMLInputElement&&"select"in e}function oo(e,{select:t=!1}={}){if(e&&e.focus){const a=document.activeElement;e.focus({preventScroll:!0}),e!==a&&tT(e)&&t&&e.select()}}var up=aT();function aT(){let e=[];return{add(t){const a=e[0];t!==a&&(a==null||a.pause()),e=mp(e,t),e.unshift(t)},remove(t){var a;e=mp(e,t),(a=e[0])==null||a.resume()}}}function mp(e,t){const a=[...e],o=a.indexOf(t);return o!==-1&&a.splice(o,1),a}function oT(e){return e.filter(t=>t.tagName!=="A")}var Ml=0;function pb(){g.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??pp()),document.body.insertAdjacentElement("beforeend",e[1]??pp()),Ml++,()=>{Ml===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),Ml--}},[])}function pp(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var Xi="right-scroll-bar-position",Yi="width-before-scroll-bar",nT="with-scroll-bars-hidden",rT="--removed-body-scroll-bar-size";function Fl(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function iT(e,t){var a=g.useState(function(){return{value:e,callback:t,facade:{get current(){return a.value},set current(o){var n=a.value;n!==o&&(a.value=o,a.callback(o,n))}}}})[0];return a.callback=t,a.facade}var sT=typeof window<"u"?g.useLayoutEffect:g.useEffect,hp=new WeakMap;function lT(e,t){var a=iT(null,function(o){return e.forEach(function(n){return Fl(n,o)})});return sT(function(){var o=hp.get(a);if(o){var n=new Set(o),r=new Set(e),s=a.current;
vendor: 4,196 bytes, lines 443-458
443n.forEach(function(l){r.has(l)||Fl(l,null)}),r.forEach(function(l){n.has(l)||Fl(l,s)})}hp.set(a,e)},[e]),a}function cT(e){return e}function dT(e,t){t===void 0&&(t=cT);var a=[],o=!1,n={read:function(){if(o)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return a.length?a[a.length-1]:e},useMedium:function(r){var s=t(r,o);return a.push(s),function(){a=a.filter(function(l){return l!==s})}},assignSyncMedium:function(r){for(o=!0;a.length;){var s=a;a=[],s.forEach(r)}a={push:function(l){return r(l)},filter:function(){return a}}},assignMedium:function(r){o=!0;var s=[];if(a.length){var l=a;a=[],l.forEach(r),s=a}var c=function(){var u=s;s=[],u.forEach(r)},d=function(){return Promise.resolve().then(c)};d(),a={push:function(u){s.push(u),d()},filter:function(u){return s=s.filter(u),a}}}};return n}function uT(e){e===void 0&&(e={});var t=dT(null);return t.options=ro({async:!0,ssr:!1},e),t}var hb=function(e){var t=e.sideCar,a=Dg(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var o=t.read();if(!o)throw new Error("Sidecar medium not found");return g.createElement(o,ro({},a))};hb.isSideCarExport=!0;function mT(e,t){return e.useMedium(t),hb}var fb=uT(),Ll=function(){},Zs=g.forwardRef(function(e,t){var a=g.useRef(null),o=g.useState({onScrollCapture:Ll,onWheelCapture:Ll,onTouchMoveCapture:Ll}),n=o[0],r=o[1],s=e.forwardProps,l=e.children,c=e.className,d=e.removeScrollBar,u=e.enabled,m=e.shards,h=e.sideCar,p=e.noRelative,v=e.noIsolation,f=e.inert,b=e.allowPinchZoom,y=e.as,x=y===void 0?"div":y,w=e.gapMode,P=Dg(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),E=h,k=lT([a,t]),S=ro(ro({},P),n);return g.createElement(g.Fragment,null,u&&g.createElement(E,{sideCar:fb,removeScrollBar:d,shards:m,noRelative:p,noIsolation:v,inert:f,setCallbacks:r,allowPinchZoom:!!b,lockRef:a,gapMode:w}),s?g.cloneElement(g.Children.only(l),ro(ro({},S),{ref:k})):g.createElement(x,ro({},S,{className:c,ref:k}),l))});Zs.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};Zs.classNames={fullWidth:Yi,zeroRight:Xi};var pT=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function hT(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=pT();return t&&e.setAttribute("nonce",t),e}function fT(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function gT(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var vT=function(){var e=0,t=null;return{add:function(a){e==0&&(t=hT())&&(fT(t,a),gT(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},bT=function(){var e=vT();return function(t,a){g.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&a])}},gb=function(){var e=bT(),t=function(a){var o=a.styles,n=a.dynamic;return e(o,n),null};return t},yT={left:0,top:0,right:0,gap:0},jl=function(e){return parseInt(e||"",10)||0},xT=function(e){var t=window.getComputedStyle(document.body),a=t[e==="padding"?"paddingLeft":"marginLeft"],o=t[e==="padding"?"paddingTop":"marginTop"],n=t[e==="padding"?"paddingRight":"marginRight"];return[jl(a),jl(o),jl(n)]},wT=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return yT;var t=xT(e),a=document.documentElement.clientWidth,o=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,o-a+t[2]-t[0])}},CT=gb(),Sn="data-scroll-locked",PT=function(e,t,a,o){var n=e.left,r=e.top,s=e.right,l=e.gap;return a===void 0&&(a="margin"),` 444 .`.concat(nT,` { 445 overflow: hidden `).concat(o,`; 446 padding-right: `).concat(l,"px ").concat(o,`; 447 } 448 body[`).concat(Sn,`] { 449 overflow: hidden `).concat(o,`; 450 overscroll-behavior: contain; 451 `).concat([t&&"position: relative ".concat(o,";"),a==="margin"&&` 452 padding-left: `.concat(n,`px; 453 padding-top: `).concat(r,`px; 454 padding-right: `).concat(s,`px; 455 margin-left:0; 456 margin-top:0; 457 margin-right: `).concat(l,"px ").concat(o,`; 458 `),a==="padding"&&"padding-right: ".concat(l,"px ").concat(o,";
458")].filter(Boolean).join(""),` 459 } 460 461 .`).concat(Xi,` { 462 right: `).concat(l,"px ").concat(o,`; 463 } 464 465 .`).concat(Yi,` { 466 margin-right: `).concat(l,"px ").concat(o,`; 467 } 468 469 .`).concat(Xi," .").concat(Xi,` { 470 right: 0 `).concat(o,`; 471 } 472 473 .`).concat(Yi," .").concat(Yi,` { 474 margin-right: 0 `).concat(o,`; 475 } 476 477 body[`).concat(Sn,`] { 478 `).concat(rT,": ").concat(l,`px; 479 } 480`)},fp=function(){var e=parseInt(document.body.getAttribute(Sn)||"0",10);return isFinite(e)?e:0},AT=function(){g.useEffect(function(){return document.body.setAttribute(Sn,(fp()+1).toString()),function(){var e=fp()-1;e<=0?document.body.removeAttribute(Sn):document.body.setAttribute(Sn,e.toString())}},[])},ET=function(e){var t=e.noRelative,a=e.noImportant,o=e.gapMode,n=o===void 0?"margin":o;AT();var r=g.useMemo(function(){return wT(n)},[n]);return g.createElement(CT,{styles:PT(r,!t,n,a?"":"!important")})},zc=!1;if(typeof window<"u")try{var Ri=Object.defineProperty({},"passive",{get:function(){return zc=!0,!0}});window.addEventListener("test",Ri,Ri),window.removeEventListener("test",Ri,Ri)}catch{zc=!1}var dn=zc?{passive:!1}:!1,ST=function(e){return e.tagName==="TEXTAREA"},vb=function(e,t){if(!(e instanceof Element))return!1;var a=window.getComputedStyle(e);return a[t]!=="hidden"&&!(a.overflowY===a.overflowX&&!ST(e)&&a[t]==="visible")},NT=function(e){return vb(e,"overflowY")},kT=function(e){return vb(e,"overflowX")},gp=function(e,t){var a=t.ownerDocument,o=t;do{typeof ShadowRoot<"u"&&o instanceof ShadowRoot&&(o=o.host);var n=bb(e,o);if(n){var r=yb(e,o),s=r[1],l=r[2];if(s>l)return!0}o=o.parentNode}while(o&&o!==a.body);return!1},TT=function(e){var t=e.scrollTop,a=e.scrollHeight,o=e.clientHeight;return[t,a,o]},IT=function(e){var t=e.scrollLeft,a=e.scrollWidth,o=e.clientWidth;return[t,a,o]},bb=function(e,t){return e==="v"?NT(t):kT(t)},yb=function(e,t){return e==="v"?TT(t):IT(t)},RT=function(e,t){return e==="h"&&t==="rtl"?-1:1},DT=function(e,t,a,o,n){var r=RT(e,window.getComputedStyle(t).direction),s=r*o,l=a.target,c=t.contains(l),d=!1,u=s>0,m=0,h=0;do{if(!l)break;var p=yb(e,l),v=p[0],f=p[1],b=p[2],y=f-b-r*v;(v||y)&&bb(e,l)&&(m+=y,h+=v);var x=l.parentNode;l=x&&x.nodeType===Node.DOCUMENT_FRAGMENT_NODE?x.host:x}while(!c&&l!==document.body||c&&(t.contains(l)||t===l));return(u&&(Math.abs(m)<1||!n)||!u&&(Math.abs(h)<1||!n))&&(d=!0),d},Di=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},vp=function(e){return[e.deltaX,e.deltaY]},bp=function(e){return e&&"current"in e?e.current:e},MT=function(e,t){return e[0]===t[0]&&e[1]===t[1]},FT=function(e){return` 481 .block-interactivity-`.concat(e,` {pointer-events: none;} 482 .allow-interactivity-`).concat(e,` {pointer-events: all;} 483`)},LT=0,un=[];function jT(e){var t=g.useRef([]),a=g.useRef([0,0]),o=g.useRef(),n=g.useState(LT++)[0],r=g.useState(gb)[0],s=g.useRef(e);g.useEffect(function(){s.current=e},[e]),g.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(n));var f=r0([e.lockRef.current],(e.shards||[]).map(bp),!0).filter(Boolean);return f.forEach(function(b){return b.classList.add("allow-interactivity-".concat(n))}),function(){document.body.classList.remove("block-interactivity-".concat(n)),f.forEach(function(b){return b.classList.remove("allow-interactivity-".concat(n))})}}},[e.inert,e.lockRef.current,e.shards]);var l=g.useCallback(function(f,b){if("touches"in f&&f.touches.length===2||f.type==="wheel"&&f.ctrlKey)return!s.current.allowPinchZoom;var y=Di(f),x=a.current,w="deltaX"in f?f.deltaX:x[0]-y[0],P="deltaY"in f?f.deltaY:x[1]-y[1],E,k=f.target,S=Math.abs(w)>Math.abs(P)?"h":"v";if("touches"in f&&S==="h"&&k.type==="range")return!1;var R=gp(S,k);if(!R)return!0;if(R?E=S:(E=S==="v"?"h":"v",R=gp(S,k)),!R)return!1;if(!o.current&&"changedTouches"in f&&(w||P)&&(o.current=E),!E)return!0;var I=o.current||E;return DT(I,b,f,I==="h"?w:P,!0)},[]),c=g.useCallback(function(f){var b=f;if(!(!un.length||un[un.length-1]!==r)){var y="deltaY"in b?vp(b):Di(b),x=t.current.filter(function(E){return E.name===b.type&&(E.target===b.target||b.target===E.shadowParent)&&MT(E.delta,y)})[0];if(x&&x.should){b.cancelable&&b.preventDefault();return}
vendor: 4,333 bytes, line 483
483if(!x){var w=(s.current.shards||[]).map(bp).filter(Boolean).filter(function(E){return E.contains(b.target)}),P=w.length>0?l(b,w[0]):!s.current.noIsolation;P&&b.cancelable&&b.preventDefault()}}},[]),d=g.useCallback(function(f,b,y,x){var w={name:f,delta:b,target:y,should:x,shadowParent:_T(y)};t.current.push(w),setTimeout(function(){t.current=t.current.filter(function(P){return P!==w})},1)},[]),u=g.useCallback(function(f){a.current=Di(f),o.current=void 0},[]),m=g.useCallback(function(f){d(f.type,vp(f),f.target,l(f,e.lockRef.current))},[]),h=g.useCallback(function(f){d(f.type,Di(f),f.target,l(f,e.lockRef.current))},[]);g.useEffect(function(){return un.push(r),e.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:h}),document.addEventListener("wheel",c,dn),document.addEventListener("touchmove",c,dn),document.addEventListener("touchstart",u,dn),function(){un=un.filter(function(f){return f!==r}),document.removeEventListener("wheel",c,dn),document.removeEventListener("touchmove",c,dn),document.removeEventListener("touchstart",u,dn)}},[]);var p=e.removeScrollBar,v=e.inert;return g.createElement(g.Fragment,null,v?g.createElement(r,{styles:FT(n)}):null,p?g.createElement(ET,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function _T(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const OT=mT(fb,jT);var pu=g.forwardRef(function(e,t){return g.createElement(Zs,ro({},e,{ref:t,sideCar:OT}))});pu.classNames=Zs.classNames;var BT=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},mn=new WeakMap,Mi=new WeakMap,Fi={},_l=0,xb=function(e){return e&&(e.host||xb(e.parentNode))},zT=function(e,t){return t.map(function(a){if(e.contains(a))return a;var o=xb(a);return o&&e.contains(o)?o:(console.error("aria-hidden",a,"in not contained inside",e,". Doing nothing"),null)}).filter(function(a){return!!a})},VT=function(e,t,a,o){var n=zT(t,Array.isArray(e)?e:[e]);Fi[a]||(Fi[a]=new WeakMap);var r=Fi[a],s=[],l=new Set,c=new Set(n),d=function(m){!m||l.has(m)||(l.add(m),d(m.parentNode))};n.forEach(d);var u=function(m){!m||c.has(m)||Array.prototype.forEach.call(m.children,function(h){if(l.has(h))u(h);else try{var p=h.getAttribute(o),v=p!==null&&p!=="false",f=(mn.get(h)||0)+1,b=(r.get(h)||0)+1;mn.set(h,f),r.set(h,b),s.push(h),f===1&&v&&Mi.set(h,!0),b===1&&h.setAttribute(a,"true"),v||h.setAttribute(o,"true")}catch(y){console.error("aria-hidden: cannot operate on ",h,y)}})};return u(t),l.clear(),_l++,function(){s.forEach(function(m){var h=mn.get(m)-1,p=r.get(m)-1;mn.set(m,h),r.set(m,p),h||(Mi.has(m)||m.removeAttribute(o),Mi.delete(m)),p||m.removeAttribute(a)}),_l--,_l||(mn=new WeakMap,mn=new WeakMap,Mi=new WeakMap,Fi={})}},wb=function(e,t,a){a===void 0&&(a="data-aria-hidden");var o=Array.from(Array.isArray(e)?e:[e]),n=BT(e);return n?(o.push.apply(o,Array.from(n.querySelectorAll("[aria-live]"))),VT(o,n,a,"aria-hidden")):function(){return null}},Js="Dialog",[Cb,Pb]=La(Js),[qT,Ca]=Cb(Js),Ab=e=>{const{__scopeDialog:t,children:a,open:o,defaultOpen:n,onOpenChange:r,modal:s=!0}=e,l=g.useRef(null),c=g.useRef(null),[d,u]=Gn({prop:o,defaultProp:n??!1,onChange:r,caller:Js});return i.jsx(qT,{scope:t,triggerRef:l,contentRef:c,contentId:Xo(),titleId:Xo(),descriptionId:Xo(),open:d,onOpenChange:u,onOpenToggle:g.useCallback(()=>u(m=>!m),[u]),modal:s,children:a})};Ab.displayName=Js;var Eb="DialogTrigger",Sb=g.forwardRef((e,t)=>{const{__scopeDialog:a,...o}=e,n=Ca(Eb,a),r=Qe(t,n.triggerRef);return i.jsx(_e.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":gu(n.open),...o,ref:r,onClick:qe(e.onClick,n.onOpenToggle)})});Sb.displayName=Eb;var hu="DialogPortal",[UT,Nb]=Cb(hu,{forceMount:void 0}),kb=e=>{const{__scopeDialog:t,forceMount:a,children:o,container:n}=e,r=Ca(hu,t);return i.jsx(UT,{scope:t,forceMount:a,children:g.Children.map(o,s=>i.jsx(Jn,{present:a||r.open,children:i.jsx(Yd,{asChild:!0,container:n,children:s})}))})};kb.displayName=hu;var bs="DialogOverlay",Tb=g.forwardRef((e,t)=>{const a=Nb(bs,e.__scopeDialog),{forceMount:o=a.forceMount,...n}=e,r=Ca(bs,e.__scopeDialog);return r.modal?i.jsx(Jn,{present:o||r.open,children:i.jsx($T,{...n,ref:t})}):null});Tb.displayName=bs;var WT=Wn("DialogOverlay.RemoveScroll"),$T=g.forwardRef((e,t)=>
483{const{__scopeDialog:a,...o}=e,n=Ca(bs,a);return i.jsx(pu,{as:WT,allowPinchZoom:!0,shards:[n.contentRef],children:i.jsx(_e.div,{"data-state":gu(n.open),...o,ref:t,style:{pointerEvents:"auto",...o.style}})})}),tn="DialogContent",Ib=g.forwardRef((e,t)=>{const a=Nb(tn,e.__scopeDialog),{forceMount:o=a.forceMount,...n}=e,r=Ca(tn,e.__scopeDialog);return i.jsx(Jn,{present:o||r.open,children:r.modal?i.jsx(GT,{...n,ref:t}):i.jsx(HT,{...n,ref:t})})});Ib.displayName=tn;var GT=g.forwardRef((e,t)=>{const a=Ca(tn,e.__scopeDialog),o=g.useRef(null),n=Qe(t,a.contentRef,o);return g.useEffect(()=>{const r=o.current;if(r)return wb(r)},[]),i.jsx(Rb,{...e,ref:n,trapFocus:a.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:qe(e.onCloseAutoFocus,r=>{var s;r.preventDefault(),(s=a.triggerRef.current)==null||s.focus()}),onPointerDownOutside:qe(e.onPointerDownOutside,r=>{const s=r.detail.originalEvent,l=s.button===0&&s.ctrlKey===!0;(s.button===2||l)&&r.preventDefault()}),onFocusOutside:qe(e.onFocusOutside,r=>r.preventDefault())})}),HT=g.forwardRef((e,t)=>{const a=Ca(tn,e.__scopeDialog),o=g.useRef(!1),n=g.useRef(!1);return i.jsx(Rb,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:r=>{var s,l;(s=e.onCloseAutoFocus)==null||s.call(e,r),r.defaultPrevented||(o.current||(l=a.triggerRef.current)==null||l.focus(),r.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:r=>{var c,d;(c=e.onInteractOutside)==null||c.call(e,r),r.defaultPrevented||(o.current=!0,r.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const s=r.target;((d=a.triggerRef.current)==null?void 0:d.contains(s))&&r.preventDefault(),r.detail.originalEvent.type==="focusin"&&n.current&&r.preventDefault()}})}),Rb=g.forwardRef((e,t)=>{const{__scopeDialog:a,trapFocus:o,onOpenAutoFocus:n,onCloseAutoFocus:r,...s}=e,l=Ca(tn,a),c=g.useRef(null),d=Qe(t,c);return pb(),i.jsxs(i.Fragment,{children:[i.jsx(mu,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:n,onUnmountAutoFocus:r,children:i.jsx(Us,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionId,"aria-labelledby":l.titleId,"data-state":gu(l.open),...s,ref:d,onDismiss:()=>l.onOpenChange(!1)})}),i.jsxs(i.Fragment,{children:[i.jsx(XT,{titleId:l.titleId}),i.jsx(QT,{contentRef:c,descriptionId:l.descriptionId})]})]})}),fu="DialogTitle",Db=g.forwardRef((e,t)=>{const{__scopeDialog:a,...o}=e,n=Ca(fu,a);return i.jsx(_e.h2,{id:n.titleId,...o,ref:t})});Db.displayName=fu;var Mb="DialogDescription",Fb=g.forwardRef((e,t)=>{const{__scopeDialog:a,...o}=e,n=Ca(Mb,a);return i.jsx(_e.p,{id:n.descriptionId,...o,ref:t})});Fb.displayName=Mb;var Lb="DialogClose",jb=g.forwardRef((e,t)=>{const{__scopeDialog:a,...o}=e,n=Ca(Lb,a);return i.jsx(_e.button,{type:"button",...o,ref:t,onClick:qe(e.onClick,()=>n.onOpenChange(!1))})});jb.displayName=Lb;function gu(e){return e?"open":"closed"}var _b="DialogTitleWarning",[KT,Ob]=mA(_b,{contentName:tn,titleName:fu,docsSlug:"dialog"}),XT=({titleId:e})=>{const t=Ob(_b),a=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. 484 485If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. 486 487For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return g.useEffect(()=>{e&&(document.getElementById(e)||console.error(a))},[a,e]),null},YT="DialogDescriptionWarning",QT=({contentRef:e,descriptionId:t})=>{const o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Ob(YT).contentName}}.`;return g.useEffect(()=>{var r;const n=(r=e.current)==null?void 0:r.getAttribute("aria-describedby");t&&n&&(document.getElementById(t)||console.warn(o))},[o,e,t]),null},Bb=Ab,zb=Sb,Vb=kb,vu=Tb,bu=Ib,yu=Db,xu=Fb,el=jb;const ya=Bb,ZT=zb,JT=Vb,oJ=el,qb=g.forwardRef(({className:e,...t},a)=>i.jsx(vu,{ref:a,className:ve("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));qb.displayName=vu.displayName;const sa=g.forwardRef(({className:e,children:t,...a},o)=>i.jsxs(JT,{children:[i.jsx(qb,{}),i.jsxs(bu,{ref:o,className:ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rou
487nded-lg",e),...a,children:[t,i.jsxs(el,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[i.jsx(Ma,{className:"h-4 w-4"}),i.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));sa.displayName=bu.displayName;const xa=({className:e,...t})=>i.jsx("div",{className:ve("flex flex-col space-y-1.5 text-center sm:text-left",e),...t});xa.displayName="DialogHeader";const e1=({className:e,...t})=>i.jsx("div",{className:ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});e1.displayName="DialogFooter";const wa=g.forwardRef(({className:e,...t},a)=>i.jsx(yu,{ref:a,className:ve("text-lg font-semibold leading-none tracking-tight",e),...t}));wa.displayName=yu.displayName;const wo=g.forwardRef(({className:e,...t},a)=>i.jsx(xu,{ref:a,className:ve("text-sm text-muted-foreground",e),...t}));wo.displayName=xu.displayName;const yp=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,xp=Fv,tl=(e,t)=>a=>{var o;if((t==null?void 0:t.variants)==null)return xp(e,a==null?void 0:a.class,a==null?void 0:a.className);const{variants:n,defaultVariants:r}=t,s=Object.keys(n).map(d=>{const u=a==null?void 0:a[d],m=r==null?void 0:r[d];if(u===null)return null;const h=yp(u)||yp(m);return n[d][h]}),l=a&&Object.entries(a).reduce((d,u)=>{let[m,h]=u;return h===void 0||(d[m]=h),d},{}),c=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((d,u)=>{let{class:m,className:h,...p}=u;return Object.entries(p).every(v=>{let[f,b]=v;return Array.isArray(b)?b.includes({...r,...l}[f]):{...r,...l}[f]===b})?[...d,m,h]:d},[]);return xp(e,s,c,a==null?void 0:a.class,a==null?void 0:a.className)},ys=tl("relative group inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90 border border-primary/20",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90 border border-destructive/20",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-border/20",ghost:"hover:bg-accent hover:text-accent-foreground border-transparent",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),we=g.forwardRef(({className:e,variant:t,size:a,asChild:o=!1,neon:n=!0,children:r,...s},l)=>{const c=n&&t!=="link"&&t!=="ghost"&&!o;return o?i.jsx(hA,{className:ve(ys({variant:t,size:a,className:e})),ref:l,...s,children:r}):i.jsxs("button",{className:ve(ys({variant:t,size:a,className:e})),ref:l,...s,children:[c&&i.jsxs(i.Fragment,{children:[i.jsx("span",{className:"absolute h-px opacity-0 group-hover:opacity-100 transition-all duration-500 ease-in-out inset-x-0 top-0 bg-gradient-to-r w-3/4 mx-auto from-transparent via-accent to-transparent pointer-events-none"}),i.jsx("span",{className:"absolute group-hover:opacity-30 transition-all duration-500 ease-in-out inset-x-0 h-px -bottom-px bg-gradient-to-r w-3/4 mx-auto from-transparent via-accent to-transparent pointer-events-none"})]}),r]})});we.displayName="Button";const Re=e=>typeof e=="string",ur=()=>{let e,t;const a=new Promise((o,n)=>{e=o,t=n});return a.resolve=e,a.reject=t,a},wp=e=>e==null?"":String(e),t1=(e,t,a)=>{e.forEach(o=>{t[o]&&(a[o]=t[o])})},a1=/###/g,Cp=e=>e&&e.includes("###")?e.replace(a1,"."):e,Pp=e=>!e||Re(e),kr=(e,t,a)=>{const o=Re(t)?t.split("."):t;let n=0;for(;n<o.length-1;){if(Pp(e))return{};const r=Cp(o[n]);!e[r]&&a&&(e[r]=new a),Object.prototype.hasOwnProperty.call(e,r)?e=e[r]:e={},++n}return Pp(e)?{}:{obj:e,k:Cp(o[n])}},Ap=(e,t,a)=>{const{obj:o,k:n}=kr(e,t,Object);if(o!==void 0||t.length===1){o[n]=a;return}let r=t[t.length-1],s=t.slice(0,t.length-1),l=kr(e,s,Object);for(;l.obj===void 0&&s.length;)r=`${s[s.length-1]}.${r}`,s=s.slice(0,s.length-1),l=kr(e,s,Object),l!=null&&l.obj&&typeof l.obj[`${l.k}.${r}`]<"u"&&(l.obj=void 0);l.obj[`${l.k}.${r}`]=a},o1=(e,t,a,o)=>{const{obj:n,k:r}=kr(e,t,Object);n[r]=n[r]||[],n[r].push(a)},xs=(e,t)=>{const{obj:a,k:o}=kr(e,t);if(a&&Object.prototype.hasOwnProperty.call(a,o))return a[o]},n1=(e,t,a)=>{const o=xs(e,a);return o!==void 0?o:xs(t,a)},Ub=(e,t,a)=>{for(const o in t)o!=="__proto__"&&o!=="constructor"&&(Object.prototype.hasOwnProperty.call(e,o)?Re(e[o])||e[o]instanceof String||Re(t[o])||t[o]instanceof String?a&&(e[o]=t[o]):Ub(e[o],t[o],a):e[o]=t[o]);return e},za=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),r1={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i1=e=>Re(e)?e.replace(/[&<>
487"'\/]/g,t=>r1[t]):e;class s1{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){const a=this.regExpMap.get(t);if(a!==void 0)return a;const o=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,o),this.regExpQueue.push(t),o}}const l1=[" ",",","?","!",";"],c1=new s1(20),d1=(e,t,a)=>{t=t||"",a=a||"";const o=l1.filter(s=>!t.includes(s)&&!a.includes(s));if(o.length===0)return!0;const n=c1.getRegExp(`(${o.map(s=>s==="?"?"\\?":s).join("|")})`);let r=!n.test(e);if(!r){const s=e.indexOf(a);s>0&&!n.test(e.substring(0,s))&&(r=!0)}return r},Vc=(e,t,a=".")=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;const o=t.split(a);let n=e;for(let r=0;r<o.length;){if(!n||typeof n!="object")return;let s,l="";for(let c=r;c<o.length;++c)if(c!==r&&(l+=a),l+=o[c],s=n[l],s!==void 0){if(["string","number","boolean"].includes(typeof s)&&c<o.length-1)continue;r+=c-r+1;break}n=s}return n},Wr=e=>e==null?void 0:e.replace(/_/g,"-"),u1={type:"logger",log(e){this.output("log",e)},warn(e){this.output("warn",e)},error(e){this.output("error",e)},output(e,t){var a,o;(o=(a=console==null?void 0:console[e])==null?void 0:a.apply)==null||o.call(a,console,t)}};class ws{constructor(t,a={}){this.init(t,a)}init(t,a={}){this.prefix=a.prefix||"i18next:",this.logger=t||u1,this.options=a,this.debug=a.debug}log(...t){return this.forward(t,"log","",!0)}warn(...t){return this.forward(t,"warn","",!0)}error(...t){return this.forward(t,"error","")}deprecate(...t){return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(t,a,o,n){return n&&!this.debug?null:(t=t.map(r=>Re(r)?r.replace(/[\r\n\x00-\x1F\x7F]/g," "):r),Re(t[0])&&(t[0]=`${o}${this.prefix} ${t[0]}`),this.logger[a](t))}create(t){return new ws(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t=t||this.options,t.prefix=t.prefix||this.prefix,new ws(this.logger,t)}}var Ta=new ws;class al{constructor(){this.observers={}}on(t,a){return t.split(" ").forEach(o=>{this.observers[o]||(this.observers[o]=new Map);const n=this.observers[o].get(a)||0;this.observers[o].set(a,n+1)}),this}off(t,a){if(this.observers[t]){if(!a){delete this.observers[t];return}this.observers[t].delete(a)}}once(t,a){const o=(...n)=>{a(...n),this.off(t,o)};return this.on(t,o),this}emit(t,...a){this.observers[t]&&Array.from(this.observers[t].entries()).forEach(([n,r])=>{for(let s=0;s<r;s++)n(...a)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([n,r])=>{for(let s=0;s<r;s++)n(t,...a)})}}class Ep extends al{constructor(t,a={ns:["translation"],defaultNS:"translation"}){super(),this.data=t||{},this.options=a,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.includes(t)||this.options.ns.push(t)}removeNamespaces(t){const a=this.options.ns.indexOf(t);a>-1&&this.options.ns.splice(a,1)}getResource(t,a,o,n={}){var d,u;const r=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,s=n.ignoreJSONStructure!==void 0?n.ignoreJSONStructure:this.options.ignoreJSONStructure;let l;t.includes(".")?l=t.split("."):(l=[t,a],o&&(Array.isArray(o)?l.push(...o):Re(o)&&r?l.push(...o.split(r)):l.push(o)));const c=xs(this.data,l);return!c&&!a&&!o&&t.includes(".")&&(t=l[0],a=l[1],o=l.slice(2).join(".")),c||!s||!Re(o)?c:Vc((u=(d=this.data)==null?void 0:d[t])==null?void 0:u[a],o,r)}addResource(t,a,o,n,r={silent:!1}){const s=r.keySeparator!==void 0?r.keySeparator:this.options.keySeparator;let l=[t,a];o&&(l=l.concat(s?o.split(s):o)),t.includes(".")&&(l=t.split("."),n=a,a=l[1]),this.addNamespaces(a),Ap(this.data,l,n),r.silent||this.emit("added",t,a,o,n)}addResources(t,a,o,n={silent:!1}){for(const r in o)(Re(o[r])||Array.isArray(o[r]))&&this.addResource(t,a,r,o[r],{silent:!0});n.silent||this.emit("added",t,a,o)}addResourceBundle(t,a,o,n,r,s={silent:!1,skipCopy:!1}){let l=[t,a];t.includes(".")&&(l=t.split("."),n=o,o=a,a=l[1]),this.addNamespaces(a);let c=xs(this.data,l)||{};s.skipCopy||(o=JSON.parse(JSON.stringify(o))),n?Ub(c,o,r):c={...c,...o}
487,Ap(this.data,l,c),s.silent||this.emit("added",t,a,o)}removeResourceBundle(t,a){this.hasResourceBundle(t,a)&&delete this.data[t][a],this.removeNamespaces(a),this.emit("removed",t,a)}hasResourceBundle(t,a){return this.getResource(t,a)!==void 0}getResourceBundle(t,a){return a||(a=this.options.defaultNS),this.getResource(t,a)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const a=this.getDataByLanguage(t);return!!(a&&Object.keys(a)||[]).find(n=>a[n]&&Object.keys(a[n]).length>0)}toJSON(){return this.data}}var Wb={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,a,o,n){return e.forEach(r=>{var s;t=((s=this.processors[r])==null?void 0:s.process(t,a,o,n))??t}),t}};const $b=Symbol("i18next/PATH_KEY");function m1(){const e=[],t=Object.create(null);let a;return t.get=(o,n)=>{var r;return(r=a==null?void 0:a.revoke)==null||r.call(a),n===$b?e:(e.push(n),a=Proxy.revocable(o,t),a.proxy)},Proxy.revocable(Object.create(null),t).proxy}function Nn(e,t){const{[$b]:a}=e(m1()),o=(t==null?void 0:t.keySeparator)??".",n=(t==null?void 0:t.nsSeparator)??":",r=(t==null?void 0:t.enableSelector)==="strict";if(a.length>1&&n){const s=t==null?void 0:t.ns,l=r?Array.isArray(s)?s:s?[s]:null:Array.isArray(s)?s:null;if(l&&(r?l:l.length>1?l.slice(1):[]).includes(a[0]))return`${a[0]}${n}${a.slice(1).join(o)}`}return a.join(o)}const Ol=e=>!Re(e)&&typeof e!="boolean"&&typeof e!="number";class Cs extends al{constructor(t,a={}){super(),t1(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","
487i18nFormat","utils"],t,this),this.options=a,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=Ta.create("translator"),this.checkedLoadedFor={}}changeLanguage(t){t&&(this.language=t)}exists(t,a={interpolation:{}}){const o={...a};if(t==null)return!1;const n=this.resolve(t,o);if((n==null?void 0:n.res)===void 0)return!1;const r=Ol(n.res);return!(o.returnObjects===!1&&r)}extractFromKey(t,a){let o=a.nsSeparator!==void 0?a.nsSeparator:this.options.nsSeparator;o===void 0&&(o=":");const n=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator;let r=a.ns||this.options.defaultNS||[];const s=o&&t.includes(o),l=!this.options.userDefinedKeySeparator&&!a.keySeparator&&!this.options.userDefinedNsSeparator&&!a.nsSeparator&&!d1(t,o,n);if(s&&!l){const c=t.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:t,namespaces:Re(r)?[r]:r};const d=t.split(o);(o!==n||o===n&&this.options.ns.includes(d[0]))&&(r=d.shift()),t=d.join(n)}return{key:t,namespaces:Re(r)?[r]:r}}translate(t,a,o){let n=typeof a=="object"?{...a}:a;if(typeof n!="object"&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),typeof n=="object"&&(n={...n}),n||(n={}),t==null)return"";typeof t=="function"&&(t=Nn(t,{...this.options,...n})),Array.isArray(t)||(t=[String(t)]),t=t.map(F=>typeof F=="function"?Nn(F,{...this.options,...n}):String(F));const r=n.returnDetails!==void 0?n.returnDetails:this.options.returnDetails,s=n.keySeparator!==void 0?n.keySeparator:this.options.keySeparator,{key:l,namespaces:c}=this.extractFromKey(t[t.length-1],n),d=c[c.length-1];let u=n.nsSeparator!==void 0?n.nsSeparator:this.options.nsSeparator;u===void 0&&(u=":");const m=n.lng||this.language,h=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((m==null?void 0:m.toLowerCase())==="cimode")return h?r?{res:`${d}${u}${l}`,usedKey:l,exactUsedKey:l,usedLng:m,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:`${d}${u}${l}`:r?{res:l,usedKey:l,exactUsedKey:l,usedLng:m,usedNS:d,usedParams:this.getUsedParamsDetails(n)}:l;const p=this.resolve(t,n);let v=p==null?void 0:p.res;const f=(p==null?void 0:p.usedKey)||l,b=(p==null?void 0:p.exactUsedKey)||l,y=["[object Number]","[object Function]","[object RegExp]"],x=n.joinArrays!==void 0?n.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject,P=n.count!==void 0&&!Re(n.count),E=Cs.hasDefaultValue(n),k=P?this.pluralResolver.getSuffix(m,n.count,n):"",S=n.ordinal&&P?this.pluralResolver.getSuffix(m,n.count,{ordinal:!1}):"",R=P&&!n.ordinal&&n.count===0,I=R&&n[`defaultValue${this.options.pluralSeparator}zero`]||n[`defaultValue${k}`]||n[`defaultValue${S}`]||n.defaultValue;let M=v;w&&!v&&E&&(M=I);const q=Ol(M),N=Object.prototype.toString.apply(M);if(w&&M&&q&&!y.includes(N)&&!(Re(x)&&Array.isArray(M))){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const F=this.options.returnedObjectHandler?this.options.returnedObjectHandler(f,M,{...n,ns:c}):`key '${l} (${this.language})' returned an object instead of string.`;return r?(p.res=F,p.usedParams=this.getUsedParamsDetails(n),p):F}if(s){const F=Array.isArray(M),A=F?[]:{},_=F?b:f;for(const K in M)if(Object.prototype.hasOwnProperty.call(M,K)){const V=`${_}${s}${K}`;E&&!v?A[K]=this.translate(V,{...n,defaultValue:Ol(I)?I[K]:void 0,joinArrays:!1,ns:c}):A[K]=this.translate(V,{...n,joinArrays:!1,ns:c}),A[K]===V&&(A[K]=M[K])}v=A}}else if(w&&Re(x)&&Array.isArray(v))v=v.join(x),v&&(v=this.extendTranslation(v,t,n,o));else{let F=!1,A=!1;!this.isValidLookup(v)&&E&&(F=!0,v=I),this.isValidLookup(v)||(A=!0,v=l);const K=(n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&A?void 0:v,V=E&&I!==v&&this.options.updateMissing;if(A||F||V){if(this.logger.log(V?"updateKey":"missingKey",m,d,P&&!V?`${l}${this.pluralResolver.getSuffix(m,n.count,n)}`:l,V?I:v),s){const j=this.resolve(l,{...n,keySeparator:!1});j&&j.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let H=[];const B=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if(this.options.saveMissingTo==="fallback"&&B&&B[0])for(let j=0;j<B.length;j++)H.push(B[j]);else this.options.saveMissingTo==="all"?H=this.languageUtils.toResolveHierarchy(n.lng||this.language):H.push(n.lng||this.language);const te=(j,L,Q)=>{var X;const $=E&&Q!==v?Q:K;this.options.missingKeyHandler?this.options.missingKeyHandler(j,d,L,$,V,n):(X=this.backendConnector)!=null&&X.saveMissing&&this.backendConnector.saveMissing(j,d,L,$,V,n),this.emit
487("missingKey",j,d,L,v)};this.options.saveMissing&&(this.options.saveMissingPlurals&&P?H.forEach(j=>{const L=this.pluralResolver.getSuffixes(j,n);R&&n[`defaultValue${this.options.pluralSeparator}zero`]&&!L.includes(`${this.options.pluralSeparator}zero`)&&L.push(`${this.options.pluralSeparator}zero`),L.forEach(Q=>{te([j],l+Q,n[`defaultValue${Q}`]||I)})}):te(H,l,I))}v=this.extendTranslation(v,t,n,p,o),A&&v===l&&this.options.appendNamespaceToMissingKey&&(v=`${d}${u}${l}`),(A||F)&&this.options.parseMissingKeyHandler&&(v=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${d}${u}${l}`:l,F?v:void 0,n))}return r?(p.res=v,p.usedParams=this.getUsedParamsDetails(n),p):v}extendTranslation(t,a,o,n,r){var c,d;if((c=this.i18nFormat)!=null&&c.parse)t=this.i18nFormat.parse(t,{...this.options.interpolation.defaultVariables,...o},o.lng||this.language||n.usedLng,n.usedNS,n.usedKey,{resolved:n});else if(!o.skipInterpolation){o.interpolation&&this.interpolator.init({...o,interpolation:{...this.options.interpolation,...o.interpolation}});const u=Re(t)&&(((d=o==null?void 0:o.interpolation)==null?void 0:d.skipOnVariables)!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let m;if(u){const p=t.match(this.interpolator.nestingRegexp);m=p&&p.length}let h=o.replace&&!Re(o.replace)?o.replace:o;if(this.options.interpolation.defaultVariables&&(h={...this.options.interpolation.defaultVariables,...h}),t=this.interpolator.interpolate(t,h,o.lng||this.language||n.usedLng,o),u){const p=t.match(this.interpolator.nestingRegexp),v=p&&p.length;m<v&&(o.nest=!1)}!o.lng&&n&&n.res&&(o.lng=this.language||n.usedLng),o.nest!==!1&&(t=this.interpolator.nest(t,(...p)=>(r==null?void 0:r[0])===p[0]&&!o.context?(this.logger.warn(`It seems you are nesting recursively key: ${p[0]} in key: ${a[0]}`),null):this.translate(...p,a),o)),o.interpolation&&this.interpolator.reset()}const s=o.postProcess||this.options.postProcess,l=Re(s)?[s]:s;return t!=null&&(l!=null&&l.length)&&o.applyPostProcessor!==!1&&(t=Wb.handle(l,t,a,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...n,usedParams:this.getUsedParamsDetails(o)},...o}:o,this)),t}resolve(t,a={}){let o,n,r,s,l;return Re(t)&&(t=[t]),Array.isArray(t)&&(t=t.map(c=>typeof c=="function"?Nn(c,{...this.options,...a}):c)),t.forEach(c=>{if(this.isValidLookup(o))return;const d=this.extractFromKey(c,a),u=d.key;n=u;let m=d.namespaces;this.options.fallbackNS&&(m=m.concat(this.options.fallbackNS));const h=a.count!==void 0&&!Re(a.count),p=h&&!a.ordinal&&a.count===0,v=a.context!==void 0&&(Re(a.context)||typeof a.context=="number")&&a.context!=="",f=a.lngs?a.lngs:this.languageUtils.toResolveHierarchy(a.lng||this.language,a.fallbackLng);m.forEach(b=>{var y,x;this.isValidLookup(o)||(l=b,!this.checkedLoadedFor[`${f[0]}-${b}`]&&((y=this.utils)!=null&&y.hasLoadedNamespace)&&!((x=this.utils)!=null&&x.hasLoadedNamespace(l))&&(this.checkedLoadedFor[`${f[0]}-${b}`]=!0,this.logger.warn(`key "${n}" for languages "${f.join(", ")}" won't get resolved as namespace "${l}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),f.forEach(w=>{var k;if(this.isValidLookup(o))return;s=w;const P=[u];if((k=this.i18nFormat)!=null&&k.addLookupKeys)this.i18nFormat.addLookupKeys(P,u,w,b,a);else{let S;h&&(S=this.pluralResolver.getSuffix(w,a.count,a));const R=`${this.options.pluralSeparator}zero`,I=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(a.ordinal&&S.startsWith(I)&&P.push(u+S.replace(I,this.options.pluralSeparator)),P.push(u+S),p&&P.push(u+R)),v){const M=`${u}${this.options.contextSeparator||"_"}${a.context}`;P.push(M),h&&(a.ordinal&&S.startsWith(I)&&P.push(M+S.replace(I,this.options.pluralSeparator)),P.push(M+S),p&&P.push(M+R))}}let E;for(;E=P.pop();)this.isValidLookup(o)||(r=E,o=this.getResource(w,b,E,a))}))})}),{res:o,usedKey:n,exactUsedKey:r,usedLng:s,usedNS:l}}isValidLookup(t){return t!==void 0&&!(!this.options.returnNull&&t===null)&&!(!this.options.returnEmptyString&&t==="")}getResource(t,a,o,n={}){var r;return(r=this.i18nFormat)!=null&&r.getResource?this.i18nFormat.getResource(t,a,o,n):this.resourceStore.getResource(t,a,o,n)}getUsedParamsDetails(t={}){const a=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],o=t.replace&&!Re(t.replace);let n=o?t.replace:t;if(o&&typeof t.count<"u"&&(n={...n,count:t.count}),this.options.interpolation.defaultVariables&&(n={...this.options.interpolation.defaultVariables,...n}),!o){n={...n};for(const r of a)delete n[r]}return n}static hasDefaultValue(t){const a="defaultValue";for(const o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&o.startsWith(a)&&t[o]!==void 0)return!0;return!1}}class Sp{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=Ta.create("languageUtils")}getScriptPartFromCode(t){if(t=Wr(t),!t||!t.includes("-"))return null;const a=t.split("-");return a.length===2||(a.pop(),a[a.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(a.join("-"))}getLanguagePartFromCode(t){if(t=Wr(t),!t||!t.includes("-"))return t;const a=t.split("-");return this.formatLanguageCode(a[0])}formatLanguageCode(t){if(Re(t)&&t.includes("-")){let a;try{a=Intl.getCanonicalLocales(t)[0]}catch{}return a&&this.options.lowerCaseLng&&(a=a.toLowerCase()),a||(this.options.lowerCaseLng?t.toLowerCase():t)}return this.options.cleanCode||this.options.lowerCaseLng?t.toLowerCase():t}isSupportedCode(t){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(t=this.getLanguagePartFromCode(t)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.includes(t)}getBestMatchFromCodes(t){if(!t)return null;let a;return t.forEach(o=>{if(a)return;const n=this.formatLanguageCode(o);(!this.options.supportedLngs||this.isSupportedCode(n))&&(a=n)}),!a&&this.options.supportedLngs&&t.forEach(o=>{if(a)return;const n=this.getScriptPartFromCode(o);if(this.isSupportedCode(n))return a=n;const r=this.getLanguagePartFromCode(o);if(this.isSupportedCode(r))return a=r;a=this.options.supportedLngs.find(s=>s===r?!0:!s.includes("-")&&!r.includes("-")?!1:!!(s.includes("-")&&!r.includes("-")&&s.slice(0,s.indexOf("-"))===r||s.startsWith(r)&&r.length>1))}),a||(a=this.getFallbackCodes(this.options.fallbackLng)[0]),a}getFallbackCodes(t,a){if(!t)return[];if(typeof t=="function"&&(t=t(a)),Re(t)&&(t=[t]),Array.isArray(t))return t;if(!a)return t.default||[];let o=t[a];
487return o||(o=t[this.getScriptPartFromCode(a)]),o||(o=t[this.formatLanguageCode(a)]),o||(o=t[this.getLanguagePartFromCode(a)]),o||(o=t.default),o||[]}toResolveHierarchy(t,a){const o=this.getFallbackCodes((a===!1?[]:a)||this.options.fallbackLng||[],t),n=[],r=s=>{s&&(this.isSupportedCode(s)?n.push(s):this.logger.warn(`rejecting language code not found in supportedLngs: ${s}`))};return Re(t)&&(t.includes("-")||t.includes("_"))?(this.options.load!=="languageOnly"&&r(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&r(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&r(this.getLanguagePartFromCode(t))):Re(t)&&r(this.formatLanguageCode(t)),o.forEach(s=>{n.includes(s)||r(this.formatLanguageCode(s))}),n}}const Np={zero:0,one:1,two:2,few:3,many:4,other:5},kp={select:e=>e===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class p1{constructor(t,a={}){this.languageUtils=t,this.options=a,this.logger=Ta.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(t,a={}){const o=Wr(t==="dev"?"en":t),n=a.ordinal?"ordinal":"cardinal",r=JSON.stringify({cleanedCode:o,type:n});if(r in this.pluralRulesCache)return this.pluralRulesCache[r];let s;try{s=new Intl.PluralRules(o,{type:n})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),kp;if(!t.match(/-|_/))return kp;const c=this.languageUtils.getLanguagePartFromCode(t);s=this.getRule(c,a)}return this.pluralRulesCache[r]=s,s}needsPlural(t,a={}){let o=this.getRule(t,a);return o||(o=this.getRule("dev",a)),(o==null?void 0:o.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(t,a,o={}){return this.getSuffixes(t,o).map(n=>`${a}${n}`)}getSuffixes(t,a={}){let o=this.getRule(t,a);return o||(o=this.getRule("dev",a)),o?o.resolvedOptions().pluralCategories.sort((n,r)=>Np[n]-Np[r]).map(n=>`${this.options.prepend}${a.ordinal?`ordinal${this.options.prepend}`:""}${n}`):[]}getSuffix(t,a,o={}){const n=this.getRule(t,o);return n?`${this.options.prepend}${o.ordinal?`ordinal${this.options.prepend}`:""}${n.select(a)}`:(this.logger.warn(`no plural rule found for: ${t}`),this.getSuffix("dev",a,o))}}const Tp=(e,t,a,o=".",n=!0)=>{let r=n1(e,t,a);return!r&&n&&Re(a)&&(r=Vc(e,a,o),r===void 0&&(r=Vc(t,a,o))),r},h1=e=>e.replace(/\$/g,"$$$$");class Ip{constructor(t={}){var a;this.logger=Ta.create("interpolator"),this.options=t,this.format=((a=t==null?void 0:t.interpolation)==null?void 0:a.format)||(o=>o),this.init(t)}init(t={}){t.interpolation||(t.interpolation={escapeValue:!0});const{escape:a,escapeValue:o,useRawValueToEscape:n,prefix:r,prefixEscaped:s,suffix:l,suffixEscaped:c,formatSeparator:d,unescapeSuffix:u,unescapePrefix:m,nestingPrefix:h,nestingPrefixEscaped:p,nestingSuffix:v,nestingSuffixEscaped:f,nestingOptionsSeparator:b,maxReplaces:y,alwaysFormat:
487x}=t.interpolation;this.escape=a!==void 0?a:i1,this.escapeValue=o!==void 0?o:!0,this.useRawValueToEscape=n!==void 0?n:!1,this.prefix=r?za(r):s||"{{",this.suffix=l?za(l):c||"}}",this.formatSeparator=d||",",this.unescapePrefix=u?"":m?za(m):"-",this.unescapeSuffix=this.unescapePrefix?"":u?za(u):"",this.nestingPrefix=h?za(h):p||za("$t("),this.nestingSuffix=v?za(v):f||za(")"),this.nestingOptionsSeparator=b||",",this.maxReplaces=y||1e3,this.alwaysFormat=x!==void 0?x:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=(a,o)=>(a==null?void 0:a.source)===o?(a.lastIndex=0,a):new RegExp(o,"g");this.regexp=t(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=t(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=t(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(t,a,o,n){var p;let r,s,l;const c=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},d=v=>{if(!v.includes(this.formatSeparator)){const x=Tp(a,c,v,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(x,void 0,o,{...n,...a,interpolationkey:v}):x}const f=v.split(this.formatSeparator),b=f.shift().trim(),y=f.join(this.formatSeparator).trim();return this.format(Tp(a,c,b,this.options.keySeparator,this.options.ignoreJSONStructure),y,o,{...n,...a,interpolationkey:b})};this.resetRegExp(),!this.escapeValue&&typeof t=="string"&&/\$t\([^)]*\{[^}]*\{\{/.test(t)&&this.logger.warn("nesting options string contains interpolated variables with escapeValue: false â if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");const u=(n==null?void 0:n.missingInterpolationHandler)||this.options.missingInterpolationHandler,m=((p=n==null?void 0:n.interpolation)==null?void 0:p.skipOnVariables)!==void 0?n.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:v=>v},{regex:this.regexp,safeValue:v=>this.escapeValue?this.escape(v):v}].forEach(v=>{for(l=0;r=v.regex.exec(t);){const f=r[1].trim();if(s=d(f),s===void 0)if(typeof u=="function"){const y=u(t,r,n);s=Re(y)?y:""}else if(n&&Object.prototype.hasOwnProperty.call(n,f))s="";else if(m){s=r[0];continue}else this.logger.warn(`missed to pass in variable ${f} for interpolating ${t}`),s="";else!Re(s)&&!this.useRawValueToEscape&&(s=wp(s));const b=v.safeValue(s);if(t=t.replace(r[0],h1(b)),m?(v.regex.lastIndex+=b.length,v.regex.lastIndex-=r[0].length):v.regex.lastIndex=0,l++,l>=this.maxReplaces)break}}),t}nest(t,a,o={}){let n,r,s;const l=(c,d)=>{const u=this.nestingOptionsSeparator;if(!c.includes(u))return c;const m=c.split(new RegExp(`${za(u)}[ ]*{`));let h=`{${m[1]}`;c=m[0],h=this.interpolate(h,s);const p=h.match(/'/g),v=h.match(/"/g);(((p==null?void 0:p.length)??0)%2===0&&!v||((v==null?void 0:v.length)??0)%2!==0)&&(h=h.replace(/'/g,'"'));try{s=JSON.parse(h),d&&(s={...d,...s})}catch(f){return this.logger.warn(`failed parsing options string in nesting for key ${c}`,f),`${c}${u}${h}`}return s.defaultValue&&s.defaultValue.includes(this.prefix)&&delete s.defaultValue,c};for(;n=this.nestingRegexp.exec(t);){let c=[];s={...o},s=s.replace&&!Re(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;const d=/{.*}/s.test(n[1])?n[1].lastIndexOf("}")+1:n[1].indexOf(this.formatSeparator);if(d!==-1&&(c=n[1].slice(d).split(this.formatSeparator).map(u=>u.trim()).filter(Boolean),n[1]=n[1].slice(0,d)),r=a(l.call(this,n[1].trim(),s),s),r&&n[0]===t&&!Re(r))return r;Re(r)||(r=wp(r)),r||(this.logger.warn(`missed to resolve ${n[1]} for nesting ${t}`),r=""),c.length&&(r=c.reduce((u,m)=>this.format(u,m,o.lng,{...o,interpolationkey:n[1].trim()}),r.trim())),t=t.replace(n[0],r),this.regexp.lastIndex=0}return t}}const f1=e=>{let t=e.toLowerCase().trim();const a={};if(e.includes("(")){const o=e.split("(");t=o[0].toLowerCase().trim();const n=o[1].slice(0,-1);t==="currency"&&!n.includes(":")?a.currency||(a.currency=n.trim()):t==="relativetime"&&!n.includes(":")?a.range||(a.range=n.trim()):n.split(";").forEach(s=>{if(s){const[l,...c]=s.split(":"),d=c.join(":").trim().replace(/^'+|'+$/g,""),u=l.trim();a[u]||(a[u]=d),d==="false"&&(a[u]=!1),d==="true"&&(a[u]=!0),isNaN(d)||(a[u]=parseInt(d,10))}})}return{formatName:t,formatOptions:a}},Rp=e=>{const t={};return(a,o,n)=>{let r=n;n&&n.interpolationkey&&n.formatParams&&n.formatParams[n.interpolationkey]&&n[n.interpolationkey]&&(r={...r,[n.interpolationkey]:void 0});const s=o+JSON.stringify(r);let l=t[s];return l||(l=e(Wr(o),n),t[s]=l),l(a)}},g1=e=>(t,a,o)=>e(Wr(a),o)(t);class v1{constructor(t={}){this.logger=Ta.create("formatter"),this.options=t,this.init(t)}init(t,a={interpolation:{}}){this.formatSeparator=a.interpolation.formatSeparator||",";const o=a.cacheInBuiltFormats?Rp:g1;this.formats={number:o((n,r)=>{const s=new Intl.NumberFormat(n,{...r});return l=>s.format(l)}),currency:o((n,r)=>{const s=new Intl.NumberFormat(n,{...r,style:"currency"});return l=>s.format(l)}),datetime:o((n,r)=>{const s=new Intl.DateTimeFormat(n,{...r});return l=>s.format(l)}),relativetime:o((n,r)=>{const s=new Intl.RelativeTimeFormat(n,{...r});return l=>s.format(l,r.range||"day")}),list:o((n,r)=>{const s=new Intl.ListFormat(n,{...r});return l=>s.format(l)})}}add(t,a){this.formats[t.toLowerCase().trim()]=a}
487addCached(t,a){this.formats[t.toLowerCase().trim()]=Rp(a)}format(t,a,o,n={}){if(!a||t==null)return t;const r=a.split(this.formatSeparator),s=[];for(let c=0;c<r.length;c++){let d=r[c];for(;d.indexOf("(")>-1&&!d.includes(")")&&c+1<r.length;)d=`${d}${this.formatSeparator}${r[++c]}`;s.push(d)}return s.reduce((c,d)=>{var h;const{formatName:u,formatOptions:m}=f1(d);if(this.formats[u]){let p=c;try{const v=((h=n==null?void 0:n.formatParams)==null?void 0:h[n.interpolationkey])||{},f=v.locale||v.lng||n.locale||n.lng||o;p=this.formats[u](c,f,{...m,...n,...v})}catch(v){this.logger.warn(v)}return p}else this.logger.warn(`there was no format function for ${u}`);return c},t)}}const b1=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)};class y1 extends al{constructor(t,a,o,n={}){var r,s;super(),this.backend=t,this.store=a,this.services=o,this.languageUtils=o.languageUtils,this.options=n,this.logger=Ta.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=n.maxParallelReads||10,this.readingCalls=0,this.maxRetries=n.maxRetries>=0?n.maxRetries:5,this.retryTimeout=n.retryTimeout>=1?n.retryTimeout:350,this.state={},this.queue=[],(s=(r=this.backend)==null?void 0:r.init)==null||s.call(r,o,n.backend,n)}queueLoad(t,a,o,n){const r={},s={},l={},c={};return t.forEach(d=>{let u=!0;a.forEach(m=>{const h=`${d}|${m}`;!o.reload&&this.store.hasResourceBundle(d,m)?this.state[h]=2:this.state[h]<0||(this.state[h]===1?s[h]===void 0&&(s[h]=!0):(this.state[h]=1,u=!1,s[h]===void 0&&(s[h]=!0),r[h]===void 0&&(r[h]=!0),c[m]===void 0&&(c[m]=!0)))}),u||(l[d]=!0)}),(Object.keys(r).length||Object.keys(s).length)&&this.queue.push({pending:s,pendingCount:Object.keys(s).length,loaded:{},errors:[],callback:n}),{toLoad:Object.keys(r),pending:Object.keys(s),toLoadLanguages:Object.keys(l),toLoadNamespaces:Object.keys(c)}}loaded(t,a,o){const n=t.split("|"),r=n[0],s=n[1];a&&this.emit("failedLoading",r,s,a),!a&&o&&this.store.addResourceBundle(r,s,o,void 0,void 0,{skipCopy:!0}),this.state[t]=a?-1:2,a&&o&&(this.state[t]=0);const l={};this.queue.forEach(c=>{o1(c.loaded,[r],s),b1(c,t),a&&c.errors.push(a),c.pendingCount===0&&!c.done&&(Object.keys(c.loaded).forEach(d=>{l[d]||(l[d]={});const u=c.loaded[d];u.length&&u.forEach(m=>{l[d][m]===void 0&&(l[d][m]=!0)})}),c.done=!0,c.errors.length?c.callback(c.errors):c.callback())}),this.emit("loaded",l),this.queue=this.queue.filter(c=>!c.done)}read(t,a,o,n=0,r=this.retryTimeout,s){if(!t.length)return s(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:a,fcName:o,tried:n,wait:r,callback:s});return}this.readingCalls++;const l=(d,u)=>{if(this.readingCalls--,this.waitingReads.length>0){const m=this.waitingReads.shift();this.read(m.lng,m.ns,m.fcName,m.tried,m.wait,m.callback)}if(d&&u&&n<this.maxRetries){setTimeout(()=>{this.read(t,a,o,n+1,r*2,s)},r);return}s(d,u)},c=this.backend[o].bind(this.backend);if(c.length===2){try{const d=c(t,a);d&&typeof d.then=="function"?d.then(u=>l(null,u)).catch(l):l(null,d)}catch(d){l(d)}return}return c(t,a,l)}prepareLoading(t,a,o={},n){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),n&&n();Re(t)&&(t=this.languageUtils.toResolveHierarchy(t)),Re(a)&&(a=[a]);const r=this.queueLoad(t,a,o,n);if(!r.toLoad.length)return r.pending.length||n(),null;r.toLoad.forEach(s=>{this.loadOne(s)})}load(t,a,o){this.prepareLoading(t,a,{},o)}reload(t,a,o){this.prepareLoading(t,a,{reload:!0},o)}loadOne(t,a=""){const o=t.split("|"),n=o[0],r=o[1];this.read(n,r,"read",void 0,void 0,(s,l)=>{s&&this.logger.warn(`${a}loading namespace ${r} for language ${n} failed`,s),!s&&l&&this.logger.log(`${a}loaded namespace ${r} for language ${n}`,l),this.loaded(t,s,l)})}saveMissing(t,a,o,n,r,s={},l=()=>{}){var c,d,u,m,h;if((d=(c=this.services)==null?void 0:c.utils)!=null&&d.hasLoadedNamespace&&!((m=(u=this.services)==null?void 0:u.utils)!=null&&m.hasLoadedNamespace(a))){this.logger.warn(`did not save key "${o}" as the namespace "${a}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(o==null||o==="")){if((h=this.backend)!=null&&h.create){const p={...s,isUpdate:r},v=this.backend.create.bind(this.backend);if(v.length<6)try{let f;v.length===5?f=v(t,a,o,n,p):f=v(t,a,o,n),f&&typeof f.then=="function"?f.then(b=>l(null,b)).catch(l):l(null,f)}catch(f){l(f)}else v(t,a,o,n,l,p)}!t||!t[0]||this.store.addResource(t[0],a,o,n)}}}const Bl=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",enableSelector:!1,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]=="object"&&(t=e[1]),Re(e[1])&&(t.defaultValue=e[1]),Re(e[2])&&(t.tDescription=e[2]),typeof e[2]=="object"||typeof e[3]=="object"){const a=e[3]||e[2];
487Object.keys(a).forEach(o=>{t[o]=a[o]})}return t},interpolation:{escapeValue:!0,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Dp=e=>(Re(e.ns)&&(e.ns=[e.ns]),Re(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),Re(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&!e.supportedLngs.includes("cimode")&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e),Li=()=>{},x1=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(a=>{typeof e[a]=="function"&&(e[a]=e[a].bind(e))})};class Tr extends al{constructor(t={},a){if(super(),this.options=Dp(t),this.services={},this.logger=Ta,this.modules={external:[]},x1(this),a&&!this.isInitialized&&!t.isClone){if(!this.options.initAsync)return this.init(t,a),this;setTimeout(()=>{this.init(t,a)},0)}}init(t={},a){this.isInitializing=!0,typeof t=="function"&&(a=t,t={}),t.defaultNS==null&&t.ns&&(Re(t.ns)?t.defaultNS=t.ns:t.ns.includes("translation")||(t.defaultNS=t.ns[0]));const o=Bl();this.options={...o,...this.options,...Dp(t)},this.options.interpolation={...o.interpolation,...this.options.interpolation},t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=o.overloadTranslationOptionHandler);const n=d=>d?typeof d=="function"?new d:d:null;if(!this.options.isClone){this.modules.logger?Ta.init(n(this.modules.logger),this.options):Ta.init(null,this.options);let d;this.modules.formatter?d=this.modules.formatter:d=v1;const u=new Sp(this.options);this.store=new Ep(this.options.resources,this.options);const m=this.services;m.logger=Ta,m.resourceStore=this.store,m.languageUtils=u,m.pluralResolver=new p1(u,{prepend:this.options.pluralSeparator}),d&&(m.formatter=n(d),m.formatter.init&&m.formatter.init(m,this.options),this.options.interpolation.format=m.formatter.format.bind(m.formatter)),m.interpolator=new Ip(this.options),m.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},m.backendConnector=new y1(n(this.modules.backend),m.resourceStore,m,this.options),m.backendConnector.on("*",(h,...p)=>{this.emit(h,...p)}),this.modules.languageDetector&&(m.languageDetector=n(this.modules.languageDetector),m.languageDetector.init&&m.languageDetector.init(m,this.options.detection,this.options)),this.modules.i18nFormat&&(m.i18nFormat=n(this.modules.i18nFormat),m.i18nFormat.init&&m.i18nFormat.init(this)),this.translator=new Cs(this.services,this.options),this.translator.on("*",(h,...p)=>{this.emit(h,...p)}),this.modules.external.forEach(h=>{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,a||(a=Li),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const d=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);d.length>0&&d[0]!=="dev"&&(this.options.lng=d[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(d=>{this[d]=(...u)=>this.store[d](...u)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(d=>{this[d]=(...u)=>(this.store[d](...u),this)});const l=ur(),c=()=>{const d=(u,m)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(m),a(u,m)};if((this.languages||this.isLanguageChangingTo)&&!this.isInitialized)return d(null,this.t.bind(this));this.changeLanguage(this.options.lng,d)};return this.options.resources||!this.options.initAsync?c():setTimeout(c,0),l}loadResources(t,a=Li){var r,s;let o=a;const n=Re(t)?t:this.language;if(typeof t=="function"&&(o=t),!this.options.resources||this.options.partialBundledLanguages){if((n==null?void 0:n.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return o();const l=[],c=d=>
487{if(!d||d==="cimode")return;this.services.languageUtils.toResolveHierarchy(d).forEach(m=>{m!=="cimode"&&(l.includes(m)||l.push(m))})};n?c(n):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(u=>c(u)),(s=(r=this.options.preload)==null?void 0:r.forEach)==null||s.call(r,d=>c(d)),this.services.backendConnector.load(l,this.options.ns,d=>{!d&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),o(d)})}else o(null)}reloadResources(t,a,o){const n=ur();return typeof t=="function"&&(o=t,t=void 0),typeof a=="function"&&(o=a,a=void 0),t||(t=this.languages),a||(a=this.options.ns),o||(o=Li),this.services.backendConnector.reload(t,a,r=>{n.resolve(),o(r)}),n}use(t){if(!t)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!t.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return t.type==="backend"&&(this.modules.backend=t),(t.type==="logger"||t.log&&t.warn&&t.error)&&(this.modules.logger=t),t.type==="languageDetector"&&(this.modules.languageDetector=t),t.type==="i18nFormat"&&(this.modules.i18nFormat=t),t.type==="postProcessor"&&Wb.addPostProcessor(t),t.type==="formatter"&&(this.modules.formatter=t),t.type==="3rdParty"&&this.modules.external.push(t),this}setResolvedLanguage(t){if(!(!t||!this.languages)&&!["cimode","dev"].includes(t)){for(let a=0;a<this.languages.length;a++){const o=this.languages[a];if(!["cimode","dev"].includes(o)&&this.store.hasLanguageSomeTranslations(o)){this.resolvedLanguage=o;break}}!this.resolvedLanguage&&!this.languages.includes(t)&&this.store.hasLanguageSomeTranslations(t)&&(this.resolvedLanguage=t,this.languages.unshift(t))}}changeLanguage(t,a){this.isLanguageChangingTo=t;const o=ur();this.emit("languageChanging",t);const n=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},r=(l,c)=>{c?this.isLanguageChangingTo===t&&(n(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,o.resolve((...d)=>this.t(...d)),a&&a(l,(...d)=>this.t(...d))},s=l=>{var u,m;!t&&!l&&this.services.languageDetector&&(l=[]);const c=Re(l)?l:l&&l[0],d=this.store.hasLanguageSomeTranslations(c)?c:this.services.languageUtils.getBestMatchFromCodes(Re(l)?[l]:l);d&&(this.language||n(d),this.translator.language||this.translator.changeLanguage(d),(m=(u=this.services.languageDetector)==null?void 0:u.cacheUserLanguage)==null||m.call(u,d)),this.loadResources(d,h=>{r(h,d)})};return!t&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!t&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(t),o}getFixedT(t,a,o,n){const r=n==null?void 0:n.scopeNs,s=(l,c,...d)=>{let u;typeof c!="object"?u=this.options.overloadTranslationOptionHandler([l,c].concat(d)):u={...c},u.lng=u.lng||s.lng,u.lngs=u.lngs||s.lngs;const m=u.ns!==void 0&&u.ns!==null;u.ns=u.ns||s.ns,u.keyPrefix!==""&&(u.keyPrefix=u.keyPrefix||o||s.keyPrefix);const h={...this.options,...u};Array.isArray(r)&&!m&&(h.ns=r),typeof u.keyPrefix=="function"&&(u.keyPrefix=Nn(u.keyPrefix,h));const p=this.options.keySeparator||".";let v;return u.keyPrefix&&Array.isArray(l)?v=l.map(f=>(typeof f=="function"&&(f=Nn(f,h)),`${u.keyPrefix}${p}${f}`)):(typeof l=="function"&&(l=Nn(l,h)),v=u.keyPrefix?`${u.keyPrefix}${p}${l}`:l),this.t(v,u)};return Re(t)?s.lng=t:s.lngs=t,s.ns=a,s.keyPrefix=o,s}t(...t){var a;return(a=this.translator)==null?void 0:a.translate(...t)}exists(...t){var a;return(a=this.translator)==null?void 0:a.exists(...t)}setDefaultNamespace(t){this.options.defaultNS=t}hasLoadedNamespace(t,a={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;
487if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const o=a.lng||this.resolvedLanguage||this.languages[0],n=this.options?this.options.fallbackLng:!1,r=this.languages[this.languages.length-1];if(o.toLowerCase()==="cimode")return!0;const s=(l,c)=>{const d=this.services.backendConnector.state[`${l}|${c}`];return d===-1||d===0||d===2};if(a.precheck){const l=a.precheck(this,s);if(l!==void 0)return l}return!!(this.hasResourceBundle(o,t)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||s(o,t)&&(!n||s(r,t)))}loadNamespaces(t,a){const o=ur();return this.options.ns?(Re(t)&&(t=[t]),t.forEach(n=>{this.options.ns.includes(n)||this.options.ns.push(n)}),this.loadResources(n=>{o.resolve(),a&&a(n)}),o):(a&&a(),Promise.resolve())}loadLanguages(t,a){const o=ur();Re(t)&&(t=[t]);const n=this.options.preload||[],r=t.filter(s=>!n.includes(s)&&this.services.languageUtils.isSupportedCode(s));return r.length?(this.options.preload=n.concat(r),this.loadResources(s=>{o.resolve(),a&&a(s)}),o):(a&&a(),Promise.resolve())}dir(t){var n,r;if(t||(t=this.resolvedLanguage||(((n=this.languages)==null?void 0:n.length)>0?this.languages[0]:this.language)),!t)return"rtl";try{const s=new Intl.Locale(t);if(s&&s.getTextInfo){const l=s.getTextInfo();if(l&&l.direction)return l.direction}}catch{}const a=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],o=((r=this.services)==null?void 0:r.languageUtils)||new Sp(Bl());return t.toLowerCase().indexOf("-latn")>1?"ltr":a.includes(o.getLanguagePartFromCode(t))||t.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(t={},a){const o=new Tr(t,a);return o.createInstance=Tr.createInstance,o}cloneInstance(t={},a=Li){const o=t.forkResourceStore;o&&delete t.forkResourceStore;const n={...this.options,...t,isClone:!0},r=new Tr(n);if((t.debug!==void 0||t.prefix!==void 0)&&(r.logger=r.logger.clone(t)),["store","services","language"].forEach(l=>{r[l]=this[l]}),r.services={...this.services},r.services.utils={hasLoadedNamespace:r.hasLoadedNamespace.bind(r)},o){const l=Object.keys(this.store.data).reduce((c,d)=>(c[d]={...this.store.data[d]},c[d]=Object.keys(c[d]).reduce((u,m)=>(u[m]={...c[d][m]},u),c[d]),c),{});r.store=new Ep(l,n),r.services.resourceStore=r.store}if(t.interpolation){const c={...Bl().interpolation,...this.options.interpolation,...t.interpolation},d={...n,interpolation:c};r.services.interpolator=new Ip(d)}return r.translator=new Cs(r.services,n),r.translator.on("*",(l,...c)=>{r.emit(l,...c)}),r.init(n,a),r.translator.options=n,r.translator.backendConnector.services.utils={hasLoadedNamespace:r.hasLoadedNamespace.bind(r)},r}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const Ae=Tr.createInstance();Ae.createInstance;Ae.dir;Ae.init;Ae.loadResources;Ae.reloadResources;Ae.use;Ae.changeLanguage;Ae.getFixedT;Ae.t;Ae.exists;Ae.setDefaultNamespace;Ae.hasLoadedNamespace;Ae.loadNamespaces;Ae.loadLanguages;const w1=(e,t,a,o)=>{var r,s,l,c;const n=[a,{code:t,...o||{}}];if((s=(r=e==null?void 0:e.services)==null?void 0:r.logger)!=null&&s.forward)return e.services.logger.forward(n,"warn","react-i18next::",!0);an(n[0])&&(n[0]=`react-i18next:: ${n[0]}`),(c=(l=e==null?void 0:e.services)==null?void 0:l.logger)!=null&&c.warn?e.services.logger.warn(...n):console!=null&&console.warn&&console.warn(...n)},Mp={},Qi=(e,t,a,o)=>{an(a)&&Mp[a]||(an(a)&&(Mp[a]=new Date),w1(e,t,a,o))},Gb=(e,t)=>()=>{if(e.isInitialized)t();else{const a=()=>{setTimeout(()=>{e.off("initialized",a)},0),t()};e.on("initialized",a)}},qc=(e,t,a)=>{e.loadNamespaces(t,Gb(e,a))},Fp=(e,t,a,o)=>{if(an(a)&&(a=[a]),e.options.preload&&e.options.preload.indexOf(t)>-1)return qc(e,a,o);a.forEach(n=>{e.options.ns.indexOf(n)<0&&e.options.ns.push(n)}),e.loadLanguages(t,Gb(e,o))},C1=(e,t,a={})=>
487!t.languages||!t.languages.length?(Qi(t,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:a.lng,precheck:(o,n)=>{if(a.bindI18n&&a.bindI18n.indexOf("languageChanging")>-1&&o.services.backendConnector.backend&&o.isLanguageChangingTo&&!n(o.isLanguageChangingTo,e))return!1}}),an=e=>typeof e=="string",P1=e=>typeof e=="object"&&e!==null,A1=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,E1={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"â¦","…":"â¦","/":"/","/":"/"},S1=e=>E1[e],N1=e=>e.replace(A1,S1);let Uc={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:N1,transDefaultProps:void 0};const k1=(e={})=>{Uc={...Uc,...e}},T1=()=>Uc;let Hb;const I1=e=>{Hb=e},R1=()=>Hb,D1={type:"3rdParty",init(e){k1(e.options.react),I1(e)}},M1=g.createContext();class F1{constructor(){this.usedNamespaces={}}addUsedNamespaces(t){t.forEach(a=>{this.usedNamespaces[a]||(this.usedNamespaces[a]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}var Kb={exports:{}},Xb={};/** 488 * @license React 489 * use-sync-external-store-shim.production.js 490 * 491 * Copyright (c) Meta Platforms, Inc. and affiliates. 492 * 493 * This source code is licensed under the MIT license found in the 494 * LICENSE file in the root directory of this source tree. 495 */var Kn=g;function L1(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var j1=typeof Object.is=="function"?Object.is:L1,_1=Kn.useState,O1=Kn.useEffect,B1=Kn.useLayoutEffect,z1=Kn.useDebugValue;function V1(e,t){var a=t(),o=_1({inst:{value:a,getSnapshot:t}}),n=o[0].inst,r=o[1];return B1(function(){n.value=a,n.getSnapshot=t,zl(n)&&r({inst:n})},[e,a,t]),O1(function(){return zl(n)&&r({inst:n}),e(function(){zl(n)&&r({inst:n})})},[e]),z1(a),a}function zl(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!j1(e,a)}catch{return!0}}function q1(e,t){return t()}var U1=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?q1:V1;Xb.useSyncExternalStore=Kn.useSyncExternalStore!==void 0?Kn.useSyncExternalStore:U1;Kb.exports=Xb;var Yb=Kb.exports;const W1=(e,t)=>{if(an(t))return t;if(P1(t)&&an(t.defaultValue))return t.defaultValue;if(typeof e=="function")return"";if(Array.isArray(e)){const a=e[e.length-1];return typeof a=="function"?"":a}return e},$1={t:W1,ready:!1},G1=()=>()=>{},tt=(e,t={})=>{var I,M,q;const{i18n:a}=t,{i18n:o,defaultNS:n}=g.useContext(M1)||{},r=a||o||R1();r&&!r.reportNamespaces&&(r.reportNamespaces=new F1),r||Qi(r,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.");const s=g.useMemo(()=>{var N;return{...T1(),...(N=r==null?void 0:r.options)==null?void 0:N.react,...t}},[r,t]),{useSuspense:l,keyPrefix:c}=s,d=e||n||((I=r==null?void 0:r.options)==null?void 0:I.defaultNS),u=an(d)?[d]:d||["translation"],m=g.useMemo(()=>u,u);(q=(M=r==null?void 0:r.reportNamespaces)==null?void 0:M.addUsedNamespaces)==null||q.call(M,m);const h=g.useRef(0),p=g.useCallback(N=>{if(!r)return G1;const{bindI18n:F,bindI18nStore:A}=s,_=()=>{h.current+=1,N()};return F&&r.on(F,_),A&&r.store.on(A,_),()=>{F&&F.split(" ").forEach(K=>r.off(K,_)),A&&A.split(" ").forEach(K=>r.store.off(K,_))}},[r,s]),v=g.useRef(),f=g.useCallback(()=>{if(!r)return $1;const N=!!(r.isInitialized||r.initializedStoreOnce)&&m.every(H=>C1(H,r,s)),F=t.lng||r.language,A=h.current,_=v.current;if(_&&_.ready===N&&_.lng===F&&_.keyPrefix===c&&_.revision===A)return _;const V={t:r.getFixedT(F,s.nsMode==="fallback"?m:m[0],c,{scopeNs:m}),ready:N,lng:F,keyPrefix:c,revision:A};return v.current=V,V},[r,m,c,s,t.lng]),[b,y]=g.useState(0),{t:x,ready:w}=Yb.useSyncExternalStore(p,f,f);g.useEffect(()=>{if(r&&!w&&!l){const N=()=>y(F=>F+1);t.lng?Fp(r,t.lng,m,N):qc(r,m,N)}},[r,t.lng,m,w,l,b]);const P=r||{},E=g.useRef(null),k=g.useRef(),S=N=>{const F=Object.getOwnPropertyDescriptors(N);F.__original&&delete F.__original;const A=Object.create(Object.getPrototypeOf(N),F);if(!Object.prototype.hasOwnProperty.call(A,"__original"))try{Object.defineProperty(A,"__original",{value:N,writable:!1,enumerable:!1,
495configurable:!1})}catch{}return A},R=g.useMemo(()=>{const N=P,F=N==null?void 0:N.language;let A=N;N&&(E.current&&E.current.__original===N?k.current!==F?(A=S(N),E.current=A,k.current=F):A=E.current:(A=S(N),E.current=A,k.current=F));const _=!w&&!l?(...V)=>(Qi(r,"USE_T_BEFORE_READY","useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t."),x(...V)):x,K=[_,A,w];return K.t=_,K.i18n=A,K.ready=w,K},[x,P,w,P.resolvedLanguage,P.language,P.languages]);if(r&&l&&!w){let N=!1;try{N=!1}catch{}throw N&&Qi(r,"SUSPENDED_WHILE_LOADING","useTranslation: suspended while translations are loading (useSuspense is true by default). Add a <Suspense> boundary above this component, or set react.useSuspense: false in the i18next init options. https://react.i18next.com/latest/usetranslation-hook"),new Promise(F=>{const A=()=>F();t.lng?Fp(r,t.lng,m,A):qc(r,m,A)})}return R},Zi=[{code:"pt",label:"Português",flag:"ð§ð·",intlLocale:"pt-BR"},{code:"es",label:"Español",flag:"ðªð¸",intlLocale:"es-419"},{code:"en",label:"English",flag:"ðºð¸",intlLocale:"en-US"}],Ps="pt",Qb=e=>Zi.some(t=>t.code===e),H1={save:"Salvar",cancel:"Cancelar",delete:"Excluir",edit:"Editar",add:"Adicionar",create:"Criar",confirm:"Confirmar",close:"Fechar",back:"Voltar",next:"Próximo",previous:"Anterior",search:"Buscar",filter:"Filtrar",send:"Enviar",copy:"Copiar",copied:"Copiado!",duplicate:"Duplicar",download:"Baixar",upload:"Enviar arquivo",connect:"Conectar",disconnect:"Desconectar",activate:"Ativar",deactivate:"Desativar",enable:"Habilitar",disable:"Desabilitar",refresh:"Atualizar",clear:"Limpar",select:"Selecionar",selectAll:"Selecionar tudo",apply:"Aplicar",continue:"Continuar",finish:"Concluir",retry:"Tentar novamente",view:"Visualizar",preview:"Pré-visualizar",share:"Compartilhar",export:"Exportar",import:"Importar",rename:"Renomear",reset:"Redefinir",submit:"Enviar",viewMore:"Ver mais",viewLess:"Ver menos",viewAll:"Ver tudo",tryAgain:"Tentar novamente"},K1={loading:"Carregando...",saving:"Salvando...",sending:"Enviando...",processing:"Processando...",deleting:"Excluindo...",connecting:"Conectando...",success:"Sucesso",error:"Erro",warning:"Atenção",empty:"Nenhum resultado encontrado",noData:"Sem dados",noResults:"Nenhum resultado encontrado",somethingWentWrong:"Algo deu errado. Tente novamente.",changesSaved:"Alterações salvas com sucesso",requiredField:"Campo obrigatório"},X1={name:"Nome",email:"E-mail",phone:"Telefone",password:"Senha",confirmPassword:"Confirmar senha",date:"Data",status:"Status",actions:"Ações",details:"Detalhes",description:"Descrição",price:"Preço",plan:"Plano",account:"Conta",type:"Tipo",value:"Valor",quantity:"Quantidade",total:"Total"},Y1={areYouSure:"Tem certeza?",actionCannotBeUndone:"Esta ação não pode ser desfeita.",yes:"Sim",no:"Não",confirmDelete:"Tem certeza que deseja excluir?"},Q1={today:"Hoje",yesterday:"Ontem",now:"Agora"},Z1={actions:H1,states:K1,fields:X1,confirm:Y1,time:Q1},J1="Abrir menu",eI="Notificações",tI="Perfil",aI="Painel administrativo",oI="Sair",nI="Alternar tema",rI="Mudar idioma",iI={openMenu:J1,notifications:eI,profile:tI,adminPanel:aI,logout:oI,toggleTheme:nI,changeLanguage:rI},sI="Menu",lI="Conta",cI="Meta",dI={dashboard:"Dashboard",inbox:"Inbox",flows:"Fluxos",campaigns:"Disparos",contacts:"Contatos",crm:"CRM",quickReplies:"Respostas Rápidas",marketplace:"Marketplace",ads:"ADS",tools:"Ferramentas"},uI={whatsappOfficial:"WhatsApp API Oficial"},mI={settings:"Configurações",integrations:"Integrações",subscription:"Meu Plano",affiliate:"Programa de Afiliados"},pI="Status do sistema",hI="Tutoriais",fI="Canal de Atualizações",gI={sectionMenu:sI,sectionAccount:lI,sectionMeta:cI,nav:dI,metaNav:uI,accountNav:mI,systemStatus:pI,tutorials:hI,whatsappChannel:fI},vI="Bem-vindo de volta",bI="Bem-vindo",yI="Faça login para continuar",xI="Crie sua conta",wI={login:"Entrar",signup:"Criar conta"},CI={email:"Digite seu email",password:"Digite sua senha",createPassword:"Crie uma senha",confirmPassword:"Confirme sua senha"},PI={link:"Esqueci minha senha",dialogTitle:"Esqueci minha senha",dialogDescription:"Digite seu email e enviaremos uma nova senha para você.",sendButton:"Enviar nova senha",sending:"Enviando..."},AI={agreement:"Li e concordo com os",termsOfService:"Termos de Serviço",and:"e",privacyPolicy:"PolÃtica de Privacidade"},EI={joinCommunity:"Junte-se à nossa comunidade de usuários",prefix:"Mais de",suffix:"usuários cadastrados"},SI={title:"Autenticação de Dois Fatores",description:"Digite o código de 6 dÃgitos do seu aplicativo autenticador para continuar.",rememberDevice:"Lembrar este dispositivo por 30 dias",verify:"Verificar",verifying:"Verificando..."},NI={login:"Login",twoFactorCheck:"Verificação 2FA",accountCreation:"Criação de conta"},kI={timeoutGeneric:"{{label}} demorou demais. Verifique sua conexão e tente novamente.",requiredFields:{title:"Campos obrigatórios",description:"Por favor, preencha todos os campos"},verificationRequired:{title:"Verificação necessária",description:"Por favor, complete a verificação de segurança"},loginError:{title:"Erro ao fazer login",fallback:"Não foi possÃvel fazer login. Tente novamente."},invalidCode:{title:"Código inválido",description:"O código 2FA está incorreto. Tente novamente."},invalidEmail:{title:"Email inválido",description:"Por favor, insira um email válido"},passwordMismatch:{title:"Senhas não conferem",description:"As senhas digitadas não são iguais"},passwordTooShort:{title:"Senha muito curta",description:"A senha deve ter pelo menos 6 caracteres"},termsNotAccepted:{title:"Termos não aceitos",description:"Você precisa aceitar os Termos de Serviço e a PolÃtica de Privacidade para criar sua conta"},signupError:{title:"Erro ao criar conta",fallback:"Não foi possÃvel concluir o cadastro. Tente novamente."},emailRequired:{title:"Email obrigatório",description:"Por favor, insira seu email"},generic:"Erro",sendEmailFailed:"Não foi possÃvel enviar o email. Tente novamente.",userNotFound:{title:"Usuário não encontrado"},turnstileNotConfigured:"Verificação de segurança não configurada",turnstileLoadFailed:"Falha ao carregar verificação de segurança"},TI={title:"Sucesso",loginSuccess:"Login realizado com sucesso!",accountCreated:{title:"Conta criada!",description:"Você já pode fazer login",confirmEmailDescription:"Confirme seu email antes de entrar. Verifique sua caixa de entrada e também a pasta de spam."},emailSent:{title:"Email enviado!",fallback:"Verifique sua caixa de entrada e também a pasta de spam."}},II={welcomeBack:vI,welcome:bI,loginSubtitle:yI,signupSubtitle:xI,tabs:wI,placeholders:CI,forgotPassword:PI,terms:AI,userCount:EI,mfaDialog:SI,timeouts:NI,errors:kI,success:TI},RI={welcomeTitle:"ð¯ Bem-vindo!",welcomeSubtitle:"Escolha o sistema que deseja acessar",comingSoonBadge:"Em breve",betaBadge:"Beta",contentSectionTitle:"Conteúdo",systems:{metricas:{title:"Sistema de Métricas",shortTitle:"Métricas",description:"Gerencie suas métricas de produtos e acompanhe resultados"},organizadorNumeros:{title:"Organizador de Números",shortTitle:"Organizador",description:"Organize e gerencie seus números de trabalho"}
495,trackOfertas:{title:"Track Ofertas",description:"Acompanhe a performance dos anúncios de seus concorrentes"},geradorAudio:{title:"Gerador de Ãudio",shortTitle:"Ãudio",description:"Transforme texto em áudio com vozes realistas"},transcricaoAudio:{title:"Transcrição de Ãudio",shortTitle:"Transcrição",description:"Converta áudios em texto automaticamente"},tagWhats:{title:"Tag Whats",description:"Marque vendas do WhatsApp automaticamente"},extensaoAds:{title:"Extensão Ads WhatsApp",shortTitle:"Extensão Ads",description:"Extensão para analisar anúncios no Chrome"},videoDownloader:{title:"Download VÃdeos TikTok",shortTitle:"TikTok",description:"Baixe vÃdeos do TikTok sem marca d'água"},automatizap:{title:"Automati-Zap",description:"Sistema para automatizar as conversas do WhatsApp"},disparador:{title:"DisparaZap",description:"Envie mensagens em massa para múltiplos contatos"}}},DI={feedTitle:"Feed da Comunidade",feedSubtitle:"Compartilhe suas experiências e interaja com outros membros"},MI={connectingFacebook:"Conectando com Facebook...",processingAuth:"Aguarde enquanto processamos sua autenticação",title:"Oops! Página não encontrada",backHome:"Voltar ao InÃcio"},FI={backToPanel:"Voltar ao painel",title:"Status do ZapData",subtitle:"Acompanhe a disponibilidade dos serviços e as novida
495des",servicesTitle:"Serviços",noServices:"Nenhum serviço cadastrado ainda.",updatesTitle:"Atualizações",noUpdates:"Nenhuma atualização publicada ainda.",footer:"ZapData â status atualizado automaticamente"},LI={loading:"Carregando...",notFoundTitle:"Site não encontrado",iframeTitle:"Published Site"},jI={pageTitle:"Ferramentas",pageSubtitle:"Todo o arsenal do ZapData num só lugar",maintenanceBadge:"Manutenção",groups:{organizacao:{title:"Organização",metricas:{title:"Métricas",desc:"Acompanhe resultados dos seus produtos"},organizadorNumeros:{title:"Organizador de Números",desc:"Organize e gerencie seus números"}},criacaoOferta:{title:"Criação de Oferta",geradorAudio:{title:"Gerador de Ãudio",desc:"Voz e narração com IA"},transcricao:{title:"Transcrição",desc:"Converta áudios em texto"},iaStudio:{title:"I.A Studio",desc:"Canvas de criativos com IA"},limpaHash:{title:"Limpa Hash",desc:"Limpe hashes de vÃdeos"}},extensoes:{title:"Extensões",zapConverter:{title:"Zap Converter",desc:"Conversor de moedas/valores"},extensaoAds:{title:"Extensão Ads",desc:"Analise anúncios no Chrome"}}}},_I={shortPasswordTitle:"Senha curta",shortPasswordDesc:"Use pelo menos 6 caracteres.",mismatchTitle:"Senhas diferentes",mismatchDesc:"As duas senhas não coincidem.",errorTitle:"Erro",leakedPassword:"Esta senha foi encontrada em vazamentos. Escolha uma senha diferente.",genericError:"Não foi possÃvel redefinir a senha.",successTitle:"Senha redefinida!",successDesc:"Faça login com sua nova senha.",title:"Redefinir senha",subtitle:"Escolha uma nova senha para sua conta.",invalidLink:"Link inválido ou expirado. Solicite a redefinição de senha novamente.",backToLogin:"Voltar ao login",newPasswordLabel:"Nova senha",newPasswordPlaceholder:"MÃnimo 6 caracteres",hidePassword:"Ocultar senha",showPassword:"Mostrar senha",confirmPasswordLabel:"Confirmar nova senha",confirmPasswordPlaceholder:"Repita a nova senha",submitButton:"Redefinir senha",doneMessage:"Senha redefinida! Redirecionando para o loginâ¦"},OI={title:"Cancelar inscrição",checking:"Verificandoâ¦",confirmMessage:"Confirme para parar de receber emails do ZapData.",confirmButton:"Confirmar cancelamento",submitting:"Processandoâ¦",success:"Inscrição cancelada com sucesso.",alreadyUnsubscribed:"Você já havia cancelado a inscrição.",invalidLink:"Link inválido ou expirado.",error:"Erro ao processar. Tente novamente."},BI={errors:{missingClientId:"Faltou o identificador do aplicativo (client_id).",missingRedirectUri:"Faltou o endereço de retorno (redirect_uri).",missingPkce:"Este aplicativo não enviou a proteção PKCE exigida.",unsupportedPkceMethod:"Método de PKCE não suportado: {{method}}. Só aceitamos S256.",missingScopes:"O aplicativo não informou quais permissões quer.",unknownScope:"Permissão desconhecida: {{scope}}",consentFailed:"Não foi possÃvel registrar sua autorização para análise de conversas.",requiresPaidPlan:"Conectar o Claude exige um plano ativo do ZapData.",redirectUriNotAllowed:"O endereço de retorno deste aplicativo não é permitido.",unrecognizedScope:"O assistente pediu uma permissão que o ZapData não reconhece.",missingPkceProtection:"O assistente não enviou a proteção de segurança exigida (PKCE).",sessionExpired:"Sua sessão expirou. Recarregue a página para entrar de novo.",authorizeFailed:"Não foi possÃvel autorizar: {{message}}",unknownError:"erro desconhecido"},title:"Conectar ao ZapData",description:"Um assistente de IA está pedindo acesso à sua conta{{emailSuffix}}.",invalidRequestTitle:"Pedido inválido",whatItCanDo:"O que ele vai poder fazer",conversationsInfo:{heading:"Sobre a análise de conversas",paragraph1:"Trechos de conversas reais (até 7 dias) serão enviados ao provedor de IA que você conectou, pela sua própria assinatura. Telefone, e-mail e CPF são mascarados por padrões automáticos, que <strong>não pegam todos os formatos</strong> â o texto <strong>não é anônimo</strong>.",paragraph2:"Pode incluir <strong>dados sensÃveis</strong>, como informações de saúde, se seus clientes escreverem sobre isso.",paragraph3:"Ao autorizar, você declara ser o <strong>controlador</strong> desses dados e ter <strong>base legal</strong> para esse compartilhamento (LGPD). Pode revogar quando quiser nas Configurações."},revokeNotice:"O acesso pode ser revogado a qualquer momento em Configurações â Integrações. Nenhuma senha é compartilhada com o assistente.",declineButton:"Recusar",authorizeButton:"Autorizar",appLabel:"Aplicativo:"},zI={home:RI,homePage:DI,notFound:MI,statusPage:FI,publishedSite:LI,tools:jI,resetPassword:_I,unsubscribe:OI,mcpAuthorize:BI},VI={count_one:"{{count}} fluxo ativo",count_other:"{{count}} fluxos ativos",title:"Fluxos Ativos",subtitle:"Leads recebendo fluxos agora",loading:"Carregando fluxosâ¦",openConversation:"Abrir conversa",timeAgo:"Há {{time}}",moreNotListed:"+{{count}} fluxos ativos não listados"},qI={title:"Gerar áudio com IA",registerTitle:"Cadastrar nova voz",textLabel:"Texto do áudio",textPlaceholder:"Digite o que será falado no áudio...",voiceLabel:"Voz",voicePlaceholder:"Escolha uma voz",addVoiceGroup:"Adicionar",registerNewVoice:"Cadastrar nova voz",previewLabel:"Prévia do áudio gerado",modelLabel:"Modelo de voz",languageLabel:"Idioma",autoDetectLanguageNote:"Este modelo detecta o idioma automaticamente pelo texto.",v3TagsHint:"No Eleven v3 você pode usar tags como [whispers], [laughs] e [sighs] no texto.",charCount:"{{count}}/{{max}}",sendAsLabel:"Como enviar",sendAsRecorded:"Ãudio gravado",sendAsRecordedHint:"Aparece como nota de voz no WhatsApp.",sendAsViewOnce:"Visualização única",sendAsViewOnceHint:"O destinatário só pode ouvir uma vez.",sendAsForwarded:"Ãudio encaminhado",sendAsForwardedHint:'Aparece como "Encaminhada" no WhatsApp.',generating:"Gerando...",generate:"Gerar áudio",generateAnother:"Gerar outro",sending:"Enviando...",newVoiceNameLabel:"Nome da voz",newVoiceNamePlaceholder:"Ex: Minha voz",newVoiceFileLabel:"Arquivo de áudio (mp3, wav, m4a, ogg)",newVoiceFileHint:"Use uma gravação clara de pelo menos 30 segundos (máx 10MB).",registering:"Cadastrando...",registerVoice:"Cadastrar voz",registerSuccess:"Voz cadastrada com sucesso!",errors:{textRequired:"Digite o texto do áudio",voiceRequired:"Escolha uma voz",audioNotReturned:"Ãudio não retornado",generateFailed:"Erro ao gerar áudio",sendFailed:"Erro ao enviar áudio",nameAndFileRequired:"Informe o nome e selecione um arquivo de áudio",registerFailed:"Falha ao cadastrar voz"}},UI={dragOverlay:"Solte as imagens aqui para enviar",replyPreview:{label:"Respondendo",audio:"ðµ Ãudio",image:"ð· Imagem",video:"ð¬ VÃdeo",document:"ð Documento",media:"MÃdia"},emoji:{loading:"Carregando emojisâ¦",opening:"Abrindo emojisâ¦"},attachMenu:{image:"Imagem",video:"VÃdeo",document:"Documento",location:"Localização"},insertVariable:"Inserir variável",variableHint:"Insere no texto e é substituÃda pelo valor real do lead ao enviar.",globalVariablesTitle:"Variáveis Globais",triggerFlowDialog:{title:"Disparar Fluxo Manual",activeCount_one:"{{count}} fluxo ativo",activeCount_other:"{{count}} fluxos ativos",searchPlaceholder:"Buscar fluxo...",noneFound:"Nenhum fluxo encontrado",triggering:'Disparando {{type}} "{{name}}"...',triggered:'{{type}} "{{name}}" disparado!',typeAiAgent:"atendente IA",typeFlow:"fluxo",typeAiAgentCap:"Atendente IA",typeFlowCap:"Fluxo",aiBadge:"IA"},pastedImagesHint:{single:"Texto digitado será enviado como legenda",multiple:"Várias imagens: texto será enviado separadamente"},messagePlaceholder:"Digite sua mensagem... (use / para respostas rápidas)",quickRepliesLabel:"Respostas Rápidas",contentBlocksLabel:"Blocos Avulsos",mic:{sendAudio:"Enviar áudio",recordNow:"Gravar agora",generateWithAI:"Gerar áudio com IA"},mediaDialog:{titleImage:"Enviar Imagem",titleVideo:"Enviar VÃdeo (apenas MP4)",titleDocument:"Enviar Documento",titleAudio:"Enviar Ãudio",selectFile:"Selecionar Arquivo",selected:"Selecionado: {{name}}",captionLabel:"Legenda (opcional)",captionPlaceholder:"Descrição do arquivo..."},locationDialog:{title:"Enviar Localização",useMyLocation:"Usar minha localização atual",locating:"Obtendo localização...",latitude:"Latitude",longitude:"Longitude",nameLabel:"Nome (opcional)",namePlaceholder:"Ex: Loja Principal",addressLabel:"Endereço (opcional)",addressPlaceholder:"Av. Paulista, 1000"},success:{mediaSent:"MÃdia enviada!",audioSent:"Ãudio enviado!",locationSent:"Localização enviada!",quickReplySent:"Resposta rápida envi
495ada!",locationCaptured:"Localização capturada",callPlaced:"Ligação disparada"},errors:{emojiLoadFailed:"Não foi possÃvel carregar os emojis",uploadImageFailed:"Erro ao fazer upload da imagem",sendImageFailed:"Erro ao enviar imagem: {{error}}",uploadOneImageFailed:"Erro ao fazer upload de uma imagem",sendMessageFailed:"Erro ao enviar mensagem: {{error}}",sendFailed:"Erro ao enviar: {{error}}",selectFileRequired:"Por favor, selecione um arquivo",uploadFileFailed:"Erro ao fazer upload do arquivo",sendMediaFailed:"Erro ao enviar mÃdia",onlyImagesCanBeDragged:"Apenas imagens podem ser arrastadas. Use o anexo para outros arquivos.",invalidVideoFormat:"Formato de vÃdeo inválido. Apenas arquivos MP4 são aceitos.",recordingStartFailed:"Erro ao iniciar gravação. Verifique as permissões do microfone.",uploadAudioFailed:"Erro ao fazer upload do áudio",sendAudioFailed:"Erro ao enviar áudio",uploadGeneratedAudioFailed:"Erro ao fazer upload do áudio gerado",geolocationUnavailable:"Geolocalização não disponÃvel neste navegador",locationFailed:"Não foi possÃvel obter sua localização",invalidCoordinates:"Latitude/Longitude inválidas",
495sendLocationFailed:"Erro ao enviar localização: {{error}}",unknown:"desconhecido",triggerFlowFailed:"Erro ao disparar fluxo",callFailed:"Não foi possÃvel ligar: {{error}}"},callDialog:{title:"Disparar ligação",body:"Vai tocar uma ligação no WhatsApp de {{name}}. O telefone toca de verdade e a pessoa pode atender ou recusar.",silentWarning:"A chamada é MUDA: se atender, nenhum dos dois lados ouve nada. Ela serve só para chamar a atenção â use com moderação para evitar bloqueios.",cancel:"Cancelar",confirm:"Ligar agora",placing:"Ligando...",contactFallback:"este contato"},callButton:"Ligação"},WI={emptyMessage:"[Mensagem vazia]",deletedMessage:"ð« Mensagem apagada",deleting:"Apagando...",contactFallback:"Contato",errors:{deleteNotAllowedTitle:"Não é possÃvel apagar",deleteNotAllowedDescription:"O WhatsApp permite apagar mensagens para todos apenas dentro de 1 hora após o envio.",deleteFailedTitle:"Erro ao apagar",deleteFailedDescription:"Não foi possÃvel apagar a mensagem"},success:{deletedForEveryone:"Mensagem apagada para todos"},media:{recovering:"Recuperando mÃdia...",pleaseWait:"Aguarde um momento",imageUnrecoverable:"Imagem não recuperável",imageUnavailable:"Imagem indisponÃvel",audioUnrecoverable:"Ãudio não recuperável",audioUnavailable:"Ãudio indisponÃvel",videoUnrecoverable:"VÃdeo não recuperável",videoUnavailable:"VÃdeo indisponÃvel",notRecovered:"A mÃdia não pôde ser recuperada",tapToRetry:"Toque para tentar recuperar"},pix:{defaultName:"Chave PIX",copiedToast:"Chave PIX copiada!",copyKey:"Copiar chave Pix",typePhone:"Celular",typeEmail:"E-mail",typeRandom:"Chave Aleatória"},audio:{playbackSpeed:"Velocidade de reprodução"},document:{defaultName:"Documento",clickToDownload:"Clique para baixar"},location:{fallback:"ð Localização",live:"Ao vivo",defaultName:"Localização"},interactive:{linkTitle:"Abre um link â não é possÃvel saber se o lead chegou a clicar",leadSelected:"Lead selecionou:",emptyReply:"[Resposta de botão]"},carousel:{label:"Carrossel"},unsupported:{title:"Tipo de mensagem não reconhecido â payload salvo para análise",label:"Mensagem não suportada"},undecryptable:{title:"O WhatsApp não conseguiu entregar o conteúdo real desta mensagem",label:"Mensagem não sincronizada pelo WhatsApp.",hint:"Costuma se resolver quando o contato reabre o WhatsApp no celular dele â o conteúdo real aparece aqui automaticamente quando isso acontecer."},replyPreview:{image:"ð· Imagem",audio:"ðµ Ãudio",video:"ð¬ VÃdeo",document:"ð Documento",location:"ð Localização",generic:"[Mensagem]",customer:"Cliente",you:"Você"},actions:{reply:"Responder",translate:"Traduzir",transcribeAndTranslate:"Transcrever e Traduzir",deleteForEveryone:"Apagar para todos",deleteExpired:"Apagar (expirado)"},translation:{errorTitle:"Não foi possÃvel traduzir",errorGeneric:"Tente novamente em instantes."},failedStatus:{dateConnector:"à s",timelockTitle:"Restrição aplicada pelo próprio WhatsApp para proteger o número de bloqueios. Geralmente ocorre quando o lead nunca respondeu ou está fora da janela de 24h. Assim que ele responder, o envio volta a funcionar normalmente.",timelockHeading:"Falha no envio devido a restrição temporária",timelockBody:"O WhatsApp bloqueou novas conversas com este contato.",releaseExpected:"Liberação prevista para {{when}}.",tryAgainLater:"Aguarde algumas horas ou peça para o contato responder antes de tentar novamente.",generic:"Falha no envio"},deleteDialog:{title:"Apagar mensagem para todos?",description:"Esta ação irá apagar a mensagem para você e para o destinatário. Não pode ser desfeita."},call:{title:"Ligação",subtitle:"Chamada muda â o contato pode atender ou recusar",subtitleWithDuration:"Chamada muda de {{duration}}s â o contato pode atender ou recusar"}},$I={unknown:"Desconhecido",leadViaAd:"Lead via anúncio ⢠ID {{id}}",selectConversation:"Selecione uma conversa",selectConversationHint:"Escolha uma conversa na lista para começar",loadingOlderMessages:"Carregando mensagens anteriores...",noMessagesYet:"Nenhuma mensagem ainda",sendMessageToStart:"Envie uma mensagem para iniciar a conversa",newLabelPlaceholder:"Nova etiqueta...",badges:{paused:"Pausado",pausedFlow:"Pausado: {{name}}",aiFlow:"IA: {{name}}",waitingForResponse:"Aguardando resposta",clickToCancel:"Clique no X para cancelar",clickToRemove:"Clique para remover",endFlow:"Encerrar fluxo"},followUp:{scheduledAria:"Follow-up agendado",endFlowWithFollowUp:"Encerrar fluxo (há follow-up agendado)",confirmTitle:"Encerrar o fluxo de {{name}}?",confirmBody:"Há um follow-up automático agendado para {{when}}. Encerrando o fluxo, ele também será cancelado.",confirmQuote:'O lead disse: "{{quote}}"',confirmKeep:"Manter fluxo",confirmEnd:"Encerrar fluxo e o follow-up"},activity:{recordingWithIcon:"ðï¸ gravando áudio...",typingWithIcon:"âï¸ digitando...",recording:"gravando áudio...",typing:"digitando..."},menu:{resumeFlow:"Continuar Funil",pauseFlow:"Pausar Funil",advanceFlow:"Avançar Fluxo",advanceToNextComponent:"Avançar para próximo componente",markAsRead:"Marcar como lido",markAsUnread:"Marcar como não lido",restoreContact:"Restaurar Contato",ignoreContact:"Ignorar Contato",contactDetails:"Detalhes do Contato",clearConversation:"Limpar Conversa",deleteContact:"Deletar Contato",moreActions:"Mais ações"},deleteContactDialog:{title:"Deletar contato?",description:"Isso irá deletar permanentemente o contato, todas as mensagens e sessões de fluxo associadas. O contato poderá acionar o fluxo novamente ao enviar uma nova mensagem."},clearConversationDialog:{title:"Deseja limpar esta conversa?",description:"A conversa ficará vazia, mas continuará na sua lista de conversas."},connectionError:{title:"Instância Desconectada",descriptionNamed:'A instância "{{name}}" perdeu conexão.',descriptionGeneric:"A instância perdeu conexão com o WhatsApp.",reconnect:"Reconectar"},jumpToNode:{trigger:"Pular para um bloco especÃfico",dialogHint:"Escolha um bloco do fluxo para pular a conversa até ele.",searchPlaceholder:"Buscar bloco por nome ou número...",empty:"Nenhum bloco encontrado.",autoAdvance:"Avançar automaticamente (próximo padrão)",blockLabel:"Bloco #{{number}} â {{label}}",confirmTitle:"Pular para o Bloco #{{number}} â {{label}}?",confirmDescription:"A conversa vai continuar a partir deste bloco. Etapas entre o ponto atual e o escolhido não serão enviadas."},toasts:{flowPaused:"Funil pausado",pauseFlowError:"Erro ao pausar funil",flowResumed:"Funil retomado",resumeFlowError:"Erro ao retomar funil",aiAgentEnded:"Atendente IA encerrado",flowEnded:"Fluxo encerrado com sucesso",flowEndedWithFollowUp:"Fluxo encerrado â follow-up agendado também foi cancelado",endFlowError:"Erro ao encerrar fluxo",noActiveFlowToAdvance:"Nenhum fluxo ativo para avançar",advanceFlowError:"Erro ao avançar fluxo",flowProcessing:"Fluxo processando⦠tente novamente em alguns segundos",stillWaitingForInput:"Ainda aguardando resposta neste passo",flowAdvanced:"Fluxo avançado!",markedAsRead:"Marcado como lido",markAsReadError:"Erro ao marcar como lido",markedAsUnread:"Marcado como não lido",markAsUnreadError:"Erro ao marcar como não lido",contactIgnored:"Contato ignorado",contactRestored:"Contato restaurado",updateContactError:"Erro ao atualizar contato",deleteContactError:"Erro ao deletar contato{{c
495ode}}",contactDeleted:"Contato deletado com sucesso",clearConversationError:"Erro ao limpar conversa{{detail}}",conversationCleared:"Conversa limpa com sucesso",cancelScheduleError:"Erro ao cancelar agendamento",scheduledMessageCancelled:"Mensagem programada cancelada",jumpedToNode:"Fluxo pulado para o bloco escolhido!",jumpToNodeError:"Erro ao pular para o bloco"}},GI={noName:"Sem nome",notesSaved:"Notas salvas com sucesso",saveNotesError:"Erro ao salvar notas: {{error}}",currencies:{BRL:"Real Brasileiro (BRL)",USD:"Dólar Americano (USD)",EUR:"Euro (EUR)",GBP:"Libra Esterlina (GBP)",ARS:"Peso Argentino (ARS)",MXN:"Peso Mexicano (MXN)",COP:"Peso Colombiano (COP)",CLP:"Peso Chileno (CLP)",PEN:"Sol Peruano (PEN)",JPY:"Iene Japonês (JPY)",CAD:"Dólar Canadense (CAD)",AUD:"Dólar Australiano (AUD)",CHF:"Franco SuÃço (CHF)"},info:{unreadMessages:"Mensagens não lidas:",lastMessage:"Ãltima mensagem:",never:"Nunca",createdAt:"Criado em:"},tags:{title:"Tags",removeTag:"Remover tag",empty:"Nenhuma tag adicionada"},customFields:{title:"Campos do Contato"},facebookEvent:{title:"Enviar Evento Facebook",noCtwaWarning:"Este contato não tem CTWA CLID. O evento será enviado mas pode não atribuir ao anúncio.",eventTypes:{purchase:"Compra (Purchase)",lead:"Lead",initiateCheckout:"Iniciar Checkout (InitiateCheckout)",addToCart:"Adicionar ao Carrinho (AddToCart)"},valuePlaceholder:"Valor (ex: 97.00)",currencyTitle:"Moeda do evento",quantityPlaceholder:"Qtd",quantityTitle:"Quantidade de eventos (máx 100)",selectPixelPlaceholder:"Selecionar pixel...",allPixels:"Todos os pixels",sendButton:"Disparar Evento",sendError:"Erro ao enviar eventos. Verifique a configuração do pixel.",sendErrorShort:"Erro ao enviar eventos",sendErrorGeneric:"Erro ao enviar evento",sentToast_one:"{{count}}x evento {{event}} enviado para processamento{{valueLabel}}",sentToast_other:"{{count}}x eventos {{event}} enviados para processamento{{valueLabel}}"},eventHistory:{title:"Histórico de Eventos",empty:"Nenhum evento enviado ainda."},notes:{title:"Notas",placeholder:"Adicione notas sobre este contato...",empty:"Nenhuma nota adicionada"},adOrigin:{title:"Origem do Anúncio",viewAd:"Ver Anúncio",titleLabel:"TÃtulo",adTextLabel:"Texto do Anúncio",viewLess:"Ver menos",viewMore:"Ver mais"},actions:{archiveConversation:"Arquivar Conversa"}},HI={filterTitle:"Filtrar blocos avulsos",typeLabel:"Tipo",favoritesOnly:"Apenas favoritos",noBlocksForFilter:"Nenhum bloco com esse filtro",types:{text:"Texto",audio:"Ãudio",image:"Imagem",video:"VÃdeo",document:"Documento"}},KI={searchPlaceholder:"Buscar...",markAllAsRead:"Marcar todas como lidas",flowPausedTitle:"Funil pausado",scheduledBadge:"Agendada",loadingOlderConversations:"Carregando conversas anteriores...",searchOlderConversations:"Procurar em conversas mais antigas",loadOlderConversations:"Carregar conversas anteriores",searchTruncatedNotice:"Mostrando os 200 primeiros resultados â refine a busca para ver menos.",viewMode:{conversations:"Conversas",groups:"Grupos"},labelFilter:{label:"Etiqueta",all:"Todas"},filters:{all:"Todos",paid:"Pagos",ignored:"Ignorados",unread:"Não lidas"},conversationStatusFilter:{all:"Todas as conversas",allDescription:"",open:"Conversas abertas",openDescription:"Requer atenção humana",closed:"Conversas encerradas",closedDescription:"Encerrada pelo atendente ou quando o fluxo conclui a sessão",inProgress:"Em andamento",inProgressDescription:"Ainda não foi aberta nem encerrada"},tagFilter:{pago:"Pago",notPago:"Sem a tag Pago",notPagoDescription:"Não tem a etiqueta de pagamento",noTag:"Sem etiqueta",noTagDescription:"Contatos sem nenhuma etiqueta"},filterPopover:{customize:"Personalizar filtro",back:"Voltar",statusLabel:"Status da conversa",apply:"Aplicar filtro"},empty:{searching:"Procurando...",searchUnavailable:"Não foi possÃvel buscar",noConversations:"Nenhuma conversa encontrada",searchFailedHint:"A busca falhou. Verifique a conexão e tente de novo.",noMatchingContact:"Nenhum contato com esse nome ou número",noPaidContact:'Nenhum contato com etiqueta "Pago"',noIgnoredContact:"Nenhum contato ignorado",conversationsWillAppear:"As conversas aparecerão aqui quando você receber mensagens"},toasts:{allMarkedAsRead:"Todas as conversas foram marcadas como lidas",markAsReadError:"Erro ao marcar como lidas"}},XI={title:"Criar nova comunidade",description:"Você criará a comunidade com um grupo de anúncios principal. Adicione grupos depois.",instanceLabel:"Instância",selectPlaceholder:"Selecioneâ¦",nameLabel:"Nome da comunidade",createdSuccess:"Comunidade criada com sucesso.",linkGroupsHint:"Para vincular grupos, use o gerenciador de grupos da comunidade no menu.",success:"Comunidade criada",errors:{selectInstance:"Selecione uma instância",nameRequired:"Informe o nome da comunidade",createFailed:"Erro ao criar comunidade"}},YI={title:"Criar novo grupo",description:"O grupo será criado a partir da instância selecionada com os participantes informados.",nameLabel:"Nome do grupo",namePlaceholder:"Ex.: Equipe de vendas",participantsLabel:"Participantes (telefones)",participantsPlaceholderHint:"Um por linha â apenas dÃgitos com DD
495I+DDD",validCount_one:"{{count}} válido · mÃnimo 1 além de você.",validCount_other:"{{count}} válidos · mÃnimo 1 além de você.",createButton:"Criar grupo",success:"Grupo criado",errors:{selectInstance:"Selecione uma instância",nameRequired:"Informe o nome do grupo",participantsRequired:"Informe ao menos 1 participante (apenas dÃgitos)",createFailed:"Erro ao criar grupo"}},QI={titles:{name:"Editar nome em massa",description:"Editar descrição em massa",image:"Editar foto em massa",announce:"Permissão de envio",locked:"Permissão de edição",flow:"Disparar fluxo de grupo",leave:"Sair dos grupos",resetInvite:"Resetar links de convite",hide:"Excluir do chat"},descriptions:{name:"O nome será aplicado a todos os grupos selecionados.",description:"A descrição será aplicada a todos os grupos selecionados.",image:"A imagem será aplicada como foto de todos os grupos selecionados.",announce:"Quando ativado, somente administradores poderão enviar mensagens.",locked:"Quando ativado, somente administradores poderão editar informações do grupo.",flow:"O fluxo selecionado será disparado em cada grupo. Use com moderação.",leave:"Você sairá de cada um dos grupos selecionados. Esta ação não pode ser desfeita.",resetInvite:"O link de convite atual será invalidado e um novo será gerado.",hide:"Os grupos serão removidos da sua lista de visÃveis. Eles continuarão existindo no WhatsApp."},selectedCount_one:"{{count}} grupo selecionado.",selectedCount_other:"{{count}} grupos selecionados.",newNameLabel:"Novo nome",newDescriptionLabel:"Nova de
495scrição",imageLabel:"Imagem",previewAlt:"prévia",announceSwitchLabel:"Apenas admins podem enviar mensagens",lockedSwitchLabel:"Apenas admins podem editar informações",groupFlowLabel:"Fluxo de grupo",selectFlowPlaceholder:"Selecione um fluxo",noActiveGroupFlow:"Nenhum fluxo de grupo ativo.",leaveWarning_one:"Você sairá de {{count}} grupo no WhatsApp. Esta ação não pode ser desfeita.",leaveWarning_other:"Você sairá de {{count}} grupos no WhatsApp. Esta ação não pode ser desfeita.",resetInviteWarning_one:"O link atual de {{count}} grupo será invalidado.",resetInviteWarning_other:"Os links atuais de {{count}} grupos serão invalidados.",hideWarning_one:"{{count}} grupo será removido apenas da sua lista. Você continua no grupo no WhatsApp.",hideWarning_other:"{{count}} grupos serão removidos apenas da sua lista. Você continua no grupo no WhatsApp.",pleaseWait:"Aguardeâ¦",applyButton:"Aplicar",errors:{nameRequired:"Informe o nome",descriptionRequired:"Informe a descrição",imageRequired:"Selecione uma imagem",flowRequired:"Selecione um fluxo"},toasts:{hidden_one:"{{count}} grupo ocultado do chat",hidden_other:"{{count}} grupos ocultados do chat",flowTriggered_one:"Fluxo disparado em {{count}} grupo",flowTriggered_other:"Fluxo disparado em {{count}} grupos",partialResult:"{{ok}} sucesso · {{fail}} falhas",left_one:"Saiu de {{count}} grupo",left_other:"Saiu de {{count}} grupos",invitesReset_one:"{{count}} link resetado",invitesReset_other:"{{count}} links resetados",updated_one:"{{count}} grupo atualizado",updated_other:"{{count}} grupos atualizados"}},ZI={selectedCount_one:"{{count}} grupo",selectedCount_other:"{{count}} grupos",editName:"Editar nome",editDescription:"Editar descrição",editPhoto:"Editar foto",sendPermission:"Permissão envio",editPermission:"Permissão edição",triggerFlow:"Disparar fluxo",resetInvite:"Resetar convite",leaveGroups:"Sair dos grupos",hideFromChat:"Excluir do chat",clearSelection:"Limpar seleção"},JI={pix:{label:"Chave PIX",copiedToast:"Chave PIX copiada!",copyFailedToast:"Erro ao copiar chave",copyKey:"Copiar chave Pix"},contactFallback:"Contato",stickerAlt:"Figurinha",defaultFileName:"Arquivo",selectGroup:"Selecione um grupo",selectGroupHint:"Escolha um grupo na lista para começar",errors:{sendFailed:"Erro ao enviar mensagem",uploadFailed:"Erro ao enviar arquivo",micBlocked:"Erro ao acessar o microfone: {{detail}}",allowAccess:"verifique as permissões do microfone no navegador",cancelFailed:"Erro ao cancelar fluxo"},mediaTypes:{image:"imagem",video:"vÃdeo",audio:"áudio",document:"documento"},uploading:"Enviando {{type}}...",sent:"Enviado!",flowRunCancelled:"Fluxo cancelado"},eR={title:"Informações do grupo",syncTooltip:"Sincronizar com o WhatsApp",removePhoto:"Remover foto",descriptionLabel:"Descrição",noDescription:"Nenhuma descrição",permissionsLabel:"Permissões",sendMessagesLabel:"Enviar mensagens",onlyAdmins:"Apenas admins",allParticipants:"Todos os participantes",editInfoLabel:"Editar infos do grupo",notAdminHint:"Você não é admin â alterações desabilitadas.",inviteLinkLabel:"Link de convite",loadingShort:"Carregandoâ¦",unavailable:"IndisponÃvel",generateNewLink:"Gerar novo link",membersHeading:"Membros ({{count}})",memberCount_one:"{{count}} membro",memberCount_other:"{{count}} membros",youBadge:"Você",roleCreator:"criador",roleAdmin:"admin",makeAdmin:"Tornar admin",removeAdmin:"Remover admin",removeFromGroup:"Remover do grupo",noMembersLoaded:"Nenhum membro carregado.",addParticipantsDialog:{title:"Adicionar participantes",phonesLabel:"Telefones (DDI+DDD+Número)",phonesPlaceholder:"5511999998888, 5511988887777...",hint:"Separe por vÃrgula, espaço ou nova linha. Apenas dÃgitos serão usados."},removeParticipantDialog:{title:"Remover este participante?",description:"Esta ação remove o participante do grupo imediatamente.",confirm:"Remover"},participantActionLabels:{add:"adicionado(s)",remove:"removido(s)",promote:"promovido(s)",demote:"rebaixado(s)"},errors:{phoneRequired:"Informe ao menos 1 telefone válido",leaveFailed:"Erro ao sair do grupo",syncFailed:"Erro ao sincronizar",nameRequired:"Nome obrigatório",nameTooLong:"Nome deve ter no máximo 25 caracteres",updateNameFailed:"Erro ao atualizar nome",updateDescriptionFailed:"Erro ao atualizar descrição",imageMustBeJpeg:"Imagem precisa estar em JPEG",updatePhotoFailed:"Erro ao atualizar foto",generic:"Erro",updatePermissionFailed:"Erro ao atualizar permissão",resetLinkFailed:"Erro ao redefinir link",updateParticipantsFailed:"Erro ao atualizar participantes"},toasts:{leftGroup:"Você saiu do grupo",nameUpdated:"Nome atualizado",descriptionUpdated:"Descrição atualizada",photoUpdated:"Foto atualizada",photoRemoved:"Foto removida",announceOnlyAdmins:"Apenas admins podem enviar",announceEveryone:"Todos podem enviar mensagens",lockedOnlyAdmins:"Apenas admins editam infos",lockedEveryone:"Todos podem editar infos",linkReset:"Link redefinido",linkCopied:"Link copiado",participantsUpdated:"Participantes {{action}}"}},tR={buttonTitle:"Fluxos do grupo",title:"Fluxos do grupo",descriptionPrefix:"Disparar manualmente ou agendar fluxos para",tabs:{run:"Disparar",schedule:"Agendar",list:"Agendados"},flowLabel:"Fluxo",selectFlowPlaceholder:"Selecione um fluxo",selectPlaceholderShort:"Selecione",noActiveFlows:"Nenhum fluxo de grupo ativo. Crie um na aba Fluxos.",runNowButton:"Disparar agora",activeRunHint:"Já existe um fluxo rodando neste grupo. Encerre-o no topo do chat antes de iniciar outro.",dateLabel:"Data",timeLabel:"Hora",recurrenceLabel:"Recorrência",recurrence:{once:"Apenas uma vez",daily:"Diariamente",weekly:"Semanalmente"},scheduleButton:"Agendar",noSchedules:"Nenhum agendamento.",dateConnector:"à s",recurrenceShort:{once:"Uma vez",daily:"Diário",weekly:"Semanal"},inactiveSuffix:"Inativo",errors:{selectFlow:"Selecione um fluxo",activeRunExists:"Já existe um fluxo em execução neste grupo. Encerre-o antes de iniciar outro.",dateRequired:"Defina a data",invali
495dDateTime:"Data/hora inválida",dateMustBeFuture:"A data/hora deve ser futura"},toasts:{flowStarted:"Fluxo iniciado neste grupo",flowScheduled:"Fluxo agendado"}},aR={searchPlaceholder:"Buscar gruposâ¦",manageVisibleGroupsTitle:"Gerenciar grupos visÃveis",refreshSelected:"Atualizar grupos selecionados",refreshAll:"Atualizar grupos",selectedCount_one:"{{count}} selecionado",selectedCount_other:"{{count}} selecionados",selectAllWithCount:"Selecionar todos ({{count}})",emptySelectionTitle:"Nenhum grupo selecionado ainda.",manageGroupsButton:"Gerenciar grupos",noGroupsFound:"Nenhum grupo encontrado.",adminBadge:"admin",memberCount_one:"{{count}} membro",memberCount_other:"{{count}} membros"},oR={toasts:{contactNotFound:"Contato não encontrado. Pode ter sido removido."},errors:{noContactSelected:"Nenhum contato selecionado",flowAlreadyTriggering:"Aguarde, o fluxo já está sendo disparado...",triggerAiFailed:"Erro ao disparar atendente IA",triggerFlowFailed:"Erro ao disparar fluxo",activeFlowExists:"Não é possÃvel disparar outro fluxo. Já existe um fluxo sendo enviado para este contato no momento."},groupsGate:{title:"Grupos é um recurso premium",description:"A gestão de grupos do WhatsApp está disponÃvel a partir do plano Modo Acesso (R$99/mês).",upgradeButton:"Fazer upgrade do plano",upgradeHint:"Inclui mais instâncias, créditos mensais e todos os recursos avançados.",backButton:"Voltar para Conversas"}},nR={title:"Menu do Inbox",tabs:{numbers:"Números",labels:"Etiquetas",tagged:"Etiquetados"},noInstances:"Nenhum número conectado",connectInstance:"Conectar número",status:{connected:"Conectado",disconnected:"Desconectado"},assignedFlowsLabel:"Fluxos atribuÃdos:",noAssignedFlows:"Nenhum fluxo atribuÃdo",systemLabelsTitle:"Etiquetas Padrão",customLabelsTitle:"Etiquetas Personalizadas",noCustomLabels:"Nenhuma etiqueta personalizada",newLabelPlaceholder:"Nova etiqueta...",noTaggedContacts:"Nenhum contato etiquetado",reprocessing:"Reprocessando...",reprocessButton:"Reprocessar Contatos",manageFlowsButton:"Gerenciar Fluxos",errors:{removeLabelFailed:"Erro ao remover etiqueta",reprocessFailed:"Erro ao reprocessar contatos"},toasts:{labelRemoved:"Etiqueta removida",reprocessed:"Reprocessado: {{phones}} telefones normalizados, {{names}} nomes corrigidos"}},rR={flowsTooltip:"Fluxos",notificationsTooltip:"Notificações",enableNotificationSound:"Ativar som de notificação",notifyEveryMessage:"A cada nova mensagem recebida",notifyEveryLead:"A cada novo lead",showContent:"Mostrar conteúdo",hideContent:"Ocultar conteúdo",filterByNumberTooltip:"Filtrar por número",allNumbers:"Todos os números",errors:{noInstancesConnected:"Nenhuma instância conectada. Conecte um número no Maturador primeiro.",syncFailed:"Erro ao sincronizar contatos"},toasts:{contactsImported:"{{count}} contatos importados com sucesso!",noNewContacts:"Nenhum novo contato encontrado"}},iR={title:"Entrar em um grupo",description:"Cole a URL completa do convite ou apenas o código.",instanceLabel:"Instância",selectPlaceholder:"Selecioneâ¦",inviteLabel:"URL ou código de convite",joinButton:"Entrar no grupo",errors:{selectInstance:"Selecione uma instância",inviteRequired:"Informe a URL ou código do convite",joinFailed:"Erro ao entrar no grupo"},toasts:{joined:"Entrou no grupo"}},sR={instanceFallback:"Instância",title:"Gerenciar grupos visÃveis",selectedOfTotal:"{{selected}} de {{total}} selecionado(s)",searchPlaceholder:"Buscar gruposâ¦",onlyAdminActive:"Mostrando apenas onde sou admin",onlyAdminInactive:"Filtrar: apenas onde sou admin",syncAllTooltip:"Sincronizar tudo",addMenuTooltip:"Adicionar grupo / comunidade",createGroupItem:"Criar novo grupo",joinWithInviteItem:"Entrar com convite",createCommunityItem:"Criar comunidade",clearFilter:"limpar",deselectVisible:"Desmarcar visÃveis",selectAllVisible:"Selecionar todos visÃveis ({{count}})",clearSelection:"Limpar seleção",noGroupsFound:"Nenhum grupo encontrado.",adminBadge:"admin",memberCount_one:"{{count}} membro",memberCount_other:"{{count}} membros",saveSelectionButton:"Salvar seleção"},lR={title:"Nova Conversa",phoneLabel:"Número de Telefone",phonePlaceholder:"Ex: 11999998888",phoneHint:"Selecione o paÃs ao lado e digite o número com DDD. Também aceita colar o número completo com +.",countrySearchPlaceholder:"Buscar paÃs ou DDI...",countryNotFound:"Nenhum paÃs encontrado.",instanceLabel:"Enviar pelo número",selectInstancePlaceholder:"Selecione um número",noInstances:"Nenhum número conectado",creating:"Criando...",startButton:"Iniciar Conversa",errors:{notLoggedIn:"Você precisa estar logado",phoneRequired:"Digite o número de telefone",instanceRequired:"Selecione um número para enviar",createContactFailed:"Erro ao criar contato",createConversationFailed:"Erro ao criar conversa"},toasts:{created:"Conversa criada!"}},cR={heading:"Mensagem Programada",flowLabel:"Fluxo",selectFlowPlaceholder:"Selecione o fluxo...",dateLabel:"Data",timeLabel:"Horário",scheduleButton:"Programar Envio",historyLabel:"Histórico",noScheduledMessages:"Nenhuma mensagem programada.",dateConnector:"à s",status:{scheduled:"Agendada",processing:"Processando",sent:"Enviada",cancelled:"Cancelada",failed:"Falhou"},errors:{selectFlow:"Selecione um fluxo",selectDateTime:"Selecione a data e horário",dateMustBeFuture:"A data deve ser no futuro",scheduleFailed:"Erro ao agendar: {{error}}",cancelFailed:"Erro ao cancelar: {{error}}",cancelFailedFallback:"Falha ao cancelar a mensagem programada.",notCancellable:"A mensagem não pôde ser cancelada porque já está sendo processada ou não está mais disponÃvel.",notAuthenticated:"Sua sessão expirou. Entre novamente para continuar."},toasts:{scheduled:"Mensagem programada com sucesso!",cancelled:"Mensagem programada cancelada"}},dR={title:"Mensagens Agendadas",empty:"Nenhuma mensagem agendada",emptyHint:"Agende fluxos nos detalhes do contato",flowLabel:"Fluxo: {{name}}",dateConnector:"à s",unknownContact:"Desconhecido",status:{scheduled:"Agendada",processing:"Processando",sent:"Enviada",failed:"Falhou",cancelled:"Cancelada"},errors:{cancelFailed:"Erro ao cancelar: {{error}}",cancelFailedFallback:"Falha ao cancelar a mensagem programada.",notCancellable:"A mensagem não pôde ser cancelada porque já está sendo processada ou não está mais disponÃvel.",notAuthenticated:"Sua sessão expirou. Entre novamente para continuar."},toasts:{cancelled:"Mensagem agendada cancelada"}},uR={heading:"Mensagens Agendadas",subheading:"Mensagens programadas para envio",flowFallback:"Fluxo",dateConnector:"à s",count_one:"{{count}} mensagem agendada",count_other:"{{count}} mensagens agendadas",errors:{cancelFailed:"Erro ao cancelar"},toasts:{cancelled:"Agendamento cancelado"}},mR={title:"Confirmação de envio",recipientLabel:"Destinatário:",errors:{sendFailed:"Erro ao enviar: {{error}}"}},pR={greetingWithName:"E aÃ, {{name}}.",greetingPlain:"E aÃ.",operationOverview:"â visão geral da sua operação",unknown:"Desconhecido",status:{connected:"Conectado",connecting:"Conectando",disconnected:"Desconectado"},stats:{totalContacts:"Total de Contatos",savedContacts:"Contatos salvos",conversationsToday:"Conversas Hoje",totalAllNumbers:"Total de todos os números",activeFlows:"Fluxos Ativos",connectedNumbers:"Números Conectados",ofTotal:"De {{count}} total"},chart:{title:"Conversas por Número",instances:"Instâncias",filterByInstance:"Filtrar por Instância",all:"Todos",clear:"Limpar",selectedOfTotal:"{{selected}} de {{total}} selecionado(s)",custom:"Personalizado",loadError:'Não foi possÃvel carregar os dados desse perÃodo (volume muito grande). Tente um intervalo menor, como "7 dias".',dateFilters:{today:"Hoje",yesterday:"O
495ntem",last7days:"7 dias",last30days:"30 dias",thisWeek:"Esta semana",thisMonth:"Este mês"}},connectedNumbers:{heading:"Números Conectados",newNumber:"Novo Número",emptyTitle:"Nenhum número conectado",emptyDescription:"Adicione seu primeiro número de WhatsApp",createNumber:"Criar Número",searchPlaceholder:"Buscar por nome ou número...",clearSearch:"Limpar busca",filters:{all:"Todos",connected:"Conectados",disconnected:"Desconectados"},selectAllConnected:"Selecionar todos os conectados",numbersSelected:"número(s) selecionado(s)",clear:"Limpar",bulkEdit:"Editar em Massa",noSearchResults:"Nenhum número encontrado para essa busca."},instanceCard:{validateProxyLabel:"Validar proxy (IP e localização)",connectionDetailsLabel:"Detalhes da conexão",clickToValidateProxy:"Clique para validar proxy",clickToViewDetails:"Clique para ver detalhes",connection:"Conexão",numberLabel:"Número: {{number}}",lastSeen:"Ãltimo acesso: {{date}}",createdAt:"Criado: {{date}}",ipAndLocation:"IP e localização",viaProxy:"Via proxy",noProxy:"Sem proxy (IP padrão)",checkingIpLocation:"Consultando IP e localização...",ipLabel:"IP: {{ip}}",clickIconToCheck:"Clique no Ãcone para consultar IP e localização.",notConnectedYet:"Número ainda não conectado",flowsAssigned:"{{count}} fluxo(s) atribuÃdo(s)",noFlowsAssigned:"Nenhum fluxo atribuÃdo",active:"Ativo",inactive:"Inativo",connect:"Conectar",disconnect:"Desconectar",reset:"Resetar",delete:"Excluir",edit:"Editar"},createModal:{title:"Novo Número",description:"Crie um novo registro para conectar um número de WhatsApp",nameLabel:"Nome identificador",namePlaceholder:"Ex: TIM 001",nameHint:"Qualquer nome. Exemplo: TIM 001, Minha Instância",configureProxy:"Configurar Proxy (opcional)",socks5Label:"String SOCKS5 do Marketplace",socks5Placeholder:"socks5://usuario:senha@host:porta",socks5Hint:"Cole a string de proxy gerada pelo Marketplace no formato SOCKS5",validateIp:"Validar IP",proxyValid:"Proxy Válida",proxyInvalid:"Proxy Inválida",ipLabel:"IP:",latencyLabel:"Latência:"},deleteDialog:{title:"Confirmar exclusão",description:'Tem certeza que deseja excluir o número "{{name}}"? Esta ação não pode ser desfeita.'},resetDialog:{title:"Confirmar reset",description:'Tem certeza que deseja resetar "{{name}}"? A conexão será resetada na API. Você precisará escanear o QR Code novamente. Seus contatos, mensagens e fluxos serão preservados.'},confirmPurchaseModal:{title:"Nova Instância WhatsApp",description:"Crie uma nova instância para conectar seu WhatsApp. Esta ação consumirá créditos.",period:"PerÃodo:",periodValue:"30 dias",cost:"Custo:",credits:"{{count}} créditos",currentBalance:"Saldo atual",insufficient:"Insuficiente",rechargeCredits:"Recarregar Créditos",processing:"Processando...",confirmAndCreate:"Confirmar e Criar ({{count}} créditos)",systemName:"Instância WhatsApp"}
495,duplicateNameModal:{title:"Nome já em uso",description:"Já existe uma instância com o nome",descriptionSuffix:"cadastrada na plataforma.",chooseAnother:"Por favor, escolha um nome diferente para sua nova instância.",tipLabel:"Dica:",tipText:"Use um nome único como seu número de telefone ou uma combinação de letras e números.",understood:"Entendi, vou escolher outro nome"},menuCards:{conversations:{title:"Conversas",description:"Gerencie todas as conversas em tempo real"},flows:{title:"Fluxos",description:"Crie e gerencie fluxos de automação"},kanban:{title:"Kanban",description:"Visualize e organize leads em pipeline"},contacts:{title:"Contatos",description:"Gerencie seus contatos e leads"},quickReplies:{title:"Respostas Rápidas",description:"Atalhos para mensagens prontas"}},toasts:{loadError:"Erro ao carregar dados",waitBeforeRefresh:"Aguarde alguns segundos antes de atualizar novamente",statusUpdated:"Status atualizado",numbersSynced:"{{count}} número(s) sincronizado(s)!",syncNumbersError:"Erro ao sincronizar números",loadingSlots:"Carregando informações de slots, tente novamente em alguns segundos.",nameRequired:"Nome do número é obrigatório",invalidProxyFormat:"Formato de proxy inválido. Use: socks5://usuario:senha@host:porta",operationInProgress:"Operação em andamento. Aguarde e tente novamente.",creditsDeducted:"{{count}} créditos debitados com sucesso!",numberCreated:"Número criado com sucesso!",createNumberError:"Erro ao criar número",managedProxyApplyError:"Número criado, mas não foi possÃvel aplicar a proxy selecionada. Tente novamente em Editar Instância.",proxyConflict:"Use proxy gerenciada (por localização) OU SOCKS5 manual, não ambos.",enterProxyFirst:"Digite a string de proxy primeiro",whatsappAlreadyConnected:"WhatsApp já está conectado!",serverLimitReached:"Limite de instâncias atingido neste servidor. Por favor, exclua sua instância e crie outra para tentar novamente.",qrNotAvailable:"QR Code não disponÃvel. Tente novamente.",qrNotAvailableShort:"QR Code não disponÃvel",getQrError:"Erro ao obter QR Code",updateQrError:"Erro ao atualizar QR Code",whatsappConnected:"WhatsApp conectado com sucesso!",connectingWaitSync:"Conectando... aguarde a sincronização",waitingQrScan:"Aguardando leitura do QR Code...",numberDisconnected:"Número desconectado",disconnectError:"Erro ao desconectar",numberRestarted:"Número reiniciado",restartError:"Erro ao reiniciar",invalidSession:"Sessão inválida â recarregue a página e tente novamente.",deletingInstance:"Excluindo instância... isso pode levar alguns segundos",deleteHadNoEffect:"A exclusão não teve efeito â a instância pode estar com outro dono ou já foi removida.",numbersRemoved:"{{count}} números removidos",numberRemoved:"Número removido",removeNumberError:"Erro ao remover número",resettingInstance:"Resetando instância...",instanceReset:"Instância resetada com sucesso!",resetInstanceError:"Erro ao resetar instância",unknownError:"Erro desconhecido",proxyInfoError:"Não foi possÃvel obter informações da proxy",instanceIpError:"Não foi possÃvel obter o IP da instância",validateProxyError:"Erro ao validar proxy"}},hR={orderSection:{title:"Pedido / Endereço",filled:"Preenchido",fields:{street:"Rua",number:"Número",neighborhood:"Bairro",city:"Cidade",state:"Estado",complement:"Complemento",reference:"Referência",scheduleDate:"Data Agendamento",deliveryDate:"Data Entrega"}},card:{noNumber:"Sem número",contactAlt:"Contact"},column:{changeColorTitle:"Alterar cor da etiqueta",renameTitle:"Clique para renomear",deleteTagTitle:"Apagar etiqueta",noResultsHere:"Nenhum resultado aqui",noLeadsHere:"Nenhum lead aqui ainda",showingOf:"{{visible}} de {{total}} leads",noTagLabel:"Sem etiqueta",collaboratorOrderLockedTitle:"A ordem das colunas é definida pelo dono da conta"},csv:{name:"Nome",phone:"Telefone",tags:"Tags"},detailModal:{noName:"Sem nome",sourceNumber:"Número fonte:",createdAt:"Criado em:",notes:"Notas:",notesPlaceholder:"Adicione notas sobre este contato...",save:"Salvar",cancel:"Cancelar",noNotes:"Nenhuma nota adicionada",adSource:"Origem do anúncio:",tags:"Etiquetas",deleteLead:"Excluir Lead",openConversation:"Abrir Conversa",deleteConfirmTitle:"Excluir lead?",deleteConfirmDescription:"Tem certeza que deseja excluir <strong>{{name}}</strong>? Esta ação não pode ser desfeita e todas as mensagens serão perdidas.",deleteConfirmCancel:"Cancelar",deleteConfirmAction:"Excluir"},header:{title:"Pipeline de Leads",filtered:"Filtrado",clearFilterTitle:"Clique para limpar o filtro",subtitle:"Organize seus leads em Kanban.",leadsInFunnel:"{{count}} leads no funil",searchPlaceholder:"Buscar leads...",dateFilterPlaceholder:"Filtrar por data",dateFilters:{none:"Sem filtro",today:"Hoje",yesterday:"O
495ntem",last7days:"Ãltimos 7 dias",last30days:"Ãltimos 30 dias"},instanceFilterPlaceholder:"Filtrar por número",allNumbers:"Todos os números",syncTagsTitle:"Sincronizar etiquetas",visibleColumnsTitle:"Colunas visÃveis",exportCsvTitle:"Exportar contatos em CSV",deleteAllTitle:"Apagar todos os contatos",deleteAllButton:"Apagar Todos",newTag:"Nova Etiqueta"},createTagModal:{title:"Nova Etiqueta",nameLabel:"Nome da etiqueta",namePlaceholder:"Ex: Interessado",colorLabel:"Cor",preview:"Prévia",cancel:"Cancelar",create:"Criar Etiqueta"},deleteAllDialog:{title:"Apagar todos os contatos?",description:"Esta ação irá apagar permanentemente todos os {{count}} contatos e todo o histórico de conversas. Os contatos só aparecerão novamente quando receberem ou enviarem novas mensagens.",cancel:"Cancelar",confirm:"Apagar Tudo"},deleteTagDialog:{title:'Apagar etiqueta "{{tag}}"?',description:"Esta ação irá remover a etiqueta de todos os contatos, fluxos (gatilhos, condições e ações) e do Kanban. Esta ação não pode ser desfeita.",cancel:"Cancelar",confirm:"Apagar Etiqueta"},toasts:{loadError:"Erro ao carregar dados",columnsReordered:"Colunas reordenadas",saveColumnOrderError:"Não foi possÃvel salvar a ordem das colunas",leadMoved:"Lead movido com sucesso",moveLeadError:"Erro ao mover lead",triggerTagFlowError:"Lead movido, mas não foi possÃvel iniciar o fluxo da etiqueta",notesSaved:"Notas salvas com sucesso",saveNotesError:"Erro ao salvar notas",saveFieldError:"Erro ao salvar campo",deletingContacts:"Apagando contatos e histórico... Isso pode levar alguns segundos.",deletingProgress:"Apagando... {{deleted}} já removidos, {{remaining}} restantes.",deleteAllDone:"ConcluÃdo. {{count}} contatos apagados.",deleteAllError:"Erro ao apagar contatos: {{error}}",tagAlreadyExists:"Essa etiqueta já existe",syncSuccess:"Etiquetas sincronizadas com sucesso",syncError:"Erro ao sincronizar",leadDeleted:"Lead excluÃdo com sucesso",deleteLeadError:"Erro ao excluir lead",unknownError:"Erro desconhecido",contactsExported:"{{count}} contatos exportados"},truncated:{title:"Quadro truncado: mostrando só os {{shown}} contatos com conversa mais recente.",withCount:"Esta conta tem cerca de {{total}} contatos ativos â {{hidden}} não aparecem no quadro. Use a busca ou o filtro por número para chegar em quem ficou de fora.",withoutCount:"Os contatos com conversa mais antiga não aparecem no quadro. Use a busca ou o filtro por número para chegar em quem ficou de fora."}},fR={header:{title:"Respostas Rápidas",subtitle:"Crie atalhos para mensagens frequentes",newReply:"Nova Resposta"},empty:{title:"Nenhuma resposta rápida",description:"Crie respostas rápidas para agilizar seu atendimento.",hint:'Digite "/" no chat para acessá-las.',createFirst:"Criar Primeira Resposta"},card:{noContent:"Sem conteúdo",allInstances:"Todas instâncias"},dialog:{editTitle:"Editar Resposta Rápida",newTitle:"Nova Resposta Rápida",description:'Configure o atalho e conteúdo da resposta. Use "/" no chat para acessar.',shortcutLabel:"Atalho",shortcutPlaceholder:"saudacao",contentLabel:"Conteúdo",insertVariable:"Inserir variável",variableHint:"Resolvida pro valor real do lead quando a resposta rápida for enviada.",globalVariablesTitle:"Variáveis Globais",contentPlaceholder:"Olá! Como posso ajudar?",instancesLabel:"Instâncias",allInstances:"Todas as instâncias",cancel:"Cancelar",save:"Salvar",create:"Criar"},deleteDialog:{title:"Excluir Resposta Rápida",description:"Tem certeza que deseja excluir esta resposta rápida? Esta ação não pode ser desfeita.",cancel:"Cancelar",confirm:"Excluir"},toasts:{loadError:"Erro ao carregar dados",shortcutRequired:"O atalho é obrigatório",contentRequired:"O conteúdo é obrigatório",updated:"Resposta rápida atualizada!",created:"Resposta rápida criada!",saveError:"Erro ao salvar resposta rápida",deleted:"Resposta rápida excluÃda!",deleteError:"Erro ao excluir resposta rápida"}},gR={header:{title:"Respostas Rápidas",subtitle:"Atalhos para mensagens prontas"},section:{title:"Respostas Rápidas",hint:"Crie atalhos digitando <code>/atalho</code> no chat",newReply:"Nova resposta"},empty:"Nenhuma resposta rápida cadastrada",allInstances:"Todas instâncias",instanceCount_one:"{{count}} instância",instanceCount_other:"{{count}} instâncias",dialog:{editTitle:"Editar resposta rápida",newTitle:"Nova resposta rápida",description:'Atalho disponÃvel para uso digitando "/" no campo de mensagem',shortcutLabel:"Atalho",shortcutPlaceholder:"ola",contentLabel:"Conteúdo",contentPlaceholder:"Olá! Como posso te ajudar?",instancesLabel:"Instâncias",allInstances:"Todas instâncias",cancel:"Cancelar",save:"Salvar"},deleteDialog:{title:"Apagar resposta rápida?",description:"Esta ação não pode ser desfeita.",cancel:"Cancelar",confirm:"Apagar"},toasts:{loadError:"Erro ao carregar respostas rápidas",shortcutRequired:"Informe um atalho",contentRequired:"Informe o conteúdo da resposta",updated:"Resposta rápida atualizada",created:"Resposta rápida criada",saveError:"Erro ao salvar",deleted:"Resposta rápida apagada",deleteError:"Erro ao apagar"}},vR={telefone:"Telefone do lead",telefone_br:"Telefone BR (sem DDI, com 9º dÃgito)",contactName:"Nome completo do lead",primeiro_nome:"Primeiro nome do lead"},bR={activeFlows:VI,aiVoiceDialog:qI,chatInput:UI,chatMessage:WI,chatPanel:$I,contactDetails:GI,contentBlocksFooterBar:H
495I,conversationList:KI,createCommunityDialog:XI,createGroupDialog:YI,groupBulkActionDialog:QI,groupBulkActionsBar:ZI,groupChatPanel:JI,groupDetails:eR,groupFlowActionsButton:tR,groupList:aR,inboxLayout:oR,inboxMenu:nR,inboxSidebar:rR,joinGroupDialog:iR,manageVisibleGroupsDialog:sR,newConversationDialog:lR,scheduledMessageSection:cR,scheduledMessagesDialog:dR,scheduledMessagesIndicator:uR,sendBlockConfirmDialog:mR,dashboard:pR,kanban:hR,quickReplies:fR,quickRepliesSettings:gR,inboxVariables:vR},yR={title:"Contatos",subtitle:"Gerencie seus contatos e leads"},xR={totalContacts:"Total de Contatos"},wR={title:"Lista de Contatos"},CR={byInstance:"Filtrar por instância",instances:"Instâncias",noInstances:"Nenhuma instância disponÃvel",byTag:"Filtrar por tag",tagsLabel:"Tags",noTags:"Nenhuma tag disponÃvel",searchPlaceholder:"Buscar contatosâ¦"},PR={newContact:"Novo Contato",exportSelection:"Exportar seleção",exportFiltered:"Exportar filtrados",exportAll:"Exportar tudo",loadMore:"Carregar mais",openConversation:"Abrir conversa",editTags:"Editar tags",tagsAction:"Tags"},AR={selectedCount_one:"{{count}} selecionado",selectedCount_other:"{{count}} selecionados",matchingFilterHint:"(todos que batem no filtro atual)",selectAllMatching:"Selecionar todos os {{count}} que batem no filtro",selecting:"Selecionandoâ¦",matchingSelected:"{{count}} contatos selecionados",selectAllError:"Erro ao selecionar contatos"},ER={id:"ID",contact:"Contato",phone:"Telefone",tags:"Tags",createdAt:"Criado em",empty:"Nenhum contato encontrado"},SR={load:"Erro ao carregar contatos",delete:"Erro ao excluir",save:"Erro ao salvar contato",phoneRequired:"Informe um telefone"},NR={contactUpdated:"Contato já existia e foi atualizado",contactCreated:"Contato criado",contactDeleted:"Contato excluÃdo",deletedCount:"{{count}} contatos excluÃdos"},kR={title:"Excluir {{count}} contatos?",description:"Esta ação não pode ser desfeita. Os contatos e suas conversas serão removidos."},TR={title:"Novo contato",description:"Preencha telefone (obrigatório) e nome opcional. Se o telefone já existir, o nome é atualizado.",phoneLabel:"Telefone",nameLabel:"Nome (opcional)",namePlaceholder:"Nome do contato"},IR={title:"Tags em massa",description_one:"{{count}} contato selecionado.",description_other:"{{count}} contatos selecionados.",addTab:"Adicionar tags",removeTab:"Remover tags",newTagPlaceholder:"Nova tagâ¦",removeHint:"Selecione as tags que devem ser removidas dos contatos.",noTags:"Nenhuma tag cadastrada ainda.",applying:"Aplicandoâ¦",add:"Adicionar",remove:"Remover",error:"Erro ao atualizar tags",successAdded:"Tags aplicadas em {{count}} contatos",successRemoved:"Tags removidas em {{count}} contatos"},RR={page:yR,kpi:xR,list:wR,filters:CR,buttons:PR,export:{titleFiltered:"Exporta todos os contatos que batem no filtro atual (tag/instância/busca), não só os carregados na tela",titleAll:"Exporta todos os contatos, não só os carregados na tela",nothingToExport:"Nada para exportar",loading:"Exportando contatosâ¦",loadingProgress:"Exportando contatos⦠{{pct}}% ({{loaded}}/{{total}})",error:"Erro ao exportar contatos",exportedCount:"{{count}} contatos exportados"},selection:AR,table:ER,errors:SR,toast:NR,confirmDelete:kR,newContactDialog:TR,bulkTag:IR,import:{title:"Importar contatos",descIntro:"Envie um arquivo .csv com as colunas",descRequired:"(obrigatória),",descAnd:"e",descSeparatedBy:"(separadas por",phonesUpdated:"Telefones já existentes são atualizados.",templateHint:"Não sabe o formato? Baixe nosso modelo e preencha os contatos.",downloadTemplate:"Baixar modelo",fileLabel:"Arquivo CSV",missingPhoneColumn:'A planilha precisa ter uma coluna "phone" (ou "telefone").',noValidContacts:"Nenhum contato válido encontrado no arquivo.",readError:"Erro ao ler arquivo",previewHeader:"Pré-visualização â {{count}} contatos detectados (mostrando 10 primeiros)",previewPhone:"Telefone",previewName:"Nome",previewTags:"Tags",importing:"Importandoâ¦",importButton:"Importar {{count}}",error:"Erro ao importar contatos",createdCount_one:"{{count}} novo contato criado",createdCount_other:"{{count}} novos contatos criados",updatedCount_one:"{{count}} já existia e foi atualizado",updatedCount_other:"{{count}} já existiam e foram atualizados",failedCount_one:"{{count}} falhou",failedCount_other:"{{count}} falharam",completed:"Importação concluÃda: {{details}}.",nothingProcessed:"Nenhum contato processado."}},DR={official:"oficial",unofficial:"não oficial",toast:'Este fluxo é do canal {{flowChannel}}; a instância "{{instanceName}}" é do canal {{instanceChannel}}. Remova-a antes de salvar.',hidden:"Instâncias do canal {{otherChannel}} não aparecem aqui â este fluxo é do canal {{flowChannel}}."},MR={title:"Resposta IA"},FR={title:"IA Responder",tone:"Tom: {{tone}}
495",toneFormal:"Formal",toneInformal:"Informal",expiresIn:"Expira em {{minutes}} min",miniFlowCount_one:"{{count}} mini-fluxo",miniFlowCount_other:"{{count}} mini-fluxos",expiration:"Expiração",error:"Erro",followUpBadge:"Follow-up inteligente",followUpNoMiniFlow:"Follow-up sem mini-fluxo",followUpPausesExpiration:"(pausa c/ follow-up)"},LR={title:"Texto com IA",placeholder:"Configure o texto base...",autoVariations:"⨠Variações automáticas por IA"},jR={title:"Ãudio IA",viewOnceTitle:"Visualização única",forwardedTitle:"Será enviado como encaminhado",voiceNotSelected:"Voz não selecionada",configurePlaceholder:"Clique para configurar o texto...",success:"â Sucesso",error:"â Erro"},_R={title:"Ãudio",viewOnceTitle:"Visualização única",forwardedTitle:"Será enviado como encaminhado",playbackSpeedTitle:"Velocidade de reprodução",downloadAudioTitle:"Baixar áudio",usingVariable:"ð Usar variável:",configurePlaceholder:"Clique para configurar..."},OR={title:"Calculadora",defaultResultVariable:"resultado"},BR={title:"Ligação",description:"Dispara uma chamada muda"},zR={title:"Carrossel",aiBadge:"IA",bodyTextRequired:"Texto do corpo obrigatório",cardCount_one:"{{count}} cartão",cardCount_other:"{{count}} cartões",configureCards:"Configure os cartões...",cardsWithEmptyText_one:"{{count}} cartão sem texto",cardsWithEmptyText_other:"{{count}} cartões sem texto",timeoutLabel:"Timeout: {{time}}",timeoutHandle:"â± Timeout"},VR={title:"Condição",operators:{equals:"Igual a",notEquals:"Diferente de",contains:"Contém",notContains:"Não contém",startsWith:"Começa com",endsWith:"Termina com",greater:"Maior que",less:"Menor que",exists:"Existe",notExists:"Não existe"},configurePlaceholder:"Configure as condições...",tagHas:"Tem",tagNotHas:"Não tem",tagSummary:'Tag: {{state}} "{{name}}"',countrySummary:"PaÃs {{state}} {{name}}",countryIs:"é",countryIsNot:"não é",iaSummaryWithPrompt:"ð¤ {{prompt}}...",iaSummaryConfigured:"ð¤ Condição IA configurada",conditionsSummary:"{{count}} condições ({{op}})",and:"E",or:"OU",badgeVariable:"Var",badgeTag:"Tag",badgeCountry:"PaÃs",badgeIa:"ð¤ IA",undefinedVariablesTitle:"Variáveis não definidas:",undefinedVariablesHint:'Adicione um nó "Definir Variável", "Aguardar Resposta" ou "Aguardar Resposta IA" antes desta condição â ou escolha uma variável já salva na conta (de outro fluxo).',yes:"â Sim",no:"â Não",iaError:"â Erro IA"},qR={title:"Contato",placeholder:"Configure o contato..."},UR={title:"Delay",variableBadge:"Variável",waitingFixed:"Aguardar {{delay}}{{unit}}",waitingRange:"Aguardar {{min}} a {{max}}{{unit}}"},WR={title:"Documento",genericFileType:"Arquivo",placeholder:"Clique para configurar..."},$R={title:"Fim"},GR={title:"Conectar Fluxo",placeholder:"Configure o fluxo..."},HR={title:"Gerador IA",typeMusic:"Música",typeVideo:"VÃdeo",typeImage:"Imagem",modelFreepikNotSelected:"Modelo Freepik não selecionado",modelNotSelected:"Modelo não selecionado",successVariableTitle:"Salva mÃdia em: {{variable}}",success:"â Sucesso",error:"â Erro"},KR={title:"Imagem",viewOnceTitle:"Visualização única",previewAlt:"Preview",downloadImageTitle:"Baixar imagem",usingVariable:"ð Usar variável:",configurePlaceholder:"Clique para configurar..."},XR={typeButtons:"Botões",typeImageButtons:"Imagem + Botões",typeListMenu:"Menu Lista",typeDefault:"Mensagem Interativa",optionFallback:"Opção {{number}}",aiBadge:"IA",optionsCount_one:"{{count}} opção",optionsCount_other:"{{count}} opções",configureOptions:"Configure as opções...",configureMessage:"Configure a mensagem...",timeoutLabel:"Timeout: {{time}}",overLimit:"Excede limite de {{max}} opções",textExceeds:"Texto excede 1024 chars",buttonExceeds:"Botão excede 20 chars",fallbackLabel:"â© Resposta inválida",timeoutHandle:"â± Timeout"},YR={title:"Menu",optionsCount_one:"{{count}} opção",optionsCount_other:"{{count}} opções",placeholder:"Configure as opções..."},QR={title:"Notificar Admin",whatsappPrefix:"WhatsApp: {{phone}}",whatsappPlaceholder:"Configure o WhatsApp...",groupPrefix:"Grupo: {{name}}",groupPlaceholder:"Configure o Grupo...",pushPrefix:"Push: {{title}}",pushPlaceholder:"Configure o Push...",defaultPlaceholder:"Configure a notificação..."},ZR={actionLabel:"Ação {{number}}",actionType:"Tipo de Ação",tagName:"Nome da Tag",fieldName:"Nome do Campo",fieldNamePlaceholder:"ex: cidade, plano, pontos",value:"Valor",valuePlaceholder:"Valor ou {{syntax}}",fieldNote:{before:"Campo salvo permanentemente no contato â fica disponÃvel em outros fluxos, não se perde quando a sessão termina, e pode ser usado como",after:"em qualquer bloco de texto, condição ou webhook de
495ste ou de outro fluxo."},deleteContactWarning:"Exclui o contato e todo o histórico da conversa permanentemente. O fluxo é encerrado logo em seguida â não há como continuar para os próximos blocos.",markRead:"Marca as mensagens da conversa como lidas e zera o contador de não lidas.",markUnread:"Marca a conversa como não lida.",markOpen:"Reabre a conversa no Kanban de Pipeline (volta a aparecer nas colunas).",markClosed:"Arquiva a conversa no Kanban de Pipeline (some das colunas, indicando que a interação foi concluÃda).",markConversationOpen:"Marca a conversa como aberta na lista do Inbox. Não afeta o fluxo nem o Kanban de Pipeline.",markConversationClosed:"Marca a conversa como encerrada na lista do Inbox. Não interrompe o fluxo nem afeta o Kanban de Pipeline.",targetMessage:"Mensagem alvo",targetMessagePlaceholder:"Selecione um bloco de mensagem anterior...",noMessageBlockAvailable:"Nenhum bloco de mensagem disponÃvel ainda neste fluxo.",noTextMessageBlockAvailable:"Nenhum bloco de mensagem de texto disponÃvel ainda neste fluxo.",targetMessageNote:"Aponta para a mensagem enviada por esse bloco nesta conversa. Só funciona dentro da janela permitida pelo WhatsApp (~1h) e se o bloco realmente já enviou uma mensagem para este contato.",newText:"Novo texto",newTextPlaceholder:"Novo texto da mensagem ou {{syntax}}",addAction:"Adicionar Ação",emptyState:"Adicione uma ou mais ações para serem executadas em sequência quando o fluxo passar por este bloco."},JR={voiceCategories:{premade:"Vozes padrão",cloned:"Vozes clonadas",professional:"Vozes profissionais",generated:"Vozes geradas",famous:"Vozes famosas",highQuality:"Alta qualidade"},errors:{noVoicesLoaded:"Não foi possÃvel carregar as vozes.",loadVoices:"Erro ao carregar vozes do ElevenLabs.",noAudioReturned:"Ãudio não retornado.",generatePreview:"Não foi possÃvel gerar a prévia do áudio."},charLimitToast:"Limite de {{max}} caracteres para este modelo.",noKeyWarning:{before:"Nenhuma chave ElevenLabs cadastrada. Sem ela, este bloco sairá pela saÃda de",error:"erro",after:"em vez de enviar o áudio."},manageKeys:"Gerenciar chaves",voice:"Voz",reloadVoices:"Recarregar vozes",loadingVoices:"Carregando vozes...",selectVoice:"Selecione a voz...",noVoicesFound:"Nenhuma voz encontrada na sua conta ElevenLabs.",listenVoicePreview:"Ouvir prévia da voz",previewUnavailable:"Prévia indisponÃvel",voiceModel:"Modelo de voz",language:"Idioma",multilingualAutoDetectWarning:"Multilingual v2 detecta o idioma automaticamente pelo texto â não é possÃvel forçar um idioma neste modelo.",autoLanguageNote:'"Automático" deixa o modelo detectar o idioma. Forçar ajuda em frases curtas/ambÃguas.',textToConvert:"Texto para converter",textPlaceholder:"Digite o texto que será transformado em áudio...",textExample:"Exemplo: Olá {{varName}}, seu pedido foi aprovado e será entregue em breve.",audioPreviewLabel:"Prévia do áudio (texto atual)",generatePreview:"Gerar prévia",listenPreview:"Ouvir prévia",downloadMp3:"Baixar MP3",previewVariableNote:"A prévia usa o texto como está, sem substituir variáveis (isso só acontece no envio real pro lead).",availableVariables:"Variáveis disponÃveis",flowVariables:"Variáveis do fluxo",clickToInsert:"Clique para inserir no texto",replyToLastMessage:"Responder à última mensagem",sendAsForwarded:"Enviar como encaminhado",viewOnce:"Visualização única"},eD={notSupported:"Seu navegador não suporta gravação de áudio.",emptyRecording:"Gravação vazia. Tente novamente.",tooLarge:"Gravação acima de 50MB.",micDenied:"Permissão de microfone negada.",micNotFound:"Nenhum microfone encontrado.",startFailed:"Não foi possÃvel iniciar a gravação.",uploadingToast:"Enviando gravação...",mustBeLoggedIn:"Você precisa estar logado",uploadError:"Erro ao enviar: {{message}}",uploaded:"Gravação importada!",unexpectedError:"Erro inesperado: {{message}}",tryAgainFallback:"tente novamente",sending:"Enviando",recordAudio:"Gravar áudio",record:"Gravar"},tD={types:{text:"Texto",audio:"Ãudio",image:"Imagem",video:"VÃdeo",document:"Documento"},errors:{updateFavorite:"Erro ao atualizar favorito: {{error}}",moveBlock:"Erro ao mover bloco: {{error}}",deleteBlock:"Erro ao excluir: {{error}}",generic:"Erro: {{error}}",deleteFolder:"Erro ao excluir pasta: {{error}}"},blockDeleted:"Bloco excluÃdo.",folderRenamed:"Pasta renomeada!",folderCreated:"Pasta criada!",folderDeleted:'Pasta excluÃda. Os blocos foram movidos para "Sem pasta".',title:"Blocos Avulsos",searchPlaceholder:"Buscar blocos...",filters:"Filtros",type:"Tipo",favoritesOnly:"Apenas favoritos",newFolder:"Nova pasta",newBlock:"Novo Bloco",blockType:"Tipo de bloco",loadingBlocks:"Carregando blocos...",blockCount_one:"{{count}} bloco",blockCount_other:"{{count}} blocos",noBlocksFound:"Nenhum bloco encontrado.",noBlocksInFolder:"Nenhum bloco nesta pasta ainda.",noBlocksYet:'Nenhum bloco avulso cadastrado ainda. Clique em "Novo Bloco" para criar o primeiro.',favorite:"Favoritar",moveToFolder:"Mover para pasta",noFolder:"Sem pasta",renameFolder:"Renomear pasta",folderNamePlaceholder:"Ex: Objeções de venda",deleteBlockTitle:"Excluir bloco?",deleteBlockDescription:'"{{title}}" será excluÃdo permanentemente e deixará de aparecer no rodapé do chat.',deleteFolderTitle:"Excluir pasta?",deleteFolderDescription:'A pasta "{{name}}" será excluÃda. Os blocos dentro dela NÃO serão apagados â só ficarão sem pasta.'},aD={translatingFlow:"Traduzindo fluxo...",noTextToTranslate:"Nenhum texto para traduzir neste fluxo.",flowTranslatedPartial:"Fluxo traduzido parcialmente ({{reason}}). Tente novamente para completar o restante.",somePartFailed:"uma parte falhou",flowTranslated:"Fluxo traduzido! Salve para manter as alterações.",translateFlowError:"Erro ao traduzir fluxo",translatingAudioProgress:"Traduzindo áudio {{current}}/{{total}}...",translateAudioFailed:"Falha ao traduzir áudio",unknownError:"erro desconhecido",audiosTranslated_one:"{{count}} áudio traduzido! Salve para manter as alterações.",audiosTranslated_other:"{{count}} áudios traduzidos! Salve para manter as alterações.",audiosTranslatedPartial:"{{succeeded}} de {{total}} áudios traduzidos. {{failed}} falharam ({{reason}}).",audiosTranslateFailed:"Nenhum áudio pôde ser traduzido: {{reason}}",translatingMediaProgress:"Traduzindo imagem/documento {{current}}/{{total}}...",mediaTranslated_one:"{{count}} imagem/documento traduzido! Salve para manter as alterações.",mediaTranslated_other:"{{count}} imagens/documentos traduzidos! Salve para manter as alterações.",mediaTranslatedPartial:"{{succeeded}} de {{total}} traduzidos. {{failed}} falharam ({{reason}}).",mediaTranslateFailed:"Nenhuma imagem/documento pôde ser traduzido: {{reason}}",documentTranslateTimeout:"A tradução do documento está demorando mais que o esperado. Ela continua em andamento â reabra este diálogo em alguns minutos para tentar de novo.",mediaCardRemoved:"O card do carrossel foi removido enquanto a tradução estava em andamento â tradução descartada.",nothingToUndo:"Nada para desfazer",undone:"Desfeito!",cannotDeleteStartNode:"Não é possÃvel excluir o nó InÃcio",blocksDeleted_one:"{{count}} bloco excluÃdo",blocksDeleted_other:"{{count}} blocos excluÃdos",cannotDuplicateStartNode:"Não é possÃvel duplicar o nó InÃcio",blocksDuplicated_one:"{{count}} bloco duplicado",blocksDuplicated_other:"{{count}} blocos duplicados",startNodeAlreadyExists:"Já existe um bloco de inÃcio no fluxo.",allOutputsConnected:"Todas as saÃdas deste bloco já estão conectadas. O novo bloco foi criado sem conexão.",selectedCount_one:"{{count}} selecionado",selectedCount_other:"{{count}} selecionados",centerOnStart:"Centralizar no InÃcio",undoTitle:"Desfazer (Ctrl+Z)",testFlow:"Testar Fluxo",translateFlow:"Traduzir Fluxo",translateExtrasDialog:{title:"Traduzir Fluxo",description:"O texto do fluxo sempre é traduzido. Vej
495a abaixo o que mais dá pra traduzir junto.",audioCheckbox:"Traduzir {{count}} bloco(s) de áudio também (mais lento â transcrição, tradução e recriação da fala, um de cada vez)",audioNotConnected:"Encontrei {{count}} bloco(s) de Ãudio neste fluxo. Pra traduzir, conecte sua chave do ElevenLabs.",connectElevenLabs:"Conectar ElevenLabs",mediaCheckbox:"Traduzir {{count}} imagem(ns)/documento(s) também (documentos podem levar alguns minutos)",mediaNotConnected:"Encontrei {{count}} imagem(ns)/documento(s) (PDF) neste fluxo â inclui imagem em Mensagem Interativa, Figurinha, Carrossel e Pagamentos. Pra traduzir, conecte sua chave da Lara Translate.",connectLara:"Conectar Lara Translate",confirm:"Traduzir"},showContent:"Mostrar conteúdo",hideContent:"Ocultar conteúdo",nodeLabels:{start:"InÃcio",text:"Mensagem de Texto",image:"Enviar Imagem",audio:"Enviar Ãudio",audioAI:"Ãudio IA",video:"Enviar VÃdeo",document:"Enviar Documento",delay:"Aguardar",waitInput:"Aguardar Resposta",condition:"Condição",menu:"Menu de Opções",ai:"Resposta IA",transfer:"Transferir",webhook:"Webhook",setVariable:"Definir Variável",calculator:"Calculadora",tag:"Ações",end:"Fim",randomizer:"Randomizador",sendPixKey:"Enviar Chave PIX",sendCharge:"Enviar Cobrança",pixel:"Pixel Facebook",goToFlow:"Conectar Fluxo",pixApi:"API de Pagamentos",speiApi:"API de Pagamentos",call:"Ligação"}},oD={dragToReorder:"Arrastar para reordenar",mediaVariablePicker:{upload:"Upload",variable:"Variável",selectVariable:"Selecione a variável...",inThisFlow:"neste fluxo",fromOtherFlowGenerated:"de outro fluxo (já gerada)",fromOtherFlowNamedNotGenerated:'de outro fluxo "{{flowName}}" (ainda não gerada)',fromOtherFlowNotGenerated:"de outro fluxo (ainda não gerada)",resolvedAtRuntimeNote:'A mÃdia será resolvida em tempo de execução a partir da variável (gerada por um bloco "Gerador de IA" para o mesmo contato).'},tagSelector:{newTagName:"Nome da nova tag",selectTag:"Selecionar etiqueta...",newTag:"Nova etiqueta"},variablePickerPopover:{defaultPlaceholder:"Clique para inserir variável..."},optimizePrompt:{writeDescriptionFirst:"Escreva uma descrição primeiro",emptyAiResponse:"Resposta vazia da IA",optimizedSuccess:"Prompt otimizado com IA",tooManyRequests:"Muitas requisições, tente em instantes",creditsExhausted:"Créditos de IA esgotados",genericFailure:"Não foi possÃvel otimizar agora"},modelLabel:"Modelo",start:{configuredOnCanvas:'Este gatilho é configurado direto no bloco "Iniciar" no canvas.',receiptAiLabel:"IA do comprovante",visionProvidersOnly:"Só provedores com suporte a visão aparecem aqui (lê imagem/PDF do comprovante).",receiptKeyRequired:"Obrigatório â sem a chave, o comprovante não será lido (sem IA nativa).",connectedKeyCannotRead:"Sua chave conectada ({{provider}}) não lê imagem/PDF â o comprovante não vai ser lido.",automaticRecommended:"Automático (recomendado)",modelOutsideCatalog:"{{model}} (modelo salvo, fora do catálogo)",legacySuffix:"(legado)",automaticModelNote:"Automático usa o modelo econômico do provedor e escala se o comprovante for difÃcil de ler.",acceptOtherReceipts:"Aceitar outros comprovantes",acceptOtherReceiptsNote:"Também detecta boleto pago, cartão/maquininha, nota fiscal e comprovantes em outros idiomas â não só PIX.",customPromptLabel:"Prompt personalizado (opcional) â {{current}}/{{max}}",customPromptPlaceholder:"Ex: também aceite comprovante de boleto da Cielo com o texto 'Pago via boleto registrado'...",customPromptNote:"Some à s regras padrão â nunca as substitui.",filterByValue:"Filtrar por valor",minimumValue:"MÃnimo (R$)",noMinimum:"Sem mÃnimo",maximumValue:"Máximo (R$)",noMaximum:"Sem máximo",outOfRangeConnected:'Comprovante fora da faixa segue pela saÃda "Valor diferente" no bloco Iniciar.',outOfRangeNotConnected:"SaÃda ativada mas não conectada â comprovante fora da faixa só encerra a sessão, sem caminho customizado.",firstBlockWaitInputWarning:'O primeiro bloco desse caminho é "Aguardar resposta" â a sessão trava em silêncio. Use um bloco de mensagem antes.',firstBlockWaitInputWarningShort:'O primeiro bloco desse caminho é "Aguardar resposta" â a sessão trava em silêncio.',triggerOnGatewayConfirmed:"Disparar em API de pagamento confirmado",triggerOnGatewayConfirmedNote:'Também dispara este gatilho quando uma cobrança gerada pelo bloco "API de Pagamentos" for confirmada como paga pelo gateway (XPag e demais) â sem o lead precisar enviar comprovante.',fakeReceiptOutput:"SaÃda p/ comprovante falso",fakeReceiptNotConnected:"SaÃda ativada mas não conectada â comprovante falso só encerra a sessão.",duplicateReceiptOutput:"SaÃda p/ comprovante repetido",duplicateReceiptNotConnected:"SaÃda ativada mas não conectada â comprovante repetido só encerra a sessão."},availableVariables:"Variáveis disponÃveis",variableGroups:{system:"Sistema",flow:"Variáveis do Fluxo",global:"Variáveis Globais",logzz:"Logzz (Webhook)"},webhookVarsAutoNote:"Se o usuário usar webhook, as variáveis `webhook_*` aparecerão aqui automaticamente após o primeiro payload recebido.",replyToLastMessage:"Responder última mensagem do lead",reactToLastMessage:"Reagir à última mensagem do lead",reactionEmoji:"Emoji da reação",clickToInsertInText:"Clique para inserir no texto",text:{message:"Mensagem",messagePlaceholder:"Digite a mensagem...",enableLinkPreview:"Ativar preview de links"},aiText:{intro:"A IA irá gerar variações automáticas do texto base para cada usuário, mantendo o mesmo sentido mas com palavras diferentes.",aiProvider:"Provedor de IA",apiKeyLabel:"Chave da API (variação por IA)",requiredHelpText:"Sem chave configurada, a variação por IA é pulada e a mensagem original é enviada como está.",disconnectedHelpText:"Nenhuma chave conectada na Integração de IA de Plataforma. Sem ela, a variação por IA é pulada e a mensagem original é enviada como está.",baseText:"Texto Base",baseTextPlaceholder:"Digite o texto base que a IA irá variar...",baseTextNote:"A IA vai manter o sentido do texto, mas alterará palavras e, se houver emojis, também os variará."},mustBeLoggedIn:"Você precisa estar logado",tryAgain:"Tente novamente",media:{image:"Imagem",audio:"Ãudio",video:"VÃdeo",document:"Documento",file:"Arquivo",sendLabel:"Enviar {{media}}",otherSendMethods:"Outras formas de enviar",upload:"Upload",linkUrl:"Link / URL",fileTooLarge:"Arquivo muito grande (máximo 50MB). Seu arquivo: {{size}}",unsupportedFormat:"Formato não suportado. Use: {{formats}}",uploadingWithSize:"Enviando {{media}} ({{size}}
495)...",storageLimitExceeded:"Limite de armazenamento excedido",connectionError:"Erro de conexão. Verifique sua internet e tente novamente.",uploadErrorGeneric:"Erro ao enviar: {{message}}",fileSent:"Arquivo enviado!",unexpectedErrorGeneric:"Erro inesperado: {{message}}",selectOrRecord:"Selecione um arquivo ou grave direto pelo microfone (máx 50MB)",clickToSelectFile:"Clique para selecionar um arquivo (máx 50MB)",mp4Only:"Apenas arquivos MP4 são aceitos",remove:"Remover",urlPlaceholder:"https://... ou {{syntax}}",urlNote:{before:"Aceita URL pública ou variáveis (ex:",after:")."},resolvedAtRuntime:"Será resolvido em runtime.",avifNotSupported:"Formato AVIF não é aceito pelo WhatsApp. Use PNG, JPG ou WEBP.",previewAlt:"Prévia",base64Placeholder:"Cole aqui: data:image/png;base64,iVBORw0... ou {{syntax}}",clipboardEmpty:"Ãrea de transferência vazia",pasted:"Colado!",clipboardReadError:"Não foi possÃvel ler a área de transferência",paste:"Colar",sendAsForwarded:"Enviar como encaminhado",forwardedNote:'O áudio aparecerá como "Encaminhado" no WhatsApp (estilo laranja)',captionOptional:"Legenda (opcional)",captionPlaceholder:"Legenda...",sendAsViewOnce:"Enviar como visualização única",viewOnceNote:"A mÃdia só poderá ser vista uma vez pelo destinatário",videoFormat:{label:"Formato de envio",video:"Normal",videoplay:"Autoplay",ptv:"VÃdeo redondo",videoNote:"Env
495io padrão de vÃdeo, com legenda opcional.",videoplayNote:"Mesmo arquivo, mas com reprodução automática em loop no WhatsApp.",ptvNote:'VÃdeo redondo ("nota de vÃdeo", como uma nota de voz). Não suporta legenda.'}},timeUnits:{seconds:"Segundos",minutes:"Minutos",hours:"Horas",days:"Dias"},delay:{delayType:"Tipo de Delay",fixedTime:"Tempo Fixo",variableTime:"Tempo Variável",waitTime:"Tempo de Espera",minTime:"Tempo MÃnimo",maxTime:"Tempo Máximo",randomBetween:"O delay será aleatório entre o tempo mÃnimo e máximo",showPresence:"Mostrar presença durante a espera",none:"Nenhuma",typing:"Digitando",recordingAudio:"Gravando áudio",typingQuoted:'"digitando"',recordingAudioQuoted:'"gravando áudio"',presenceNote:"O WhatsApp mostra {{state}} durante a espera. Coloque o bloco de texto/áudio logo após este delay. Limite de 5 min (300s)."},waitInput:{saveResponseIn:"Salvar resposta em",variableNamePlaceholder:"Nome da variável",saveImageSentByLead:"Salvar imagem ou documento enviado pelo lead",saveImageSentByLeadNote:{before:"Quando o lead enviar uma imagem ou documento, o arquivo será salvo em uma variável separada. Use essa variável",only:"no bloco Notificar Admin",after:"para encaminhar o arquivo pelo WhatsApp. Imagens também podem ser usadas no Gerador IA."},saveImageInVariable:"Salvar arquivo na variável",imageVariablePlaceholder:"ex: foto_lead",imageVariableNote:{before:"Variável",separate:"separada",after:"da variável de texto. Você pode ter várias variáveis de imagem/PDF em fluxos diferentes."},imageOnlyLabel:"Aceitar APENAS imagem ou PDF",imageOnlyNote:"Mensagens de texto serão ignoradas â o fluxo só avança quando uma imagem ou documento (PDF) for recebido (ou expirar o timeout).",timeoutOptional:"Tempo limite (opcional)",timeoutNote:'Quando ativado, após este tempo o fluxo seguirá pela saÃda "Sem resposta". Se desativado, o bloco aguarda indefinidamente até o lead responder (sessões órfãs são limpas em 7 dias).',maxWaitTime:"Tempo máximo de espera",componentOutputs:"SaÃdas do componente:",responseReceived:"Resposta recebida",noResponseAfter:"Sem resposta (após {{value}} {{unit}})"},waitInputAI:{intro:"A IA vai analisar a resposta do lead e tentar extrair as variáveis configuradas abaixo. Se alguma variável obrigatória não for encontrada, o bloco pergunta de novo automaticamente.",modelOutsideCatalog:"{{model}}
495 (modelo salvo, fora do catálogo)",apiKeyWithProvider:"Chave da API {{provider}}",apiKeyRequired:"Obrigatório. Sem a sua chave de API, este bloco não consegue analisar a resposta do lead.",keyStoredOnlyHere:"A chave fica armazenada apenas neste bloco.",getKeyOpenAI:"Obtenha em platform.openai.com/api-keys",getKeyAnthropic:"Obtenha em console.anthropic.com/settings/keys",getKeyDeepSeek:"Obtenha em platform.deepseek.com/api_keys",getKeyGemini:"Obtenha em aistudio.google.com/app/apikey",noAudioTranscription:"{{provider}} não transcreve áudio â se o lead responder por áudio, a mensagem será ignorada.",variablesToExtract:"Variáveis a extrair",addVariable:"Adicionar variável",extractNote:"A IA vai ler a resposta do lead e tentar extrair cada variável configurada abaixo.",noVariableConfigured:"Nenhuma variável configurada ainda.",variableIndex:"Variável {{number}}",variableNameExample:"ex: nome_completo",variableDescriptionExample:"Descreva o que a IA deve procurar na resposta do lead...",optimizeWithAi:"Otimizar com IA",requiredReaskIfMissing:"Obrigatória â pergunta de novo se não encontrar",globalInstructionOptional:"Instrução geral (opcional)",globalInstructionPlaceholder:"Instruções adicionais para a IA sobre como interpretar a resposta do lead...",globalInstructionNote:"Some à s descrições de cada variável â útil para dar contexto geral sobre a conversa.",reaskTone:"Tom da nova pergunta",informalFriendly:"Informal (descontraÃdo)",formal:"Formal (profissional)",useEmojisInReask:"Usar emojis ao perguntar de novo",listenToLeadAudio:"Ouvir áudio do lead",autoEnabledByConcat:"Ativado automaticamente pela concatenação de áudios abaixo.",audioCreditsNote:"Consome créditos de transcrição de áudio.",concatenateInWindow:"Concatenar mensagens em uma janela de tempo",concatWindowSeconds:"Janela de espera (segundos)",concatWindowNote:"Junta mensagens (texto e áudio) enviadas em sequência dentro dessa janela antes de mandar para a IA analisar.",maxAttempts:"Máximo de tentativas",maxAttemptsNote:{before:"Depois desse número de tentativas sem uma resposta válida, o fluxo segue pela saÃda",exhaustedLabel:"Tentativas esgotadas",after:"."},timeoutNote:'Quando ativado, após este tempo o fluxo seguirá pela saÃda "Sem resposta". Se desativado, o bloco aguarda indefinidamente até o lead responder.',validResponseOutput:"Resposta válida",attemptsExhaustedOutput:"Tentativas esgotadas (máx. {{count}})",aiErrorOutput:"Erro IA"},menuForm:{menuMessage:"Mensagem do Menu",menuMessagePlaceholder:"Escolha uma opção...",optionsOnePerLine:"Opções (uma por linha)",optionsPlaceholder:`1. Opção 1 4962. Opção 2 4973. Opção 3`},aiForm:{systemPrompt:"Prompt do Sistema",systemPromptPlaceholder:"Você é um assistente de vendas amigável...",usesGpt4oMini:"A IA usará GPT-4o-mini para responder à s mensagens do cliente com base neste prompt."},aiResponder:{apiKeyLabel:"Chave da API *",apiKeyRequiredHelp:"Obrigatório. Sem a sua chave de API, este bloco não responde â não há IA nativa da ZapData neste bloco.",identifyModelsIntro:"Como identificar quais modelos sua API key tem acesso:",modelOutsideCatalog:"{{model}} (modelo salvo, fora do catálogo atual)",modelUnavailableWarning:"Se o modelo selecionado não estiver disponÃvel na sua API key, a execução falhará.",responseFieldLabel:"Campo para salvar a resposta da IA",responseAlsoSavedNote:{before:"A resposta será sempre salva também em",after:"."},autoSendResponse:"Enviar resposta automaticamente",autoSendResponseNote:"Envia a resposta da IA como mensagem para o lead automaticamente",promptBehaviorLabel:"Prompt de IA / Comportamento *",promptBehaviorPlaceholder:`Você é um assistente útil. 498Sempre responda em português do Brasil. 499Seja claro e objetivo.`,promptVariablesNote:{before:"Aceita variáveis como",after:"ou qualquer variável â são resolvidas para o valor real antes de ir para a IA."},conversationTone:"Tom da conversa",toneInformal:"Informal (descontraÃdo)",toneFormal:"Formal (profissional)",useEmojisInResponses:"Usar emojis nas respostas",useEmojisNote:"A IA poderá usar emojis para deixar as respostas mais expressivas",mediaCapabilities:"Capacidades de mÃdia",understandAudio:"Entender áudio",audioUnsupportedTooltip:"{{provider}} não transcreve áudio. Selecione GPT (OpenAI) ou Gemini para usar este recurso.",unavailableWithProvider:"IndisponÃvel com o provedor {{provider}}",understandAudioNote:"Permite processar mensagens de áudio (transcrição)",understandImage:"Entender imagem",imageUnsupportedTooltip:"{{provider}} não suporta imagem (sem visão). Selecione outro provedor para usar este recurso.",understandImageNote:"Permite processar imagens (visão)",understandPdf:"Entender PDF",pdfUnsupportedTooltip:"{{provider}} não suporta PDF. Selecione outro provedor para usar este recurso.",understandPdfNote:"Permite processar documentos PDF (extração de texto)",mayConsumeMoreTokens:"Essas opções podem consumir mais tokens.",deepseekTextOnly:"DeepSeek não suporta áudio, imagem nem PDF â modelo somente texto.",keepConversationContext:"Manter contexto da conversa",keepConversationContextNote:"Mantém histórico das últimas interações para melhor contexto (máximo de 20)",contextMessageCount:"Número de mensagens no contexto",audioResponseTitle:"Resposta em Ãudio",answerWithAudioRandomly:"Responder em áudio aleatoriamente",answerWithAudioRandomlyNote:"A IA envia algumas respostas em áudio",alwaysAudioOnAudioInput:"Sempre responder áudio com áudio",alwaysAudioOnAudioInputNote:"Se o lead enviar áudio, a resposta será sempre em áudio",audioResponseChance:"Chance de resposta em áudio (%)",audioResponseChanceNote:"Probabilidade de ca
499da resposta ser enviada como áudio (quando não forçado por áudio do lead)",chooseYourVoice:"Escolha sua Voz",selectAVoice:"Selecione uma voz",noVoiceRegisteredShort:"Nenhuma voz cadastrada â clone uma no Gerador de Ãudio",customVoices:"Personalizadas",noVoiceRegistered:"Nenhuma voz cadastrada.",cloneVoiceHint:"Clone uma voz no Gerador de Ãudio para usar aqui.",expirationTime:"Tempo de Expiração",enableExpiration:"Ativar expiração",enableExpirationNote:"Após o tempo definido, a IA para e segue pela saÃda de expiração",timeInMinutes:"Tempo em minutos",maxMinutes:"Máximo: 1440 minutos (24 horas)",notifyOnError:"Notificar por push em caso de erro",notifyOnErrorNote:"Avisa você por push quando a IA falhar por credenciais inválidas ou créditos esgotados (no máximo 1 aviso a cada 30 min por integração).",debounceLabel:"Aguardar silêncio antes de responder",debounceUnitOff:"segundos (0 = desligado)",debounceNote:"Junta mensagens enviadas em sequência: só responde após esse tempo sem novas mensagens do contato.",splitMessages:"Quebrar resposta em várias mensagens",splitMessagesNote:"Em vez de um texto único, envia em partes curtas (mais humano).",splitMaxChars:"Tamanho máx. por mensagem (caracteres)",splitMaxCharsDefault:"Padrão: 350 (máx 6 partes)",knowledgeBase:"Base de Conhecimento",knowledgeBaseNote:"Crie mini-fluxos que a IA acionará automaticamente ao identificar a intenção do cliente.",noNameFallback:"Sem nome",nodeCount:"{{count}} nós",active:"Ativo",inactive:"Inativo",addMiniFlow:"Adicionar Mini-Fluxo"},transfer:{transferTo:"Transferir para",humanAgent:"Atendente Humano",department:"Departamento",transferMessage:"Mensagem de Transferência",transferMessagePlaceholder:"Transferindo para um atendente..."},webhookForm:{webhookUrl:"URL do Webhook",willBeFiredNote:"Será disparado com os dados do lead. O fluxo continua para o próximo bloco logo após o envio.",method:"Método",payloadFormat:"Formato do corpo (payload)",payloadDefault:"Padrão",payloadCustom:"Customizado",payloadRawJson:"JSON puro",payloadWrappedNote:'O JSON inclui automaticamente os dados do lead e suas variáveis dentro de "variables".',payloadCustomRootNote:"Você define cada campo do JSON na raiz. Use ponto para aninhar (ex: client.name) e [0] para listas.",payloadRawJsonNote:"Escreva o JSON exato a ser enviado, usando {{variaveis}} onde quiser.",jsonBody:"Corpo JSON",jsonBodyTip:{before:"Dica:",after:"entrega o telefone BR sem o 55 e com o 9 garantido."},jsonFields:"Campos do JSON",payloadVariables:"Variáveis no payload",dotNotationNote:{before:"Campo em dot-notation (ex:",middle:"). Use",after:"ou qualquer variável."},extraFieldsNote:{before:"Campos adicionais enviados no JSON. Use",after:"ou qualquer variável."},noExtraVariables:"Nenhuma variável extra. O payload já inclui automaticamente os dados do lead (telefone, nome, tags, instância).",fieldPlaceholder:"campo (ex: client.name)",keyPlaceholder:"chave (ex: produto)",valuePlaceholder:"valor ou {{variavel}}",typeText:"texto",typeNumber:"número",typeBool:"bool",customHeaders:"Headers customizados (opcional)",headerPlaceholder:"Header (ex: Authorization)",valuePlaceholderShort:"valor",testAndDetectVariables:"Testar e detectar variáveis da resposta",responseFlattenedNote:{before:'A resposta fica disponÃvel "achatada" como',after:"nos próximos blocos."},responseExtractors:{title:"Extrair variáveis adicionais (opcional)",helpNote:"Pega um pedaço de dentro de uma variável de texto (ex.: uma linha especÃfica de um campo com várias linhas) e transforma em variável nova.",empty:"Nenhum extrator configurado.",sourcePlaceholder:"variável de origem (ex: webhook_response.deposit_instructions.qr_payload)",saveAsPlaceholder:"nome da nova variável (ex: reference)",mode:"Modo",modeLinePrefix:"Linha com prefixo",modeRegex:"Regex avançado",prefixPlaceholder:"prefixo da linha (ex: Reference:)",patternPlaceholder:"padrão regex (ex: Reference:\\s*(.+))",flagsPlaceholder:"flags (opcional)",groupPlaceholder:"grupo",sourceHint:'Use o nome mostrado em "Testar e detectar variáveis" acima, SEM as chaves {{ }} (se colar com chaves, elas são removidas automaticamente ao sair do campo).',prefixHint:'Não faz diferença entre maiúsculas/minúsculas nem se a linha termina com ":" â "reference" já casa com uma linha "Reference: ...".'},insertVariable:"Inserir variávelâ¦"},setVariableForm:{variableName:"Nome da Variável",value:"Valor",valuePlaceholder:"Valor ou {{outra_variavel}}"},calculator:{operandA:"Operando A",operandPlaceholder:"Número ou {{variavel}}
499",operandANote:"Aceita número fixo (ex: 10) ou variável (ex: {{valor_compra}}).",operation:"Operação",opAdd:"Soma (+)",opSubtract:"Subtração (â)",opMultiply:"Multiplicação (Ã)",opDivide:"Divisão (÷)",operandB:"Operando B",decimalPlaces:"Casas decimais",saveResultIn:"Salvar resultado em",resultAvailableAs:{before:"O resultado fica disponÃvel como",after:"nos próximos blocos."}},whatsappLabelForm:{labelName:"Nome da Etiqueta",labelNamePlaceholder:"Ex: Pago, VIP, Atendido...",action:"Ação",remove:"Remover",mustExistWarning:"A etiqueta precisa já existir no WhatsApp. Se não existir, a ação será ignorada silenciosamente."},endForm:{marksFlowEnd:"Este nó marca o fim do fluxo."},randomizer:{minTwoSplits:"MÃnimo de 2 splits",description:"Divide o fluxo aleatoriamente entre os splits com base nas porcentagens.",namePlaceholder:"Nome",addSplit:"Adicionar Split",distribute:"Distribuir",total:"Total",mustBe100:"(deve ser 100%)"},pixApiForm:{intro:{before:"Gera uma cobrança PIX no seu gateway, manda a mensagem com o botão de copiar o código e",followsNow:"segue o fluxo na hora",middle:"â não espera o pagamento. Sai por",or:"ou"},outputFollowed:"Seguiu",outputError:"Erro",gateway:"Gateway",country:"PaÃs",countryBrazil:"Brasil â PIX",countryMexico:"México â SPEI",countryPeru:"Peru â PEN",countryIndia:"Ãndia â INR",countryPhilippines:"Filipinas â PHP",countryArgentina:"Argentina â Transferência",argentinaChargeNote:"Cobrança em pesos argentinos (ARS) por transferência bancária: o lead recebe uma CBU de 22 dÃgitos e transfere pelo home banking. Mesma credencial do PIX.",amountNoteArgentina:"O valor é em PESOS argentinos. O lead precisa transferir o valor exato â valores diferentes não são confirmados automaticamente.",argentinaTextNote:"no texto â sem QR Code para ler, é o texto que carrega o dado de pagar. O titular é o nome que o lead confere no home banking antes de transferir.",imageModeCustomNoteArgentina:"Sua imagem acompanha a mensagem. O lead paga copiando a CBU pelo botão.",argentinaAutoNote:'Na Argentina o ZapData envia só um nome genérico de "Consumidor Final" â o CUIT é opcional na XPag e NÃO é preenchido sozinho, porque não existe CUIT oficial de consumidor não identificado e inventar um usaria o documento de outra pessoa.',cuitOptional:"CUIT (opcional)",variableWithCuit:"Variável com o CUIT",fixedCuit:"CUIT fixo (11 dÃgitos)",mexicoChargeNote:"Cobrança em pesos por transferência SPEI: o lead recebe uma CLABE de 18 dÃgitos e transfere pelo app do banco. Mesma credencial do PIX.",brazilChargeNote:"Cobrança em reais por PIX: o lead recebe o código copia-e-cola.",peruChargeNote:"Cobrança em soles peruanos (PEN). Os métodos exibidos são os habilitados na credencial Zenith selecionada.",credential:"Credencial",noAccountConnected:"Nenhuma conta {{provider}} conectada. Sem credencial, o bloco sai pela saÃda de Erro sem cobrar nada.",connectProvider:"Conectar {{provider}}",chooseAccount:"Escolha a conta",noNickname:"(sem apelido)",defaultSuffix:"padrão",credentialMissingWarning:"A credencial que estava escolhida não existe mais nesta conta. Escolha outra â do jeito que está, o bloco vai sair pela saÃda de Erro.",capabilitiesMissing:"Esta credencial ainda não tem os métodos do Peru verificados. Até revalidar, nenhum método PE fica disponÃvel.",revalidateCredential:"Revalidar credencial",revalidateSucceeded:"Credencial revalidada. A lista de métodos do Peru foi atualizada.",revalidateFailed:"Não foi possÃvel revalidar a credencial Zenith.",emptyUsesDefault:{before:"Em branco, usa a credencial marcada como padrão desta conta em",after:"."},amountLabel:"Valor ({{currency}}) *",amountNote:"Aceita variável. Valor inválido ou zero manda o lead pela saÃda de Erro.",amountNoteMexico:"O valor é em PESOS mexicanos, e o gateway não aceita menos de MX$ 20,00.",amountNoteKairos:"A Kairos cobra a partir de R$ 0,01.",amountNotePeru:"O valor é em soles peruanos (PEN).",amountNotePhilippines:"O valor é em pesos filipinos (PHP). O gateway aceita de â± 300,00 a â
499± 50.000,00.",requiredToSave:"Obrigatório para salvar o fluxo",messageLabel:"Mensagem *",useInText:"Use",and:"e",mexicoTextNote:"no texto â sem QR Code para ler, é o texto que carrega o dado de pagar.",brazilTextNote:"para inserir o código no texto.",sendCopyButtonLabel:"Enviar botão de copiar",sendCopyButtonHint:"Desligue para montar a mensagem só com texto e variáveis.",sendPayButtonLabel:"Enviar botão de pagar",sendPayButtonHint:"O botão abre o checkout. Se desligar, inclua a variável de link da cobrança no texto.",buttonTextLabel:"Texto do botão *",buttonMaxChars:"Máximo 20 caracteres (limite do WhatsApp).",bankButtonsTitle:"Botões da transferência",bankButtonsHint:"Adicione de 1 a 3 botões de copiar ou abrir link.",addBankButton:"Adicionar",bankButtonNumber:"Botão {{number}}",bankButtonLabel:"Rótulo (1 a 20 caracteres)",bankButtonCopy:"Copiar",bankButtonUrl:"Abrir link",bankButtonPlaceholders:"No valor, você pode usar",bankPlaceholders:"Texto livre. Placeholders disponÃveis:",cashDynamicNote:"O código, o nome do serviço e os pontos de pagamento vêm dinamicamente da Zenith; não há lista fixa no editor.",peruQrOnlyNote:"Yape e Plin enviam somente a imagem do QR. Não há código nem botão de copiar.",peruCheckoutTextNote:"no texto â é o link do checkout. O botão já abre essa página; a variável serve se você quiser o link em outro lugar.",indiaTextNote:"no texto â é o link do checkout UPI. O botão já abre essa página; a variável serve se você quiser o link em outro lugar.",indiaChargeNote:"Cobrança em rúpias (INR) por UPI: o lead recebe um botão que abre o checkout seguro da Zenith.",philippinesTextNote:"no texto â é o link do checkout GCash/Maya. O botão já abre essa página; a variável serve se você quiser o link em outro lugar.",philippinesChargeNote:"Cobrança em pesos filipinos (PHP) por GCash ou Maya: o lead recebe um botão que abre o checkout seguro da Zenith.",phPhoneLabel:"Celular filipino *",phPhoneNote:{before:"Já vem com",after:", o número do lead. Se não for um celular filipino (10 dÃgitos começando em 9), o motor gera um número PH estável só para criar o checkout â o pagador informa o celular real na GCash/Maya."},messageImage:"Imagem da mensagem",imageModeQrColombia:"QR Code do Bre-B (gerado automaticamente)",imageModeQrNoteColombia:"O QR Code é gerado a partir do código Bre-B desta cobrança, com o valor já embutido.",imageModeCustomNoteColombia:"Sua imagem entra no lugar do QR Code. Sem o QR, o lead paga pelo botão de copiar ou pela llave â e pela llave ele digita o valor à mão.",colombiaAutoNote:"Na Colômbia a XPag preenche os dados do pagador sozinha, no formato que o provedor local valida. O ZapData não envia nome, documento nem e-mail â só o valor e o telefone.",varLlave:"a llave da cobrança (endereço Bre-B)",varPayLink:"o link de pagamento",varMethodName:"nome do método (Bre-B / Nequi)",imageModeQr:"QR Code do PIX (gerado automaticamente)",imageModeCustom:"Imagem personalizada",imageModeNone:"Sem imagem (só texto e botão)",imageModeQrNote:"O QR Code é gerado a partir do código PIX desta cobrança. O botão de copiar vai junto.",imageModeCustomNoteMexico:"Sua imagem acompanha a mensagem. O lead paga copiando a CLABE pelo botão.",imageModeCustomNoteBrazil:"Sua imagem entra no lugar do QR Code. O lead paga pelo botão de copiar â o código PIX não vira QR nenhum aqui.",imageMode
499NoneNote:"Só a mensagem e o botão de copiar.",imageModeQrOnlyPeru:"QR Code obrigatório. Este método não envia código nem botão de copiar.",imageModeVoucherOnlyPeru:"Voucher obrigatório como imagem, com o código retornado pela Zenith.",imageModeCustomNotePeru:"Sua imagem acompanha a mensagem. O lead paga pelo botão que abre o checkout.",imageModeCustomNoteIndia:"Sua imagem acompanha a mensagem. O lead paga pelo botão que abre o checkout UPI.",imageModeCustomNotePhilippines:"Sua imagem acompanha a mensagem. O lead paga pelo botão que abre o checkout GCash ou Maya.",imageModeNoneNoteCheckout:"Só a mensagem e o botão que abre o checkout.",customImageLabel:"Imagem personalizada *",customImageNote:"Aceita upload, URL pública ou variável. Sem imagem, o bloco manda só o texto e o botão â a cobrança não é perdida.",payerData:"Dados do pagador",kairosPayerIntro:{before:"A Kairos exige nome, e-mail, telefone e documento em toda cobrança. Nome e e-mail já vêm sugeridos a partir do lead; o",cpfYouInform:"CPF é você quem informa",after:"â o ZapData não inventa um, porque um CPF válido pertence a alguém de verdade."},nameRequired:"Nome *",kairosNameNote:'Aceita variável. Nome com menos de 3 caracteres vira "Cliente" (a Kairos recusa).',cpfRequired:"CPF *",kairosCpfNote:"Vai exatamente como você digitar. A Kairos aceita o mesmo CPF em várias cobranças.",emailRequired:"E-mail *",emailOptional:"E-mail (opcional)",kairosEmailNote:"Aceita variável. A sugestão usa o telefone do lead, que sempre existe.",kairosPayerErrorNote:{before:"Do jeito que está,",every:"toda",after:"cobrança sai pela saÃda Erro sem nem chegar no gateway."},autoFillPayerData:"Preencher dados do pagador automaticamente",autoFillPayerDataNote:"Ligado, você só precisa informar o valor.",xpagAutoNote:{before:"A XPag pede nome e documento em toda cobrança. O ZapData manda o nome do contato e",theA:"o",theCpfOf:"o CPF de"},genericSatRfc:"RFC genérico do SAT",publicoEnGeneral:'"público en general"',unidentifiedConsumer:"consumidor não identificado",noOtherPersonData:"Nenhum dado de outra pessoa é usado.",varFallbackNote:"No campo de cima vai a variável com o dado do lead; no de baixo, o valor fixo usado quando ela estiver vazia.",nameLabel:"Nome",variableOptional:"Variável (opcional)",defaultName:"Nome padrão",rfcCurpRequired:"RFC/CURP *",variableWithRfcCurp:"Variável com o RFC/CURP",fixedRfcCurp:"RFC/CURP fixo (10 a 18 caracteres)",variableWithCpf:"Variável com o CPF",fixedCpf:"CPF fixo (11 dÃgitos)",xpagNoEmailPhoneNote:"A XPag não pede e-mail nem telefone do pagador â por isso esses campos não aparecem aqui.",zuckAutoNote:{before:"A ZuckPay exige nome, documento, e-mail e telefone em toda cobrança. O ZapData manda o nome do contato, o telefone do lead, um e-mail derivado do telefone",and:"e",theA:"o",officialDocMexico:"o documento oficial de quem não se identifica no México",theCpfOf:"o CPF de"},zuckManualNote:{before:"No campo de cima vai a variável com o dado do lead; no de baixo, o valor fixo usado quando ela estiver vazia. Atenção: um lead de WhatsApp",doesNotBring:"não traz {{doc}} nem e-mail",after:"â desligando o automático, você precisa coletar os dois antes, no fluxo."},variableWithEmail:"Variável com o e-mail",zuckPayerErrorNote:{before:"Do jeito que está,",every:"toda",after:"cobrança vai sair pela saÃda Erro sem nem chegar no gateway â ligue o preenchimento automático acima, ou preencha os dois."},rfcAlphanumericNote:"RFC e CURP são ALFANUMÃRICOS (ex.: PEPJ800101HDFRRL09) â vão do jeito que você digitar, sem filtrar dÃgitos.",zuckCpfOnlyNote:"A ZuckPay só aceita CPF de 11 dÃgitos; CNPJ é recusado.",generatedVariables:"Variáveis geradas",varClabe:"a CLABE de 18 dÃgitos",varCbu:"a CBU de 22 dÃgitos para transferir",varAccountHolder:"o titular da conta de destino",varBankName:"o banco do destinatário",varValuePesos:"valor cobrado, em pesos",varReference:"referência interna do adquirente",varNetValue:"valor lÃquido",varTransactionId:"id da cobrança no gateway",varErrorReason:"motivo, quando sai pelo Erro",varPixCode:"o código PIX",varCheckoutUrl:"o link do checkout seguro",varValueRupees:"valor cobrado, em rúpias",varValuePhp:"valor cobrado, em pesos filipinos",varValueSoles:"valor cobrado, em soles",varValueCharged:"valor cobrado",varStatus:"pendente / pago / expirado",chargeAgainNote:{before:"Para cobrar de novo mais adiante no funil, use um",newBlock:"novo",after:"bloco API de Pagamentos â não ligue a seta de volta
499neste mesmo bloco."},openValueToggle:{label:"CLABE sem valor",description:"O lead transfere o valor que quiser via SPEI, em vez de um valor fixo definido aqui."},openValueInfo:{before:"Sem valor fixo: o lead paga o que quiser na CLABE. Depois do pagamento, use",after:"pra saber quanto caiu.",warning:"â ï¸ Confirma pagamento pelo aviso da XPag, sem reconsultar a API deles depois â segurança menor que o resto do bloco."},countryColombia:"Colômbia",colombiaChargeNote:"A cobrança é gerada em pesos colombianos (COP).",copMethod:"Meio de pagamento",copMethodBreb:"Bre-B (QR Code)",copMethodPse:"PSE (débito online)",copMethodNequi:"Nequi (carteira digital)",copBrebNote:"O lead recebe a imagem do QR e paga lendo pelo app do banco. Sem botão â os bancos colombianos não têm copia e cola.",copPseNote:"O lead recebe um botão que abre a página de pagamento no navegador.",amountNoteColombia:"MÃnimo de COP$ 10.000. O lead precisa pagar o valor exato.",colombiaTextNote:"no texto. A llave é o endereço da cobrança (o pagador pode digitá-la no app do banco), mas aà ele informa o valor à mão â só o QR leva o valor travado.",imageModeQrOnly:"QR Code do Bre-B (obrigatório) â é a única forma de pagar na Colômbia.",payMethod:{pix:"PIX (QR Code e copia e cola)",spei:"SPEI (transferência bancária)",mx_oxxo:"OXXO (pagar em dinheiro na loja)",mx_codi:"CoDi (QR Code do banco)",cop_breb:"Bre-B (QR Code)",cop_breb_llave:"Bre-B (link de pagamento)",cop_pse:"PSE (débito em conta)",cop_nequi:"Nequi (carteira digital)",pe_yape:"Yape (checkout)",pe_plin:"Plin (checkout)",pe_cash:"Pago en efectivo (checkout)",pe_bank_transfer:"Transferência bancária",in_upi:"UPI (checkout)",ph_gcash:"GCash (checkout)",ph_maya:"Maya (checkout)"},payMethodNote:{pix:"O lead paga pelo app do banco, lendo o QR ou colando o código.",spei:"O lead recebe uma CLABE de 18 dÃgitos e transfere pelo app do banco.",mx_oxxo:"O lead recebe uma referência e paga EM DINHEIRO no balcão de qualquer loja OXXO. O voucher vale dias, então a confirmação não é na hora.",mx_codi:"O lead lê o QR Code com o app do banco dele. à instantâneo, e por isso a validade padrão é curta (1 hora).",cop_breb:"O lead recebe a imagem do QR e paga lendo pelo app do banco.",cop_breb_llave:"O lead recebe um link e conclui o pagamento na página da Zenith.",cop_pse:"O lead recebe um botão que abre a página de pagamento no navegador.",cop_nequi:"O lead recebe um link e conclui o pagamento na página da Zenith.",cop_nequi_push:"A cobrança chega no app Nequi do lead (push) e é paga por lá mesmo. A Zenith não devolve link nenhum, então este bloco não manda botão â o lead nunca sai do WhatsApp.",pe_yape:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar com Yape.",pe_plin:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar com Plin.",pe_cash:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar em dinheiro.",pe_bank_transfer:"O lead recebe um botão que abre o checkout seguro da Zenith para a transferência.",in_upi:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar com UPI.",ph_gcash:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar com GCash.",ph_maya:"O lead recebe um botão que abre o checkout seguro da Zenith para pagar com Maya."},imageModeVoucher:"Código de barras do voucher (gerado automaticamente)",imageModeVoucherNote:"Geramos o código de barras a partir da referência desta cobrança. O número vai impresso embaixo â se o leitor do caixa não pegar, o atendente digita.",varOxxoReference:"a referência que o lead mostra no caixa",varDueDate:"até quando acompanhamos o pagamento",varVoucherUrl:"link da imagem do voucher (para blocos SEGUINTES, não para o texto deste)",varCodiCode:"o código CoDi copiável",varQrUrl:"link da imagem do QR (para blocos SEGUINTES, não para o texto deste)",zenithAutoNote:"Preenchemos o pagador com o nome do contato no WhatsApp e um e-mail de consumidor (gmail/hotmail) com token único â o formato que a própria Zenith pediu. A Zenith só aceita letras, espaços, apóstrofo e hÃfen no nome (emoji, número e pontuação são retirados) e exige nome E sobrenome: quando o contato não tem os dois (só número, emoji, apelido ou primeiro nome solto), sorteamos um nome real e estável para aquele lead, e o e-mail sai do mesmo nome. Nestes paÃses a Zenith
499não pede documento nenhum.",zenithManualNameNote:"A Zenith exige nome E sobrenome, só com letras, espaços, apóstrofo ou hÃfen â ela recusa a cobrança se faltar. Se o que chegar aqui não servir, mandamos um nome sorteado, real e estável para aquele lead, para a cobrança nascer mesmo assim.",zenithNoDocumentNote:"Nestes paÃses a Zenith não pede CPF, RFC nem CURP â só nome e e-mail.",zenithPixPayerIntro:{before:"O PIX da Zenith só nasce com nome e CPF reais do cliente. O bloco não preenche nada sozinho e",neverInvent:"não inventa CPF",after:"â um número válido pertence a alguém de verdade. Colete esses dados no fluxo (variáveis) antes desta cobrança."},zenithPixNameNote:"Aceita variável. A Zenith exige nome E sobrenome, só com letras. Se o valor resolvido não servir, a cobrança sai por Erro â não sorteamos nome.",zenithPixCpfNote:"Aceita variável com o CPF do cliente. Sem CPF válido a cobrança nem chega no gateway. A Zenith não aceita o mesmo CPF em duas cobranças abertas: se o cliente voltar com o mesmo valor, reenviamos o PIX que já existe â não inventamos outro CPF.",zenithPixEmailNote:"Opcional. Deixando vazio, montamos o e-mail a partir do nome do cliente ([email protected]) â o mesmo formato que o México, a Colômbia e o Peru da Zenith já usam. O código no fim evita que o recibo da cobrança caia na caixa de outra pessoa com o mesmo nome. Se você preencher, mandamos o seu, sem alterar nada.",oxxoTextNote:"no texto â o lead precisa dos dois no caixa do OXXO.",codiTextNote:"no texto. O QR vai como imagem, sempre.",colombiaLinkTextNote:"no texto â é o link da cobrança. O botão já leva pra lá também; a variável serve para quem quiser oferecer o link de outro jeito.",leavesWhatsappWarning:"Este método tira o lead do WhatsApp: no PSE, sempre (ele vai para a página do banco); no Nequi, só quando o botão de recuperação é usado (a cobrança já chega direto no app pelo push).",nequiPhoneLabel:"Celular Nequi *",nequiPhoneNote:{before:"Já vem com",after:", o número do lead no WhatsApp â é para lá que a cobrança Nequi vai. Troque por outra variável ou por um número fixo se o Nequi do lead estiver em outro número. Não pode ficar vazio: sem celular colombiano (10 dÃgitos começando em 3) a cobrança nem chega a ser criada."},colombiaNoLinkTextNote:"no texto. Este trilho não tem link nem botão: a cobrança chega no app do lead pelo push, e o que a mensagem faz é dizer a ele que abra o app."},sendPixKeyForm:{intro:"Envia um botão nativo do WhatsApp com sua chave PIX para pagamento.",pixKeyType:"Tipo da Chave PIX",phone:"Telefone",email:"E-mail",randomKey:"Chave Aleatória (EVP)",pixKey:"Chave PIX",pixKeyPlaceholder:"Sua chave PIX...",recipientName:"Nome do Recebedor",recipientNamePlaceholder:"Nome exibido para o cliente",recipientNameNote:"Nome que aparecerá para o cliente no momento do pagamento"},sendChargeForm:{intro:'Envia uma cobrança nativa do WhatsApp com botão "Revisar e pagar".',amountLabel:"Valor (R$) *",amountPlaceholder:"Ex: 25,00 ou {{valor}}",amountNote:{before:"Aceita número (ex:",middle:"/",after:") ou variável (ex: {{valor}}). O sistema extrai o número automaticamente."},insertVariablePlaceholder:"+ Inserir variável no valor...",itemNameLabel:"Nome do Item/Produto *",itemNamePlaceholder:"Ex: Sapatinho de Croche",descriptionLabel:"Descrição (opcional)",descriptionPlaceholder:"Descrição da cobrança...",pixReceivingData:"Dados PIX para Recebimento *",pixKeyRequired:"Chave PIX *",recipientNameRequired:"Nome do Recebedor *"},call:{intro:"Dispara uma ligação no WhatsApp do lead. O telefone dele toca de verdade e ele pode atender ou recusar â mas a chamada é MUDA: nenhum dos dois lados ouve nada. Serve só para chamar a atenção.",durationLabel:"Duração da chamada (segundos)",durationNote:"Entre 3 e 60 segundos. Esse tempo é enviado à API, mas nem toda versão dela respeita â se for ignorado, a chamada toca até o lead atender ou recusar.",noteLabel:"Nota:",uazapiOnlyNote:"Funciona apenas com instâncias UazAPI. Use com moderação para evitar bloqueios."},interactiveBlockForm:{typeButtonDescription:"Cria botões clicáveis para ações rápidas.",typeImageButtonDescription:"Envia uma imagem com botões interativos.",typeListDescription:"Cria um menu de lista com seções organizadas.",buttonTextPlaceholder:"Texto do Botão",menuTextPlaceholder:"Texto do Menu",optionPlaceholder:"Opção",interactionType:"Tipo de Interação",typeButtonMessage:"Mensagem com Botões",typeImageWithButtons:"Imagem com Botões",typeListMenu:"Menu Lista",mainTextRequired:"Texto Principal *",mainTextPlaceholder:"Digite a mensagem que acompanha a interação...",charsCount:"{{count}}/{{max}} caracteres",footerTextOptional:"Texto do Rodapé (opcional)",footerTextPlaceholder:"Rodapé da mensagem",imageRequired:"Imagem *",listButtonTextRequired:"Texto do Botão da Lista *",viewOptions:"Ver opções",optionsRequired:"Opções *",maxOptionsWarning:"Máximo de {{max}} opções para {{type}}.",typeButtons:"Botões",buttonTypeReply:"Resposta",buttonTypeCopy:"Copiar",copyValuePlaceholder:"Valor a copiar (ex: código pix, cupom)",clickAddToCreateOptions:'Clique em "Adicionar" para criar opções',aiCapture:"Captura com IA",aiCaptureNote:"Quando ativo, se o usuário envi
499ar texto ao invés de clicar no botão, a IA tentará identificar qual opção corresponde à mensagem. Se não encontrar correspondência, continua aguardando até o timeout ou clique no botão.",aiCaptureApiKey:"Chave da API (captura por IA)",aiCaptureKeyRequiredHelp:"Sem chave configurada, a captura com IA fica inativa (segue direto pra resposta padrão/timeout).",aiCaptureKeyDisconnectedHelp:"Nenhuma chave conectada na Integração de IA de Plataforma. Sem ela, a captura com IA fica inativa (segue direto pra resposta padrão/timeout).",captureDifferentResponse:"Capturar resposta diferente dos botões",captureDifferentResponseNote:"Habilita uma saÃda separada caso o usuário responda algo que não seja uma das opções de botão.",timeoutOptional:"Tempo limite (opcional)",timeoutNote:'Quando ativado, após este tempo o fluxo seguirá pela saÃda "Timeout". Se desativado, o bloco aguarda indefinidamente até o lead clicar em um botão.',maxWaitTime:"Tempo máximo de espera",noteLabel:"Nota:",mobileOnlyNote:"Podem não aparecer corretamente no WhatsApp Web, apenas no dispositivo mobile."},notifyAdminForm:{notificationTypeRequired:"Tipo de Notificação *",selectTypePlaceholder:"Selecione o tipo...",typeWhatsapp:"WhatsApp (Número)",typePush:"Notificação Push",targetNumberRequired:"Número de Destino *",targetNumberNote:"Número com DDI + DDD (ex: 5511999999999)",messageRequired:"Mensagem *",adminMessagePlaceholder:"Escreva a mensagem para o admin...",availableVariables:"Variáveis disponÃveis",webhookVariablesAvailableNote:"As variáveis do webhook deste usuário já estão disponÃveis neste bloco.",importantLabel:"Importante:",instanceMustBeInGroupNote:"A instância que executa o fluxo deve estar dentro do grupo para conseguir enviar mensagens.",groupInviteLinkRequired:"Link de Convite do Grupo *",groupInviteLinkNote:"Cole o link de convite do grupo WhatsApp",groupFound:"Grupo encontrado",noNameFallback:"Sem nome",groupIdAutoResolveNote:"O ID do grupo será resolvido automaticamente na execução do fluxo.",groupMessagePlaceholder:"Escreva a mensagem para o grupo...",pushTitleRequired:"TÃtulo da Notificação *",pushTitlePlaceholder:"TÃtulo da notificação push...",pushBodyRequired:"Texto da Notificação *",pushBodyPlaceholder:"Texto da notificação push...",noteLabel:"Nota:",pushNote:"A notificação push será enviada para o usuário atual (dono da instância).",selectTypeToConfigure:"Selecione o tipo de notificação para configurar"},goToFlowForm:{targetFlowRequired:"Fluxo de Destino *",selectFlowPlaceholder:"Selecione um fluxo...",noFlowAvailable:"Nenhum fluxo disponÃvel",targetFlowNote:"Quando o fluxo chegar neste bloco, ele será finalizado e o fluxo de destino será iniciado para o mesmo contato.",transferVariables:"Transferir variáveis",transferVariablesNote:"Copiar as variáveis atuais para o novo fluxo",noteLabel:"Nota:",noOutputNote:"Este bloco não possui saÃda. O contato continuará recebendo mensagens do fluxo de destino automaticamente."},stickerForm:{sendSticker:"Enviar Figurinha",uploadError:"Erro ao enviar figurinha: {{message}}",uploaded:"Figurinha enviada!",acceptedFormats:"Formatos aceitos: .webp, .png, .jpg, .gif",previewAlt:"Prévia"},contactForm:{fullNameRequired:"Nome Completo *",fullNamePlaceholder:"João da Silva",phoneRequired:"Telefone *",insertVariablePlaceholder:"+ Inserir variável...",instanceChipLabel:"Instância (Chip)",instanceNumberHint:"Número do chip que está enviando o fluxo",phoneNote:"Número completo com código do paÃs (ex: 5511999999999). Use a variável acima para o próprio número do chip, ou digite um número fixo."},carouselForm:{cardsReordered:"Cartões reordenados â revise as conexões dos botões no canvas.",bodyText:"Texto do Corpo",bodyTextPlaceholder:"Texto principal do carrossel...",cardsCount:"Cartões ({{count}}/10)",card:"Cartão",cardNumber:"Cartão {{number}}",cardImage:"Imagem do Cartão",imageUploadError:"Erro ao enviar imagem: {{message}}",imageUploaded:"Imagem enviada!",cardText:"Texto do cartão",cardTextPlaceholder:"Descrição...",buttonsCount:"Botões ({{count}}/3)",buttonTextPlaceholder:"Texto do botão",addAtLeastTwoCards:"Adicione pelo menos 2 cartões ao carrossel.",aiCaptureNote:"Quando ativo, se o usuário envi
499ar texto ao invés de clicar num botão do carrossel, a IA tentará identificar qual botão corresponde à mensagem. Se não encontrar, continua aguardando até clique em algum botão ou timeout.",timeoutNote:'Quando ativado, após este tempo o fluxo seguirá pela saÃda "Timeout". Se desativado, o carrossel aguarda indefinidamente até clique em um botão.',componentOutputs:"SaÃdas do componente:",cardButtonsOutput:"Botões dos cartões",timeoutOutput:"Timeout (após {{value}} {{unit}})"},passageTrackerForm:{identifierNameRequired:"Nome do Identificador *",identifierNamePlaceholder:"Ex: InÃcio do Funil",identifierNameNote:"Dê um nome descritivo para identificar este ponto de passagem nas métricas."},iaGeneratorForm:{keyLooksLikeKie:"Essa chave parece ser da KIE.AI (32 chars hex). Confirme que você colou a chave da Freepik.",keyLooksLikeFreepik:"Essa chave parece ser da Freepik. Confirme que você colou a chave da KIE.AI.",tokenLooksLikeFreepik:"Esse token parece ser da Freepik. Confirme que você gerou o token de webhook no painel da KIE.AI.",provider:"Provedor",mediaType:"Tipo de mÃdia",mediaTypeImage:"Imagem",mediaTypeMusic:"Música",mediaTypeVideo:"VÃdeo",saveMediaAsVariable:"Salvar mÃdia gerada como variável",duplicatedVariableWarning:'Outro bloco "Gerador de IA" já usa este nome â escolha um diferente para que cada mÃdia fique em sua própria variável.',saveMediaAsVariableNote:"Esta variável poderá ser reutilizada nos blocos de Imagem / VÃdeo / Ãudio (deste fluxo ou de outros) para o mesmo contato. A mÃdia é isolada por usuário e por lead.",freepikKey:"Chave Freepik",kieKey:"Chave KIE.AI",keyStoredPerBlock:"A chave é armazenada por bloco. Obtenha em",hmacTokenLabel:"Token Validador (HMAC)",pasteFreepikTokenPlaceholder:"Cole aqui o token de webhook da Freepik",pasteKieTokenPlaceholder:"Cole aqui o token de webhook da KIE.AI",tokenRequiredWarning:"Obrigatório â sem o token o callback do provedor é rejeitado.",tokenNote:{before:"Obrigatório. Gere o token de webhook no painel da",after:"e cole aqui â usamos pra validar que o callback veio mesmo do provedor."},imageModelLabel:"Modelo de Imagem",aspectRatio:"Proporção",resolution:"Resolução",sunoModel:"Modelo Suno",musicStyle:"Estilo musical",musicStylePlaceholder:"Ex.: Pop alegre, Sertanejo, Lo-fi",musicDescription:"Descrição da música",musicDescriptionPlaceholder:"Ex.: Música romântica para minha esposa Maria, falando sobre o nosso primeiro encontro",musicDescriptionNote:"Tema/base da música â a IA usará isso como inspiração para criar a letra. Não escreva a letra aqui.",autoLyrics:"Deixar a IA criar a letra automaticamente",lyrics:"Letra (será cantada exatamente como escrita)",lyricsPlaceholder:"Escreva a letra completa da música aqui...",titleOptional:"TÃtulo (opcional)",titleNote:"Máx. 80 caracteres. Se vazio, será gerado a partir da descrição/estilo.",vocalGender:"Gênero da voz",vocalGenderNote:'Aumenta a probabilidade do gênero escolhido (não garante 100%). Ignorado se "Instrumental" estiver ativo.',negativeTags:"Tags negativas (opcional)",negativeTagsPlaceholder:"Ex.: Heavy Metal, bateria agitada",negativeTagsNote:"Estilos a evitar na geração.",instrumental:"Instrumental (sem voz)",modelLabel:"Modelo",durationSeconds:"Duração (segundos)",maxSeconds:"Máximo: {{seconds}}s.",generationMode:"Modo de geração",standardMode:"Standard (mais rápido / barato)",proMode:"Pro (resolução maior)",nativeAudio:"Ãudio nativo",nativeAudioNote:"Gera trilha + diálogos sincronizados. Aumenta o custo em créditos.",pixverse1080pNote:"1080p disponÃvel apenas com duração de 5s.",styleOptional:"Estilo (opcional)",noneRealistic:"Nenhum (realista)",styleNote:'Aplica um estilo visual ao vÃdeo gerado. Deixe em "Nenhum" para resultado realista padrão.',requiresReferenceImageNote:'Este modelo exige imagem de referência. Habilite "Usar imagem de referência" abaixo.',promptRequired:"Prompt *",promptPlaceholder:"Descreva o que deseja gerar...",musicPromptRequired:"Prompt da música *",musicTitlePlaceholder:"Ex.: Madrugada de Verão",musicPromptFreepikPlaceholder:"Ex.: Lo-fi chill com piano e bateria suave",mustBeLoggedIn:"Você precisa estar logado",imageLimitReached:"Limite de {{max}} imagens atingido para este modelo",unsupportedFormat:"Formato não suportado: {{name}}. Use PNG/JPG/WebP.",fileExceeds8mb:'Arquivo "{{name}}" excede 8MB',uploadingFile:"Enviando {{name}}...",uploadFailed:"Falha ao enviar {{name}}: {{message}}",fileUploaded:"{{name}}
499 enviada",noPublicUrl:"Sem URL pública para {{name}}",useReferenceImage:"Usar imagem de referência",useReferenceImageNote:"Habilita o modo {{mode}}. Este modelo aceita até {{max}} image{{plural}} (do lead e/ou suas).",imagesUsedCount:"{{used}} de {{max}} {{imageWord}} ({{leadCount}} do lead + {{ownCount}} {{ownWord}})",pixverseTransitionNote:"Pixverse Transition exige exatamente 2",leadImageVariables:"Variáveis de imagem do lead",noImageVariableAvailable:"Nenhuma variável de imagem disponÃvel.",selectVariablePlaceholder:"Selecione a variável...",removeAction:"Remover",myReferenceImages:"Minhas imagens de referência",leadVariable:"Variável do lead",uploadFromComputer:"Enviar do meu computador",noLeadVariableNote:{before:"Para usar variáveis do lead, adicione antes um bloco",middle:'com "Salvar imagem enviada pelo lead" habilitada, ou outro',after:'(tipo Imagem) com "Salva mÃdia em" preenchido.'},waitInputBlock:'"Aguardar resposta"',iaGeneratorBlock:'"Gerador IA"',errorVariable:"Variável de erro",errorVariableNote:"Recebe a mensagem de erro.",sendAsViewOnce:"Enviar como visualização única",sendAsViewOnceNote:"A mÃdia desaparece após o lead visualizá-la (apenas imagem e vÃdeo no WhatsApp).",blockOutputs:"SaÃdas do bloco:",outputSuccess:"Sucesso",outputSuccessNote:"mÃdia gerada e enviada ao lead",outputError:"Erro",outputErrorNote:"qualquer falha",image:"imagem",images:"imagens",yourSingular:"sua",yourPlural:"suas"},dialog:{editComponent:"Editar componente",mentionAllGroup:"Marcar todos do grupo (@all)",mentionAllGroupNote:"Quando ativo, esta mensagem mencionará todos os participantes do grupo.",miniFlowSaved:"Mini-fluxo salvo com sucesso!"},pixelDialog:{title:"Cadastrar Pixel do Facebook",nameOptional:"Nome (opcional)",namePlaceholder:"Ex: Pixel Principal",pixelIdRequired:"ID do Pixel",pageId:"Page ID",accessTokenRequired:"Token de Acesso",accessTokenPlaceholder:"Token de acesso do Facebook",savePixel:"Salvar Pixel",pixelRegistered:"Pixel cadastrado!",registerError:"Erro ao cadastrar pixel: {{message}}"},condition:{outputNote:'O fluxo seguirá pela saÃda "Sim" se as condições forem verdadeiras, ou "Não" caso contrário.'}},nD={configureUrlFirst:"Configure a URL do webhook primeiro",testFailed:"Falha ao testar",variablesSaved:"{{count}} variáveis salvas para usar nos próximos blocos.",testWebhook:"Testar webhook",statusLabel:"Status {{status}}",variablesDetected:"Variáveis detectadas ({{count}}):",saveDetectedVariables:"Salvar variáveis detectadas",savedVariablesNote:"{{count}} variáveis salvas â use como",inNextBlocks:"nos próximos blocos.",extractedVariables:"Variáveis extraÃdas:",someExtractorsDidNotMatch:"Algum extrator configurado não encontrou correspondência na resposta de teste.",usingRealSample:'Testando com os dados do último evento recebido em "{{source}}".',missingVariables:"{{count}} variável(is) não existe(m) e vão sair em branco:",resolvedByPrefix:"Corrigido automaticamente â o nome real tem o prefixo webhook_:",sentBody:"Corpo enviado:",receivedResponse:"Resposta recebida:"},rD={eventReceived:"Evento recebido!",listeningCancelled:"Escuta cancelada",saveFlowFirst:"Salve o fluxo antes de testar o webhook",startError:"Não foi possÃvel iniciar a escuta: {{message}}",noEventReceived:"Nenhum evento recebido em 1 minuto",listenTooltip:"Escutar próximo evento por 1 minuto",startingListen:"Iniciando escuta...",listenTestEvent:"Escutar evento de teste",listening:"Escutando... {{mm}}:{{ss}}",stopListening:"Parar de escutar",viewReceivedParams:"Ver parâmetros recebidos",listenAgain:"Escutar novamente",receivedParamsTitle:"Parâmetros recebidos no webhook",receivedAt:"Recebido em {{date}}",copyJson:"Copiar JSON",headers:"Headers",useFieldNamesNote:"Use estes nomes de campo como variáveis no fluxo:",generatedVariables:"Variáveis geradas ({{count}})",copyAllNames:"Copiar nomes",clickToCopy:"Clique para copiar"},iD={loadError:"Não foi possÃvel carregar os emojis",loadingEmojis:"Carregando emojis...",insertEmoji:"Inserir emoji"},sD={defaultRequiredHelp:"Obrigatório. Sem a sua chave de API, este bloco não responde.",defaultDisconnectedHelp:"Nenhuma chave conectada na Integração de IA de Plataforma. Sem ela, este bloco não responde.",myKey:"Minha chave",integrationKey:"Chave da Integração",loadingIntegrationStatus:"Carregando status da integraçãoâ¦",usingKey:"Usando {{keyName}} ({{provider}}).",yourKey:"sua chave",manage:"Gerenciar",noNickname:"(sem apelido)",defaultSuffix:"(padrão)",connectNow:"Conectar agora"},lD={currencies:{BRL:"Real Brasileiro (BRL)",USD:"Dólar Americano (USD)",EUR:"Euro (EUR)",GBP:"Libra Esterlina (GBP)",ARS:"Peso Argentino (ARS)",MXN:"Peso Mexicano (MXN)",COP:"Peso Colombiano (COP)",CLP:"Peso Chileno (CLP)",PEN:"Sol Peruano (PEN)",JPY:"Iene Japonês (JPY)",CAD:"Dólar Canadense (CAD)",AUD:"Dólar Australiano (AUD)",CHF:"Franco SuÃço (CHF)"},eventLabel:"Evento {{number}}",pixelLabel:"Pixel *",allPixels:"Todos os Pixels",selectPixelPlaceholder:"Selecione um pixel...",pixelFallbackName:"Pixel {{id}}",noPixelConfigured:"Nenhum pixel configurado.",registerPixel:"Cadastrar Pixel",eventTypeLabel:"Evento *",eventTypes:{purchase:"Compra (Purchase)",lead:"Lead",initiateCheckout:"Iniciar Checkout (InitiateCheckout)",addToCart:"Adicionar ao Carrinho (AddToCart)"},currencyLabel:"Moeda",currencyDefaultNote:{before:"Padrão:",brl:"BRL (Real Brasileiro)",after:". O evento será enviado à Meta com a moeda selecionada."},eventValueLabel:"Valor do Evento ({{symbol}})",eventValuePlaceholder:"Ex: 97.00 ou {{syntax}}",eventValueTitle:"Valor extraÃdo automaticamente do comprovante PIX",eventValueButton:"event_value (valor do PIX)",eventValueNote:{before:"Deixe vazio ou use",after:"para enviar o valor extraÃdo do comprovante PIX automaticamente. Moeda:"},addEvent:"Adicionar Evento",emptyState:"Adicione um ou mais eventos para serem disparados em sequência quando o fluxo passar por este bloco."},cD={categories:{messages:"Mensagens",control:"Controle",actions:"Ações"},nodeLabels:{text:"Texto",aiText:"Texto com IA",image:"Imagem",audio:"Ãudio",audioAI:"Ãudio IA",video:"VÃdeo",document:"Documento",sticker:"Figurinha",contact:"Contato",call:"Ligação",interactiveBlock:"Mensagem Interativa",carousel:"C
499arrossel",iaGenerator:"Gerador de IA",delay:"Delay",waitInput:"Aguardar Resposta",waitInputAI:"Aguardar Resposta IA",aiResponder:"IA Responder",condition:"Condição",randomizer:"Randomizador",pixel:"Pixel",passageTracker:"Contagem de Leads",tag:"Ações",sendPixKey:"Enviar Chave PIX",pixApi:"API de Pagamentos",sendCharge:"Enviar Cobrança",notifyAdmin:"Notificar Admin",goToFlow:"Conectar Fluxo",whatsappLabel:"Etiqueta WhatsApp",webhook:"Webhook",calculator:"Calculadora",xpag:"XPag",zenith:"Zenith"},components:"Componentes",comingSoon:"Em breve",removalDate:"Remoção 11/mai",deprecatedTooltip:"Bloco será removido em 11/mai. Use o gatilho de PIX detectado em vez deste bloco."},dD={blockNumberTitle:"Bloco #{{number}} â use este número ao falar com o suporte"},uD={nodeLabels:{text:"Texto",aiText:"Texto IA",image:"Imagem",audio:"Ãudio",audioAI:"Ãudio IA",video:"VÃdeo",document:"Documento",sticker:"Figurinha",contact:"Contato",interactiveBlock:"Interativa",carousel:"Carrossel",delay:"Delay",waitInput:"Aguardar",condition:"Condição",randomizer:"Random",pixel:"Pixel",tag:"Ações",sendPixKey:"PIX",zenith:"Zenith",pixApi:"API Pag.",xpag:"XPag",notifyAdmin:"Notificar",goToFlow:"Ir p/ Fluxo"},defineNameError:"Defina o nome do mini-fluxo",defineTriggerError:"Defina o gatilho/intenção do mini-fluxo",flowName:"Nome do fluxo",flowNamePlaceholder:"Ex: Objeção de preço",triggersLabel:"Gatilhos / Intenções",triggersPlaceholder:"Descreva quando a IA deve acionar este fluxo... Ex: Quando o cliente disser que não tem dinheiro, que está caro, ou pedir desconto",triggersHint:"Descreva em linguagem natural as intenções que devem acionar este fluxo.",flowActive:"Fluxo ativo",blocks:"Blocos",incompletePaymentBlock:"Bloco de pagamento incompleto: {{issues}}",saveMiniFlow:"Salvar Mini-Fluxo",configureBlock:"Configurar Bloco",dialogTitle:"Base de Conhecimento - Mini Fluxo"},mD={uploadingImage:"Enviando imagem...",uploadError:"Erro ao enviar: {{message}}",imageUploaded:"Imagem enviada!",unexpectedError:"Erro inesperado: {{message}}",tryAgainFallback:"tente novamente",upload:"Upload",base64Variable:"Base64 / Variável",imageLoaded:"Imagem carregada.",noImageSelected:"Nenhuma imagem selecionada.",urlPlaceholder:"https://exemplo.com/imagem.jpg",base64Placeholder:"data:image/png;base64,... ou {{syntax}}",previewUnavailable:"Pré-visualização indisponÃvel: valor contém variável, será resolvida no runtime.",previewAlt:"Pré-visualização"},pD={removed:"Fluxo de grupo removido",groupBadge:"GRUPO",editTooltip:"Editar fluxo de grupo",deleteTitle:"Excluir fluxo de grupo?",deleteDescription:'"{{name}}" será removido permanentemente.'},hD={speed:"Velocidade",imageNotLoaded:"ð· Imagem não carregada",defaultDocumentName:"documento.pdf",pdfTapToOpen:"PDF ⢠Toque para abrir",simulator:"Simulador",online:"online",offline:"offline",restart:"Reiniciar",flowSimulatorTitle:"Simulador de Fluxo",testFlowSubtitle:"Teste seu fluxo como se fosse um lead real",startTest:"Iniciar Teste",typing:"Digitando... {{seconds}}s",variables:"Variáveis:",messagePlaceholder:"Mensagem",waitingPlaceholder:"Aguardando...",testAgain:"Testar novamente"},fD={period:"PerÃodo:",today:"Hoje",yesterday:"Ontem",last7Days:"Ãltimos 7 dias",sessions_one:"{{count}} sessão",sessions_other:"{{count}} sessões",conversionRate:"{{rate}}% finalizaram"},gD={messageType:{text:"Texto",audio:"Ãudio",document:"Documento",media:"MÃdia (imagem, vÃdeo ou figurinha)"},deleteVariableError:"Erro ao deletar variável",variableDeleted:'Variável "{{name}}" deletada com sucesso',tagCreated:'Tag "{{name}}" criada com sucesso',variableCreated:'Variável "{{name}}" criada com sucesso',combineWith:"Combinar condições com",andOperator:"E (todas devem ser verdadeiras)",orOperator:"OU (pelo menos uma verdadeira)",variableBadge:"Variável",tagBadge:"Tag",countryBadge:"PaÃs",aiBadge:"IA",andShort:"E",orShort:"OU",variableLabel:"Variável",selectPlaceholder:"Selecione...",systemGroup:"Sistema",systemSuffix:"(sistema)",customGroup:"Personalizadas",webhookGroup:"Webhook",newVariable:"+
499Nova variável",operatorLabel:"Operador",operators:{equals:"Igual a",notEquals:"Diferente de",contains:"Contém",notContains:"Não contém",startsWith:"Começa com",endsWith:"Termina com",greater:"Maior que",less:"Menor que",exists:"Existe (não vazio)",notExists:"Não existe (vazio)"},valueLabel:"Valor",valuePlaceholder:"Valor...",valuePlaceholderTime:"Ex: 13:00",valuePlaceholderHour:"Ex: 13",variableHints:{horario:"relógio HH:MM",horaAtual:"hora 0â23",dataAtual:"data YYYY-MM-DD",timeOfDay:"dia | tarde | noite",diaDaSemana:"segunda-feira ⦠domingo"},timeOfDay:{day:"Dia (05:00â11:59)",afternoon:"Tarde (12:00â17:59)",night:"Noite (18:00â04:59)"},tagConditionLabel:"Condição da Tag",tagHas:"Contato TEM a tag",tagNotHas:"Contato NÃO TEM a tag",tagNameLabel:"Nome da Tag",selectTagPlaceholder:"Selecione uma tag...",noTagsYet:"Nenhuma tag criada ainda",newTag:"+ Nova tag",countryConditionLabel:"Condição do PaÃs",countryIs:"Telefone à deste paÃs",countryIsNot:"Telefone NÃO à deste paÃs",countryLabel:"PaÃs",selectCountryPlaceholder:"Selecione um paÃs...",countryMostUsedGroup:"Mais usados",countryOthersGroup:"Outros paÃses",countryNote:"Identifica o paÃs pelo DDI do telefone do contato. DDIs compartilhados por vários paÃses (ex.: +1 = EUA/Canadá) aparecem como uma única opção.",iaIntro:"A IA irá analisar as tags, contexto da conversa, base de conhecimento e última mensagem para decidir Sim ou Não.",iaExclusiveNote:{before:"Tipo exclusivo â este nó não pode ser combinado com variáveis ou tags. Conecte a saÃda",errorLabel:"â Erro IA",after:"para tratar falhas da IA (timeout, quota etc.)."},criteriaYes:"Critério para SIM",criteriaYesPlaceholder:"Ex: O cliente demonstrou interesse em comprar o produto",criteriaNo:"Critério para NÃO",criteriaNoPlaceholder:"Ex: O cliente não demonstrou interesse ou recusou a oferta",criteriaNote:"A IA considerará ambos os critérios, a base de conhecimento e o contexto da conversa.",aiModelLabel:"Modelo de IA (decisão SIM/NÃO)",aiModelNote:"A condição com IA usa a SUA chave (OpenAI, Gemini, Anthropic ou DeepSeek) ou a chave já conectada na Integração de IA de Plataforma â sem chave, a condição não roda.",providerLabel:"Provedor",providerPlaceholder:"Selecione o provedor (sua chave)",providerGemini:"Gemini (Google) â sua chave",providerOpenAI:"GPT (OpenAI) â sua chave",providerAnthropic:"Claude (Anthropic) â sua chave",providerDeepSeek:"DeepSeek â sua chave",apiKeyLabel:"Chave da API *",apiKeyHelp:"Chave obrigatória. Também é usada para transcrever áudio (se ativado abaixo, e se o provedor suportar).",modelLabel:"Modelo",understandAudio:"Entender áudio",audioUnsupportedNote:"IndisponÃvel para Claude (Anthropic) e DeepSeek â troque para OpenAI ou Gemini para usar este recurso.",audioSupportedNote:"Transcreve áudios antes da IA analisar. Requer provedor OpenAI ou Gemini com chave configurada acima.",audioNoKeyWarning:"Configure um provedor (OpenAI ou Gemini) com a sua chave, ou conecte a Integração de IA de Plataforma, acima para transcrever áudio neste bloco.",audioScopeLabel:"Escopo de áudios",audioScopeLast:"Apenas o último áudio",audioScopeAll:"Todos os áudios da conversa",audioScopeNote:"Define quantos áudios serão transcritos para a IA analisar.",variableNamePlaceholder:"Nome da variável",newTagPlaceholder:"Nome da tag",exclusiveIaRemoveForVariable:"Condição IA é exclusiva â remova-a para adicionar variável",addVariableButton:"+ Variável",exclusiveIaRemoveForTag:"Condição IA é exclusiva â remova-a para adicionar tag",addTagButton:"+ Tag",exclusiveIaRemoveForCountry:"Condição IA é exclusiva â remova-a para adicionar paÃs",addCountryButton:"+ PaÃs",iaAlreadyExists:"Já existe uma condição IA (máx 1)",iaExclusiveRemoveOthers:"Condição IA é exclusiva â remova variáveis/tags antes de adicionar",addIaCondition:"+ Condição IA",maxOneSuffix:"(máx 1)",exclusiveSuffix:"(exclusiva)",emptyState:"Adicione condições para verificar variáveis, tags ou o paÃs do contato â ou uma condição IA (exclusiva)."}
499,vD={title:"Contagem de Leads",noNameSet:"Sem nome definido"},bD={title:"API de Pagamentos",gatewayNotChosen:"Gateway não escolhido",imageModeQr:"QR Code",imageModeCustom:"Imagem própria",imageModeNone:"Sem imagem",sendsInstant:"Envia e segue na hora · {{imageLabel}}",defaultCredential:"Credencial padrão da conta",missing:"Falta: {{message}}",missingMore:"(+{{count}})",outputSuccess:"â Seguiu",outputError:"â Erro",titleXpag:"XPag",imageModeVoucher:"código de barras"},yD={chooseGateway:"escolha o gateway",gatewayNoMexico:"este gateway não cobra no México",enterAmount:"informe o valor",invalidAmount:'valor inválido ("{{amount}}")',belowMinimum:"valor abaixo do mÃnimo ({{symbol}} {{min}})",aboveMaximum:"valor acima do máximo ({{symbol}} {{max}})",writeMessage:"escreva a mensagem",enterButtonText:"informe o texto do botão",chooseCustomImage:"escolha a imagem personalizada",enterPayerName:"informe o nome do pagador",enterPayerCpf:"informe o CPF do pagador",invalidPayerCpf:"CPF inválido",enterPayerEmail:"informe o e-mail do pagador",enterPayerRfcCurp:"informe o RFC/CURP do pagador",invalidRfcCurp:"RFC/CURP inválido (10 a 18 caracteres)",gatewayNoColombia:"este gateway não cobra na Colômbia",gatewayNoArgentina:"este gateway não cobra na Argentina",invalidArDocument:"CUIT inválido (11 dÃgitos)",invalidCoDocument:"documento inválido (5 a 15 dÃgitos)",invalidNequiPhone:"celular Nequi inválido (10 dÃgitos, começando em 3)",enterNequiPhone:"informe o celular Nequi (o telefone é o destino do pagamento)",gatewayNoPeru:"este gateway não cobra no Peru",gatewayNoPhilippines:"este gateway não cobra nas Filipinas",revalidateZenithCredential:"revalide a credencial Zenith para liberar os métodos do Peru",methodUnavailableForCredential:"este método do Peru não está disponÃvel na credencial selecionada",methodUnavailableForCredentialPh:"este método das Filipinas não está disponÃvel na credencial selecionada",enterPhPhone:"informe o celular filipino (10 dÃgitos começando em 9)",invalidPhPhone:"celular filipino inválido (10 dÃgitos nacionais começando em 9; 0 ou +63 opcionais)",bankButtonsCount:"configure de 1 a 3 botões para a transferência",bankButtonLabel:"o rótulo do botão {{number}} deve ter de 1 a 20 caracteres",bankButtonAction:"escolha Copiar ou Link no botão {{number}}",bankButtonValue:"informe o valor do botão {{number}}",bankButtonUrl:"o link literal do botão {{number}} deve começar com http:// ou https://"},xD={title:"Pixel",all:"Todos",configurePixelEvent:"Configure pixel e evento...",eventAllPixels:"{{event}} â Todos os Pixels",eventTarget:"{{event}} â {{target}}",value:"Valor: {{currency}} {{value}}",autoValue:"ð° Valor automático do PIX ({{currency}})",eventsConfigured_one:"{{count}} evento configurado",eventsConfigured_other:"{{count}} eventos configurados"},wD={title:"Randomizador",split:"Split {{name}}"},CD={title:"Enviar Cobrança",configureCharge:"Configure a cobrança..."},PD={title:"Enviar Chave PIX",configurePixKey:"Configure a chave PIX...",types:{CPF:"CPF",CNPJ:"CNPJ",PHONE:"Telefone",EMAIL:"E-mail",EVP:"Chave Aleatória"}},AD={title:"Variável",configureVariable:"Configure a variável..."},ED={title:"Iniciar",trigger:"Gatilho",matchContains:"Contém",matchExact:"Exata",matchNotContains:"Não contém",triggeredManualOrSchedule:"â¡ Acionado manualmente ou por agendamento",triggeredByAI:"â¡ Acionado pela IA",groupFlowNoTrigger:"Fluxos de grupo não possuem gatilho automático.",nextStep:"Próximo passo",pixConflictTitle:"Conflito de gatilho PIX",pixConflictDescription:"J
499á existe outro fluxo PIX nas mesmas instâncias:",unnamedFlow:"Sem nome",extraFlows:"+{{count}} fluxo(s)",pixConflictEmptyInstances:"Lista de instâncias vazia = vale para TODAS as instâncias. Selecione instâncias especÃficas em Configurações.",pixConflictSelectDifferent:"Selecione instâncias diferentes em Configurações ou desative o fluxo conflitante.",automatic:"Automático",customizationsActive_one:"{{count}} personalização ativa",customizationsActive_other:"{{count}} personalizações ativas",warningsOpenSettings_one:"{{count}} aviso â abra as configurações",warningsOpenSettings_other:"{{count}} avisos â abra as configurações",doubleClickToConfigure:"Duplo clique no bloco para configurar",aiLabel:"IA:",matchType:"Correspondência",keywords:"Palavras-chave",addPlaceholder:"Adicionar...",tags:"Etiquetas",webhookUrl:"URL do Webhook",urlCopied:"URL copiada!",webhookUrlHint:"Cole esta URL na plataforma que deseja receber os eventos.",generatingUrl:"Gerando URL...",pauseOtherFlows:"Pausar outros fluxos",webhookPauseNote:"â¡ Pausa outros fluxos ativos do contato automaticamente.",pauseBySchedule:"Pausar por horário",valueMismatch:"Valor diferente",fakeReceipt:"Comprovante falso",duplicateReceipt:"Comprovante repetido"},SD={title:"Figurinha",loaded:"Figurinha carregada",clickToConfigure:"Clique para configurar..."},ND={title:"Ações",configureTag:"Configure a tag...",clearField:"Limpar: {{field}}",configureField:"Configure o campo...",emptyValue:"(vazio)",deleteContact:"Exclui o contato permanentemente",markRead:"Marca a conversa como lida",markUnread:"Marca a conversa como não lida",markOpen:"Reabre a conversa no Kanban de Pipeline",markClosed:"Arquiva a conversa no Kanban de Pipeline",markConversationOpen:"Marca a conversa como aberta no Inbox",markConversationClosed:"Marca a conversa como encerrada no Inbox",editMessage:"Edita uma mensagem já enviada",selectMessage:"Selecione a mensagem...",deleteMessage:"Apaga uma mensagem já enviada",configureAction:"Configure a ação...",actionsCount_one:"{{count}} ação",actionsCount_other:"{{count}} ações"},kD={title:"Texto",configureMessage:"Configure a mensagem..."},TD={title:"Transferir",humanAgent:"Atendente",department:"Departamento"},ID={title:"VÃdeo",viewOnce:"Visualização única",ptvBadge:"VÃdeo redondo (PTV)",videoplayBadge:"Autoplay",clickToPreview:"Clique para pré-visualizar",previewVideo:"Pré-visualizar vÃdeo",downloadVideo:"Baixar vÃdeo",clickToConfigure:"Clique para configurar (MP4)",previewDialogTitle:"Pré-visualização do vÃdeo",usingVariable:"Usar variável:"},RD={title:"Aguardar Resposta IA",ai:"IA",variablesCount:"{{count}} variáveis",configureVariable:"Configure a variável...",missingApiKey:"Falta API Key",concatenates:"Concatena {{seconds}}s",listensAudio:"Ouve áudios",noResponseTime:"Sem resposta: {{time}}",maxAttempts:"Máx. tentativas: {{count}}",outputs:{validResponse:"Resposta válida",noResponse:"Sem resposta",maxAttemptsExhausted:"Tentativas esgotadas",aiError:"Erro IA"}},DD={title:"Aguardar Resposta",configureVariable:"Configure a variável...",noResponseTime:"Sem resposta: {{time}}",savesImage:"Salva imagem/PDF",imageOnly:"Só imagem/PDF",response:"Resposta",noResponse:"Sem resposta"},MD={title:"Webhook",configureUrl:"Configure a URL..."},FD={title:"Etiqueta WhatsApp",configureLabel:"Configure a etiqueta..."},LD={seconds:"seg",minutes:"min",hours:"h",days:"d"},jD={title:"Clonar Funil de Conversa",searchPlaceholder:"Buscar conversa...",noConversationsFound:"Nenhuma conversa encontrada",selectConversation:"Selecione uma conversa para clonar",messagesToClone:"{{count}} mensagem(ns) recebida(s) serão clonadas",noMessagesFound:"Nenhuma mensagem encontrada",willBeCloned:"será clonada",cloneButton:"Clonar ({{count}} mensagens)",cloning:"Clonando...",startNodeLabel:"InÃcio",flowNamePrefix:"Clonado de {{name}}",messagePreview:{audio:"ðµ Ãudio",image:"ð· Imagem",video:"ð¥ VÃdeo",document:"ð Documento"},toasts:{loadMessagesError:"Erro ao carregar mensagens",noMessagesToClone:"Nenhuma mensagem recebida para clonar",createFlowError:"Erro ao criar fluxo",cloneSuccess:"Fluxo clonado com sucesso!",cloneError:"Erro ao clonar funil"}},_D={typeLabels:{text:"Texto",audio:"Ãudio",image:"Imagem",video:"VÃdeo",document:"Documento"},titleEdit:"Editar bloco de {{type}}",titleNew:"Novo bloco de {{type}}",fields:{title:"TÃtulo",titlePlaceholder:"Ex: Ãudio de objeção de preço",content:"Conteúdo",contentPlaceholder:"Digite o texto que será enviado...",caption:"Legenda (opcional)",captionPlaceholder:"Texto enviado junto com o arquivo",folder:"Pasta",noFolder:"Sem pasta",markFavorite:"Marcar como favorito"},uploadedFileFallback:"Arquivo enviado",uploading:"Enviando...",uploadButton:"Enviar {{type}}",fileLimit:"Limite de 50MB por arquivo.",createBlock:"Criar bloco",toasts:{fileTooLarge:"Arquivo acima de 50MB.",mustBeLoggedIn:"Você precisa estar logado.",fileUploaded:"Arquivo enviado!",uploadError:"Erro ao enviar: {{message}}",tryAgainFallback:"tente novamente",titleRequired:"Dê um tÃtulo para o bloco.",contentRequired:"Escreva o conteúdo do texto.",fileRequired:"Envie um arquivo de {{type}}.",saveError:"Erro ao salvar: {{error}}",blockUpdated:"Bloco atualizado!",blockCreated:"Bloco criado!"}},OD={title:"Criar fluxo de grupo",description:"Apenas envio de mensagens em grupos do WhatsApp. Sem captura de resposta.",fields:{name:"Nome",namePlaceholder:"Ex: Promoção semanal",description:"Descrição (opcional)"},toasts:{nameRequired:"Dê um nome ao fluxo",created:"Fluxo de grupo criado"}},BD={label:"Detecção de comprovante falso",descriptionEnabled:"Comprovante para um destinatário fora da lista é marcado como falso. Config global â cadastre cada recebedor/gateway que você usa.",descriptionDisabled:"Desativada â todo comprovante reconhecido é aceito. Config global.",recipientNamePlaceholder:"Nome do recebedor (ex: MINHA EMPRESA LTDA)",cpfCnpjPlaceholder:"CPF ou CNPJ",noRecipients:"Nenhum recebedor cadastrado â a validação só roda com pelo menos um.",toasts:{enabled:"Detecção de comprovante falso ativada",disabled:"Detecção de comprovante falso desativada",toggleError:"Erro ao alterar configuração",fillNameAndDoc:"Preencha o nome e o CPF/CNPJ",recipientAdded:"Recebedor adicionado!",addError:"Erro ao adicionar recebedor",recipientRemoved:"Recebedor removido!",removeError:"Erro ao remover recebedor"}},zD={title:"Configurações do Fluxo",noNameFallback:"sem nome",fields:{flowName:"Nome do Fluxo",flowNamePlaceholder:"Ex: Atendimento Inicial",description:"Descrição (opcional)",descriptionPlaceholder:"Descreva o objetivo de
499ste fluxo...",triggerType:"Tipo de Gatilho"},triggerOptions:{keyword:"Palavra-chave",all:"Todas as mensagens",tag:"Etiqueta",webhook:"Webhook"},tagTriggerHint:"O fluxo será acionado automaticamente quando uma das etiquetas for adicionada ao contato.",conflictBanner:{intro:"â Conflito: já existe outro fluxo PIX vinculado a um destes números:",limitPrefix:"Cada número aceita apenas",limitStrong:"1 fluxo PIX",limitSuffix:"(ativo ou inativo). Remova/troque o gatilho do fluxo conflitante antes de salvar."},checkingConflicts:"â³ Verificando conflitos PIXâ¦",pauseOtherFlows:{label:"Pausar outros fluxos",hint:"Ao ativar, pausa todos os outros fluxos ativos do contato para priorizar este fluxo"},autoPauseHint:"â¡ Este gatilho pausa automaticamente outros fluxos ativos do contato.",pixAi:{label:"IA para ler o comprovante",visionHint:"Detecção de PIX precisa ler imagem/PDF do comprovante â só modelos com suporte a visão aparecem aqui.",requiredHelpText:"Obrigatório â sem a chave, o comprovante PIX não será lido (a ZapData não oferece mais IA nativa para este gatilho).",keyDoesNotSupportVision:'Sua chave conectada ({{provider}}) não lê imagem/PDF â o comprovante PIX não vai ser lido. Conecte um provedor com visão em Configurações, ou use "Minha chave" com um provedor diferente.',keyStorageNotice:"Sua chave fica armazenada apenas neste fluxo. {{hint}}.",keyHintOpenai:"Obtenha em platform.openai.com/api-keys",keyHintAnthropic:"Obtenha em console.anthropic.com/settings/keys",keyHintGemini:"Obtenha em aistudio.google.com/app/apikey",modelLabel:"Modelo",modelAuto:"Automático (recomendado)",modelSavedOutOfCatalog:"{{model}} (modelo salvo, fora do catálogo)",modelLegacySuffix:" (legado)",modelAutoHint:"Automático usa o modelo econômico do provedor e escala se o comprovante for difÃcil de ler."},nonPix:{label:"Aceitar outros comprovantes",hint:"Também detecta boleto pago, cartão/maquininha, nota fiscal e comprovantes em outros idiomas â não só PIX.",customPromptLabel:"Prompt personalizado (opcional) â {{count}}/{{max}}",customPromptPlaceholder:"Ex: também aceite comprovante de boleto da Cielo com o texto 'Pago via boleto registrado'...",customPromptHint:"Some à s regras padrão â nunca as substitui."},valueFilter:{label:"Filtrar por valor",min:"MÃnimo (R$)",minPlaceholder:"Sem mÃnimo",max:"Máximo (R$)",maxPlaceholder:"Sem máximo",hint:'Comprovante fora da faixa segue pela saÃda "Valor diferente" no nó Iniciar do fluxo (canvas). Sem conexão, a sessão apenas é encerrada.'},gatewayAutoTrigger:{label:"Disparar em API de pagamento confirmado",hint:'Também dispara este gatilho quando uma cobrança gerada pelo bloco "API de Pagamentos" for confirmada como paga pelo gateway (XPag e demais) â sem o lead precisar enviar comprovante.'},branches:{fake:"SaÃda p/ comprovante falso",duplicate:"SaÃda p/ comprovante repetido",hint:"Conecte os caminhos personalizados no nó Iniciar do fluxo (canvas)."},tags:{label:"Etiquetas que Acionam o Fluxo",hint:"Selecione quais etiquetas devem acionar este fluxo. Quando qualquer uma for adicionada ao contato, o fluxo será iniciado.",loading:"Carregando etiquetas...",empty:"Nenhuma etiqueta encontrada. Crie etiquetas no Kanban primeiro.",deleteTagTitle:"Apagar etiqueta",selected:"Selecionadas:"},keyword:{matchType:"Tipo de Correspondência",exact:"Palavra exata",contains:"Contém a palavra",notContains:"Não contém a palavra",exactHint:"O fluxo inicia quando a mensagem for exatamente igual a uma das palavras-chave.",containsHint:"O fluxo inicia quando a mensagem contiver uma das palavras-chave.",notContainsHint:"O fluxo inicia quando a mensagem NÃO contiver nenhuma das palavras-chave.",keywords:"Palavras-chave",keywordsPlaceholder:"oi, olá, quero, c
499omprar (separadas por vÃrgula)",keywordsHint:"Separe as palavras-chave por vÃrgula"},instances:{label:"Números AtribuÃdos",hintPix:"Selecione ao menos 1 número. Cada número aceita apenas 1 fluxo PIX (ativo ou inativo). Não é permitido deixar vazio para PIX.",hintDefault:"Selecione em quais números este fluxo deve funcionar. Se nenhum for selecionado, funcionará em todos.",empty:"Nenhum número encontrado.",disconnectedTitle:"Número desconectado",noNumber:"Sem número",online:"Online",offline:"Desconectado",logzzLinked:"Este fluxo está vinculado a {{count}} integração(ões) Logzz"},conflictWarning:{title:"â Conflito de gatilho PIX detectado",intro:"Cada número só pode estar vinculado a",strong:"1 fluxo ativo",suffix:"com gatilho de Pagamento PIX. Os números deste fluxo já estão em uso por:",footer:"Ajuste os números deste fluxo ou desative o conflitante para salvar."},flowSansName:"Fluxo sem nome",active:{label:"Fluxo Ativo",hint:"Ativar ou desativar este fluxo"},pauseSchedule:{label:"Pausar Envio por Horário",hint:"Não enviar mensagens durante o horário definido",start:"InÃcio da Pausa",end:"Fim da Pausa",timezoneNote:"â° Fuso horário: São Paulo (UTC-3). As mensagens que deixarem de ser enviadas durante a pausa serão disparadas após o término do horário definido."},buttons:{saving:"Salvando...",verifying:"Verificandoâ¦",conflictPix:"Conflito PIX",save:"Salvar Configurações"},toasts:{nameRequired:"O nome do fluxo é obrigatório",checkingConflictsWait:"Verificando conflitos PIX, aguardeâ¦",selectAtLeastOneInstance:'Selecione ao menos 1 número. O gatilho PIX é por instância â deixar vazio é tratado como "todas as instâncias" e conflita com qualquer fluxo PIX existente.',conflictWithFlow:'Conflito: já existe outro fluxo PIX usando este número (ex: "{{name}}").',conflictActiveFlow:"Conflito: já existe outro fluxo ativo com gatilho PIX vinculado a um destes números. Cada número aceita apenas 1 fluxo PIX ativo.",saveError:"Erro ao salvar configurações: {{error}}",saveSuccess:"Configurações salvas com sucesso"}},VD={title:"Métricas do Funil",period:"PerÃodo:",periods:{today:"Hoje",yesterday:"Ontem",last7days:"Ãltimos 7 dias",last30days:"Ãltimos 30 dias",custom:"Data especÃfica"},noData:"Nenhum dado encontrado para o perÃodo selecionado.",table:{component:"Componente",passages:"Passagens",percentOfTotal:"% do Total",percentDrop:"% Perda"},defaultNodeName:"Passagem {{index}}",funnelChartTitle:"Funil de Passagem",tooltipPeople:"{{count}} pessoas ({{percentage}}%)"},qD={title:"Lixeira",description:"Fluxos e pastas excluÃdos ficam aqui por 7 dias antes de serem apagados para sempre.",tabs:{flows:"Fluxos",folders:"Pastas"},loading:"Carregando...",emptyFlows:"Nenhum fluxo na lixeira",emptyFolders:"Nenhuma pasta na lixeira",emptyFooter:"Itens excluÃdos ficam aqui por 7 dias.",deletedInfo:"ExcluÃdo em {{date}} · expira em {{days}} {{dayLabel}}",day:"dia",days:"dias",restore:"Restaurar",deletePermanentlyTitle:"Excluir permanentemente",confirmDelete:{title:"Excluir permanentemente?",descriptionPrefix:"Esta ação não pode ser desfeita.",descriptionSuffix:"será apagado para sempre.",confirmButton:"Excluir para sempre"},toasts:{loadError:"Erro ao carregar lixeira",restoreFlowError:"Erro ao restaurar fluxo",flowRestored:"Fluxo restaurado",restoreFolderError:"Erro ao restaurar pasta",folderRestored:"Pasta restaurada",purgeError:"Erro ao excluir permanentemente",purged:"ExcluÃdo permanentemente"}},UD={flowFinishedNoNextNode:"â
Fluxo finalizado (sem próximo nó)",flowStarted:"ð Fluxo iniciado",defaultTextMessage:"Mensagem de texto",defaultImageCaption:"ð· Imagem",defaultVideoCaption:"ð¬ VÃdeo",defaultAudioCaption:"ðµ Ãudio",defaultDocumentFileName:"documento.pdf",contactLabel:"ð¤ Contato: {{name}}",defaultContactName:"Contato",waitingLabel:"â± Aguardando {{delay}}{{unit}}...",waitingForResponse:"â¨ï¸ Aguardando resposta do lead... (â {{varName}})",waitingForResponseAI:"ð§ Aguardando resposta do lead (IA vai extrair â {{vars}})",defaultMenuTitle:"Escolha uma opção:",defaultOptionLabel:"Opção {{index}}
499",conditionEvaluated:"ð Condição avaliada",tagCondition:'ð·ï¸ Tag "{{tagName}}" ({{status}}) â {{result}} (simulador não rastreia tags)',tagHas:"possui",tagNotHas:"não possui",countryCondition:"ð PaÃs {{status}} {{name}} â {{result}}",countryIs:"é",countryIsNot:"não é",variableConditionLine:'⢠{{variable}} {{operator}} "{{value}}" (atual: "{{current}}") â {{result}}',resultLine:"â Resultado: {{result}}",resultTrue:"â
Verdadeiro",resultFalse:"â Falso",iaGeneratorExecuted:"ð¨ IA Generator executado (simulado)",variableSet:'ð Variável definida: {{name}} = "{{value}}"',actions:{addTag:"ð·ï¸ Tag adicionada: {{tagName}}",removeTag:"ð·ï¸ Tag removida: {{tagName}}",setField:'ð Campo definido: {{fieldName}} = "{{fieldValue}}"',clearField:"ð§¹ Campo limpo: {{fieldName}}",deleteContact:"ðï¸ Contato excluÃdo (simulado)",markRead:"â
Conversa marcada como lida",markUnread:"ð© Conversa marcada como não lida",markOpen:"ð Conversa reaberta no Kanban de Pipeline",markClosed:"ðï¸ Conversa arquivada no Kanban de Pipeline",markConversationOpen:"ð¬ Conversa marcada como aberta no Inbox",markConversationClosed:"â
Conversa marcada como encerrada no Inbox",editMessage:"âï¸ Mensagem editada (simulado)",deleteMessage:"ðï¸ Mensagem apagada (simulado)",defaultField:"campo",genericExecuted:"â¡ Ação executada: {{actionType}}"},aiResponseSimulated:"ð¤ [Resposta IA simulada] â Em produção, a IA responderia aqui.",randomizerChosen:'ð² Randomizador: caminho "{{path}}" escolhido',randomPathFallback:"aleatório",redirectedTo:"âï¸ Redirecionado para: {{flowName}}",otherFlowFallback:"outro fluxo",pixKeyLabel:"ð Chave PIX: {{key}}",pixKeyFallback:"chave-exemplo",chargeSent:"ðµ Cobrança enviada: R$ {{amount}}",webhookSimulated:"ð Webhook simulado: {{url}}",webhookUrlFallback:"URL não definida",transferredTo:"ð¤ Transferido para: {{destination}}",attendantFallback:"atendente",pixelFired:"ð Pixel disparado: {{eventLabel}}",adminNotificationSent:"ð Notificação admin enviada (simulado)",callPlaced:"ð Ligação disparada â chamada muda; o lead pode atender ou recusar (simulado)",passageRegistered:"ð Passagem registrada: {{label}}",defaultInteractiveBody:"Bloco interativo",defaultButtonLabel:"Botão {{index}}",chooseLabel:"Escolha:",carouselSent:"ð Carrossel enviado (simulado)",flowFinished:"ð Fluxo finalizado",genericNodeExecuted:'âï¸ Nó "{{type}}" executado (simulado)',startNodeNotFound:'â Nó "InÃcio" não encontrado',aiExtracted:"ð§ IA extraiu (simulado) â {{vars}}",aiAnalyzing:"ð¤ IA analisando resposta...",aiIdentified:'ð¤ IA identificou: "{{label}}"',aiNoMatch:"ð¤ IA não identificou correspondência. Aguardando botão ou timeout...",aiError:"â ï¸ Erro na IA. Aguardando botão...",noButtonMatch:"â ï¸ Resposta não corresponde a nenhum botão. Aguardando...",iaManualTrue:"â
IA: Verdadeiro (manual)",iaManualFalse:"â IA: Falso (manual)",simulatedPaid:"â
Simulado: Pagou",simulatedNotPaid:"â Simulado: Não pagou",iaChoiceTrue:"â
Verdadeiro (IA)",iaChoiceFalse:"â Falso (IA)",iaConditionPrompt:'ð¤ Condição IA #{{index}}: "{{prompt}}" â escolha o resultado:',noPromptFallback:"(sem prompt)"},WD={featureName:"Fluxos de Grupo",featureDescription:"Os fluxos de grupo (disparo manual ou agendado em grupos do WhatsApp) estão disponÃveis a partir do plano Modo Acesso (R$99/mês).",title:"Fluxos de Grupo",subtitle:"Disparo manual ou agendado em grupos do WhatsApp. Apenas envio de mensagens.",newFlow:"Novo Fluxo de Grupo",createDialog:{title:"Criar fluxo de grupo",description:"Apenas nós de envio (texto, mÃdia, delay) são suportados. Sem captura de resposta.",nameLabel:"Nome",namePlaceholder:"Ex: Promoção semanal",descriptionLabel:"Descrição (opcional)"},emptyState:{title:"Nenhum fluxo de grupo ainda",description:"Crie um fluxo para disparar mensagens em grupos manualmente ou em horários agendados."},groupBadge:"GRUPO",deleteDialog:{title:"Excluir fluxo?"},toasts:{nameRequired:"Dê um nome ao fluxo",created:"Fluxo de grupo criado",deleted:"ExcluÃdo"}}
499,$D={loadingFlow:"Carregando fluxo...",flowFallbackName:"Fluxo",importButton:"Importar Fluxo",importingButton:"Importando...",importedButton:"Importado!",errors:{missingFlowId:"ID do fluxo não informado",flowNotFound:"Fluxo não encontrado",loadError:"Erro ao carregar fluxo",importUnavailableTrial:"Importação de fluxos não está disponÃvel durante o perÃodo de teste gratuito. Assine um plano para importar.",importError:"Erro ao importar fluxo",importErrorWithMessage:"Erro ao importar: {{message}}"},toasts:{imported:"Fluxo importado com sucesso!"},authModal:{loginTitle:"Entrar na sua conta",signupTitle:"Criar conta",needLoginHint:"Para importar este fluxo, você precisa estar logado.",passwordPlaceholder:"Sua senha",confirmPasswordPlaceholder:"Confirme sua senha",loginButton:"Entrar",signupButton:"Cadastrar",joinUsersPrefix:"Junte-se a",joinUsersSuffix:"usuários cadastrados",switchToSignup:"Não tem conta? Cadastre-se",switchToLogin:"Já tem conta? Faça login",errors:{fillAllFields:"Preencha todos os campos",confirmPassword:"Confirme sua senha",passwordsDontMatch:"As senhas não coincidem",passwordTooShort:"A senha deve ter pelo menos 6 caracteres",wrongCredentials:"Email ou senha incorretos",invalidEmail:"Por favor, use um email válido para se cadastrar",emailAlreadyRegistered:"Este email já está cadastrado. Faça login."},toasts:{loginSuccess:"Login realizado!",signupSuccess:"Cadastro realizado! Verifique seu email para confirmar."},emailPlaceholder:"[email protected]"},nodeTypeLabels:{start:"â¶ InÃcio",text:"ð¬ Texto",aiText:"ð¤ IA Texto",image:"ð¼ Imagem",audio:"ð Ãudio",audioAI:"ð Ãudio IA",video:"ð¬ VÃdeo",document:"ð Documento",delay:"â± Delay",waitInput:"â³ Aguardar",waitInputAI:"ð§ Aguardar IA",condition:"ð Condição",menu:"ð Menu",ai:"ð¤ IA",aiResponder:"ð§ IA Resp.",transfer:"â Transfer",webhook:"ð Webhook",setVariable:"ð Variável",tag:"ð· Tag",end:"ð´ Fim",randomizer:"ð² Random",sendPixKey:"ð Pix Key",sendCharge:"ð° Cobrança",interactiveBlock:"ð§© Interativo",pixel:"ð Pixel",notifyAdmin:"ð Notificar",goToFlow:"â¡ Ir p/ Fluxo",carousel:"ð Carrossel",sticker:"ð Sticker",contact:"ð¤ Contato",passageTracker:"ð£ Contagem",iaGenerator:"⨠Gerador IA",pixApi:"ð API de Pagamentos",speiApi:"ð API de Pagamentos",whatsappLabel:"ð· Label WPP"}},GD={backToAutomatiZap:"Voltar para AutomatiZap",backToDisparaZap:"Voltar para DisparaZap",active:"Ativo",inactive:"Inativo",settingsButton:"Configurações",settingsDialogTitle:"Configurações do Fluxo",flowNameLabel:"Nome do Fluxo",triggerTypeLabel:"Tipo de Gatilho",defaultFlowName:"Novo Fluxo",flowFallbackName:"Fluxo",triggerTypes:{keyword:"Palavra-chave",all:"Todas as mensagens",schedule:"Agendado",webhook:"Webhook"},pixConflictWarning:{title:"â Conflito de gatilho PIX",emptySelection:'Selecione ao menos 1 número. Lista vazia é tratada como "todas as instâncias" e conflita com qualquer outro fluxo PIX.',alreadyInUse:"Os números selecionados já estão em uso por:",unnamedFlow:"Fluxo sem nome",chooseDifferent:"Escolha números diferentes ou desative o fluxo conflitante."},pauseOtherFlows:{label:"Pausar outros fluxos",description:"Ao ativar, pausa todos os outros fluxos ativos do contato para priorizar este fluxo"},pixAi:{sectionLabel:"IA para ler o comprovante",visionOnlyHint:"Só provedores com suporte a visão aparecem aqui (lê imagem/PDF do comprovante).",requiredHelpText:"Obrigatório â sem a chave, o comprovante PIX não será lido (a ZapData não oferece mais IA nativa para este gatilho).",wrongProviderWarning:'Sua chave conectada ({{provider}}) não lê imagem/PDF â o comprovante PIX não vai ser lido. Conecte um provedor com visão em Configurações, ou use "Minha chave" com um provedor diferente.',storedInFlowOnly:"Sua chave fica armazenada apenas neste fluxo.",getKeyOpenAI:"Obtenha em platform.openai.com/api-keys",getKeyAnthropic:"Obtenha em console.anthropic.com/settings/keys",getKeyGoogle:"Obtenha em aistudio.google.com/app/apikey",modelLabel:"Modelo",modelAuto:"Automático (recomendado)",modelSavedNotInCatalog:"{{model}} (modelo salvo, fora do catálogo)",modelLegacySuffix:" (legado)",modelAutoHint:"Automático usa o modelo econômico do provedor e escala se o comprovante for difÃcil de ler."},acceptNonPix:{label:"Aceitar outros comprovantes",description:"Também detecta boleto pago, cartão/maquininha, nota fiscal e comprovantes em outros idiomas â não só PIX."},customPrompt:{label:"Prompt personalizado (opcional) â {{count}}/{{max}}",placeholder:"Ex: também aceite comprovante de boleto da Cielo com o texto 'Pago via boleto registrado'...",hint:"Some à s regras padrão â nunca as substitui."},gatewayAutoTrigger:{label:"Disparar em API de pagamento confirmado",description:'Também dispara este gatilho quando uma cobrança gerada pelo bloco "API de Pagamentos" for confirmada como paga pelo gateway (XPag e demais) â sem o lead precisar enviar comprovante.'},valueFilter:{label:"Filtrar por valor",minLabel:"MÃnimo (R$)",minPlaceholder:"Sem mÃnimo",maxLabel:"Máximo (R$)",maxPlaceholder:"Sem máximo",hint:'Comprovante fora da faixa segue pela saÃda "Valor diferente" no nó Iniciar do fluxo (canvas). Sem conexão, a sessão a
499penas é encerrada.'},fakeDuplicateBranch:{fakeLabel:"SaÃda p/ comprovante falso",duplicateLabel:"SaÃda p/ comprovante repetido",hint:"Conecte os caminhos personalizados no nó Iniciar do fluxo (canvas)."},keywordMatch:{label:"Tipo de Correspondência",exact:"Palavra exata",contains:"Contém a palavra",notContains:"Não contém a palavra",exactHint:"O fluxo inicia quando a mensagem for exatamente igual a uma das palavras-chave.",containsHint:"O fluxo inicia quando a mensagem contiver uma das palavras-chave.",notContainsHint:"O fluxo inicia quando a mensagem NÃO contiver nenhuma das palavras-chave."},keywordsLabel:"Palavras-chave (separadas por vÃrgula)",keywordsPlaceholder:"oi, olá, bom dia, quero comprar",instancesLabel:"Instâncias (Números)",instancesHint:"Selecione quais números receberão este fluxo. Se nenhum for selecionado, o fluxo será aplicado a todos.",noInstancesFound:"Nenhuma instância encontrada",instanceOnline:"Online",instanceOffline:"Offline",pauseOnMedia:{label:"Pausar ao receber imagem/PDF",description:"Pausa automaticamente o fluxo quando o contato enviar uma imagem ou documento"},pauseSchedule:{label:"Pausar Envio por Horário",description:"Não enviar mensagens durante o horário definido",startLabel:"InÃcio da Pausa",endLabel:"Fim da Pausa",timezoneHint:"â° Fuso horário: São Paulo (UTC-3). As mensagens que deixarem de ser enviadas durante a pausa serão disparadas após o término do horário definido."},flowActiveLabel:"Fluxo Ativo",funnelMetricsButton:"Métricas do Funil",triggerSettingsSaveFailed:"Falha ao salvar configs do gatilho â veja o aviso",triggerSettingsSaving:"Salvando configs do gatilhoâ¦",noLeadCountDialog:{title:"Nenhuma Contagem de Leads",description:'Você ainda não adicionou nenhum componente de "Contagem de Leads" ao seu fluxo. Arraste o componente do menu de componentes para começar a rastrear a passagem de contatos.',gotIt:"Entendi"},toasts:{createFlowError:"Erro ao criar fluxo",loadFlowError:"Erro ao carregar fluxo",verifyingPixConflicts:"Verificando conflitos PIX, aguardeâ¦",selectAtLeastOneInstance:'Selecione ao menos 1 número para o gatilho PIX. Lista vazia é tratada como "todas as instâncias" e conflita com qualquer outro fluxo PIX.',pixConflictWithFlow:'Conflito de gatilho PIX: o número já está em uso pelo fluxo "{{name}}". Cada número aceita apenas 1 fluxo PIX.',unnamedFlow:"sem nome",moreBlocksSameSituation_one:" Há mais {{count}} bloco de pagamento na mesma situação.",moreBlocksSameSituation_other:" Há mais {{count}} blocos de pagamento na mesma situação.",incompleteBlockTitle:'Bloco {{numPrefix}}"API de Pagamentos" incompleto: {{issues}}.',incompleteBlockDescription:"Nada foi salvo nesta tela. Com o fluxo ligado, toda cobrança desse bloco sai pela saÃda Erro sem chegar no gateway â corrija, ou desligue o fluxo para salvar assim mesmo.{{extra}}",flowSavedSuccess:"Fluxo salvo com sucesso",pixConflictTitle:"Conflito de gatilho PIX",saveFlowErrorTitle:"Erro ao salvar fluxo",pixConflictDescription:'Já existe outro fluxo com gatilho de Pagamento PIX nas mesmas instâncias. Atenção: deixar a lista de instâncias vazia significa "todas as instâncias". Selecione instâncias especÃficas em Configurações ou desative/exclua o fluxo PIX conflitante.'}},HD={duplicateSuffix:" (Cópia)",tabs:{flows:"Fluxos",looseBlocks:"Blocos Avulsos"},header:{activeAndTotal:"{{active}} ativos · {{total}} total",flowCount_one:"{{count}} fluxo",flowCount_other:"{{count}} fluxos"},rowActions:{selectFlow:"Selecionar fluxo",dragToReorder:"Arrastar para mover/reordenar",settings:"Configurações",selectNumbers:"Selecionar números",moveToFolder:"Mover para pasta",moveFlowTo:"Mover fluxo para",noFolder:"Sem pasta"},triggerLabels:{pix:"PIX",keyword:"Palavra-chave",tag:"Etiqueta",allMessages:"Todas msgs",allMessagesFull:"Todas as mensagens",schedule:"Agendado",webhook:"Webhook",unknown:"â",triggerTooltip:"Gatilho: {{label}}"},toolbar:{searchPlaceholder:"Buscar fluxos...",filters:"Filtros",filtersActive:"Filtros · Ativos",filtersInactive:"Filtros · Inativos",statusLabel:"Status",all:"Todos",active:"Ativos",inactive:"Inativos",importFlow:"Importar Fluxo",importFolder:"Importar Pasta",cloneFunnel:"Clonar Funil",trash:"Lixeira",newFlow:"Novo Fluxo",flowType:"Tipo de fluxo",newFlowDesc:"Fluxo padrão para contatos",newAiFlow:"Novo Fluxo com IA",newAiFlowDesc:"Atendente conversacional",newGroupFlow:"Novo Fluxo de Grupo",newGroupFlowDesc:"Disparo em grupos do WhatsApp",newFolder:"Nova pasta"},bulkBar:{selectAllVisible:"Selecionar todos visÃveis",selected_one:"{{count}} fluxo selecionado",selected_other:"{{count}} fluxos selecionados",clear:"Limpar"},emptyStates:{loadingFlows:"Carregando fluxos...",emptyFolder:"Esta pasta está vazia",emptyFolderHint:"Arraste fluxos da página inicial pra cá ou crie um novo aqui dentro",newFlowInFolder:"Novo fluxo nesta pasta",noFlowsFound:"Nenhum fluxo encontrado",startCreating:"Comece criando seu primeiro fluxo de automação",noFlowsAvailable:"Nenhum fluxo disponÃvel",createFirstFlow:"Criar primeiro fluxo",createFolder:"Criar pasta"},folders:{label:"Pastas",labelWithCount:"Pastas · {{count}}"},aiFlows:{sectionTitle:"Atendentes IA · {{count}}"},groupFlows:{sectionTitle:"Fluxos em Grupo · {{count}}"},flowsSection:{results:"Resultados · {{count}}",flows:"Fluxos · {{count}}"},instancesDialog:{title:"Selecionar Números",description:"Selecione em quais números este fluxo deve funcionar. Se nenhum for selecionado, funcionará em todos.",pixWarningPrefix:"Este fluxo usa o gatilho",pixWarningMiddle:". Cada número só pode estar vinculado a",oneFlow:"1 fluxo",pixWarningSuffix:"com esse gatilho â mesmo que o outro fluxo esteja desativado. Números já em uso aparecem bloqueados.",checkingConflicts:"Verificando conflitosâ¦",infoTriggerPrefix:"Este fluxo usa o gatilho",infoTriggerMiddle1:". A regra de",oneFlowPerNumber:"1 fluxo por número",infoTriggerMiddle2:"só se aplica a fluxos com gatilho",infoTriggerMiddle3:". Para aplicá-la aqui, abra",infoTriggerSuffix:"e troque o gatilho.",noInstancesFound:"Nenhum número encontrado.",noNumber:"Sem número",alreadyLinked:'Já vinculado ao fluxo "{{name}}" (gatilho PIX)',disconnected:"Número desconectado",alreadyInUseBy:"Já em uso por: {{name}}",otherFlow:"outro fluxo",online:"Online",disconnectedBadge:"Desconectado",checking:"Verificandoâ¦"},createFlowDialog:{title:"Criar Novo Fluxo",nameLabel:"Nome do Fluxo",namePlaceholder:"Ex: Atendimento Inicial",create:"Criar Fluxo"},createFolderDialog:{title:"Criar Nova Pasta",nameLabel:"Nome da Pasta",namePlaceholder:"Ex: Vendas",create:"Criar Pasta"},editFolderDialog:{title:"Renomear Pasta",nameLabel:"Nome da Pasta"},deleteFlowDialog:{title:"Excluir fluxo",description:"Tem certeza que deseja excluir este fluxo? Esta ação não pode ser desfeita."},deleteFolderDialog:{title:"Excluir pasta",description:"Tem certeza que deseja excluir esta pasta? Os fluxos dentro dela serão movidos para fora da pasta."},bulkDeleteDialog:{title_one:"Excluir {{count}} fluxo?",title_other:"Excluir {{count}} fluxos?",description:"Os fluxos selecionados serão movidos pra lixeira e ficarão lá por 7 dias. Você pode restaurá-los a qualquer momento antes desse prazo."},exportFlowDialog:{title:"Exportar Fluxo",description:"Use o código abaixo para compartilhar ou importar este fluxo em outra conta.",shareLinkLabel:"Ou compartilhe via link com preview:"},importFlowDialog:{title:"Importar Fluxo",description:"Cole o código do fluxo que deseja importar. O fluxo será copiado para sua conta como inativo.",codeLabel:"Código do Fluxo",codePlaceholder:"Cole o código do fluxo aqui...",importing:"Importando...",import:"Importar"},exportFolderDialog:{title:"Exportar Pasta: {{name}}",description:"Use o código abaixo para compartilhar esta pasta com todos os fluxos. Quem importar receberá a pasta e todos os fluxos dentro dela."},importFolderDialog:{title:"Importar Pasta",description:"Cole o código da pasta que deseja importar. A pasta e todos os fluxos serão copiados para sua conta como inativos.",codeLabel:"Código da Pasta",codePlaceholder:"Cole o código da pasta aqui...",importing:"Importando...",import:"Importar Pasta"},toasts:{moveFlowsError:"Erro ao mover fluxos",flowsMoved_one:"{{count}} fluxo movido",flowsMoved_other:"{{count}} fluxos movidos",deleteFlowsError:"Erro ao excluir fluxos",flowsMovedToTrash_one:"{{count}} fluxo movido pra lixeira",flowsMovedToTrash_other:"{{count}} fluxos movidos pra lixeira",typeAFlowName:"Digite um nome para o fluxo",createFlowError:"Erro ao criar fluxo: {{error}}",flowCreated:"Fluxo criado com sucesso",deleteFlowError:"Erro ao excluir fluxo: {{error}}",flowDeleted:"Fluxo excluÃdo com sucesso",updateFlowError:"Erro ao atualizar fluxo: {{error}}",duplicateFlowError:"Erro ao duplicar fluxo: {{error}}",configureDuplicateError:"Erro ao configurar fluxo duplicado: {{error}}",pixDuplicatedNoNumbers:"Fluxo PIX duplicado sem números. Atribua números diferentes do original (regra: 1 fluxo PIX por número).",flowDuplicated:"Fluxo duplicado com sucesso",checkingPixConflicts:"Verificando conflitos PIX, aguardeâ¦",selectAtLeastOneNumber:'Selecione ao menos 1 número. O gatilho PIX é por instância â deixar vazio é tratado como "todas as instâncias" e conflita com qualquer fluxo PIX existente.',pixConflictWithFlow:'Conflito: o gatilho PIX já está em uso pelo fluxo "{{name}}". Cada número só pode ter 1 fluxo (ativo ou inativo) com esse gatilho.',unnamedFlow:"sem nome",numberAlreadyLinked:"Este número já está vinculado a outro fluxo com gatilho PIX. Desative o fluxo conflitante antes.",updateInstancesError:"Erro ao atualizar números: {{error}}",instancesUpdated:"Números atualizados com sucesso",numberLinkedToFlow:'Número já vinculado ao fluxo "{{name}}
499" (gatilho PIX). Apenas 1 fluxo ativo por número.',typeAFolderName:"Digite um nome para a pasta",createFolderError:"Erro ao criar pasta",folderCreated:"Pasta criada!",moveFlowsToTrashError:"Erro ao mover fluxos para lixeira",deleteFolderError:"Erro ao excluir pasta",folderMovedToTrash:"Pasta movida para lixeira (7 dias)",renameFolderError:"Erro ao renomear pasta",folderRenamed:"Pasta renomeada!",reorderError:"Erro ao salvar nova ordem",moveFlowError:"Erro ao mover fluxo",flowMovedToFolder:"Fluxo movido para pasta!",flowRemovedFromFolder:"Fluxo removido da pasta!",movedToFolder:'Movido para "{{name}}"',movedToNoFolder:'Movido para "Sem pasta"',exportUnavailableTrial:"Exportação de fluxos não está disponÃvel durante o perÃodo de teste gratuito.",trialGoToPlan:"Ver planos",pasteFlowCode:"Cole o código do fluxo",userNotAuthenticated:"Usuário não autenticado",importUnavailableTrial:"Importação de fluxos não está disponÃvel durante o perÃodo de teste gratuito. Assine um plano para importar.",importFlowError:"Erro ao importar fluxo",flowNotFoundCheckCode:"Fluxo não encontrado. Verifique o código.",flowImported:"Fluxo importado com sucesso!",importFlowErrorWithMessage:"Erro ao importar fluxo: {{message}}",codeCopied:"Código copiado!",folderCodeCopied:"Código da pasta copiado!",pasteFolderCode:"Cole o código da pasta",sessionExpired:"Sua sessão expirou. Recarregue a página e tente novamente.",folderNotFoundCheckCode:"Pasta não encontrada. Verifique o código.",importFolderError:"Erro ao importar pasta",importFolderErrorWithMessage:"Erro ao importar pasta: {{error}}",folderImported:"Pasta importada com {{count}} fluxo(s)!",importFolderErrorCatch:"Erro ao importar pasta: {{message}}",linkCopied:"Link copiado!"}},KD={keyword:"Palavra-chave",all:"Qualquer mensagem",sale:"Pagamento Detectado",tag:"Etiqueta",webhook:"Webhook"},XD={models:{eleven_v3:"Eleven v3 â mais expressivo",eleven_multilingual_v2:"Multilingual v2 â mais natural",eleven_turbo_v2_5:"Turbo v2.5 â rápido",eleven_flash_v2_5:"Flash v2.5 â mais rápido"},modelHelp:"Eleven v3 é o mais expressivo (suporta tags como [whispers] e [laughs]). Multilingual v2 é natural em português. Turbo e Flash são mais rápidos.",languages:{auto:"Automático (detectado pelo texto)",pt:"Português",es:"Espanhol",en:"Inglês",fr:"Francês",de:"Alemão",it:"Italiano",nl:"Holandês",pl:"Polonês",sv:"Sueco",tr:"Turco",ru:"Russo",uk:"Ucraniano",ar:"Ãrabe",hi:"Hindi",zh:"Chinês (mandarim)",ja:"Japonês",ko:"Coreano",id:"Indonésio",ms:"Malaio",vi:"Vietnamita",fil:"Filipino"}},YD={descriptions:{kieImage:{"gpt-image-2":"Fotorrealismo, edição precisa, texto nÃtido. Aceita até 16 imagens de referência e escolha de resolução 1K/2K/4K.",wanV27ImagePro:"Geração e edição de imagens em alta resolução (até 4K em text-to-image). Aceita imagem de referência (image-to-image, máx. 2K)."},kieVideo:{"gemini-omni-video":"Multimodal Google: 4/6/8/10s, até 4K. Aceita até 7 imagens de referência.",kling30:"VÃdeo cinemático até 15s com áudio nativo, multi-shot e modos STD/PRO."},freepikImage:{"nano-banana-pro":"Modelo carro-chefe da Freepik para geração de imagens. Aceita até 4 imagens de referência.","nano-banana-pro-flash":"Versão mais rápida e barata do Nano Banana Pro. Aceita até 4 imagens de referência."},freepikVideo:{"kling-v2-5-pro":"VÃdeo cinemático image-to-video (Kling 2.5 Turbo Pro). Exige imagem de referência.","veo-3-1":"Modelo Google Veo 3.1 (qualidade). Suporta text-to-video e image-to-video (até 2 frames).","veo-3-1-fast":"Versão rápida do Veo 3.1. Suporta text-to-video e image-to-video (até 2 frames).","pixverse-v5":"Image-to-video Pixverse V5. Exige imagem inicial.","pixverse-v5-transition":"Transição entre dois frames (inicial e final). Exige duas imagens."},freepikMusic:{"music-generation":"Geração de música por prompt. Suporta vocal ou instrumental."}},vocalGenders:{auto:"Automático",m:"Masculino",f:"Feminino"}},QD={actionTypes:{add_tag:{label:"Adicionar Tag",shortLabel:"Tag"},remove_tag:{label:"Remover Tag",shortLabel:"Tag"},set_field:{label:"Definir Campo do Usuário",shortLabel:"Campo"},clear_field:{label:"Limpar Campo Personalizado",shortLabel:"Campo"},delete_contact:{label:"Excluir Contato",shortLabel:"Contato"},mark_read:{label:"Marcar Conversa como Lida",shortLabel:"Lida"},mark_unread:{label:"Marcar Conversa como Não Lida",shortLabel:"Não lida"},mark_open:{label:"Reabrir no Kanban (Pipeline)",shortLabel:"Reabrir Kanban"}
499,mark_closed:{label:"Arquivar no Kanban (Pipeline)",shortLabel:"Arquivar Kanban"},mark_conversation_open:{label:"Marcar Conversa do Inbox como Aberta",shortLabel:"Aberta (Inbox)"},mark_conversation_closed:{label:"Marcar Conversa do Inbox como Encerrada",shortLabel:"Encerrada (Inbox)"},edit_message:{label:"Editar Mensagem",shortLabel:"Editar msg"},delete_message:{label:"Apagar Mensagem",shortLabel:"Apagar msg"}},groups:{contact:"Dados do contato",inbox:"Caixa de Entrada",messages:"Mensagens"}},ZD={channelInstanceMismatch:DR,aiNode:MR,aiResponderNode:FR,aiTextNode:LR,audioAiNode:jR,audioNode:_R,calculatorNode:OR,callNode:BR,carouselNode:zR,conditionNode:VR,contactNode:qR,delayNode:UR,documentNode:WR,endNode:$R,goToFlowNode:GR,iaGeneratorNode:HR,imageNode:KR,interactiveBlockNode:XR,menuNode:YR,notifyAdminNode:QR,actionsEditor:ZR,audioAIProperties:JR,audioRecorderButton:eD,contentBlocksTab:tD,flowCanvas:aD,propertiesPanel:oD,webhookNodeTester:nD,webhookTestListener:rD,textareaWithEmoji:iD,platformAIKeySourceField:sD,pixelEventsEditor:lD,nodeSidebar:cD,nodeAnalyticsWrapper:dD,miniFlowBuilder:uD,interactiveImageInput:mD,groupFlowInlineRow:pD,flowSimulatorPhone:hD,flowAnalyticsBar:fD,conditionEditor:gD,passageTrackerNode:vD,pixApiNode:bD,pixApiValidation:yD,pixelNode:xD,randomizerNode:wD,sendChargeNode:CD,sendPixKeyNode:PD,setVariableNode:AD,startNode:ED,stickerNode:SD,tagNode:ND,textNode:kD,transferNode:TD,videoNode:ID,waitInputAINode:RD,waitInputNode:DD,webhookNode:MD,whatsAppLabelNode:FD,timeUnits:LD,cloneFunnel:jD,contentBlockForm:_D,createGroupFlow:OD,fakeReceiptDetection:BD,flowSettingsDialog:zD,passageMetricsDialog:VD,trashDialog:qD,simulator:UD,groupFlowsPage:WD,preview:$D,editor:GD,flowList:HD,triggerLabels:KD,audioAIModels:XD,iaGeneratorModels:YD,actionsBlock:QD},JD={metrics:{spend:"Gasto total",cpc:"CPC (custo por clique no link)",cpa:"CPA (custo por venda)",costPerMessage:"Custo por mensagem"},toasts:{addError:"Erro ao adicionar regra",updateError:"Erro ao atualizar",removeError:"Erro ao remover"},accountsLabel:{all:"Todas as contas ativas",count:"{{count}} contas selecionadas"},rulesInfo:{pre:"Regras avaliadas a cada 10 min com filtro",today:"diário (hoje)",post:"Notifica toda vez que a regra for verdadeira."},empty:'Nenhuma regra criada ainda. Clique em "Adicionar regra" para começar.',active:"Ativa",inactive:"Desativada",metric:"Métrica",adAccounts:"Contas de anúncio",leaveEmptyAllAccounts:"Deixe vazio = todas as contas",noActiveAccounts:"Nenhuma conta ativa.",operator:"Operador",operators:{gt:"> (maior que)",gte:">= (maior ou igual)",lt:"< (menor que)",lte:"<= (menor ou igual)"},addRule:"Adicionar regra"},eM={systems:{automatiZap:{label:"Automati-Zap",description:"Acesso ao sistema de automação"},metricas:{label:"Métricas",description:"Acesso à s métricas de vendas"},organizadorNumeros:{label:"Organizador de Números",description:"Acesso ao organizador"}},automatiZapDetails:{flows:{label:"Acessar Fluxos",description:"Ver e acessar fluxos de automação"},editFlows:{label:"Editar Fluxos",description:"Criar e editar fluxos"},deleteContacts:{label:"Apagar Contatos",description:"Deletar contatos do inbox"}},toasts:{loadError:"Erro ao carregar colaboradores",settingSaved:"Configuração salva!",settingSaveError:"Erro ao salvar configuração",fillAllFields:"Preencha todos os campos",passwordMinLength:"Senha deve ter no mÃnimo 6 caracteres",createSuccess:"Colaborador criado com sucesso!",createError:"Erro ao criar colaborador",updateSuccess:"Colaborador atualizado!",updateError:"Erro ao atualizar",removeSuccess:"Colaborador removido!",removeError:"Erro ao remover"},systemsTitle:"Sistemas",automatiZapDetailsTitle:"Detalhes Automati-Zap",globalSettings:{title:"Configurações dos Colaboradores",description:"Configurações globais que afetam todos os colaboradores",hideInstances:{label:"Ocultar instâncias",description:"Colaboradores verão apenas as conversas, sem filtro de instância"},messageSigning:{label:"Assinar mensagens",description:"Exibir o nome do colaborador acima de cada mensagem enviada por ele"}},title:"Colaboradores",subtitle:"Crie sub-contas com acesso limitado para sua equipe",newCollaborator:"Novo Colaborador",createDialog:{title:"Criar Colaborador",namePlaceholder:"Nome do colaborador",emailLabel:"Email (login)",emailPlaceholder:"[email protected]",passwordPlaceholder:"MÃnimo 6 caracteres"},permissionsTitle:"Permissões",empty:{title:"Nenhum colaborador criado ainda",description:"Crie sub-contas para sua equipe acessar seus sistemas"},status:{active:"Ativo",inactive:"Inativo"},deleteDialog:{title:"Excluir colaborador?",description:{pre:"Isso irá remover permanentemente o acesso de"}},visibleInstances:{title:"Instâncias VisÃveis",description:"Defina quais instâncias este colaborador pode visualizar",noInstancesFound:"Nenhuma instância encontrada",online:"Online",noneSelectedWarning:"Nenhuma instância selecionada - colaborador não verá nenhuma instância",allVisible:"Todas as instâncias estão visÃveis (sem restrição)"},savePermissions:"Salvar Permissões"},tM={title:"Integração ElevenLabs",subtitle:"Use a sua própria conta do ElevenLabs para gerar áudios e vozes. O consumo é
499cobrado direto na sua conta ElevenLabs.",toasts:{pasteKey:"Cole a sua chave da API do ElevenLabs.",validateError:"Não foi possÃvel validar a chave.",connected:"Integração ElevenLabs conectada!",saveError:"Erro ao salvar a integração. Tente novamente.",removed:"Integração removida.",removeError:"Erro ao remover a integração."},apiKey:{title:"Chave da API",connected:"Conectado",notConfigured:"Não configurado",descriptionConnected:"Sua chave está salva. Cole uma nova chave abaixo para substituÃ-la.",descriptionNotConnected:"Cole sua chave da API do ElevenLabs para ativar os recursos de voz.",placeholderSaved:"â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢ (salva)",validating:"Validando...",testAndSave:"Testar e salvar",createKeyAt:"Crie sua chave em",keyStoredPre:"A chave fica guardada apenas na sua conta. Ao criar, deixe a opção",restrictKeyOff:'"Restrict Key" desativada',keyStoredPost:"chaves restritas por permissão costumam ser recusadas por faltar acesso que o ElevenLabs não deixa claro.",connectedOn:"Conectado em {{date}}",keyConfigured:"Chave configurada"},subscription:{plan:"Plano",usage:"Uso",characters:"caracteres"},legacyVoices:{title:"Vozes personalizadas antigas",description:{pre:"Vozes personalizadas que você clonou antes desta mudança viviam em uma conta compartilhada e",noLongerWork:"não funcionam mais",mid:"Para continuar usando voz clonada, reclone a voz no",audioGenerator:"Gerador de Ãudio",post:"ela será criada agora na sua própria conta ElevenLabs."},readyVoicesNote:"As vozes prontas (não personalizadas) continuam funcionando normalmente."},usedIn:{title:"Onde a integração é usada",audioGenerator:"Gerador de Ãudio (texto â voz)",voiceCloning:"Clonagem de voz personalizada",aiFlowResponse:'Resposta em áudio dos fluxos de IA e do bloco "IA responder"',noKeyNote:"Sem a chave configurada, esses recursos ficam indisponÃveis e os fluxos de IA respondem em texto."}},aM={title:"Lara Translate",subtitle:'Conecte sua conta da Lara Translate para o "Traduzir Fluxo" também traduzir imagens e documentos (PDF) dos blocos do fluxo â hoje ele já traduz texto e áudio. A tradução usa a sua cota da Lara, não a do ZapData.',connectCard:{title:"Conectar Lara Translate",description:"Testamos a credencial na Lara antes de salvar â se ela não funcionar, você descobre aqui e não no meio de uma tradução."},fields:{label:"Apelido (opcional)",labelPlaceholder:"Ex: Conta principal...",accessKeyId:"Access Key ID",accessKeyIdPlaceholder:"Cole o Access Key ID",accessKeySecret:"Access Key Secret",accessKeySecretPlaceholder:"Cole o Access Key Secret"},generateCredentialsAt:"Gerar credenciais na Lara",testing:"Testando...",testAndConnect:"Testar e conectar",toasts:{validateError:"Não foi possÃvel validar a credencial.",connected:"Lara Translate conectada!",saveError:"Erro ao salvar a credencial. Tente novamente.",renameError:"Erro ao renomear.",defaultUpdated:"Credencial padrão atualizada.",defaultError:"Erro ao definir a credencial padrão.",removed:"Credencial removida.",removeError:"Erro ao remover."},connectedAccounts:{title:"Contas conectadas",description:'A credencial marcada "Padrão" é a usada quando o bloco de tradução não escolhe uma especÃfica.',default:"Padrão",noLabel:"(sem apelido)",connectedOn:"Conectado em {{date}}",makeDefault:"Tornar padrão"},deleteDialog:{title:"Remover credencial",descriptionDefault:"Esta é a credencial padrão. Ao removê-la, outra credencial conectada é promovida a padrão automaticamente (ou, se era a única, traduzir imagem/documento fica indisponÃvel até você conectar outra).",descriptionNotDefault:"Remover esta credencial não afeta a padrão.",confirm:"Remover"},usedIn:{title:"Onde a integração é usada",description1:"No botão Traduzir Fluxo do Flow Builder â quando o fluxo tem blocos de imagem ou documento (PDF), aparece a opção de traduzir eles também usando esta conta.",description2:'Sem nenhuma conta conectada, a opção de traduzir imagem/documento fica desabilitada; o resto do "Traduzir Fluxo" (texto e áudio) continua funcionando normalmente.'}},oM={toasts:{nameRequired:"Nome da integração é obrigatório",created:"Webhook global criado!",createError:"Erro ao criar webhook",activated:"Webhook ativado",deactivated:"Webhook de
499sativado",statusChangeError:"Erro ao alterar status",updated:"Webhook atualizado!",updateError:"Erro ao atualizar webhook",deleted:"Webhook excluÃdo!",deleteError:"Erro ao excluir webhook",urlCopied:"URL copiada!"},title:"Webhook Global",newBadge:"Novo",subtitle:"Receba eventos de qualquer sistema externo e dispare fluxos automaticamente",newIntegration:"Nova Integração",howItWorks:{title:"Como funciona?",description:"Configure uma URL de webhook e envie qualquer payload JSON. O sistema detecta automaticamente o campo de telefone (phone, telefone, client_phone, whatsapp, celular, mobile) e dispara o fluxo configurado. Todos os campos do payload ficam disponÃveis como variáveis com prefixo"},empty:{title:"Nenhum webhook configurado",description:"Crie seu primeiro webhook global para começar a receber eventos externos"},createWebhook:"Criar Webhook",status:{active:"Ativo",inactive:"Inativo"},webhookUrl:"URL do Webhook",flowToTrigger:"Fluxo a ser acionado",selectFlow:"Selecione um fluxo...",instanceToTrigger:"Instância para Disparo",firstConnected:"Primeira conectada (padrão)",instanceWillTrigger:"Esta instância será usada para disparar o fluxo.",history:"Histórico (últimas 24h)",hide:"Ocultar",viewPayload:"Ver payload",noEventsLast24h:"Nenhum evento nas últimas 24 horas",createDialog:{title:"Nova Integração Webhook",description:"Configure uma nova integração para receber eventos externos",nameLabel:"Nome da Integração *",namePlaceholder:"Ex: Hotmart, Kiwify, Minha API..."},deleteDialog:{title:"Excluir Webhook",description:"Tem certeza que deseja excluir este webhook? Esta ação não pode ser desfeita."},eventTriggered:"Fluxo disparado",eventNotTriggered:"Não disparou",eventErrors:{noConnectedInstance:"Nenhum WhatsApp conectado no momento em que o evento chegou â o fluxo não rodou.",selectedInstanceOffline:"O WhatsApp escolhido para este webhook estava desconectado â o fluxo não rodou.",noPhone:"Não foi possÃvel identificar o telefone do cliente neste payload.",noFlow:"Nenhum fluxo selecionado para este webhook.",flowNotFound:"O fluxo selecionado foi excluÃdo ou está na lixeira.",groupFlow:"Fluxos de grupo não podem ser disparados por webhook.",contactFailed:"Falha ao criar o contato a partir deste evento."}},nM={title:"Integrações",subtitle:"Gerencie todas as integrações da plataforma",tabs:{pixel:"Pixel do Facebook",logzz:"Integração Logzz",elevenlabs:"Integração ElevenLabs",platformAi:"Integração de IA de Plataforma",mcp:"Conectar ao Claude (MCP)",pixGateway:"Gateways de Pagamentos",xpag:"XPag",zenith:"Zenith",laraTranslate:"Lara Translate"},badgeBeta:"Beta",badgeNew:"Novo"},rM={loadError:"Erro ao carregar instâncias",invalidValue:"Valor inválido",invalidValueDescription:"Use um número maior ou igual a 1, ou deixe em branco para usar o padrão global.",overrideRemoved:"Personalização removida",overrideSaved:"Limite personalizado salvo!",backToGlobalLimit:"Esta instância voltou a usar o limite global.",nowUsesLimit:"Esta instância agora usa {{limit}} leads/dia como limite.",customizePerInstance:"Personalizar por instância",loadingInstances:"Carregando instâncias...",noInstancesFound:"Nenhuma instância encontrada.",noRowUpdatedError:"Nenhuma linha foi atualizada (permissão?)"},iM={eventTypes:{pedido:"Pedido",abandonoCarrinho:"Abandono de Carrinho",expedicaoTradicional:"Expedição Tradicional"},toasts:{routingOn:"Vai continuar sempre na instância de origem do lead",routingOff:"Vai usar a instância configurada em cada webhook",routingUpdateError:"Erro ao atualizar a configuração",nameRequired:"Digite um nome para a integração",createSuccess:"Integração criada com sucesso!",createError:"Erro ao criar integração",removeSuccess:"Integração removida!",removeError:"Erro ao remover integração",tokenRegenerated:"Token regenerado!",tokenRegenerateError:"Erro ao regenerar token",activated:"Integração ativada!",deactivated:"Integração desativada!",statusChangeError:"Erro ao alterar status",flowUpdated:"Fluxo atualizado!",flowUpdateError:"Erro ao atualizar fluxo",instanceUpdated:"Instância atualizada!",instanceUpdateError:"Erro ao atualizar instância",orderStatusesUpdated:"Status do pedido atualizados!"},title:"Integrações Logzz",subtitle:"Receba webhooks de pedidos e acione fluxos automaticamente",newIntegration:"Nova Integração",routing:{title:"Evitar contato duplicado entre instâncias",description:"Se um mesmo lead cair em webhooks configurados pra instâncias diferentes (ex.: a Logzz entrega o mesmo pedido pra mais de uma integração sua), continua sempre na instância onde esse lead já tem conversa, em vez de abrir um contato novo na instância configurada n
499aquele webhook especÃfico. Deixe desligado se você usa múltiplas instâncias de propósito, pra mandar a mesma mensagem por mais de um número."},empty:{title:"Nenhuma integração configurada",description:"Crie sua primeira integração para começar a receber eventos da Logzz"},createIntegration:"Criar Integração",unnamedIntegration:"Integração sem nome",status:{active:"Ativo",inactive:"Inativo",label:"Status"},event:"Evento",webhookUrl:"URL do Webhook",flowToTrigger:"Fluxo a ser acionado",selectFlow:"Selecione um fluxo",noFlow:"Nenhum fluxo",instanceToTrigger:"Instância para Disparo",selectInstance:"Selecione uma instância",useFirstConnected:"Usar primeira conectada",instanceWillTriggerFallback:"Esta instância será usada para disparar o fluxo. Se nenhuma for selecionada, será usada a primeira conectada.",allStatuses:"Todos os status",deselectAll:"Desmarcar Todos",selectAll:"Selecionar Todos",filterStatusesNote:"Filtre quais status de pedido devem acionar o fluxo. Vazio = todos.",history:"Histórico (últimas 24h)",noRecentRequests:"Nenhuma requisição recente",noIdentification:"Sem identificação",detail:{customer:"Cliente",phone:"Telefone",product:"Produto",order:"Pedido",type:"Tipo",checkout:"Checkout"},viewFullPayload:"Ver payload completo",instructions:{title:"Como configurar na Logzz",step1Pre:"Acesse",step2:"Vá em Configurações â Integrações â Webhooks",step3:'Adicione um novo webhook de "Pedidos"',step4:"Cole a URL do webhook da integração desejada",step5:"Salve e teste a integração"},createDialog:{title:"Nova Integração Logzz",description:"Configure uma nova integração para receber eventos da Logzz",nameLabel:"Nome da Integração",namePlaceholder:"Ex: Webhook de Pedidos",eventTypeLabel:"Tipo de Evento",eventTypeHelp:"Selecione o tipo de evento que deseja receber",orderStatusLabel:"Status do Pedido (opcional)",orderStatusHelp:"Selecione quais status de pedido devem acionar o fluxo. Vazio = todos os status.",flowLabel:"Fluxo a ser acionado (opcional)",flowHelp:"O fluxo será acionado automaticamente quando o evento for recebido",instanceLabel:"Instância para Disparo (opcional)",instanceHelp:"Esta instância será usada para disparar o fluxo selecionado"},creating:"Criando..."},sM={never:"nunca",copied:"Copiado",confirmRevoke:'Revogar a credencial "{{name}}"? Quem estiver usando perde o acesso na hora.',toasts:{consentSaveError:"Não foi possÃvel salvar a sua escolha. Tente novamente.",consentGranted:"Análise de conversas liberada.",consentRevoked:"Acesso ao texto das conversas revogado.",nameRequired:"Dê um nome para a credencial (ex.: Claude, Cursor).",requiresActivePlan:"As credenciais MCP exigem um plano ativo do ZapData.",createError:"Não foi possÃvel criar a credencial. Tente novamente.",revokeError:"Não foi possÃvel revogar a credencial.",revoked:"Credencial revogada."},server:{title:"Conectar ao Claude (MCP)",description:'Conecte o Claude, o Cursor ou o n8n ao ZapData e pergunte sobre o seu negócio em linguagem natural â por exemplo, "quais estados mais compram de mim?".',addressLabel:"Endereço do servidor",whereItWorksTitle:"Onde funciona hoje",whereItWorksDescription:"Claude Code, Cursor e n8n â que aceitam credencial por cabeçalho. O Claude no navegador ainda não aceita este tipo de credencial; estamos preparando o acesso por login para ele."},consent:{title:"Deixar a IA analisar suas conversas",activeBadge:"Ativo",description:'Necessário para a IA responder coisas como "quais as principais dúvidas dos meus clientes?" ou "o que está travando minhas vendas?".',whatLeavesTitle:"O que sai da sua conta quando você ativa",bullet1:"Trechos curtos de conversas reais, de até 7 dias atrás.",bullet2Pre:"O nome e o telefone",bullet2Registered:"cadastrados",bullet2Mid:"do contato não são enviados. Dentro do texto, telefone, e-mail, CPF e links são mascarados por padrões automáticos â que",bullet2NotAllFormats:"não pegam todos os formatos",bullet2TextIs:"O texto",bullet2NotAnonymous:"não é anônimo",bullet2Post:"um cliente pode ter escrito o próprio nome, telefone ou endereço por extenso.",bullet3Pre:"Se seus clientes escrevem sobre saúde ou outro assunto pessoal, isso também pode aparecer nos trechos â inclusive",bullet3Sensitive:"dados sensÃveis",bullet3Post:"que a LGPD trata com regra própria (art. 11).",bullet4Pre:"O texto é enviado ao provedor de IA que",bullet4You:"você",bullet4Post:"conectar (ex.: Anthropic/Claude, nos Estados Unidos), pela sua própria assinatura â não pelo ZapData.",loading:"Carregandoâ¦",authorizedDescription:"Você autorizou a análise das conversas. Pode desfazer quando quiser â o acesso cai na hora.",revoke:"Revogar",authorizedOn:"Você autorizou{{when}}",onDate:" em {{date}}",before:" antes",textChangedDescription:"mas o texto desta autorização mudou. Confirme de novo para a análise continuar funcionando.",confirmAgain:"Confirmar de novo",withoutItDescription:"Sem isso, a IA ainda consegue ver volume e resumo da sua conta â mas não o texto das conversas.",legalPre:"Ao autorizar, você declara ser o",legalController:"controlador",legalMid:"desses dados e ter",legalBasis:"base legal",legalShare:"para compartilhá-los, conforme a",termsSection:"Seção 7 dos Termos",readAndAuthorize:"Li e autorizo"},credentials:{title:"Credenciais",newCredential:"Nova credencial",description:"Cada credencial dá acesso apenas ao que você escolher, e pode ser revogada a qualquer momento. Elas expiram sozinhas em 90 dias.",empty:{title:"Nenhuma credencial",description:"Crie uma para conectar o seu assistente."},createCredential:"Criar credencial",tokenKind:"Token",expired:"Expirada",lastUsed:"Ãltimo uso",expiresOn:"Expira em {{date}}"},createDialog:{createdTitle:"Credencial criada",createdDescription:"Copie agora â por segurança, ela não será mostrada de novo.",keepSafe:"Guarde em local seguro. Quem tiver esta credencial consegue ver os relatórios da sua conta. Se vazar, revogue aqui mesmo e crie outra.",yourCredential:"Sua credencial",connectClaudeCode:"Para conectar no Claude Code",cursorN8nNote:"No Cursor ou n8n, use o endereço acima e o cabeçalho",finish:"Concluir",newCredentialTitle:"Nova credencial",chooseAuthType:"Escolha o tipo de autenticação.",staticToken:"Token estático",staticTokenHint:"Cursor, n8n, Claude Code.",oauthHint:"Claude.ai e Claude Desktop.",oauth:{howToConnect:"Como conectar",step1Pre:"No Claude, vá em",step1Path:"Configurações â Conectores â Adicionar conector personalizado",step2:"Dê um nome (ex.: ZapData) e cole o endereço abaixo.",step3Pre:"Clique em",connect:"Conectar",step3Post:"o Claude abre o login do ZapData e pede sua autorização.",noIdSecretNote:"Não precisa preencher ID nem segredo de OAuth. Depois de autorizar, a credencial aparece nesta lista e pode ser revogada aqui."},namePlaceholder:"Ex.: Claude, Cursor",permission:"Permissão",comingSoon:"Em breve",consentWarningPre:"Você ainda não autorizou a análise de conversas. A credencial será criada, mas só vai ler",consentWarningVolumeSummary:"volume e resumo",consentWarningPost:"até você autorizar acima.",authorizeNow:"Autorizar agora"}},lM={toasts:{loadError:"Erro ao carregar pixels",requiredFields:"Campos obrigatórios",requiredFieldsDescription:"Preencha o ID do Pixel e o Token de Acesso",addSuccess:"Pixel adicionado com sucesso!",addError:"Erro ao adicionar pixel",fillIdAndToken:"Preencha ID e Token",updateSuccess:"Pixel atualizado!",removeSuccess:"Pixel removido!"},addPixel:"Adicionar Pixel",trackingNote:"O trackeamento é válido apenas para campanhas direto para WhatsApp, sem pressel.",nameOptional:"Nome (opcional)",namePlaceholder:"Ex: Pixel Principal",idLabel:"ID",pageIdLabel:"Page ID",pixelId:"ID do Pixel",pixelIdPlaceholder:"Ex: 1234567890123456",pageIdPlaceholder:"Ex: 123456789012345",accessToken:"Token de Acesso",accessTokenPlaceholder:"Token de acesso do Facebook",configuredPixels:"Pixels Configurados",pixelsCount_one:"{{count}} pixel cadastrado",pixelsCount_other:"{{count}} pixels cadastrados",pageIdForMessages:"Page ID (para mensagens)",unnamedPixel:"Pixel sem nome",active:"Ativo",inactive:"Inativo",token:"Token",howToConfigure:"Como configurar",watchVideo:"Assistir vÃdeo",clickToWatchPre:"Clique em",clickToWatchPost:"para ver o passo a passo.",deleteDialog:{title:"Excluir Pixel",description:"Tem certeza que deseja excluir este pixel? Esta ação não pode ser desfeita."}},cM={providers:{nexuspag:{docLabel:"Abrir a NexusPag",blurb:"Pegue a API Key no painel da NexusPag (Dashboard â Integrações). à uma chave só, começa com nxp_live_. Cobrança mÃnima de R$ 1,00."},skalepay:{docLabel:"Abrir a documentação da SkalePayments",blurb
499:"Pegue a API Key no painel da SkalePayments. à uma chave só, começa com sk_. Atenção ao limite do gateway: cada cobrança precisa ficar entre R$ 5,00 e R$ 600,00."},kairos:{docLabel:"Abrir painel da Kairos",blurb:"Pegue a Chave Pública (Client ID) e a Chave Privada (Client Secret) na área de credenciais de API do painel da Kairos â são esses os nomes que aparecem lá. As duas são obrigatórias: a Kairos autentica com as duas juntas, em cabeçalhos separados."},xpag:{docLabel:"Criar conta na XPag",blurb:"Gere o Client ID e o Client Secret no painel da XPag, em Dashboard â API. A XPag cobra nos QUATRO paÃses com a mesma credencial: PIX no Brasil, SPEI no México, Bre-B/Nequi na Colômbia e transferência bancária na Argentina â é só escolher o paÃs dentro do bloco. Ela também é a adquirente por trás do SPEI de outros gateways, então cobrar direto aqui tira uma camada."},zenith:{docLabel:"Criar conta na Zenith",blurb:"PIX no Brasil (copia-e-cola + QR) e, com a mesma credencial, México, Colômbia e Peru. No Peru, Yape, Plin, dinheiro e transferência aparecem conforme a disponibilidade verificada na sua credencial."}},toasts:{keyGenError:"Não foi possÃvel gerar a chave.",keyGenErrorRetry:"Erro ao gerar a chave. Tente novamente.",copyError:"Não consegui copiar â selecione e copie manualmente.",validateError:"Não foi possÃvel validar a credencial.",connectedTo:"Conectado a {{account}}!",connected:"Gateway conectado!",saveError:"Erro ao salvar a credencial. Tente novamente.",renameError:"Erro ao renomear.",defaultUpdated:"Credencial padrão atualizada.",defaultError:"Erro ao definir a credencial padrão.",removed:"Credencial removida.",removeError:"Erro ao remover."},title:"Gateways de Pagamentos",subtitle:'Conecte a sua conta de gateway para o bloco "API de Pagamentos" gerar cobranças dentro dos fluxos. Pode conectar quantas quiser, inclusive mais de uma do mesmo provedor â o dinheiro cai direto na sua conta do gateway, o ZapData não intermedia.',connectGateway:"Conectar gateway",connectGatewayDescription:"Testamos a credencial no gateway e mostramos qualquer falha aqui, antes que ela afete um atendimento.",provider:"Provedor",nicknameOptional:"Apelido (opcional)",nicknamePlaceholder:"Ex: Conta principal, Loja 2...",clientIdLabel:"Client ID",clientSecretLabel:"Client Secret",pasteClientId:"Cole o Client ID",pasteClientSecret:"Cole o Client Secret",publicKeyLabel:"Chave Pública (Client ID)",pastePublicKey:"Cole a Chave Pública",privateKeyLabel:"Chave Privada (Client Secret)",pastePrivateKey:"Cole a Chave Privada",kiwify:{step1Title:"1. Gere a sua chave",step1Description:"Criamos o par de chaves para você â nada de terminal. Você só copia a chave pública e cadastra na Kiwify.",generating:"Gerando...",generateKey:"Gerar chave",keyGenerated:"Chave gerada. Copie a pública abaixo e cadastre na Kiwify (Configurações â Credenciais de API), marcando a permissão de gerenciar QR Codes.",publicKeyOpenssh:"Chave pública â formato OpenSSH",askedForPem:"A Kiwify pediu o formato PEM?",copyPem:"Copiar PEM",privateKeyReadyNote:"A chave privada correspondente já está pronta aqui e nunca aparece na tela. Ela só é salva quando você concluir com o Access ID abaixo.",haveOwnKey:"Já tenho uma chave própria â colar manualmente",privateKeyPkcs8:"Chave privada (PKCS#8)",generateForMe:"Gerar para mim",ed25519Pre:"Precisa ser Ed25519 no formato PKCS#8",ed25519Post:"Chave de",ed25519Post2:"não funciona.",step2Label:"2. Access ID (a Kiwify mostra ao cadastrar a chave)"},testing:"Testando...",testAndConnect:"Testar e conectar",connectedGateways:"Gateways conectados",connectedGatewaysDescription:'A credencial marcada "Padrão" é a usada quando o bloco de fluxo não escolhe uma especÃfica. O padrão é por provedor.',default:"Padrão",nickname:"Apelido",noNickname:"(sem apelido)",connectedOn:"Conectado em {{date}}",makeDefault:"Tornar padrão",usedIn:{title:"Onde a integração é usada",descriptionPre:"No bloco",paymentApiBlock:"API de Pagamentos",descriptionPost:'do Flow Builder, que gera a cobrança, manda o QR Code e o botão de copiar o código para o lead, e depois espera a confirmação do pagamento para seguir por "Pago" ou "Expirou".',noGatewayNote:"Sem nenhum gateway conectado, o bloco sai pela saÃda de erro sem cobrar nada â o resto do fluxo continua normalmente."},deleteDialog:{title:"Remover credencial",descriptionDefault:"Esta é a credencial padrão deste provedor. Ao removê-la, outra credencial do mesmo provedor é promovida a padrão automaticamente (ou, se era a única, os blocos que usam este provedor passam a sair pela saÃda de erro).",descriptionNotDefault:"Blocos configurados para usar especificamente esta credencial passam a sair pela saÃda de erro até você apontá-los para outra."},zenithTab:{subtitle:"Conecte sua conta Zenith e gerencie os métodos disponÃveis no bloco exclusivo."},connectedAccounts:"Contas conectadas",zenith:{apiKeyLabel:"API Key",pasteApiKey:"Cole a API Key da Zenith",apiSecretLabel:"API Secret",pasteApiSecret:"Cole a API Secret da Zenith",noSandboxNote:"A Zenith não tem ambiente de teste: toda cobrança criada é real. Teste com o valor mÃnimo.",webhookRegisterFailed:"Credencial conectada, mas não consegui cadastrar o webhook na Zenith. O pagamento ainda é confirmado sozinho (o sistema consulta o gateway), só demora um pouco mais. Você pode cadastrar a URL do webhook à mão no painel deles.",registerWebhook:"Ca
499dastrar webhook",webhookRegistered:"Webhook cadastrado na Zenith. A confirmação de pagamento passa a chegar na hora.",revalidate:"Revalidar",revalidated:"Credencial revalidada e métodos do Peru atualizados.",revalidationFailed:"Não foi possÃvel revalidar a credencial Zenith.",revalidationFailedAfterCreate:"A credencial foi salva, mas a revalidação server-side falhou: {{error}}. Revalide antes de usar métodos do Peru.",availableMethods:"Peru: {{methods}}",noPeruMethods:"Esta credencial não possui métodos do Peru habilitados.",capabilitiesMissing:"Métodos do Peru ainda não verificados.",cashMethod:"Dinheiro",bankTransferMethod:"Transferência bancária"}},dM={startingFrom:"A partir de {{price}}",toasts:{pasteKey:"Cole a sua chave de API.",connected:"Chave conectada!",saveError:"Erro ao salvar a chave. Tente novamente.",renameError:"Erro ao renomear a chave.",defaultUpdated:"Chave padrão atualizada.",defaultError:"Erro ao definir a chave padrão.",removed:"Chave removida.",removeError:"Erro ao remover a chave."},title:"Integração de IA de Plataforma",subtitle:"Conecte suas próprias chaves de IA (Gemini, OpenAI, Anthropic ou DeepSeek) para os blocos de fluxo que usam IA auxiliar. Pode conectar quantas quiser, incl. mais de uma do mesmo provedor â o consumo é cobrado direto na sua conta de cada provedor.",addKey:"Adicionar chave",addKeyDescription:"Escolha o provedor, dê um apelido (opcional, útil se for adicionar mais de uma chave do mesmo provedor) e cole a chave de API.",provider:"Provedor",noAudioWarning:"Este provedor não processa áudio nativamente â se você também usar esta chave na ferramenta de Transcrição de Ãudio, ela não vai funcionar. Prefira Gemini ou OpenAI para transcrição.",nicknameOptional:"Apelido (opcional)",nicknamePlaceholder:"Ex: Conta principal, Cliente X...",apiKey:"Chave da API",getKeyAt:"Obtenha em",keyStoredNote:"A chave fica guardada apenas na sua conta.",connectedKeys:"Chaves conectadas",connectedKeysDescription:'A chave marcada "Padrão" é usada por qualquer bloco/fluxo que não tenha uma chave especÃfica escolhida.',usedIn:{title:"Onde a integração é usada",buttonMatcher:"Matcher de botão interativo (identifica resposta livre do lead)",antiSpamVariation:'Variação anti-spam de texto (bloco "AI Text")',genericAiNode:'Nó genérico "ai" do Flow Builder',aiConverterBlock:'Bloco "IA Converter"',audioTranscription:"Transcrição de Ãudio (ferramenta standalone)",flowTranslation:"Tradução de fluxo: transcrição e tradução do texto do áudio original (a clonagem de voz e a fala traduzida usam sua chave ElevenLabs, separadamente)",keySelectorBlocks:"Blocos com seletor de chave (IA Responder, Aguardar Resposta IA, Condição IA, gatilho Pix Detectado, etc.)",noKeyNote:'Sem nenhuma chave conectada, esses blocos ficam sem efeito (sem match, sem variação, sem resposta gerada, sem transcrição) â o resto do fluxo continua normalmente. Blocos com seletor de chave sem seleção explÃcita usam a chave marcada "Padrão".'},deleteDialog:{title:"Remover chave",descriptionDefault:'Esta é a chave padrão. Ao removê-la, outra chave conectada será promovida a padrão automaticamente (ou, se essa era a única, os blocos que usam "Chave da Integração" ficam sem efeito até você conectar outra).',descriptionNotDefault:"Fluxos configurados para usar especificamente esta chave passam a usar sua chave padrão automaticamente."}},uM={title:"Notificações Push",subtitle:"Receba alertas em tempo real no seu dispositivo",addDeviceToken:"Adicionar token do dispositivo",tokenPlaceholder:"Cole o token aqui",generateTokenHere:"Gerar token aqui",registeredDevices_one:"{{count}} dispositivo registrado",registeredDevices_other:"{{count}} dispositivos registrados",notificationTypes:"Tipos de notificação",checkNow:"Verificar agora",sendingTest:"Enviando teste...",testNotification:"Enviar notificação de teste",adIssues:{disabled:{label:"Conta desativada",description:"A Meta desativou a conta de anúncios â geralmente por problema de pagamento."},unsettled:{label:"Fatura em aberto",description:"A conta tem uma fatura em aberto com pagamento pendente."},riskReview:{label:"Em revisão de risco",description:"A conta está em análise de risco pela Meta."},pendingSettlement:{label:"Cobrança pendente",description:"A conta está pausada aguardando a cobrança."},gracePeriod:{label:"PerÃodo de tolerância",description:"A conta está em tolerância â regularize o pagamento antes que seja desativada."},pendingClosure:{label:"Encerramento pendente",description:"A conta está a caminho do encerramento definitivo."},closed:{label:"Conta encerrada",description:"A Meta encerrou definitivamente a conta de anúncios."},balanceDue:{label:"Saldo devedor",description:"A conta tem saldo devedor pendente de pagamento."}},toasts:{enabled:"Notificações push ativadas",disabled:"Notificações push desativadas",willReceive:"Você vai re
499ceber notificações push neste dispositivo.",willNotReceive:"Você não vai mais receber notificações push.",settingsChangeError:"Erro ao alterar a configuração",saleOn:"Notificação de vendas ativada",saleOff:"Notificação de vendas desativada",disconnectOn:"Notificação de desconexão ativada",disconnectOff:"Notificação de desconexão desativada",leadRotationOn:"Notificação de rodÃzio de leads ativada",leadRotationOff:"Notificação de rodÃzio de leads desativada",logzzOn:"Notificação de pedidos Logzz ativada",logzzOff:"Notificação de pedidos Logzz desativada",desktopOn:"Notificação no navegador ativada",desktopOff:"Notificação no navegador desativada",adAccountIssueOn:"Notificação de problemas na conta de anúncios ativada",adAccountIssueOff:"Notificação de problemas na conta de anúncios desativada",adMetricsOn:"Notificação de métricas de anúncios ativada",adMetricsOff:"Notificação de métricas de anúncios desativada",limitUpdated:"Limite atualizado!",limitSetTo:"O limite diário de rodÃzio agora é {{limit}} leads.",notificationsSent:"Notificações enviadas!",checkComplete:"Verificação concluÃda",checkError:"Erro ao verificar",tokenExists:"Este token já está cadastrado",tokenAdded:"Dispositivo adicionado!",tokenRemoved:"Dispositivo removido",testSent:"Notificação de teste enviada!",testSentDescription_one:"Enviada para {{count}} dispositivo.",testSentDescription_other:"Enviada para {{count}} dispositivos.",testFailed:"Falha ao enviar a notificação de teste",testFailedDescription:"Verifique se o token está correto e tente novamente.",testError:"Erro ao testar a notificação"},facebookGate:{pre:"DisponÃvel só com",active:"conta de anúncio ativa",mid:"conectada. Conecte uma em",adsTab:"Ads â Configurações",post:"."},whatsapp:{title:"WhatsApp",newSales:{label:"Novas vendas",description:"Receba um alerta a cada venda detectada."},disconnect:{label:"Desconexão do WhatsApp",description:"Seja avisado quando um número desconectar."},leadRotation:{label:"RodÃzio de leads",description:"Avisa quando um número atinge o limite diário de leads.",maxLimit:"Limite diário máximo"},logzz:{label:"Pedidos Logzz",description:"Receba um alerta a cada pedido Logzz recebido."},desktop:{label:"Notificação no navegador",description:"Receba notificações também pelo navegador (desktop), além do app."}},facebook:{title:"Facebook Ads",accountIssue:{label:"Problemas na conta de anúncios",description:"Seja avisado quando a Meta desativar, pausar ou encerrar uma conta."},whichAlerts:"Quais alertas você quer receber?",whichAlertsDescription:"Escolha os tipos de problema que devem gerar notificação.",adMetrics:{label:"Métricas de anúncios",description:"Seja avisado quando uma métrica (gasto, CPC, CPA...) ultrapassar o limite definido."}},facebookTest:{testError:"Erro ao testar",notificationsSent:"Notificações enviadas!",notificationsQueued:"{{count}} notificações enfileiradas para envio.",noActiveRule:"Nenhuma regra de métrica ativa",missingToken:"{{count}} conta(s) sem token de acesso configurado â verifique a integração do Facebook Ads.",fbErrorAllAccounts:"O Facebook recusou {{count}} conta(s) â nenhuma pôde ser verificada.",rulesEvaluatedNoSpend:"{{rules}} regra(s) avaliada(s) em {{accounts}} conta(s); {{noData}} sem dados no perÃodo.",rulesEvaluatedBelowThreshold:"{{rules}} regra(s) avaliada(s) â nenhuma atingiu o limite configurado.",rulesAndAccountsChecked:"{{rules}} regra(s) avaliada(s) em {{accounts}} conta(s).",noProblematicAccount:"Nenhuma conta com problema encontrada.",checkCompleteNothing:"Verificação concluÃda",checkingRules:"Verificando regras...",testNow:"Testar agora"}},mM={title:"Configurações",menu:{notifications:{label:"Notificações Push",description:"Configure alertas e dispositivos",submenu:{sales:"Personalizar Vendas",logzz:"Personalizar Logzz"}},collaborators:{description:"Gerencie sub-contas da sua equipe"},globalVariables:{label:"Variáveis Globais",description:"Crie valores reutilizáveis para fluxos e mensagens"}}},pM={title:"Variáveis Globais",subtitle:"Crie valores reutilizáveis da sua conta e use {{token}}
499 em todos os seus fluxos e mensagens",newButton:"Nova Variável",createButton:"Criar Variável",searchPlaceholder:"Buscar por nome ou descrição",loading:"Carregando variáveis...",emptyTitle:"Nenhuma variável encontrada",emptyDescription:"Crie sua primeira variável para usar em fluxos e no chat ao vivo",noResults:"Nenhuma variável corresponde à busca.",noValue:"sem valor",typeText:"Texto",typeNumber:"Número",form:{createTitle:"Nova Variável Global",editTitle:"Editar Variável Global",description:"Crie um identificador reutilizável em fluxos como {{token}}.",nameLabel:"Nome",namePlaceholder:"Ex: nome_01 (prefixo g_ será adicionado automaticamente)",nameInvalid:"Use apenas letras minúsculas, números e _ (máx. 50 caracteres)",descriptionLabel:"Descrição",descriptionPlaceholder:"Descreva o que esta variável representa",typeLabel:"Tipo",typeNote:"Se mudar o tipo, ajuste o valor para ser compatÃvel (número válido ou texto).",valueLabel:"Valor inicial (opcional)",valuePlaceholder:"Ex: texto livre",valueInvalidNumber:"Para o tipo Número, informe um valor numérico válido (ex: 7.90)",cancel:"Cancelar",create:"Criar",save:"Salvar"},deleteDialog:{title:"Excluir variável global?",description:"{{name}} será removida da sua conta. Mensagens que usarem {{token}} serão enviadas com o valor vazio.",confirm:"Excluir"},toasts:{created:"Variável criada!",updated:"Variável atualizada!",deleted:"Variável excluÃda",error:"Erro ao salvar variável",duplicate:"Já existe uma variável com esse nome",limitReached:"Limite de 100 variáveis globais atingido",valueTooLong:"Valor ou descrição longos demais (máx. 2000 e 200 caracteres)"}},hM={pageTitle:"Personalizar Notificações de Vendas",howItWorks:{title:"Como funciona?",pre:"Crie vários templates de notificação e quando uma venda for detectada, um deles será escolhido",random:"aleatoriamente",post:"para ser enviado.",availableVariables:"Variáveis disponÃveis:"},variables:{valor:"Valor da venda",moeda:"SÃmbolo da moeda detectada (R$, US$, MX$...)",telefone:"Telefone do cliente",cliente:"Nome do cliente (destinatário do Pix)"},hideValue:{label:"Ocultar valor da venda",hiddenDescription:"O valor será ocultado nas notificações",visibleDescription:"O valor será exibido nas notificações"},toasts:{valueHidden:"Valor oculto",valueVisible:"Valor visÃvel",hiddenToastDescription:"O valor da venda não será exibido nas notificações",visibleToastDescription:"O valor da venda será exibido nas notificações",templateAdded:"Template adicionado!",templateSaved:"Template salvo!",templateRemoved:"Template removido",templateActivated:"Template ativado",templateDeactivated:"Template desativado"},templatesSection:{title:"Templates de Notificação",emptyDescription:"Adicione templates personalizados",activeCount:"{{active}} de {{total}} ativos",empty:"Nenhum template configurado",emptyNote:"Será usado o template padrão do sistema",titleLabel:"TÃtulo",titlePlaceholder:"TÃtulo da notificação",messageLabel:"Mensagem",messagePlaceholder:"Use {moeda} {valor} para incluir a moeda e o valor da venda",active:"Ativo",inactive:"Inativo"},deleteDialog:{title:"Remover template?",description:"Esta ação não pode ser desfeita. O template será removido permanentemente.",confirm:"Remover"}},fM={pageTitle:"Personalizar Notificações Logzz",howItWorks:{title:"Como funciona?",pre:"Crie vários templates de notificação e quando um pedido Logzz for recebido, um deles será escolhido",random:"aleatoriamente",post:"para ser enviado.",availableVariables:"Variáveis disponÃveis:"},variables:{valor:"Valor do pedido",status:"Status do pedido",cliente:"Nome do cliente",pedido:"Número do pedido",produto:"Nome do produto"},templatesSection:{title:"Templates de Notificação",emptyDescription:"Adicione templates personalizados",activeCount:"{{active}} de {{total}} ativos",empty:"Nenhum template configurado",emptyNote:"Será usado o template padrão do sistema",titleLabel:"TÃtulo",titlePlaceholder:"TÃtulo da notificação",messageLabel:"Mensagem",messagePlaceholder:"Use {valor}, {status}, {cliente}, {pedido}, {produto}",active:"Ativo",inactive:"Inativo"},toasts:{templateAdded:"Template adicionado!",templateSaved:"Template salvo!",templateRemoved:"Template removido",templateActivated:"Template ativado",templateDeactivated:"Template desativado"},deleteDialog:{title:"Remover template?",description:"Esta ação não pode ser desfeita.",confirm:"Remover"}},gM={flows_draft:{label:"Criar rascunho de fluxo",description:"Cria fluxos DESLIGADOS, sem número atribuÃdo, para você revisar e ativar. Não envia mensagem para ninguém."},flows_edit:{label:"Ler e editar fluxos existentes",description:"Deixa a IA ler seus fluxos para aprender com eles e alterar um fluxo que já existe. Se o fluxo estiver LIGADO, a mudança vale na hora. Dá para desfazer. Chaves (IA, PIX) nunca são lidas nem alteradas."},reports_geography:{label:"Geografia de compradores",description:"De quais paÃses (DDI) e estados vêm suas vendas. Só dados agregados â nunca telefone, nome ou conversa."},reports_conversations:{label:"Histórico de conversas",description:"Deixa a IA analisar as conversas da sua conta e tirar insights (dúvidas, objeções, o que trava a venda)."}},vM={adMetricRules:JD,collaborators:eM,elevenLabs:tM,laraTranslate:aM,globalWebhook:oM,integrationsSettings:nM,leadRotationOverrides:rM,logzz:iM,mcp:sM,pixel:lM,pixGateway:cM,platformAI:dM,pushNotifications:uM,settingsPage:mM,globalVariables:pM,saleNotifications:hM,logzzNotifications:fM,mcpScopes:gM},bM={title:"Financeiro",subtitle:"Controle de investimentos, vendas e métricas de marketing",productPlaceholder:"Produto",allProducts:"Todos os produtos",newProductTitle:"Novo produto",productLabelAll:"todos",productLabelFallback:"produto",tabs:{dashboard:"Dashboard",dados:"Dados",graficos:"Gráficos",consolidado:"Consolidado"}},yM={hoje:"Hoje",semana:"Esta semana","este-mes":"Esse mês","mes-passado":"Mês passado","este-ano":"Esse ano",tudo:"Todo o perÃodo",personalizado:"Personalizado"},xM={selectDates:"Selecionar datas",selectEndDate:"Selecione a data final",selectStartAndEndDate:"Selecione a data inicial e a final"},wM={0:"Janeiro",1:"Fevereiro",2:"Março",3:"Abril",4:"Maio",5:"Junho",6:"Julho",7:"Agosto",8:"Setembro",9:"Outubro",10:"Novembro",11:"Dezembro"},CM={date:"Data",product:"Produto",spend:"Gasto",revenue:"Receita",investment:"Investimento",sales:"Vendas",leads:"Leads",profit:"Lucro",roi:"ROI",cpa:"CPA",cpl:"CPL",conversion:"Conv.",actions:"Ações",month:"Mês"},PM={investmentTotal:"Investimento Total",totalSales:"Total de Vendas",totalLeads:"Total de Leads"},AM={date:"Data",product:"Produto",spend:"Gasto",revenue:"Receita",sales:"Vendas",leads:"Leads",profit:"Lucro",roiPercent:"ROI%",cpa:"CPA",cpl:"CPL",conversionPercent:"Conversao%"},EM={errorNameRequired:"Insira um nome para o produto",successCreated:"Produto criado!",errorCreate:"Erro ao criar produto. Tente novamente.",title:"Novo produto",description:"Crie um produto para registrar os dados financeiros dele.",nameLabel:"Nome do produto",namePlaceholder:"Ex: Curs
499o WhatsApp Pro",creating:"Criando...",create:"Criar produto"},SM={newProduct:"Novo Produto",newRecord:"Novo Registro",title:"Registros Diários",emptyStateBefore:"Nenhum registro. Clique em",emptyStateAfter:"para começar.",confirmDelete:"Apagar este registro?",deletedToast:"Registro apagado."},NM={exportCsv:"Exportar CSV",netProfitTotal:"Lucro LÃquido Total",roiLabel:"ROI",roasLabel:"ROAS",totalRevenue:"Faturamento Total",costPerLead:"Custo por Lead",avgCpa:"CPA Médio",conversionRate:"Taxa de Conversão",emptyStateBefore:"Nenhum registro no perÃodo selecionado. Adicione dados na aba",emptyStateTabName:"Dados"},kM={emptyState:"Sem dados no perÃodo. Adicione registros na aba Dados.",chartLucroDiario:"Lucro Diário",chartFaturamentoDiario:"Faturamento Diário",chartVolumeVendas:"Volume de Vendas",chartRoas:"ROAS",chartLeadsRecebidos:"Leads Recebidos",chartTaxaConversao:"Taxa de Conversão",statLucro:"{{value}} no perÃodo",statFaturamento:"{{value}} no perÃodo",statVendas:"{{value}} vendas no perÃodo",statRoas:"{{value}}% no perÃodo",statLeads:"{{value}} leads no perÃodo",statConversao:"{{value}}% no perÃodo",suffixVendas:" vendas",suffixLeads:" leads"},TM={yearLabel:"Ano:",viewAnnual:"Visão Anual",viewMonthly:"Por Mês",revenueTotal:"Receita Total",netProfit:"Lucro LÃquido",annualRoi:"ROI Anual",monthlyBreakdownTitle:"Consolidado mês a mês â {{year}}",totalYear:"Total {{year}}"}
499,IM={errorSelectProduct:"Selecione um produto.",successUpdated:"Registro atualizado!",successAdded:"Registro adicionado!",errorSave:"Erro ao salvar o registro.",titleEdit:"Editar registro",titleNew:"Novo registro",description:"Preencha os dados; Lucro, ROI, CPA, CPL e Conversão são calculados.",productLabel:"Produto",selectPlaceholder:"Selecione",spendLabel:"Gasto (R$)",revenueLabel:"Receita (R$)",saveChanges:"Salvar alterações",addRecord:"Adicionar registro"},RM={credits:"créditos"},DM={active:"Renovação automática ativa",description:"Suas instâncias serão renovadas automaticamente via cartão cadastrado."},MM={yourWallet:"Sua Carteira",recharge:"Recarregar Créditos",recentTransactions:"Ãltimas transações"},FM={testModeDeactivated:"Modo de teste desativado",partialSimulationTitle:"Simulação: Membro Parcial",testModeTitle:"Modo Teste Admin",partialDescription:"Você está vendo exatamente como um membro parcial veria (0 instâncias grátis, sistemas bloqueados)",testDescription:"Sistema de créditos ativo apenas para você. Teste todas as funcionalidades.",deactivate:"Desativar"},LM={expiresToday:"Expira hoje!",oneDay:"1 dia",daysCount:"{{count}} dias",trialBadge:"Trial {{badge}}",expiringTitle:"Instância expirando!",keepActiveTitle:"Mantenha sua instância ativa",description:"Para manter esta instância ativa após o vencimento, assine um plano. Renovação com créditos não está mais disponÃvel.",expiresTodayLong:"Esta instância expira hoje!",remainingDays_one:"Restam {{count}} dia de uso",remainingDays_other:"Restam {{count}} dias de uso",viewPlans:"Ver Planos"},jM={title:"Créditos Insuficientes",descriptionPrefix:"Você não tem créditos suficientes para usar",currentBalance:"Seu saldo atual",required:"Necessário",missingPrefix:"Faltam",recharge:"Recarregar Créditos"},_M={premiumFeatureTitle:"{{featureName}} â Recurso Premium",notAvailableOnPlan:"não está disponÃvel no seu plano",startingModePlan:"Modo Iniciante",upgradeToUnlock:"Faça upgrade para um plano superior para liberar o uso.",availableOnPlans:"está disponÃvel nos planos",accessModePlan:"Modo Acesso",orHigher:"ou superiores.",upgradeYourPlan:"Faça upgrade do seu plano",plansWithFeature:"Planos com este recurso incluso",migrateHint:"Migre para Acesso, Expansão, Ascensão, Dominação ou Titan e use sem limites.",allPlansHint:"Acesso, Expansão, Ascensão, Dominação e Titan â uso ilimitado.",upgradeButton:"Fazer Upgrade",viewPlansButton:"Ver Planos"},OM={title:"Assine um plano",description:"Para criar ou manter instâncias ativas, escolha um plano. Pagamento avulso com créditos foi descontinuado.",planLabel:"Plano {{planName}}",perMonth:"/mês",instancesIncluded_one:"{{count}} instância incluÃda",instancesIncluded_other:"{{count}} instâncias incluÃdas",aiCredits:"{{count}} créditos de IA",viewPlans:"Ver Planos DisponÃveis"},BM={title:"Criar Nova Instância",description:"Escolha como deseja criar esta instância",usePlanSlot:"Usar slot do plano",instanceAvailable_one:"{{count}} instância disponÃvel no seu plano",instanceAvailable_other:"{{count}} instâncias disponÃveis no seu plano",noPlanSlot:"Nenhum slot de plano disponÃvel",useExtraSlot:"Usar slot avulso",slotAvailable_one:"{{count}} slot",slotAvailable_other:"{{count}} slots",noExtraSlot:"Nenhum slot avulso disponÃvel"},zM={perUse:"por uso",free:"Grátis",costPerEach:"Cada {{item}} custa {{cost}} créditos"},VM={title:"Meu Plano",description:"Gerencie sua assinatura e plano"},qM={title:"Como deseja recarregar?",pixDescription:"Pagamento via PIX",cardTitle:"Cartão de Crédito",cardDescription:"Pagamento via cartão de crédito"},UM={title:"Adicionar Cartão",description:"Adicione um cartão para recargas mais rápidas e renovação automática.",cardNumber:"Número do Cartão",expiry:"Validade",cardholderName:"Nome do Titular",cardholderPlaceholder:"TITULAR DO CARTÃO",saving:"Salvando...",saveCard:"Salvar Cartão",encryptedNote:"Seus dados são criptografados e seguros.",cardSavedToast:"Cartão salvo com sucesso!",cardSavedTitle:"Cartão Salvo!",cardSavedDescription:"Seu cartão foi adicionado com sucesso.",errors:{unavailableTitle:"Pagamento indisponÃvel",unavailableMessage:"O formulário de cartão ainda não carregou. Tente novamente em instantes.",cardFieldUnavailableTitle:"Campo de cartão indisponÃvel",cardFieldUnavailableMessage:"Não conseguimos carregar o campo do cartão agora. Feche e abra novamente.",cardDeclined:"Cartão recusado",couldNotSaveCard:"Não foi possÃvel salvar o cartão",invali
499dCardData:"Dados do cartão inválidos",invalidExpiry:"Validade inválida",invalidCvv:"CVV inválido",cardholderRequired:"Informe o nome do titular como está impresso no cartão.",saveCardError:"Erro ao salvar cartão",saveCardErrorFallback:"Não foi possÃvel salvar o cartão agora. Tente novamente em alguns minutos."}},WM={title:"Recarga via Cartão",cardholderRequired:"Informe o nome do titular como está impresso no cartão.",chooseAmount:"Escolha o valor para recarregar",customAmount:"Valor personalizado",orChooseAmount:"Ou escolha um valor",continueWithAmount:"Continuar com R$ {{amount}}",amountLimits:"Valor mÃnimo: R$ 5,00 ⢠Valor máximo: R$ 5.000,00",chooseMethod:"Escolha o Método",payAmount:"Pagar R$ {{amount}}",expiresOn:"Expira em {{month}}/{{year}}",useNewCard:"Usar novo cartão",cardholderName:"Nome do Titular",cardholderPlaceholder:"TITULAR DO CARTÃO",cardNumber:"Número do Cartão",expiry:"Validade",processing:"Processando...",securePayment:"Pagamento seguro e criptografado.",paymentApproved:"Pagamento Aprovado!",paymentApprovedToast:"Pagamento aprovado!",amountAddedToBalance:"R$ {{amount}} foram adicionados ao seu saldo.",errors:{stripeNotLoaded:"Stripe não carregado",cardElementNotFound:"Elemento de cartão não encontrado",paymentError:"Erro ao processar pagamento",confirmError:"Erro ao confirmar pagamento. Entre em contato com o suporte.",unexpectedStatus:"Status do pagamento inesperado. Tente novamente.",minAmount:"Valor mÃnimo: R$ 5,00",maxAmount:"Valor máximo: R$ 5.000,00",chargeCardError:"Erro ao cobrar cartão"}},$M={title:"Escolha quais números manter",descriptionPrefix:"Seu plano mudou e agora permite",descriptionSuffix:"número(s) conectado(s). Selecione até {{count}} para manter â os demais serão desconectados. Ou volte para um plano maior.",selectedCount:"{{selected}} / {{max}} selecionado(s)",keepSelectedButton:"Manter selecionados e continuar",backToLargerPlan:"Voltar para um plano maior",readyTitle:"Pronto!",readyDescription:"Números ajustados ao seu plano.",errors:{tooManyKept:"Você só pode manter {{count}} número(s).",couldNotComplete:"Não foi possÃvel concluir. Recarregue e tente de novo.",genericTitle:"Erro",tryAgain:"Tente novamente."}},GM={genericRequestError:"Erro ao processar requisição.",pix:{generateFailedTitle:"Não foi possÃvel gerar o PIX",tryAgainShortly:"Tente novamente em instantes.",generateErrorFallback:"Erro ao gerar PIX",paymentConfirmedTitle:"Pagamento confirmado!",planActivated:"Plano {{planName}} ativado.",chargeExpired:"Cobrança expirada",confirmedTitle:"Pagamento Confirmado!",activatedSuccess:"Plano {{planName}} ativado com sucesso.",headerAmountPlan:"PIX R$ {{amount}} â {{planName}}",scanQrCode:"Escaneie o QR Code",scanInstructions:"Abra o app do seu banco, escaneie o código abaixo ou copie e cole. O plano será ativado automaticamente após o pagamento.",qrCodeAlt:"QR Code PIX",copyCode:"Ou copie o código PIX:",codeCopied:"Código copiado!",waitingPayment:"Aguardando pagamento...",loadingHeader:"PIX â Plano {{planName}}",generatingQr:"Gerando QR Code PIX..."},plans:{subtitles:{iniciante:"Dá o primeiro passo",acesso:"Triplicou a operação",expansao:"Sem fila, sem limite",ascensao:"Vende enquanto dorme",dominacao:"A máquina não para",titan:"Escala industrial",enterprise:"Escala sob demanda"},features:{cloud:"100% em nuvem, 24/7",aiAgent:"Agente de I.A.",metaPixel:"Pixel da Meta",pixAuto:"Pix identificado auto.",crmKanban:"CRM Kanban",iaStudio:"I.A Studio",adsTab:"Aba Ads (controle seus anúncios)",groupTab:"Aba Grupo (gerencie seus grupos)"}},cardForm:{alreadyActivePlanTitle:"Você já tem um plano ativo",couldNotStartSubscription:"Não foi possÃvel iniciar a assinatura",missingClientSecret:"Não foi possÃvel obter o segredo do pagamento. Tente novamente.",couldNotSaveCard:"Erro ao salvar o cartão",cardDeclined:"Cartão recusado",processError:"Erro ao processar pagamento",unexpectedStatus:"Status do pagamento inesperado. Tente novamente.",approvedTitle:"Pagamento Aprovado!",planActivatedSuccess:"Plano {{planName}} ativado com sucesso.",confirmPayment:"Confirmar Pagamento R$ {{amount}}",cardholderName:"Nome do Titular",cardholderPlaceholder:"TITULAR DO CARTÃO",cardholderRequired:"Informe o nome do titular como está impresso no cartão.",cardNumber:"Número do Cartão",expiry:"Validade",freeTrialBanner:{freeDays:"7 dias grátis",youIntro:"â você",notChargedToday:"não será cobrado hoje",cardSavedLeadIn:". Seu cartão fica salvo e a 1ª cobrança de",onlyHappens:"só acontece",in7Days:"daqui a 7 dias",cancelFooter:". Pode cancelar antes disso sem pagar nada."},processing:"Processando...",startFreeTrial:"Iniciar teste grátis de 7 dias",freeTrialSecureNote:"Sem cobrança hoje · cartão salvo com segurança",securePaymentNote:"Pagamento 100% seguro e criptografado.",timeoutTitle:"Tempo esgotado. Tente novamente.",timeoutDescription:"O processamento demorou mais do que o esperado."},toasts:{planActivatedTitle:"Plano ativado!",freePlanActivated:"Plano Modo Recarga ativado com sucesso.",genericErrorTitle:"Erro",couldNotActivatePlan:"Não foi possÃvel ativar o plano.",subscriptionCreated:"Sua assinatura foi criada com sucesso.",planUnlockedTitle:"Plano liberado!",freeTrialReady:"Sua conta free trial está pronta pra uso.",pixConfirmed:"Pagamento via PIX confirmado! Sua assinatura foi criada."},preparingCheckout:"Preparando seu checkoutâ¦",header:{chooseYourPlan:"Escolha seu plano",chooseYourPlanSubtitle:"Selecione o plano ideal para o seu negócio",monthly:"Mensal",quarterly:"Trimestral",yearly:"Anual"},mostPopular:"Mais Popular",instancesConnected_one:"{{count}} instância conectada",instancesConnected_other:"{{count}} instâncias conectadas",priceFrom:"De R$ {{price}},00/mês",perMonth:"/mês",perDay:"/dia",totalLabel:"Total:",everyMonths:"a cada {{months}} meses",viaRecharge:"Via Recarga",allFeatures:"Todas as funcionalidades",processingButton:"Processando...",startButton:"Começar",selectPlanButton:"Selecionar Plano",empire:{customQuote:"Sob medida",name:"Modo Empire",subt
499itle:"Do seu tamanho",customInstances:"Instâncias personalizadas",priceOnRequest:"Valor sob consulta",priceOnRequestHint:"montamos o plano ideal pra sua operação",talkToSupport:"Falar com o suporte â"},enterprisePlan:{name:"Modo Enterprise",subtitle:"Escala sob demanda"}},HM={panel:bM,periods:yM,periodFilter:xM,months:wM,columns:CM,metrics:PM,csv:AM,createProductModal:EM,dadosTab:SM,dashboardTab:NM,graficosTab:kM,consolidadoTab:TM,recordFormModal:IM,shared:RM,autoRenewal:DM,creditWallet:MM,creditsBanner:FM,instanceRenewalTag:LM,insufficientCreditsModal:jM,planRequiredModal:_M,planUpsellModal:OM,slotChoiceModal:BM,systemCreditBadge:zM,subscriptionPage:VM,paymentMethodModal:qM,addPaymentMethodModal:UM,cardRechargeModal:WM,downgradeOverageModal:$M,planSelectionModal:GM},KM="Configurar chave KIE.AI",XM={dragToCanvas:"Arraste para o canvas",image:"Imagem",video:"VÃdeo",audio:"Ãudio",creation:"Criação",premiumLockedTitle:"Recurso premium â clique para liberar",zoomOut:"Zoom out",zoomIn:"Zoom in",fitView:"Enquadrar",projectNamePlaceholder:"Nome do projeto"},YM={defaultProjectName:"Projeto sem nome",loadError:"Erro ao carregar projeto",savedToast:"Projeto salvo"},QM={title:"I.A Studio â Recurso Premium",descriptionIniciante:"O bloco de <0>Criação</0> não está disponÃvel no seu plano <1>Modo Iniciante</1>. Faça upgrade para um plano superior para liberar o uso.",descriptionDefault:"O bloco de <0>Criação</0> está disponÃvel nos planos <1>Modo Acesso</1> ou superiores.",upgradeHeading:"Faça upgrade do seu plano",plansHeading:"Planos com I.A Studio incluso",upgradeSubtext:"Migre para Acesso, Expansão, Ascensão, Dominação ou Titan e use o I.A Studio sem limites.",plansSubtext:"Acesso, Expansão, Ascensão, Dominação e Titan â uso ilimitado.",upgradeButton:"Fazer Upgrade",viewPlansButton:"Ver Planos"},ZM={codeInactive:"Esse código não está mais ativo",invalidCode:"Código inválido",importSuccess:"Importado com sucesso!",importError:"Erro ao importar",title:"Importar projeto ou pasta",description:"Cole o código de compartilhamento que você recebeu.",verify:"Verificar",folder:"Pasta",project:"Projeto",summary_one:"{{count}} projeto ⢠{{totalNodes}} blocos",summary_other:"{{count}} projetos ⢠{{totalNodes}} blocos",expiresAt:"Expira em {{date}}",usesRemaining_one:"{{count}} importação restante",usesRemaining_other:"{{count}} importações restantes",codeInactiveExpired:"Código inativo, expirado ou esgotado",importButton:"Importar para minha conta"},JM={missingApiKey:"Informe sua chave KIE",missingHmacSecret:"Informe o Webhook HMAC Secret",savedSuccess:"Configuração salva com sucesso",saveError:"Erro ao salvar configuração",removedSuccess:"Configuração removida",removeError:"Erro ao remover configuração",title:"Configurar KIE.AI",descPrefix:"O I.A Studio usa a sua própria chave da",descSuffix:"para gerar criativos. Os créditos são descontados diretamente da sua conta na KIE.",apiKeyLabel:"Sua API Key",getKeyPrefix:"Pegue sua chave em",getKeySuffix:". A chave é armazenada com segurança e usada apenas pelas suas gerações.",hmacLabel:"Webhook HMAC Secret",hmacPlaceholder:"MÃn. 8 caracteres",removeButton:"Remover"},eF={types:{image:"Imagem",video:"VÃdeo",videoPro:"VÃdeo Pro",productVideo:"VÃdeo Produto",textVideo:"VÃdeo Texto",faceHq:"Face HQ",faceLq:"Face LQ",animate:"Imagem para VÃdeo",imitate:"Imitação",copy:"Copy",logo:"Logo"},emptyTitle:"Nenhuma criação ainda",emptySubtitle:"Suas gerações aparecerão aqui automaticamente",noText:"Sem texto",imageAlt:"Criação",deletedSuccess:"Criação excluÃda",deleteError:"Erro ao excluir",creditsUsed_one:"{{count}} crédito",creditsUsed_other:"{{count}} créditos"},tF={title:"Projetos Salvos",empty:"Nenhum projeto salvo ainda",updatedAt:"Atualizado: {{date}}"},aF={expiry:{h24:"24 horas",d7:"7 dias",d30:"30 dias",never:"Sem expiração"},uses:{one:"1 uso",ten:"10 usos",unlimited:"Ilimitado"},linkGenerated:"Link gerado!",generateError:"Erro ao gerar link",folderWord:"pasta",projectWord:"projeto",title:"Compartilhar {{type}}",descriptionFolder:"Gere um link para que outro usuário possa importar esta pasta e todos os projetos dentro dela para a conta dele. Imagens enviadas, credenciais e gerações não são compartilhadas.",descriptionProject:'Gere um link para que outro usuário possa importar "{{title}}" para a conta dele. Imagens enviadas, credenciais e gerações não são compartilhadas.',validityLabel:"Valida
499de",usesLimitLabel:"Limite de importações",generateButton:"Gerar link",codeLabel:"Código",linkLabel:"Link",frozenNoteFolder:"O conteúdo é congelado neste momento. Se editar o conteúdo da pasta depois, gere um novo link para refletir as mudanças.",frozenNoteProject:"O conteúdo é congelado neste momento. Se editar o projeto depois, gere um novo link para refletir as mudanças."},oF={confirmDeleteTitle:"Excluir bloco?",confirmDeleteDescription:"Esta ação não pode ser desfeita. O bloco e suas conexões serão removidos."},nF={title:"Prévia",complete:"Completo",downloadMusic:"Baixar Música",downloadCreative:"Baixar Criativo",resultAlt:"Resultado",waitingResult:"Aguardando resultado..."},rF={unsupportedFormat:"Formato não suportado. Use MP3, WAV, AAC, M4A ou OGG.",tooLarge:"Ãudio acima de 10MB. Reduza o arquivo.",tooLong:"Ãudio acima de {{max}}s ({{duration}}s). A sincronização labial aceita no máximo {{max}} segundos.",durationValidationError:"Não foi possÃvel validar a duração do áudio. Tente outro arquivo.",uploadFailed:"Falha ao enviar áudio.",dragHint:"Arraste um áudio",formatHint:"MP3, WAV, AAC, OGG ⢠até 10MB ⢠máx 15s"},iF={alt:"Upload",dragHint:"Arraste uma imagem",formatHint:"JPG, PNG, WEBP ⢠até 20MB"},sF={dragHint:"Arraste um vÃdeo",formatHint:"MP4, MOV ⢠até 500MB"},lF={title:"Bloco de Criação",modelLabel:"Modelo",llmLabel:"LLM",collapse:"Recolher",expand:"Expandir",openBilling:"Abrir kie.ai/billing â",generating:"Gerando...",generatingVideo:"Gerando vÃdeo... (pode levar 1-3 min)",processing:"Processando...",processingImage:"Processando imagem...",generatingGptImage:"Gerando imagem com GPT Image 2... (pode levar até 5 min)",sendingForGeneration:"Enviando para geração...",stepProgress:"Etapa {{current}}/{{total}} â {{label}}",videoTimeHint:"VÃdeos podem levar 1-3 minutos",registerKieKeyButton:"Cadastrar chave KIE",generateButton:"Gerar Criativo",validation:{connectReferenceImage:"Conecte 1 imagem de referência",connectReferenceVideo:"Conecte 1 vÃdeo de referência",connectCharacterImage:"Conecte 1 imagem do personagem",connectAudio:"Conecte 1 áudio",connectAtLeastOneImage:"Conecte ao menos 1 imagem de referência",maxImages_one:"Este modelo aceita no máximo {{count}} imagem de referência",maxImages_other:"Este modelo aceita no máximo {{count}} imagens de referência",maxVideos_one:"Máximo de {{count}} vÃdeo permitido",maxVideos_other:"Máximo de {{count}} vÃdeos permitidos",maxAudios_one:"Máximo de {{count}} áudio permitido",maxAudios_other:"Máximo de {{count}} áudios permitidos",addPrompt:"Adicione um prompt",lipsyncPromptRequired:"O prompt é obrigatório para sincronização labial"},errors:{registerKieKey:"Cadastre sua chave KIE para gerar criativos",mustRegisterKieKey:"Você precisa cadastrar sua chave KIE para continuar.",invalidKieKey:"Sua chave KIE é inválida. Atualize-a.",invalidOrExpiredKieKey:"Sua chave KIE é inválida ou expirou. Atualize-a nas configurações.",insufficientCredits:"Sua chave KIE.AI está sem saldo. Recarregue em kie.ai/billing",insufficientCreditsDetail:"Sua chave KIE.AI está sem saldo. Recarregue em https://kie.ai/billing para continuar gerando.",timeoutNoResponseKie:"Timeout â sem resposta da KIE.",timeout20min:"Timeout â a KIE não respondeu em 20 minutos.",connectionErrorRetry:"Erro de conexão. Tente novamente.",generationFailed:"Falha na geração",connectionError:"Erro de conexão.",generationError:"Erro ao gerar criativo",timeoutNoProviderResponse:"Timeout - sem resposta do provedor"}},cF={criarImagem:{label:"Criar Imagem",instruction:"Imagens de referência são opcionais. Sem imagens, gera direto do texto.",llms:{nanoBananaPro:{description:"Google ⢠Composição multi-personagem com até 8 imagens de referência (opcional)"},seedream45Edit:{description:"Edição com até 14 imagens ⢠Sem imagens, gera direto do texto"},grokImagineImageToImage:{description:"xAI ⢠Edição com 1 imagem ou geração só por texto"},gptImage2:{description:"OpenAI ⢠Até 16 imagens de referência (opcional) com escolha de resolução 1K/2K/4K"}}},produtoVideo:{label:"Produto para VÃdeo",instruction:"Conecte 1 imagem do produto (obrigatório)",llms:{sora2:{description:"OpenAI Sora 2 (Standard / Pro)"}}},textoVideo:{label:"Texto para VÃdeo",instruction:"Não requer imagem - apenas texto",llms:{veo3Fast:{description:"Google ⢠Geração rápida"},veo3:{description:"Google ⢠Maior qualidade, mais lento"},geminiOmniVideo:{description:"Google ⢠Multimodal 4/6/8/10s com até 4K"},kling30:{description:"Kling ⢠Standard / Pro com som opcional"},grokImagineTextToVideo:{description:"xAI ⢠VÃdeos rápidos de 6-30s"},wan27TextToVideo:{description:"Alibaba Wan ⢠até 1080p, duração 2-15s"}}},animarImagem:{label:"Imagem para VÃdeo",instruction:"Conecte 1 imagem de referência + use o prompt para descrever o vÃdeo. Veo aceita 2 imagens (primeiro e último frame).",llms:{veo3Fast:{description:"Google ⢠Aceita 1 ou 2 imagens (first/last frame)"},veo3:{description:"Google ⢠Maior qualidade"},geminiOmniVideo:{description:"Google ⢠Até 7 imagens de referência, 4/6/8/10s, até 4K"},kling30:{description:"Kling ⢠Animação a partir de imagem com som opcional"},grokImagineImageToVideo:{description:"xAI ⢠Animação rápida 6-30s"},wan27ImageToVideo:{description:"Alibaba Wan ⢠first/last frame"}}},sincronizacaoLabial:{label:"Sincronização Labial",instruction:"Conecte 1 imagem do personagem e 1 áudio (obrigatórios)",warning:"A imagem precisa mostrar o rosto do personagem. Ãudio até 10MB nos formatos MP3, WAV, AAC, M4A ou OGG.",llms:{klingAiAvatarPro:{description:"Kling ⢠Avatar de alta fidelid
499ade a partir de imagem + áudio"},infinitalkFromAudio:{description:"InfiniteTalk ⢠Lip sync com escolha de resolução (480p/720p)"}}},imitarMovimento:{label:"Imitar Movimento",instruction:"Conecte 1 imagem do personagem e 1 vÃdeo de referência (obrigatórios)",warning:"Dois modos: 'Personagem no VÃdeo' substitui a pessoa do vÃdeo pelo personagem da imagem. 'Animar Imagem' anima a imagem com os movimentos do vÃdeo.",llms:{kling26MotionControl:{description:"Versão estável"},kling30MotionControl:{description:"Versão mais nova"}}},criarMusica:{label:"Criar Música",instruction:"Texto para Música via Suno. Não requer imagem ou áudio.",warning:"Em modo Custom, defina estilo e tÃtulo. Em modo Simples, descreva a música no prompt (até 500 caracteres).",llms:{v55:{description:"Modelos personalizados, qualidade superior"},v5:{description:"Expressão musical superior, geração rápida (recomendado)"},v45Plus:{description:"Som mais rico, novas formas de criar (até 8 min)"},v45:{description:"Prompts mais inteligentes, geração rápida (até 8 min)"},v45All:{description:"V4.5 ALL, geração rápida (até 8 min)"},v4:{description:"Qualidade vocal melhorada (até 4 min)"}}}},dF={labels:{proporcao:"Proporção",resolucao:"Resolução",duracaoSegundos:"Duração (s)",duracao:"Duração",qualidade:"Qualidade",formato:"Formato",modo:"Modo",som:"Som",modoGeracao:"Modo de Geração",resolucaoModo:"Resolução / Modo",vozPreferida:"Voz preferida",estiloCustom:"Estilo (Custom)",tituloCustom:"TÃtulo (Custom)",tagsNegativasCustom:"Tags negativas (Custom, opcional)",instrumental:"Instrumental",prompt:"Prompt"},descriptions:{basic2kHigh4k:"Basic = 2K ⢠High = 4K",gptImageRatio:"Com imagens conectadas roda image-to-image (até 16 refs). Sem imagens, gera direto do texto.",gptImageResolution:"Auto e 1:1 só suportam 1K. 1:1 não pode ir para 4K.",klingAutoAdapt:"Quando há imagem, o sistema pode adaptar automaticamente",grokSpicyUnavailable:"Spicy não disponÃvel para imagens externas (apenas para task_id Grok)",infinitalkResolution:"InfiniteTalk aceita 480p ou 720p",customModeMusic:"Simples: descreva a ideia. Custom: controle total (estilo, tÃtulo, letra).",instrumental:"Sem voz / vocais.",vocalGender:"Preferência de gênero vocal (válido apenas em modo Custom).",styleCustom:"Obrigatório no modo Custom. Define gênero, mood e direção artÃstica.",titleCustom:"Obrigatório no modo Custom. Máx. 80 caracteres.",negativeTags:"Estilos a evitar (apenas em modo Custom).",characterOrientation:"Personagem no VÃdeo: substitui a pessoa do vÃdeo pelo personagem da imagem | Animar Imagem: a imagem é animada com os movimentos do vÃdeo"},placeholders:{promptDefault:"Descreva o que você quer gerar...",promptEditDesired:"Descreva a edição desejada...",promptEditDesiredSingleImage:"Descreva a edição desejada (1 imagem de entrada obrigatória)...",promptAnimacao:"Descreva a animação...",promptAnimacao7Refs:"Descreva a animação... (até 7 imagens de referência)",promptAnimacaoDesejada:"Descreva a animação desejada...",promptFrameInicialFinal:"Conecte 1 imagem (frame inicial) e opcionalmente 2 (frame final)...",promptLipsyncKling:"Descreva expressões, cenário ou estilo desejados (obrigatório, máx. 5000 caracteres)...",promptLipsyncInfinitalk:"Descreva o personagem e a cena (ex: 'A young woman with long dark hair talking on a podcast.')...",promptImitarMovimento:"Descreva o personagem ou cena (opcional)...",promptMusica:"Simples: descreva a música (até 500 chars). Custom + vocais: este texto vira a letra (até 5000 chars).",styleExample:"Ex: Pop, Rock, Hip-hop, Jazz, Classical...",titleExample:"Ex: Madrugada de Verão",negativeTagsExample:"Ex: Heavy Metal, Upbeat Drums"},options:{auto:"Auto",ratio169Horizontal:"16:9 (Horizontal)",ratio916Vertical:"9:16 (Vertical)",ratio219UltraWide:"21:9 (Ultra-wide)",basic2k:"Basic (2K)",high4k:"High (4K)",normal:"Normal",profissional:"Profissional",horizontal:"Horizontal",vertical:"Vertical",tenSeconds:"10 segundos",fifteenSeconds:"15 segundos",ratio11Quadrado:"1:1 (Quadrado)",standardFast:"Standard (rápido)",proQuality:"Pro (qualidade)",comSom:"Com som",semSom:"Sem som",ratio23Vertical:"2:3 (Vertical)",ratio32Horizontal:"3:2 (Horizontal)",funCriativo:"Fun (criativo)",spicyIntenso:"Spicy (intenso)",standard:"Standard",pro:"Pro",fun:"Fun",personagemNoVideo:"Personagem no VÃdeo",animarImagemOption:"Animar Imagem",standard720p:"Standard (720p)",pro1080p:"Pro (1080p)",p480Fast:"480p (rápido)",p720Quality:"720p (qualidade)",simplesRecomendado:"Simples (recomendado)",custom:"Custom",comVocais:"Com vocais",apenasInstrumental:"Apenas instrumental",automatico:"Automático",masculino:"Masculino",feminino:"Feminino"}},uF={backToProjects:"Projetos"},mF={subtitle:"Gerencie seus projetos, pastas e criações com IA",tabProjects:"Meus Projetos",tabCreations:"Minhas Criações",newFolder:"Nova pasta",newProject:"Novo projeto",allProjects:"Todos os projetos",noFolder:"Sem pasta",createProjectError:"Erro ao criar projeto",createFolderError:"Erro ao criar pasta",confirmDeleteFolder:"Excluir a pasta? Os projetos dentro dela voltam para a raiz.",renameFolderError:"Erro ao renomear pasta",folderDeletedSuccess:"Pasta excluÃda",deleteFolderError:"Erro ao excluir pasta",projectDeletedSuccess:"Projeto excluÃdo",deleteError:"Erro ao excluir",nameUpdatedSuccess:"Nome atualizado",renameError:"Erro ao renomear",projectMovedSuccess:"Projeto movido",moveError:"Erro ao mover",emptyInFolder:'Nenhum projeto em "{{name}}"',emptyNoProjects:"Nenhum projeto ainda",createProjectLink:"Criar projeto",blocksCount_one:"{{count}} bloco",blocksCount_other:"{{count}} blocos",updatedAt:"Atualizado: {{date}}",moveToLabel:"Mover paraâ¦",moreButton:"Mais"},pF={preparing:"Preparando importaçãoâ¦"},hF={configureKieTitle:KM,toolbar:XM,flowCanvas:YM,gateModal:QM,importDialog:ZM,kieDialog:JM,myCreations:eF,projectsModal:tF,shareDialog:aF,nodeActions:oF,previewNode:nF,uploadAudio:rF,uploadImage:iF,uploadVideo:sF,creationNode:lF,models:cF,fields:dF,page:uF,projectsPage:mF,shareImportPage:pF},fF={tabs:{dashboard:"Dashboard",campaigns:"Campanhas",billing:"Cobrança",settings:"Configurações"}},gF={account:"Contas",campaign:"Campanhas",adset:"Conjuntos",ad:"Anúncios"},vF={groups:{identification:"Identificação",financial:"Financeiras",sales:"Vendas",messages:"Mensagens",traffic:"Tráfego",meta:"Meta"},columns:{name:"Nome",thumbnail:"Preview",daily_budget:"Orçamento",spend:"Gasto",conversion_value:"Faturamento",profit:"Lucro",roas:"ROAS",roi:"ROI",margin:"Margem",cpa:"CPA",sales:"Vendas",messaging_conversations_started:"Conversas Iniciadas",cost_per_message:"Custo por Conversa",
499impressions:"Impressões",reach:"Alcance",clicks:"Cliques no link",cpc:"CPC",cpm:"CPM",ctr:"CTR",account_status:"Status da Conta",account_total_spend:"Total Gasto na Conta",external_id:"ID",last_synced_at:"Ãltima Atualização",created_at:"Data de Criação",delivery:"Veiculação"},hints:{clicks:"Cliques no link do anúncio (inline_link_clicks).",cpc:"Custo por clique no link do anúncio.",ctr:"Taxa de cliques no link do anúncio (cliques no link ÷ impressões)."}},bF={title:"Personalize as colunas â {{level}}",subtitle:"Escolha como você quer visualizar as colunas na tabela",searchPlaceholder:"Buscar por coluna",noColumnsFound:"Nenhuma coluna encontrada",selected:"Selecionadas",dragToReorder:"Arraste para reordenar",noColumnsSelected:"Nenhuma coluna selecionada. Marque opções à esquerda.",restoreDefault:"Restaurar padrão",reorder:"Reordenar",comingSoon:"em breve",removeColumn:"Remover {{column}}"},yF={title:"Dashboard",subtitle:"Visão geral das suas campanhas",noAccounts:{title:"Nenhuma conta conectada",description:"Para ver seus dados de anúncios, conecte sua conta do Facebook nas configurações.",button:"Ir para Configurações"},accountSelector:{allAccounts:"Todas as contas",oneAccount:"1 conta",nAccounts:"{{count}} contas"},dateFilter:{max:"Máximo",today:"Hoje",yesterday:"Ontem",last7Days:"Ãltimos 7 dias",thisMonth:"Esse mês",lastMonth:"Mês passado",custom:"Personalizado",selectPeriod:"Selecionar perÃodo"},sync:{sessionExpired:"Sessão expirada. Faça login novamente.",partialSync:"Sincronizado parcialmente: {{synced}} conta(s) OK, {{failed}} falhou(aram).",failedSync:"Falha ao sincronizar {{failed}} conta(s). Tente novamente.",success:"Dados sincronizados com sucesso!",timeout:"Sincronização demorou demais. Mostrando última atualização disponÃvel. Tente novamente em instantes.",error:"Erro ao sincronizar dados"},cards:{revenue:"Faturamento",spend:"Gasto Meta Ads",profit:"Lucro",ticketAvg:"Ticket Médio",margin:"Margem de Lucro",roas:"ROAS",leads:"Leads",sales:"Vendas",conversionRate:"Taxa de Conversão",costPerSale:"Custo por Venda",costPerConversation:"Custo por Conversa",expenses:"Taxas e Despesas"},viewToggle:{label:"Ver métricas de:",metaLabel:"Meta Ads",systemLabel:"Sistema (detectado)"},salesChart:{salesInPeriod:"{{count}} vendas no perÃodo",tooltipSales_one:"{{count}} venda",tooltipSales_other:"{{count}} vendas"},periodChart:{heading:"Vendas e Faturamento por PerÃodo",noMetaDailyData:'A Meta não retornou dados diários pra este perÃodo. Tente sincronizar ou trocar pra visão "Sistema (detectado)".'},coverage:{none:"Sem dados sincronizados para este perÃodo â os valores da Meta abaixo estão zerados até a sincronização trazer algo.",syncing:"Sincronizando dados deste perÃodo com a Metaâ¦",partial:"Cobertura parcial: {{covered}} de {{total}} dia(s) sincronizados neste perÃodo. Os valores da Meta abaixo podem estar incompletos."},instanceChart:{heading:"Vendas por Instância",empty:"Sem vendas com instância identificada no perÃodo",unknownInstance:"Sem instância"},hourChart:{heading:"Vendas por horário",empty:"Sem vendas no perÃodo"},geographyChart:{heading:"Vendas por localização",byCountry:"PaÃses",byState:"Estados (BR)",empty:"Sem vendas com telefone identificável no perÃodo"},othersLabel:"Outras",systemOnlyCaption:"Baseado nas vendas detectadas pelo sistema â a Meta não fornece esse detalhe.",salesHistory:{heading:"Histórico de vendas",subtitle:"Vendas detectadas pelo sistema no perÃodo selecionado",unknownInstance:"Sem instância",unknownClient:"Sem nome",exportCsv:"Exportar CSV",empty:"Nenhuma venda registrada no histórico do perÃodo",openConversation:"Abrir conversa",conversationUnavailable:"Conversa não encontrada",columns:{instance:"Instância",instanceNumber:"Nº da Instância",leadNumber:"Nº do Lead",client:"Cliente (Nome)",date:"Data",value:"Valor",actions:"Ações"}},expensesCard:{breakdownTitle:"Detalhamento do perÃodo",empty:"Nenhuma taxa ou despesa ativa",totalLabel:"Total"},expenseRules:{triggerButton:"Configurar taxas e despesas",dialogTitle:"Taxas e despesas",formHeadingAdd:"Nova regra",formHeadingEdit:"Editar regra",listHeading:"Regras cadastradas",empty:"Nenhuma taxa ou despesa cadastrada",emptyHint:"Cadastre acima sua primeira taxa ou despesa",kindFixed:"Fixo (R$)",kindPercentage:"Percentual (%)",appliesToSpend:"Gastos com Anúncios",appliesToRevenue:"Faturamento",appliesToProfitBeforeFees:"Lucro antes das taxas",periodicityDaily:"Por dia",periodicityWeekly:"Por semana",periodicityMonthly:"Por mês",validitySince:"desde {{date}}",validityUntil:"até {{date}}",active:"Ativa",inactive:"Inativa",edit:"Editar",delete:"Excluir",dialog:{nameLabel:"Nome",namePlaceholder:"Ex.: Imposto da Meta",kindLabel:"Tipo",valueLabelFixed:"Valor (R$)",valueLabelPercentage:"Percentual (%)",appliesToLabel:"Aplicar sobre",periodicityLabel:"Periodicidade",startDateLabel:"Vigência inicial",endDateLabel:"Vigência final",endDateHint:"Deixe em branco para vigência por tempo indeterminado",activeLabel:"Ativa",addButton:"Adicionar",saveButton:"Salvar alterações",cancelEdit:"Cancelar edição"},toasts:{created:"Taxa/despesa cadastrada",updated:"Taxa/despesa atualizada",deleted:"Taxa/despesa removida",errorLoading:"Erro ao carregar taxas e despesas",errorSaving:"Erro ao salvar",errorDeleting:"Erro ao remover",confirmDelete:'Remover "{{name}}"?',fillRequiredFields:"Preencha todos os campos obrigatórios",invali
499dDateRange:"A vigência final não pode ser antes da inicial"}}},xF={title:"Campanhas",subtitle:"Gerencie suas campanhas de anúncios",updatedAt:"Atualizado {{date}}",syncing:"Atualizando...",rename:"Renomear",onOff:"On/Off",columnsButton:"Colunas",campaignCount_one:"{{count}} campanha",campaignCount_other:"{{count}} campanhas",reachFetchError:"Erro ao buscar alcance",search:{account:"Buscar conta...",campaign:"Buscar campanha...",adset:"Buscar conjunto...",ad:"Buscar anúncio..."},dateFilter:{periodPlaceholder:"PerÃodo",today:"Hoje",yesterday:"Ontem",last7Days:"Ãltimos 7 dias",last30Days:"Ãltimos 30 dias",thisMonth:"Este mês",specificDate:"Data especÃfica",select:"Selecionar"},accountFilter:{allAccounts:"Todas as contas",selectedAccounts_one:"{{count}} conta selecionada",selectedAccounts_other:"{{count}} contas selecionadas"},bulkActions:{selectedCount_one:"{{count}} selecionado",selectedCount_other:"{{count}} selecionados",pause:"Pausar",changeBudget:"Alterar Orçamento",openInManagerTooltip:"Abrir no gerenciador de anúncios da Meta",openInManager:"Abrir no gerenciador"},dynamicLabel:{adsetsFromCampaigns_one:"CJs de {{count}} campanha",adsetsFromCampaigns_other:"CJs de {{count}} campanhas",adsFromAdsets_one:"ADs de {{count}} conjunto",adsFromAdsets_other:"ADs de {{count}} conjuntos",adsFromCampaigns_one:"ADs de {{count}} campanha",adsFromCampaigns_other:"ADs de {{count}} campanhas"},empty:{accounts:"Nenhuma conta de anúncios encontrada",campaigns:"Nenhuma campanha encontrada",adsets:"Nenhum conjunto de anúncios encontrado",ads:"Nenhum anúncio encontrado",connectAccountHint:"Conecte uma conta do Facebook em Configurações para começar.",syncHint:"Clique em sincronizar para buscar dados do Facebook"},status:{active:"Ativo",paused:"Pausado"}
499,delivery:{active:"Veiculando",paused:"Pausado",inactive:"Inativo"},accountStatus:{active:"Ativa",disabled:"Desativada",unpaid:"Não paga",underReview:"Em revisão",pending:"Pendente",closed:"Fechada",statusN:"Status {{status}}"},editBudgetDialog:{title:"Editar Orçamento Diário",newBudgetLabel:"Novo Orçamento (R$)"},bulkBudgetDialog:{title:"Alterar Orçamento em Massa",updatingCount_one:"Alterando orçamento de {{count}} item",updatingCount_other:"Alterando orçamento de {{count}} itens",newBudgetLabel:"Novo Orçamento Diário (R$)",applyToAll:"Aplicar a Todos"},renameDialog:{titleCampaign:"Renomear campanha",titleAdset:"Renomear conjunto",titleAd:"Renomear anúncio",newNameLabel:"Novo nome",newNamePlaceholder:"Digite o novo nome"},toasts:{sessionExpired:"Sessão expirada. Faça login novamente.",synced:"Dados sincronizados!",syncPartial:"Sincronização parcial: um ou mais nÃveis falharam. Os dados exibidos podem estar incompletos.",errorSyncing:"Erro ao sincronizar",campaignActivated:"Campanha ativada!",campaignPaused:"Campanha pausada!",adsetActivated:"Conjunto ativado!",adsetPaused:"Conjunto pausado!",adActivated:"Anúncio ativado!",adPaused:"Anúncio pausado!",errorTogglingStatus:"Erro ao alterar status",bulkActivated_one:"{{count}} item ativado",bulkActivated_other:"{{count}} itens ativados",bulkPaused_one:"{{count}} item pausado",bulkPaused_other:"{{count}} itens pausados",errorTogglingItems:"Erro ao alterar itens",budgetUpdated:"Orçamento atualizado!",errorUpdatingBudgets:"Erro ao atualizar orçamentos",errorUpdatingBudget:"Erro ao atualizar orçamento",managerAccountNotFound:"Não foi possÃvel identificar a conta do gerenciador.",popupBlocked:"O navegador bloqueou a abertura. Permita pop-ups para este site.",invalidName:"Informe um nome válido",nameUpdated:"Nome atualizado!",errorRenaming:"Erro ao renomear",fillRequiredFields:"Preencha todos os campos obrigatórios",campaignCreated:"Campanha(s) criada(s) com sucesso!",errorCreatingCampaign:"Erro ao criar campanha"}},wF={title:"Avisos Inteligentes",subtitle:"Receba alertas sobre seus anúncios e números de WhatsApp",alertsHeading:"Alertas",empty:"Nenhum alerta no momento",types:{adRejected:"Anúncio Rejeitado",accountRestricted:"Conta Restrita",paymentFailed:"Falha Pagamento",numberDown:"Número Caiu"},numbersForAlerts:{heading:"Números para Avisos",dialogTitle:"Adicionar Número para Avisos",phoneLabel:"Número de WhatsApp",nicknameLabel:"Apelido (opcional)",nicknamePlaceholder:"Meu WhatsApp",empty:"Adicione um número para receber avisos"},monitoredNumbers:{heading:"Números Monitorados",empty:"Configure números no Tracker WhatsApp",online:"Online",offline:"Offline"},toasts:{numberAdded:"Número adicionado!",numberAlreadyRegistered:"Número já cadastrado",errorAdding:"Erro ao adicionar",numberRemoved:"Número removido",errorRemoving:"Erro ao remover número"}},CF={title:"Cobrança",checking:"Verificando...",checkNow:"Verificar agora",filterLabel:"Filtro:",filterPending:"Apenas pendentes",filterAll:"Todas",status:{active:"Ativa",disabled:"Desativada",pastDue:"Em aberto",underReview:"Em revisão",paused:"Pausada",grace:"Tolerância",closed:"Encerrada"},summary:{totalDebtLabel:"Saldo devedor total:",accountsWithIssue_one:"{{count}} conta com pendência",accountsWithIssue_other:"{{count}} contas com pendência",noPendingAccounts:"Nenhuma conta com pendência detectada"},table:{account:"Conta",status:"Status",linkedCard:"Cartão vinculado",debtBalance:"Saldo devedor",action:"Ação",emptyPending:"Nenhuma conta com pendência. Tudo certo por aqui â¨",emptyAll:"Nenhuma conta de anúncio selecionada.",unavailable:"IndisponÃvel",unavailableTooltip:"O Facebook não expõe o valor exato dessa conta via API",spentInCycle:"(gasto no ciclo: {{value}})",clickToPayTooltip:"Clique em Pagar para ver o valor no Gerenciador.",pay:"Pagar",payTooltipLine1:"Abre o Gerenciador de Anúncios para pagar com o método cadastrado no Facebook.",payTooltipLine2:"Não é possÃvel cobrar via ZapData â Facebook não expõe API para isso."},toasts:{errorLoading:"Erro ao carregar contas: {{message}}",updated:"Contas atualizadas com sucesso",errorChecking:"Erro ao verificar: {{message}}",unknownError:"erro desconhecido"}},PF={title:"Configurações",subtitle:"Gerencie suas conexões do Facebook",accountStatus:{active:"Ativa",disabled:"Desativada",unverified:"Não Verificada",pending:"Pendente",statusN:"Status {{status}}"},facebookAccounts:{heading:"Contas do Facebook",description:"Conecte sua conta do Facebook para acessar os dados de anúncios",chooseMethod:"Escolha como deseja conectar: entre pelo popup aqui ou gere um link para abrir em outro navegador ou computador.",popupButton:"Abrir popup do Facebook",linkButton:"Gerar link para outro dispositivo",copyButton:"Copiar link",linkHint:"Abra este link em outro navegador ou computador. Ele conecta o Facebook a esta conta do ZapData, vale por 30 minutos e só pode ser usado uma vez. A lista será atualizada automaticamente.",popupBlocked:"Popup bloqueado. Use o link abaixo ou permita popups.",linkCopied:"Link copiado!",copyManually:"Selecione o link e copie manualmente.",connectButton:"Conectar Facebook",empty:"Nenhuma conta conectada",emptyHint:"Conecte sua conta do Facebook para começar",defaultAccountName:"Conta Facebook",syncing:"Sincronizando...",syncAccountsButton:"Sincronizar Contas",adAccountsHeading:"Contas de Anúncio ({{count}})",idLabel:"ID: {{id}} ⢠{{currency}}",syncHint:'Clique em "Sincronizar Contas" para buscar suas contas de anúncio'},instructions:{heading:"Instruções de Configuração",step1:'1. Clique em "Conectar Facebook" para autorizar o acesso à sua conta.',step2:'2. Após conectar, clique em "Sincronizar Contas" para buscar suas contas de anúncio.',step3:"3. Ative as contas que deseja monitorar usando o toggle.",step4:"4. Os dados das campanhas serão sincronizados automaticamente."},toasts:{sessionExpired:"Sessão expirada",sessionExpiredDescription:"Faça login novamente e tente conectar o Facebook.",loginAgain:"Faça login novamente.",errorConnectingFacebook:"Erro ao conectar com Facebook",accountDisconnected:"Conta desconectada",errorDisconnecting:"Erro ao desconectar",errorUpdating:"Erro ao atualizar",adAccountsSynced:"Contas de anúncio sincronizadas!",errorSyncing:"Erro ao sincronizar"}},AF={layout:fF,viewLevels:gF,columnsCatalog:vF,columnCustomizer:bF,dashboard:yF,campaigns:xF,alerts:wF,billing:CF,settings:PF},EF={title:"Dashboard de Afiliado"},SF={requestWithdrawal:"Solicitar Saque"},NF={title:"Torne-se um Afiliado",description:"Gere seu link de indicação e ganhe comissões sobre os depósitos dos usuários que se cadastrarem pelo seu link.",generateLink:"Gerar Meu Link de Afiliado"},kF={today:"Hoje",sevenDays:"7 dias",thirtyDays:"30 dias",custom:"Personalizado",from:"De",to:"Até",until:"até"},TF={salesCompleted:"Vendas Realizadas",salesInPeriod_one:"{{count}} venda no perÃodo",salesInPeriod_other:"{{count}} vendas no perÃodo",directCommission:"Comissão Direta",commissionRate:"Comissão: {{rate}}
499%",subCommission:"Comissão Sub",signups:"Cadastros",totalOverall:"Total geral: {{count}}",mrrForecast:"MRR Previsto",activeSubscriptions_one:"{{count}} assinatura ativa",activeSubscriptions_other:"{{count}} assinaturas ativas",availableBalance:"Saldo DisponÃvel",totalAccumulated:"Total acumulado: {{value}}",negativeBalanceWarning:"Saldo a regularizar: este valor será descontado automaticamente das próximas comissões antes que novos saques sejam liberados."},IF={title:"Vendas por Dia",noData:"Sem dados no perÃodo selecionado",sales:"Vendas",commission:"Comissão"},RF={affiliateLink:"Link de Afiliado",trialLink:"Link Free Trial (7 dias)"},DF={title:"Assinaturas dos Referidos",found_one:"{{count}} assinatura encontrada",found_other:"{{count}} assinaturas encontradas",searchPlaceholder:"Pesquisar usuário...",columns:{user:"Usuário",plan:"Plano",status:"Status",since:"Desde",dueDate:"Vencimento"},status:{active:"Ativo",canceled:"Cancelado",expired:"Expirado",pastDue:"Inadimplente",incomplete:"Incompleto"},willCancel:" (cancelará)"},MF={title:"Histórico",onlyDepositors:"Somente Assinantes",searchPlaceholder:"Pesquisar usuário...",filters:{all:"Todos",pix:"PIX",card:"Cartão"},sortByDate:"Ordenar por Data",sortByRelease:"Ordenar por Liberação",columns:{user:"Usuário",type:"Tipo",amount:"Valor",date:"Data",status:"Status"},empty:"Nenhum registro encontrado",types:{indirect:"Indireta",referral:"Indicação",withdrawal:"Saque"},badges:{freeTrial:"Free Trial",card:"Cartão",pix:"PIX"},withdrawalStatus:{approved:"Aprovado",rejected:"Recusado",pending:"Pendente"},commissionPending:"Pendente",releasesOn:"Libera {{date}}",released:"Liberada",withdrawalRequested:"Saque solicitado - {{name}}",affiliateFallback:"Afiliado"},FF={pageInfo:"Página {{page}} de {{total}} ({{count}} registros)",previous:"Anterior",next:"Próxima"},LF={title:"Solicitar Saque",availableBalance:"Saldo disponÃvel",pixKeyLabel:"Chave PIX",pixKeyPlaceholder:"CPF, email, celular ou chave aleatória",amountLabel:"Valor do Saque (R$)",amountPlaceholder:"MÃnimo R$ 50,00",minAmountLabel:"Valor mÃnimo para saque:",paymentDeadlineLabel:"Prazo de pagamento:",paymentDeadlineSuffix:"após a solicitação."},jF={linkGeneratedTitle:"Sucesso",linkGeneratedDescription:"Seu link de afiliado foi gerado!",errorTitle:"Erro",linkCopiedTitle:"Copiado!",linkCopiedDescription:"Link copiado para a área de transferência",trialLinkCopiedTitle:"Copiado!",trialLinkCopiedDescription:"Link de Free Trial copiado para a área de transferência",invalidAmountTitle:"Valor inválido",invalidAmountDescription:"Digite um valor válido",minAmountTitle:"Valor mÃnimo",minAmountDescription:"O saque mÃnimo é de R$ 50,00",insufficientBalanceTitle:"Saldo insuficiente",insufficientBalanceDescription:"Você não tem saldo suficiente",withdrawErrorDescription:"Erro ao solicitar saque",withdrawRequestedTitle:"Solicitação enviada!",withdrawRequestedDescription:"Seu saque será processado em breve"},_F={conversionRate:"Taxa de conversão: {{rate}}"},OF={panel:"ð Painel de Afiliado",cta:"ð¥ Ganhe 20% de comissão!"},BF={dashboard:EF,actions:SF,becomeAffiliate:NF,period:kF,metrics:TF,chart:IF,links:RF,subscriptions:DF,history:MF,pagination:FF,withdrawModal:LF,toasts:jF,funnel:_F,widget:OF},zF="Notificação",VF={tabs:{notifications:"Notificações",news:"Novidades"},empty:{title:"Nenhuma notificação",description:"Ative as notificações desktop para receber alertas em tempo real.",enableButton:"Ativar notificações"},blogEmpty:"Nenhuma novidade ainda"},qF={dismiss:"Dispensar notificação"},UF={novidade:"Novidade",melhoria:"Melhoria",correcao:"Correção",manutencao:"Manutenção",aviso:"Aviso"},WF={iconAlt:zF,center:VF,banner:qF,blogCategories:UF},$F={previewText:"Esta é a voz selecionada, gostou?",pageTitle:"ðï¸ Gerador de Ãudio",pageSubtitle:"Transforme texto em áudio com vozes realistas",configTitle:"Configuração do Ãudio",configDescription:"Insira o texto e escolha a voz desejada",noKeyWarning:"Nenhuma chave ElevenLabs cadastrada. Conecte sua própria chave para criar vozes e gerar áudio â a geração usa a sua conta, sem c
499obrança de créditos.",connectKeyLink:"Conectar chave ElevenLabs â",customVoicesLabel:"Vozes Personalizadas",addVoiceButton:"Adicionar Voz",createVoiceTitle:"Criar Voz Personalizada",createVoiceDescription:"Faça upload de um áudio para clonar a voz. Use gravações de 30 segundos a 5 minutos para melhores resultados.",whatsappWarning:"<0>â ï¸ Atenção com áudios do WhatsApp:</0> mensagens de voz gravadas direto no app (PTT) podem vir em formato <1>.opus</1> e falhar. Para melhor resultado, envie o áudio como <2>documento</2> no WhatsApp ou converta previamente para MP3 padrão (44.1kHz).",voiceNameLabel:"Nome da Voz",voiceNamePlaceholder:"Ex: Minha Voz, Narrador, etc...",audioFileLabel:"Arquivo de Ãudio",selectedFileLabel:"Selecionado: {{fileName}}",creatingVoice:"Criando voz...",createVoiceButton:"Criar Voz",noCustomVoices:'Nenhuma voz personalizada criada ainda. Clique em "Adicionar Voz" para criar uma.',orChooseReady:"ou escolha uma voz pronta",availableVoicesLabel:"Vozes DisponÃveis",choosePlaceholder:"Escolha uma voz...",customVoiceGroupLabel:"â Voz Personalizada",reclonarSuffix:" â reclonar",testVoiceTitle:"Testar voz",deleteVoiceTitle:"Excluir voz",noVoicesRegistered:"Nenhuma voz cadastrada.",clickAddVoiceToCreate:'Clique em "Adicionar Voz" para criar a sua.',categoryWoman:"ð© Mulher",categoryMan:"ð¨ Homem",categoryChild:"ð¶ Criança",categoryBonus:"ð Bônus",clickToTestSelected:"Clique no botão ao lado para testar a voz selecionada",voiceModelLabel:"Modelo de voz",voiceLanguageLabel:"Idioma da voz",autoDetectLanguageNote:"Este modelo detecta o idioma automaticamente pelo texto.",textToConvertLabel:"Texto para Converter",textPlaceholder:"Digite ou cole o texto que deseja transformar em áudio...",charCount:"{{count}}/{{max}} caracteres",generatingAudio:"Gerando áudio...",generateAudioButton:"Gerar Ãudio",generatedAudioTitle:"Ãudio Gerado",fromCacheBadge:"â¡ do cache (24h)",pauseButton:"Pausar",playButton:"Reproduzir",downloadMp3Button:"Baixar MP3",deleteVoiceDialogTitle:"Excluir voz personalizada",deleteVoiceDialogDescription:'Tem certeza que deseja excluir a voz "{{voiceName}}"? Esta ação não pode ser desfeita.',toastInvalidFormatTitle:"Formato inválido",toastInvalidFormatDescription:"Por favor, selecione um arquivo de áudio (MP3, WAV ou M4A).",toastFileTooSmallTitle:"Arquivo muito pequeno",toastFileTooSmallDescription:"O arquivo parece estar corrompido ou vazio. Use uma gravação de pelo menos 30 segundos.",toastFileTooBigTitle:"Arquivo muito grande",toastFileTooBigDescription:"O arquivo deve ter no máximo 10MB. Tente reduzir a qualidade ou cortar o áudio.",toastErrorTitle:"Erro",toastFillVoiceNameAndFile:"Por favor, preencha o nome da voz e selecione um arquivo de áudio.",toastNeedLoginCreateVoice:"Você precisa estar logado para criar vozes personalizadas.",toastDefaultErrorCreatingVoice:"Erro ao criar voz personalizada.",toastSuccessTitle:"Sucesso!",toastVoiceCreatedSuccess:'Voz "{{voiceName}}" criada com sucesso!',toastNeedLoginGeneric:"Você precisa estar logado.",toastDefaultErrorDeletingVoice:"Erro ao excluir voz",toastVoiceDeletedSuccess:'Voz "{{voiceName}}" excluÃda com sucesso.',toastErrorDeletingVoiceDescription:"Erro ao excluir voz.",toastErrorGeneratingPreview:"Não foi possÃvel gerar o preview da voz.",toastEnterTextToGenerate:"Por favor, insira um texto para gerar o áudio.",toastSelectAVoice:"Por favor, selecione uma voz.",toastKeyRequiredTitle:"Chave ElevenLabs necessária",toastKeyRequiredDescription:"Conecte sua chave em Configurações â Integração ElevenLabs antes de gerar áudio.",toastSuccessTitleShort:"Sucesso",toastAudioFromCacheDescription:"Ãudio recuperado do cache (gerado nas últimas 24h, mesma voz/modelo/idioma/texto).",toastAudioGeneratedSuccess:"Ãudio gerado com sucesso!",toastErrorGeneratingAudio:"Erro ao gerar áudio."},GF={pageTitle:"ð Transcrição de Ãudio e VÃdeo",pageSubtitle:"Converta áudios e vÃdeos em texto automaticamente",cardTitle:"Enviar Ãudio ou VÃdeo",cardDescription:"Formatos aceitos: MP3, OGG, OPUS (áudio) e MP4 (vÃdeo) â máx. {{minutes}} minutos / {{sizeMb}}MB",loadingIntegrationStatus:"Carregando status da integraçãoâ¦",noKeyConnected:"Nenhuma chave conectada na Integração de IA de Plataforma. Sem ela, esta ferramenta não transcreve.",connectNowLink:"Conectar agora â",providerNotSupported:"O provedor desta chave ({{provider}}) não suporta transcrição de áudio nem vÃdeo.",chooseAnotherKey:" Escolha outra chave abaixo (OpenAI ou Gemini).",connectOpenAiOrGemini:" Conecte uma chave OpenAI ou Gemini em Configurações â Integração de IA de Plataforma.",manageLink:"Gerenciar â",usingKey:"Usando {{keyLabel}} ({{provider}}).",yourKey:"sua chave",connectedKeyLabel:"Chave conectada",noNickname:"(sem apelido)",defaultSuffix:" (padrão)",transcriptionModelLabel:"Modelo de transcrição",selectModelPlaceholder:"Selecione o modelo...",transcribing:"Transcrevendo...",uploadPrompt:"Clique para enviar um arquivo de áudio ou vÃdeo (MP4)",orDragAndDrop:"ou arraste e solte aqui",transcriptionHeading:"Transcrição",newAudioButton:"Novo Ãudio",copiedButton:"Copiado",copyButton:"Copiar",charCount:"{{count}} caracteres",toastUnsupportedFormatTitle:"Formato não suportado",toastUnsupportedFormatDescription:"Por favor, envie arquivos MP3, OGG, OPUS (áudio) ou MP4 (vÃdeo).",toastFileTooBigTitle:"Arquivo muito grande",toastFileTooBigDescription:"O arquivo deve ter no máximo {{maxSizeMb}}MB.",toastSuccessTitle:"Sucesso",toastTranscribedSuccess:"Ãudio transcrito com sucesso!",toastErrorTitle:"Erro",toastDefaultTranscribeError:"Erro ao transcrever áudio.",toastCopiedTitle:"Copiado!",toastCopiedDescription:"Texto copiado para a área de transferência.",toastCopyErrorDescription:"Não foi possÃvel copiar o texto."},HF={backButton:"Voltar",chromeWebStoreBadge:"Chrome Web Store",forZapdataCustomersBadge:"Para clientes Zapdata",pageTitle:"Extensão Ads WhatsApp",heroDescription:"Encontre, filtre e salve anúncios de WhatsApp direto na Biblioteca de Anúncios do Facebook â o botão de salvar aparece no próprio anúncio, sem sair da página.",addToChromeButton:"Adicionar ao Chrome",oneClickInstall:"Direto na Chrome Web Store · instalação em 1 clique",saveOfferBadge:"Salvar Oferta",mockupCaption:"Esse bot
499ão aparece automaticamente em cada anúncio da Biblioteca de Anúncios",featureFilterTitle:"Filtro por WhatsApp",featureFilterDescription:"Ative o filtro da extensão pra ver só os anúncios relacionados a WhatsApp na Biblioteca de Anúncios.",featureBulkSelectTitle:"Seleção em massa",featureBulkSelectDescription:"Marque vários anúncios ao mesmo tempo e salve todos juntos, sem repetir o processo um a um.",featureSaveTitle:"Salvar em segundos",featureSaveDescription:"Clique no botão que aparece em cada anúncio, dê um nome pra oferta e ela é salva na hora.",featureTrackOfertasTitle:"Direto no Track Ofertas",featureTrackOfertasDescription:"Cada oferta salva já entra organizada no Track Ofertas â a área do Zapdata onde você acompanha suas ofertas guardadas.",installStep1Title:'Clique em "Adicionar ao Chrome"',installStep1Description:"Você é levado direto pra Chrome Web Store, onde a extensão está publicada oficialmente.",installStep2Title:'Confirme em "Adicionar extensão"',installStep2Description:"O Chrome pede uma confirmação rápida. Depois disso, o Ãcone já aparece na barra de ferramentas â sem precisar mexer em nenhuma configuração.",tabInstall:"Como instalar",tabUse:"Como usar",useStep1:"Depois de instalada, abra a <link>Biblioteca de Anúncios do Facebook <icon/></link> e faça login com sua conta Zapdata quando a extensão pedir.",useStep2:'Um botão <strong>"Salvar Oferta"</strong> aparece em cada card de anúncio. Clique nele, dê um nome pra oferta e ela já cai organizada no seu Track Ofertas.',useStep3:"Também dá pra marcar vários anúncios ao mesmo tempo e salvar todos de uma vez, direto pela extensão â sem repetir o processo anúncio por anúncio.",useStep4:"Use os filtros da extensão para exibir apenas anúncios relacionados a WhatsApp e ignorar o resto da biblioteca.",faqHeading:"Perguntas frequentes",faqFreeQuestion:"A extensão é gratuita?",faqFreeAnswer:"Sim, para quem tem conta na Zapdata. O login que ela pede é o da sua conta Zapdata, pra conectar as ofertas salvas ao seu Track Ofertas.",faqWhereSavedQuestion:"Onde ficam as ofertas que eu salvar?",faqWhereSavedAnswer:"Direto na sua conta Zapdata, dentro do Track Ofertas â não ficam apenas guardadas no navegador, então você acessa de qualquer computador.",faqUpdatesQuestion:"Preciso reinstalar quando sair uma atualização?",faqUpdatesAnswer:"Não. Como ela vem da Chrome Web Store, o próprio Chrome atualiza a extensão sozinho quando sai uma versão nova â você não precisa fazer nada."},KF={pageHeading:"Gerador de Palavras-Chave",pageDescription:"Descubra as melhores palavras-chave para encontrar anúncios de WhatsApp no gerenciador de anúncios",inputPlaceholder:"Pergunte sobre palavras-chave para seu nicho...",generatingKeywords:"Gerando palavras-chave...",copiedToast:"Copiado! ð¥",copyErrorToast:"Erro ao copiar",genericErrorMessage:"Desculpe, ocorreu um erro ao processar sua mensagem. Tente novamente.",quickActionReligion:"Religião",quickActionCraft:"Artesanato",quickActionRecipes:"Receitas",quickActionEducation:"Educação",quickActionReligionPrompt:"Me dê palavras-chave para o nicho de produtos religiosos",quickActionCraftPrompt:"Preciso de palavras-chave para anúncios de artesanato e crochê",quickActionRecipesPrompt:"Sugira palavras-chave para anúncios de receitas e confeitaria",quickActionEducationPrompt:"Quero palavras-chave para anúncios de cursos e mentorias",featureModalName:"Gerador de Palavras-Chave"},XF={pageTitle:"Limpa Hash",pageDescription:"Remova metadados e modifique a hash de imagens e vÃdeos para evitar detecção de duplicatas pelo Facebook.",loaderText:"Limpando hash dos arquivos...",filesCardTitle:"Arquivos",filesCardDescription:"Arraste ou selecione imagens e vÃdeos",clearAllButton:"Limpar Tudo",dropZonePrompt:"Clique ou arraste arquivos aqui",dropZoneFormats:"JPG, PNG, WEBP, MP4, WEBM, MOV",processingLabel:"Processando...",hashLabel:"Hash:",statusPending:"Pendente",statusProcessing:"Processando",statusReady:"Pronto",statusError:"Erro",processedCount:"{{processed}} de {{total}} processado(s)",cleanHashButton:"Limpar Hash",downloadAllButton:"Baixar Todos ({{count}})",emptyState:"Nenhum arquivo adicionado ainda",infoMetadataTitle:"Remoção de Metadados",infoMetadataDescription:"Remove EXIF, XMP, IPTC e outros metadados que podem identificar a origem do arquivo.",infoHashTitle:"Alteração de Hash",infoHashDescription:"Modifica pixels/bytes de forma imperceptÃvel para gerar uma hash completamente nova.",infoClientSideTitle:"100% Client-Side",infoClientSideDescription:"Todo o processamento é feito no seu navegador. Seus arquivos nunca são enviados para servidores.",toastUnsupportedFormat:"Formato não suportado: {{fileName}}",toastFilesAdded:"{{count}} arquivo(s) adicionado(s)",toastAddFilesFirst:"Adicione arquivos primeiro",toastProcessError:"Erro ao processar: {{fileName}}",toastProcessingComplete:"Processamento concluÃdo!",toastNoProcessedFiles:"Nenhum arquivo processado para download",toastZipDownloaded:"ZIP baixado com sucesso!"},YF={pageTitle:"Administração de WhatsApps",pageSubtitle:"Gerencie seus chips e números de WhatsApp",totalLabel:"Total",statusActivePlural:"Ativos",statusInactivePlural:"Inativos",statusAnalysisPlural:"Análise",statusLostPlural
499:"Perdidos",statusRelogarPlural:"Relogar",tabAll:"Todos",exportButton:"Exportar",addChipButton:"Adicionar Chip",searchPlaceholder:"Buscar por nome, aplicativo ou número...",clearSearchAriaLabel:"Limpar busca",noResultsForSearch:"Nenhum chip encontrado para essa busca.",noChipsInFilter:"Nenhum chip neste filtro.",noChipsRegistered:"Nenhum chip cadastrado.",colName:"Nome",colStatus:"Status",colApp:"Aplicativo",colNumber:"Número",colChipId:"ID Chip",colCreatedAt:"Criado em",colStatusSince:"Status desde",colTimeInStatus:"Tempo no status",colObservations:"Observações",colActions:"Ações",csvHeaderName:"Nome",csvHeaderStatus:"Status",csvHeaderApp:"Aplicativo",csvHeaderNumber:"Numero",csvHeaderChipId:"ID Chip",csvHeaderCreatedAt:"Criado em",csvHeaderStatusSince:"Status desde",csvHeaderObservations:"Observacoes",confirmRemoveChip:"Remover este chip?",toastLoadChipsError:"Erro ao carregar chips",toastSaveChipError:"Erro ao salvar chip",toastChipUpdated:"Chip atualizado!",toastAddChipError:"Erro ao adicionar chip",toastChipAdded:"Chip adicionado!",toastRemoveError:"Erro ao remover",toastChipRemoved:"Chip removido!"},QF={delayUnitSeconds:"{{count}} segundos",delayUnitMinute:"{{count}} minuto",delayUnitMinutes:"{{count}} minutos",delayUnitMinSec:"{{minutes}}min {{seconds}}s",pageSubtitle:"Dispare fluxos em massa ⢠Quota hoje: {{used}}/{{limit}}",connectedInstancesSuffix:" ({{count}} instância{{plural}} conectada{{plural}})",newCampaignButton:"Nova Campanha",createCampaignDialogTitle:"Criar Nova Campanha",campaignNameLabel:"Nome da Campanha",campaignNamePlaceholder:"Ex: Black Friday 2026",flowToDispatchLabel:"Fluxo a disparar",chooseActiveFlowPlaceholder:"Escolha um fluxo ativo...",noActiveFlow:"Nenhum fluxo ativo",flowStartNote:"O fluxo será iniciado para cada número da lista, exatamente como nos disparos automáticos.",phoneNumbersLabel:"Números de Telefone",downloadTemplateButton:"Baixar modelo",manualTab:"Manual",fileTab:"Arquivo",phoneNumbersPlaceholder:`Cole os números (um por linha) 500Ex: 5511999999999 5015521988888888`,fileUploadNote:'Aceita .csv ou .txt (um número por linha). Cabeçalho "phone" é ignorado.',validNumbersCount:"{{count}} números válidos ⢠máx {{max}} por campanha",validatingButton:"Validando...",validateNumbersButton:"Validar Números",validCount:"{{count}} válidos",invalidCount:"{{count}} inválidos",keepOnlyValidButton:"Manter apenas válidos",instancesToSendLabel:"Instâncias para envio",noInstanceConnected:"Nenhum número conectado.",noNumberFallback:"Sem número",connectedBadge:"Conectado",selectedCount:"{{count}} selecionada(s)",delayBetweenDispatchesLabel:"Delay entre disparos (segundos)",approxDelay:"â {{delay}}",delayRecommendationNote:"MÃnimo {{min}}s, máximo {{max}}s (30min). Recomendado: <strong>8s</strong> para volume baixo, <strong>60-300s (1-5min)</strong> para 1k+ contatos, <strong>600-1800s (10-30min)</strong> para 5k+ contatos. Espaçar mais reduz risco de bloqueio do número.",alternateInstanceLabel:"Quantos números antes de alternar instância",alternateEveryDispatch:"1 (alterna a cada disparo)",alternateNote:"Distribui os disparos entre as instâncias selecionadas.",createCampaignButton:"Criar Campanha",connectedNumbersDialogTitle:"Números Conectados",noNumberConnectedDialog:"Nenhum número conectado",connectNumberButton:"Conectar Número",manageNumbersButton:"Gerenciar Números",statCampaigns:"Campanhas",statSent:"Enviadas",statFailed:"Falhas",statInstances:"Instâncias",noCampaignsFound:"Nenhuma campanha encontrada",createFirstCampaign:"Crie sua primeira campanha",createdOn:"Criado em {{date}}",progressLabel:"Progresso",inProgressLabel:"Em andamento",totalLabel:"Total",flowBadge:"Fluxo",flowRunningBadge:"Fluxo em execução",instanceDisconnectedWarning:'A instância desta campanha está desconectada. Os envios pendentes retomam sozinhos assim que ela reconectar, ou clique em "Verificar conexão".',startButton:"Iniciar",checkConnectionButton:"Verificar conexão",pauseButton:"Pausar",stopButton:"Parar",resumeButton:"Continuar",completedButton:"ConcluÃdo",endedButton:"Encerrado",viewMessagesTitle:"Ver mensagens",deleteCampaignDialogTitle:"Excluir Campanha",actionCannotBeUndone:"Esta ação não pode ser desfeita.",stopCampaignDialogTitle:"Parar Campanha",stopCampaignDialogDescription:"Isso vai encerrar a campanha e cancelar todas as sessões de fluxo em andamento. Não é possÃvel retomar depois.",stopCampaignButton:"Parar campanha",sentMessagesDialogTitle:"Mensagens Enviadas",noLogsFound:"Nenhum log encontrado",statusDisconnectedBadge:"Instância desconectada",statusDraft:"Rascunho",statusSending:"Enviando",statusPaused:"Pausado",statusCompleted:"ConcluÃdo",statusCancelled:"Encerrado",toastLoadCampaignsError:"Erro ao carregar campanhas",toastFileLoaded:"Arquivo carregado: {{fileName}}",toastSelectInstanceToValidate:"Selecione uma instância para validar",toastAddNumbersToValidate:"Adicione números para validar",toastValidationLimit:"Limite de 100 números por validação",toastInstanceTokenNotFound:"Token da instância não encontrado.",toastUazapiConfigNotFound:"Config UAZAPI não encontrada",toastValidationError:"Erro na validação",toastValidationResult:"{{valid}} válidos, {{invalid}} inválidos",toastValidateError:"Erro ao validar: {{message}}",toastOnlyValidKept:"Apenas válidos mantidos",toastEnterName:"Digite um nome",toastSelectFlow:"Selecione um fluxo",toastAddValidNumber:"Adicione ao menos um número válido",toastMaxContacts:"Máximo de {{max}} contatos por campanha",toastSelectInstance:"Selecione ao menos uma instância",toastMinDelay:"Delay mÃnimo: {{min}}s",toastMaxDelay:"Delay máximo: {{max}}s",toastQuotaExceeded:"Quota diária excedida. Você usou {{used}}/{{limit}} nas últimas 24h ({{instanceCount}} instância{{plural}} conectada{{plural}} à {{perInstance}}). Conecte mais números pra aumentar sua cota.",toastCreateCampaignError:"Erro ao criar campanha: {{message}}",toastCampaignCreated:"Campanha criada!",toastStartedCampaign:"Campanha iniciada!",toastPausedCampaign:"Campanha pausada",toastResumedCampaign:"Campanha retomada",toastEndedCampaign:"Campanha encerrada",toastActionError:"Erro: {{message}}",toastGenericError:"Ocorreu um erro.",toastStillDisconnected:"Instância ainda desconectada. Reconecte o número e tente de novo.",toastReconnected:"Instância reconectada! Retomando os envios pendentes.",toastCheckConnectionError:"Erro ao verificar conexão: {{message}}",toastDeleteError:"Erro ao excluir",toastCampaignDeleted:"Campanha excluÃda"},ZF={campaignStatus:{draft:"Rascunho",queued:"Enfileirada",running:"Em execução",paused:"Pausada",awaitingDelivery:"Aguardando entrega",completed:"ConcluÃda",cancelled:"Cancelada",failed:"Falhou"},metaErrorReasons:{0:"Erro genérico da Meta. Tente novamente em alguns minutos.",3:"Permissão da API insuficiente â revise o token de acesso do WhatsApp Business.",10:"Permissão negada pela Meta para esta conta.",100:"Parâmetro inválido na requisição enviada à Meta.",190:"Token de acesso expirado ou inválido. Reconecte o WhatsApp Business.",200:"Permissão da Meta ausente para enviar mensagens.",368:"Conta temporariamente bloqueada pela Meta por violação de polÃticas.",1006:"Conexão com a Meta perdida. Tente novamente.",130429:"Limite de envios por segundo da Meta atingido (rate limit). Aguarde alguns minutos.",131e3:"Erro genérico do WhatsApp ao processar a mensagem.",13100
5015:"Acesso negado pela Meta para esta operação.",131008:"Parâmetro obrigatório ausente na mensagem.",131009:"Valor de parâmetro inválido na mensagem.",131016:"Serviço da Meta temporariamente indisponÃvel.",131021:"Não foi possÃvel enviar mensagem para si mesmo (remetente = destinatário).",131026:"Destinatário não possui WhatsApp ou não pode receber mensagens no momento.",131031:"Conta bloqueada pela Meta. Verifique o status do número no Business Manager.",131042:"Falha no pagamento da Meta. Verifique se há método de pagamento válido cadastrado no WhatsApp Business e se a fatura está em dia.",131045:"Template não aprovado ou divergente â verifique se o template ainda está aprovado pela Meta.",131047:"Janela de 24h expirada â o destinatário não interagiu nas últimas 24h e só é possÃvel enviar templates.",131048:"Limite anti-spam atingido pela Meta. Reduza o ritmo de envio.",131049:"Mensagem não entregue por restrições de qualidade do número.",131050:"Usuário optou por não receber mensagens deste número (opt-out).",131051:"Tipo de mensagem não suportado.",131052:"Falha no download da mÃdia da mensagem.",131053:"Falha no upload da mÃdia para a Meta.",131056:"Limite de pares conversa (par de números) atingido na Meta. Aguarde.",131057:"Conta em modo de manutenção pela Meta.",132e3:"Template com número incorreto de parâmetros.",132001:"Template não existe ou foi excluÃdo na Meta.",132005:"Texto traduzido do template é maior que o permitido.",132007:"Categoria do template foi alterada pela Meta â reaprovação necessária.",132012:"Formato de parâmetro do template inválido.",132015:"Template pausado pela Meta por baixa qualidade.",132016:"Template desativado pela Meta por baixa qualidade.",132068:"Template em fluxo pausado pela Meta.",132069:"Template em fluxo bloqueado pela Meta.",133e3:"Falha ao registrar o número na Cloud API.",133004:"Servidor da Meta temporariamente indisponÃvel.",133005:"PIN de verificação em duas etapas incorreto.",133006:"Necessário re-verificar o número na Meta.",133008:"Muitas tentativas de PIN â aguarde antes de tentar novamente.",133
501009:"PIN bloqueado por excesso de tentativas.",135e3:"Falha genérica ao processar a mensagem na Meta."},metaErrorFallback:"Erro Meta {{code}} (sem descrição mapeada).",metaErrorNoCode:"Falha sinalizada pela Meta sem código.",metaLanguages:{ptBR:"Português (Brasil)",ptPT:"Português (Portugal)",enUS:"Inglês (EUA)",enGB:"Inglês (Reino Unido)",esES:"Espanhol (Espanha)",esMX:"Espanhol (México)",esAR:"Espanhol (Argentina)",frFR:"Francês",itIT:"Italiano",de:"Alemão"},tierNotSynced:"Não sincronizado",tier50:"50 / 24h",tier250:"250 / 24h",tier1k:"1.000 / 24h",tier10k:"10.000 / 24h",tier100k:"100.000 / 24h",tierUnlimited:"Ilimitado",toastSyncTemplatesSuccess:"Sincronização concluÃda â {{count}} template(s) atualizados.",toastSyncError:"Erro ao sincronizar",toastSyncNumbersSuccess:"Números sincronizados â {{added}} novo(s), {{updated}} atualizado(s).",toastSyncNumbersPartial:"{{count}} sincronizado(s), {{problems}} com problema",toastSyncNumbersPartialDesc:"Motivo principal: {{reason}}. Veja o detalhe em cada card.",toastOrphanNotFound:"número não encontrado na Meta",toastCheckToken:"verifique o token",toastSyncNumbersError:"Erro ao sincronizar números",toastCampaignDeletedShort:"Campanha apagada",copyOf:"Cópia de {{name}}",toastDuplicateError:"Erro ao duplicar",toastLoadCampaignError:"Falha ao carregar campanha",blockReasonNoConnection:"Conecte ao menos 1 número oficial no WhatsApp Coexistente.",blockReasonNoApprovedTemplate:"Crie e aguarde a aprovação de pelo menos 1 template.",officialApiSuffix:"(API oficial)",pageDescription:"Envio de templates aprovados via Meta Cloud API â números do WhatsApp Coexistente.",createTemplateButton:"Criar template",newCampaignButton:"Nova campanha",officialNumbersTitle:"Números oficiais disponÃveis",officialNumbersDescription:"Números conectados no WhatsApp Coexistente que podem disparar pela API oficial.",syncingButton:"Sincronizando...",syncButton:"Sincronizar",noNumberConnectedYet:"Você ainda não conectou nenhum número.",connectNowLink:"Conectar agora",metaLimitLabel:"Limite Meta:",myTemplatesTitle:"Meus templates",myTemplatesDescription:"Todos os templates da sua conta com o status atual na Meta.",noTemplatesYet:"Você ainda não tem templates. Crie um a partir da biblioteca oficial da Meta e depois clique em <strong>Sincronizar</strong> para puxar os templates já existentes da sua conta WhatsApp.",campaignsTitle:"Campanhas",campaignsDescription:"Ãltimas 50 campanhas â atualiza a cada 5s.",noCampaignsYetShort:"Nenhuma campanha criada ainda.",colName:"Nome",colStatus:"Status",sendProgressTooltipLabel:"Progresso de envio (Meta)",sendProgressTooltipContent:"Percentual de contatos que já tiveram o disparo <strong>enviado para a Meta</strong> (aceitos ou recusados pela API). Não reflete a entrega real ao destinatário â essa informação aparece na coluna <em>Entrega real (Meta)</em>.",sentFailedLabel:"Enviadas / Falhas",sentFailedTooltipContent:"Quantidade de disparos enviados à Meta (aceitos pela API do WhatsApp). Isso <strong>não significa</strong> que a mensagem já chegou ao destinatário â a entrega real aparece na coluna <em>Entrega real (Meta)</em>.",realDeliveryColumn:"Entrega real (Meta)",actionsColumn:"Ações",ofTotal:"de {{total}}",successDispatchBadge:"{{count}} disparo{{plural}} com sucesso",awaitingConfirmationTitle:"Meta aceitou mas ainda não confirmou entrega ao destinatário",awaitingConfirmationBadge:"{{count}} aguardando confirmação",failureBadge:"{{count}} falha{{plural}}",metaReasonLabel:"Motivo informado pela Meta{{codeSuffix}}:",metaReasonCodeSuffix:" (código {{code}})",pauseTitle:"Pausar",resumeTitle:"Retomar",cancelCampaignTitle:"Cancelar",duplicateCampaignTitle:"Duplicar campanha",deleteCampaignTitle:"Apagar campanha",deleteCampaignConfirmTitle:"Apagar campanha?",deleteCampaignConfirmDescription:"A campanha <strong>{{name}}</strong> e todo o histórico de disparos dela serão removidos permanentemente. Esta ação não pode ser desfeita.",apagarButton:"Apagar",createTemplateSectionTitle:"Criar template",createTemplateSectionDescription:"Crie templates a partir da biblioteca oficial da Meta e acompanhe o status de análise em tempo real.",numberPlaceholder:"Número",syncAllButton:"Sincronizar todos",createFromMetaButton:"Criar a partir da Meta",connectNumberFirstNote:"Conecte um número primeiro para gerenciar templates.",noTemplateForNumberNote:'Nenhum template criado para este número. Use "Criar a partir da Meta" para começar.',colLanguage:"Idioma",colCategory:"Categoria",colLastSync:"Ãltima sincronização",checkStatusButton:"Verificar status",toastVerifyFailed:"Falha ao verificar",toastStatusResult:"Status: {{status}}",toastSyncFailed:"Falha ao sincronizar",toastSyncedCount:"Sincronizados {{upserted}}/{{total}}",createFromLibraryWizardTitle:"Criar template a partir da biblioteca oficial da Meta",step1NumberTab:"1. Número",step2LibraryTab:"2. Biblioteca Meta",step3EditSendTab:"3. Editar e enviar",selectNumberLabel:"Selecione o número",publicLibraryTab:"Biblioteca Meta (pública)",myWabaTab:"Da minha conta WhatsApp",searchPlaceholderGeneric:"Buscar...",languagePlaceholder:"Idioma",allLanguages:"Todos os i
501diomas",refreshButton:"Atualizar",noTemplateInPublicLibrary:"Nenhum template encontrado na biblioteca pública da Meta para este filtro.",noTemplateInWaba:"Nenhum template encontrado nesta WABA. Crie um a partir da Biblioteca pública.",nameSlugLabel:"Nome (slug único)",slugHintNote:"Apenas minúsculas, números e _.",languageLabel:"Idioma",selectLanguagePlaceholder:"Selecione o idioma",buttonDataLabel:"Dados dos botões do template",buttonFallback:"Botão {{index}}",buttonDataNote:"A Meta exige o mesmo número de entradas de botão definido na biblioteca; deixe em branco para usar o valor padrão exibido.",buttonUrlRequiredGeneric:"Preencha a URL do botão para enviar este template.",buttonPhoneRequiredGeneric:"Preencha o telefone do botão para enviar este template.",previewLabel:"Pré-visualização",templateContentFixedNote:"O conteúdo deste template é definido pela Meta e não pode ser alterado. Selecione o modelo desejado e envie para análise.",alreadyInWabaButton:"Já existe na sua WABA",submitForReviewButton:"Enviar para análise",alreadyInWabaTitle:"Este template já existe na sua WABA â não é necessário reenviar.",errorTokenExpired:"Token Meta expirado. Reconecte o número no WhatsApp Coexistente.",errorMissingScope:"Token sem permissão whatsapp_business_management. Reconecte concedendo todas as permissões.",errorForbidden:"Esta conexão não pertence ao usuário logado.",errorUnknownMeta:"Erro desconhecido da Meta",errorCallingFunction:"Erro ao chamar a função.",toastLoadLibraryError:"Erro ao carregar biblioteca",toastLoadWabaError:"Erro ao carregar templates da WABA",toastAlreadyExistsInWaba:"Este template já existe na sua WABA. Use a aba 'Templates' para acompanhar o status â não é necessário reenviar.",toastTemplateSubmitted:"Template enviado para análise (status: {{status}})",toastSubmitTemplateError:"Erro ao enviar template",toastConnectionUnavailable:"A conexão original não está mais disponÃvel. Selecione outro número.",toastTemplateNoLongerApproved:"O template original não está mais aprovado. Selecione outro template.",newCampaignWizardTitle:"Nova campanha â DisparaZap (API oficial)",step2TemplateTab:"2. Template",step3ContactsTab:"3. Contatos & envio",campaignNameLabel:"Nome da campanha",campaignNamePlaceholder:"Ex: Black Friday 2026 - leads frios",officialNumberLabel:"Número oficial",searchNamePlaceholder:"Buscar nome...",allCategories:"Todas categorias",allLanguagesShort:"Todos idiomas",noApprovedTemplateNote:'Nenhum template APPROVED encontrado para este número. Crie um na seção "Criar template".',contactsListLabel:"Lista de contatos (CSV)",csvInstructionsNote:"Cole CSV com cabeçalho ou faça upload. Separador <0>,</0> ou <1>;</1>. Sem cabeçalho? 1 telefone por linha (assume coluna <2>phone</2>).",contactsCsvPlaceholder:`phone,nome,produto 5025511999999999,João,Curso X 5035511988888888,Maria,Curso Y`,loadCsvButton:"Carregar CSV",linesReadCount:"{{count}} linha(s) lida(s)",columnsSuffix:" · colunas: {{columns}}",columnMappingLabel:"Mapeamento de colunas",phoneColumnLabel:"Coluna de telefone *",chooseColumnPlaceholder:"Escolha a coluna",noVariablesNote:"Este template não tem variáveis.",urlButtonLabel:"Botão URL",variableLabel:"Variável",csvColumnOption:"Coluna do CSV",fixedValueOption:"Valor fixo",chooseColumnPlaceholder2:"Escolher coluna",urlSuffixPlaceholder:"Sufixo da URL (substitui {{token}})",fixedValuePlaceholder:"Valor fixo",validContactsCount:"â {{count}} contato(s) válido(s)",invalidContactsSuffix:" · {{count}}
503 ignorado(s) (telefone inválido)",previewFirstContactLabel:"Pré-visualização (1º contato)",delayBetweenSendsLabel:"Delay entre envios (s)",jitterLabel:"Jitter aleatório (s)",jitterTooltip:"Variação aleatória somada ou subtraÃda do delay base para deixar o ritmo de envio menos robótico e mais natural. Ex.: com delay de 5s e jitter de 2s, cada disparo sai num intervalo aleatório entre <strong>3s e 7s</strong> (5 ± 2). Isso reduz o padrão automático percebido pela Meta e ajuda a preservar a qualidade do número.",summaryLabel:"Resumo",summaryText:"{{count}} contatos · delay {{delay}}s ± {{jitter}}s â tempo estimado: ~{{minutes}}min",tierLimitNote:"â Envio dentro dos limites do tier Meta. Em 429 o sistema reagenda automaticamente.",nextButton:"Próximo",createAndStartButton:"Criar e iniciar envio",toastCampaignCreatedCount:"Campanha criada: {{count}} contatos enfileirados",toastCreateCampaignErrorGeneric:"Erro ao criar campanha",toastMaxButtons:"A Meta aceita no máximo 10 botões por template.",validateSelectConnection:"Selecione o número da conexão.",validateNameFormat:"Nome deve conter apenas letras minúsculas, números e _.",validateBodyRequired:"O corpo do template é obrigatório.",validateBodyMaxLength:"O corpo deve ter no máximo 1024 caracteres.",validateFooterMaxLength:"O rodapé deve ter no máximo 60 caracteres.",validateHeaderMaxLength:"O cabeçalho de texto deve ter no máximo 60 caracteres.",validateMediaUrlRequired:"Informe uma URL pública de exemplo para o cabeçalho de mÃdia.",validateFillVarExamples:"Preencha os {{count}} exemplo(s) das variáveis do corpo.",validateButtonTextRequired:"Botão {{index}}: o texto é obrigatório.",validateButtonTextMaxLength:"Botão {{index}}: texto com no máximo 25 caracteres.",validateButtonUrlRequired:"Botão {{index}}: informe a URL.",validateButtonPhoneRequired:"Botão {{index}}: informe o telefone (formato +55...).",createFromScratchTitle:"Criar template do zero",numberConnectionLabel:"Número (conexão)",categoryLabel:"Categoria",headerLabel:"Cabeçalho",noHeaderOption:"Sem cabeçalho",textOption:"Texto",imageOption:"Imagem",videoOption:"VÃdeo",documentOption:"Documento",headerTextPlaceholder:"Texto do cabeçalho (máx. 60 caracteres)",mediaUrlPlaceholder:"URL pública de exemplo da mÃdia (https://...)",mediaUrlNote:"A Meta usa esta URL apenas como exemplo durante a análise. No envio real você anexa a mÃdia.",bodyLabel:"Corpo da mensagem *",bodyTemplatePlaceholder:"Olá {{token1}}, sua compra de {{token2}} foi confirmada!",variablesHintUse:"Use",variablesHintSuffix:"⦠para variáveis. {{count}}/1024",variableExamplesRequiredNote:"Exemplos das variáveis (obrigatório para análise)",variableExamplePlaceholder:"Exemplo para {{token}}",footerLabel:"Rodapé (opcional)",footerPlaceholder:"Texto pequeno no final (máx. 60 caracteres)",buttonsLabel:"Botões (até 10)",quickReplyButton:"+ Resposta rápida",urlButtonAdd:"+ URL",phoneButtonAdd:"+ Telefone",buttonTextPlaceholder:"Texto do botão (máx. 25)",urlButtonPlaceholder:"https://seusite.com (use {{token}} para variável dinâmica)",imagePlaceholderTag:"[Imagem]",videoPlaceholderTag:"[VÃdeo]",documentPlaceholderTag:"[Documento]",bodyWillAppearHere:"O corpo aparecerá aquiâ¦",metaReviewNote:"A Meta analisa o conteúdo antes de aprovar. Templates de MARKETING costumam ser mais rigorosos â evite linguagem promocional agressiva e respeite as polÃticas do WhatsApp."},JF={title:"Análise de Performance",emptyMetrics:"Adicione métricas ao produto para gerar a análise de performance.",context:{title:"Contexto da Campanha",description:"Responda algumas perguntas para uma análise mais precisa e recomendações personalizadas",q1:"1. Qual tipo de campanha você está usando?",campaignType:{conversionMessage:"Conversão - Compra por Mensagem",maximizeMessages:"Maximizar Mensagens",conversionSales:"Conversão otimizada para vendas",engagementSales:"Campanha de Engajamento otimizada para vendas",engagementConversation:"Campanha de engajamento otimizada para conversa",other:"Outro tipo"},q2:"2. Qual tipo de criativo você está usando?",creativeType:{video:"VÃdeo",image:"Imagem"},q3:"3. Qual seu orçamento diário por campanha?",budget:{upTo10:"Até R$ 10/dia","10to50":"R$ 10 - R$ 50/dia","50to200":"R$ 50 - R$ 200/dia",above200:"Acima de R$ 200/dia"}},generateButton:{analyzing:"Analisando...",generate:"Gerar Análise Profissional"},generateDescription:"Análise detalhada com diagnóstico e recomendações personalizadas",newContext:"Informar Novo Contexto",viewDetailedMetrics:"Ver Métricas Detalhadas",updating:"Atualizando...",updateMetrics:"Atualizar Métricas",sections:{cpl:"Análise de CPL (Custo por Lead)",conversion:"Análise de Taxa de Conversão",roas:"Análise de ROAS (Retorno)",summary:"Resumo Executivo"},cta:{title:"Acelere Seus Resultados",description:"Quer aplicar essas estratég
503ias com apoio de especialistas? Conheça nossos treinamentos completos.",button:"TREINAMENTO X1"},toasts:{notEnoughMetrics:"Não há métricas suficientes para análise",analysisGenerated:"Análise gerada com sucesso!",analysisError:"Erro ao gerar análise. Tente novamente."}},eL={lastUpdate:"Ãltima atualização: {{date}}",addNewMetric:"Adicionar Nova Métrica",comparativeCharts:"Gráficos Comparativos"},tL={steps:{fetch:"Buscando página",structure:"Analisando estrutura",styles:"Extraindo estilos",media:"Identificando mÃdia",content:"Extraindo conteúdo",prompt:"Gerando prompt"},toasts:{invalidUrlTitle:"Erro",invalidUrlDescription:"Digite uma URL válida",successTitle:"Sucesso",successDescription:"Site analisado com sucesso!",errorTitle:"Erro",errorDescription:"Erro ao analisar o site",copiedDescription:"Prompt copiado para a área de transferência",deleteErrorTitle:"Erro",deleteErrorDescription:"Erro ao excluir",deletedTitle:"ExcluÃdo",deletedDescription:"Site removido do histórico"},title:"Clonador de Entregável",subtitle:"Analise qualquer site e gere um prompt detalhado para recriá-lo com IA",tabs:{analyze:"Analisar",history:"Histórico ({{count}})"},urlCard:{title:"URL do Site",description:"Cole a URL do site que deseja clonar",placeholder:"https://exemplo.com",analyzeButton:"Analisar"},results:{structureTitle:"Estrutura",titleLabel:"TÃtulo:",notFound:"Não encontrado",descriptionLabel:"Descrição:",layoutLabel:"Layout:",sectionsLabel:"Seções ({{count}}):",stylesTitle:"Estilos",colorsLabel:"Cores ({{count}}):",fontsLabel:"Fontes:",fontsNotDetected:"Não detectadas",cssFrameworkLabel:"Framework CSS:",promptTitle:"Prompt Gerado",promptDescription:"Use este prompt para recriar o site com IA",copyPrompt:"Copiar Prompt"},history:{empty:"Nenhum site clonado",emptyDescription:"Analise um site para salvar no histórico",untitled:"Sem tÃtulo",view:"Ver"},planModal:{featureName:"Clonador de Sites"}},aL={orderCard:{statusReceived:"Recebido",statusCancelled:"Cancelado",statusExpired:"Expirado",clickToCopy:"Clique para copiar",copyNumber:"Copiar Número",smsCode:"Código SMS:"},toasts:{loadCountriesError:"Erro ao carregar paÃses",loadServicesError:"Erro ao carregar serviços",limitedAvailability:"Apenas {{count}} números disponÃveis",reduceQuantity:"Reduza a quantidade e tente novamente.",requiredAmount:"Necessário: R$ {{amount}}",purchaseSuccessMultiple:"{{count}} números adquiridos com sucesso!",purchaseSuccessSingle:"Número adquirido com sucesso!",purchaseError:"Erro ao comprar número",smsReceived:"SMS recebido!",cancelError:"Erro ao cancelar",cancelSuccess:"Cancelado. Reembolso: R$ {{amount}}"},title:"ð± Números Virtuais",subtitle:"Compre números virtuais para receber SMS",balance:{label:"Seu saldo",recharge:"Recarregar"},tabs:{buy:"Comprar Número",orders:"Meus Pedidos"},country:{chooseTitle:"1. Escolha o paÃs",collapse:"Recolher",showMore:"Ver mais paÃses ({{count}})"},service:{chooseTitle:"2. Escolha o serviço",searchPlaceholder:"Buscar serviço...",noneAvailable:"Nenhum serviço disponÃvel",available:"{{count}} disponÃveis",buy:"Comprar"},tutorial:{title:"Como receber SMS do número virtual no WhatsApp",step1:"Copie o número adquirido e solicite o SMS de verificação diretamente pelo app do WhatsApp (na tela de login/cadastro).",step2:{before:"Se o WhatsApp mostrar um aviso para tentar novamente em 1 hora, ",bold:"cancele o número dentro do prazo de 20 minutos",after:" (antes de expirar) para receber o reembolso e compre um novo número."}},orders:{title:"Histórico de Pedidos",empty:"Nenhum pedido encontrado"}},oL={errors:{loadServices:"Erro ao carregar serviços",genericTitle:"Erro",loadServicesDescription:"Não foi possÃvel carregar os serviços",requiredFieldsTitle:"Campos obrigatórios",requiredFieldsDescription:"Preencha o link e a quantidade",invalidLinkTitle:"Link inválido",commentsRequiredTitle:"Comentários obrigatórios",commentsRequiredDescription:"Insira pelo menos {{min}} comentários, um por linha. Você enviou {{count}}.",tooManyCommentsTitle:"Comentários demais",tooManyCommentsDescription:"Este serviço aceita no máximo {{max}} comentários; você enviou {{count}}
503.",invalidQuantityTitle:"Quantidade inválida",invalidQuantityDescription:"Quantidade deve estar entre {{min}} e {{max}}",notAuthenticated:"Não autenticado",insufficientBalanceTitle:"Saldo insuficiente",insufficientBalanceDescription:"Você precisa de R$ {{required}} mas tem R$ {{balance}}",createOrder:"Erro ao criar pedido",checkStatus:"Erro ao verificar status",cancelOrder:"Erro ao cancelar pedido"},toasts:{orderCreatedTitle:"Pedido criado!",orderCreatedDescription:"Pedido #{{id}} criado com sucesso",statusUpdatedTitle:"Status atualizado",statusUpdatedDescription:"Status: {{status}}",orderCancelledTitle:"Pedido cancelado",orderCancelledDescription:"Pedido cancelado com sucesso"},title:"ð Painel Marketing",subtitle:"Compre seguidores, curtidas e visualizações para suas redes sociais",balanceLabel:"Saldo disponÃvel",recharge:"Recarregar",tabs:{services:"Serviços",orders:"Meus Pedidos"},quickFilters:{instagramFollowers:"ð¸ Instagram Seguidores",instagramLikes:"â¤ï¸ Instagram Curtidas",facebookComments:"ð¬ Facebook Comentários",facebookPostLikes:"ð Facebook Curtidas de Post"},searchPlaceholder:"Buscar serviço...",categoryPlaceholder:"Categoria",allCategories:"Todas as categorias",form:{link:"Link",quantity:"Quantidade",quantityDefinedByComments:"(definida pelos comentários)",quantityMinMax:"(mÃn: {{min}}, máx: {{max}})",customComments:"Comentários Personalizados ({{count}} comentários)",customCommentsHelp:"Insira os comentários desejados, um por linha. A quantidade será determinada automaticamente.",customCommentsPlaceholder:`Comentário 1 504Comentário 2 505Comentário 3 506...`,pricePer1000:"Preço por 1000:",total:"Total:",buyButton:"Comprar"},per1000:"por 1000",noOrders:"Você ainda não fez nenhum pedido",orderCard:{quantity:"Qtd: {{count}}",progress:"Progresso",start:"InÃcio: {{count}}",remaining:"Restante: {{count}}"}},nL={errors:{loadOffers:"Erro ao carregar ofertas",requiredFieldsTitle:"Campos obrigatórios",requiredFieldsDescription:"Por favor, preencha o nome e o link da oferta.",invalidLinkTitle:"Link inválido",invalidLinkDescription:"O link deve ser da Biblioteca de Anúncios do Facebook.",genericTitle:"Erro",genericDescription:"Ocorreu um erro ao processar sua solicitação.",requiredNameTitle:"Nome obrigatório",requiredNameDescription:"Por favor, preencha o nome da oferta.",updateOfferTitle:"Erro ao atualizar oferta",deleteOfferTitle:"Erro ao excluir oferta",saveMetricTitle:"Erro ao salvar métrica",saveNotesTitle:"Erro ao salvar observações",requiredQuantityTitle:"Campo obrigatório",requiredQuantityDescription:"Preencha a quantidade de anúncios."},toasts:{offerCreatedTitle:"Oferta cadastrada!",offerCreatedDescription:"Agora você pode inserir os dados de anúncios manualmente.",offerUpdatedTitle:"Oferta atualizada!",offerUpdatedDescription:"O nome da oferta foi atualizado com sucesso.",offerDeletedTitle:"Oferta excluÃda",offerDeletedDescription:"A oferta foi removida com sucesso.",metricSavedTitle:"Métrica salva!",metricSavedDescription:"Anúncios do dia {{date}} atualizados com sucesso.",notesSavedTitle:"Observações salvas!",notesSavedDescription:"As observações foram atualizadas com sucesso."},loadingOffers:"Carregando ofertas",loadingOffersEllipsis:"Carregando ofertas...",subtitle:"Acompanhe a performance dos anúncios ativos das suas ofertas",addOffer:"Adicionar Oferta",createDialog:{title:"Cadastrar Nova Oferta",description:"Preencha os dados abaixo para começar a rastrear uma nova oferta."},form:{offerNameLabel:"Nome da Oferta *",offerNamePlaceholder:"Ex: Produto XYZ - Campanha Verão",libraryLinkLabel:"Link da Biblioteca de Anúncios *",funnelNumberLabel:"Número de WhatsApp da oferta (opcional)",funnelNumberPlaceholder:"Ex: 5511999999999",submitting:"Cadastrando...",submit:"Cadastrar Oferta"},empty:{title:"Nenhuma oferta cadastrada",description:"Comece cadastrando sua primeira oferta para acompanhar a performance dos anúncios ativos.",cta:"Cadastrar Primeira Oferta"},confirmDelete:'Deseja realmente excluir a oferta "{{name}}"?',viewAds:"Ver anúncios",updateAds:"Atualizar Anúncios ({{date}})",chart:{adsLegend:"Anúncios",activeAdsLegend:"Anúncios Ativos"},variation:{label:"Variação",vsYesterday:"Variação vs. Dia Anterior",moreAds:"Anúncios a mais",fewerAds:"Anúncios a menos",none:"Sem variação"},lastRecord:"Ãltimo Registro",editDialog:{title:"Editar Oferta",description:"Altere o nome da oferta conforme necessário.",save:"Salvar Alterações"},updateDialog:{title:"Atualizar Anúncios",description:"Informe a quantidade de anúncios ativos para hoje ({{date}}).",quantityLabel:"Quantidade de Anúncios",quantityPlaceholder:"Ex: 15"},viewLibrary:"Ver biblioteca de anúncios",editPreviousDays:"Editar Dias Anteriores",offerWhatsapp:"WhatsApp da Oferta",notes:{title:"Observações",placeholder:"Adicione observações sobre esta oferta...",save:"Salvar Ob
506servações"}},rL={errors:{urlRequiredTitle:"URL obrigatória",urlRequiredDescription:"Cole o link do vÃdeo do TikTok que deseja baixar",invalidLinkTitle:"Link inválido",invalidLinkDescription:"Use apenas links do TikTok",processDownload:"Erro ao processar download",downloadFile:"Erro ao baixar arquivo",downloadErrorTitle:"Erro no download",downloadErrorDescription:"Não foi possÃvel baixar o vÃdeo"},downloadingTitle:"Baixando...",downloadingDescription:"Aguarde enquanto preparamos seu arquivo",downloadCompleteTitle:"Download concluÃdo!",downloadCompleteDescription:"Arquivo baixado com sucesso",title:"Download VÃdeos TikTok",subtitle:"Baixe vÃdeos do TikTok sem marca d'água gratuitamente",linkLabel:"Link do VÃdeo",linkPlaceholder:"Cole o link do TikTok aqui...",tiktokDetected:"TikTok detectado â",formatLabel:"Formato",formatVideo:"VÃdeo (MP4) - Sem marca d'água",formatAudio:"Apenas Ãudio (MP3)",downloadingButton:"Baixando...",howToUse:{title:"ð¡ Como usar",step1:"1. Abra o TikTok e encontre o vÃdeo que deseja baixar",step2:'2. Toque em "Compartilhar" e copie o link',step3:'3. Cole o link aqui e clique em "Baixar"',step4:"4. O vÃdeo será baixado sem marca d'água!"}},iL={errors:{loadConnections:"Erro ao carregar conexões",configNotLoadedTitle:"Configuração não carregada",configNotLoadedDescription:"Aguarde alguns segundos e tente novamente.",connectionCancelledTitle:"Conexão cancelada",connectionCancelledDescription:"Você fechou o popup ou não autorizou.",incompleteDataTitle:"Dados incompletos",incompleteDataDescription:"Não recebemos waba_id ou phone_number_id da Meta.",connectErrorTitle:"Erro ao conectar",startConnectionErrorTitle:"Erro ao iniciar conexão",unknownFailure:"Falha desconhecida",disconnectErrorTitle:"Erro ao desconectar",tryAgain:"Tente novamente.",loadSdkFailed:"Falha ao carregar Facebook SDK"},success:{connectedTitle:"WhatsApp conectado!",connectedWithNumber:"Número {{number}} vinculado.",connectedGeneric:"Conexão criada com sucesso.",disconnected:"Número desconectado"},title:"WhatsApp Coexistente",tutorialTitle:"Tutorial â WhatsApp Coexistente",slotBalance_one:"{{count}} slot disponÃvel",slotBalance_other:"{{count}} slots disponÃveis",intro:{before:"Conecte seu número oficial usando o modelo de ",bold:"Coexistência",after:" da Meta â o único modelo compatÃvel com o Zap Data."},whatIsTitle:"O que é Coexistência?",whatIsDescription:{before:"Modelo oficial da Meta que faz seu WhatsApp funcionar em",highlight:'"dois lugares ao mesmo tempo"',after:": no celular (conversas, grupos e status) e na API oficial usada pelo Zap Data para automações. Tudo sincronizado â sem perder conversas nem trocar de número."},addNumberCard:{title:"Adicionar número em modo Coexistência",descriptionBefore:"Cada número conectado custa ",descriptionBold:"R$ 97,00 por mês",descriptionAfter:", via Pix recorrente. Após o pagamento, você será redirecionado para o cadastro seguro da Meta."},openingMeta:"Abrindo Meta...",connectNumber:"Conectar número",connectedNumbers:{title:"Números conectados",none:"Nenhum número conectado ainda.",activeCount_one:"{{count}} número ativo.",activeCount_other:"{{count}} números ativos."},addNumber:"Adicionar número",emptyState:'Clique em "Conectar WhatsApp" acima para vincular seu primeiro número.',table:{number:"Número",verifiedName:"Nome verificado"},disconnect:"Desconectar",disconnectDialog:{title:"Desconectar número?",before:"O número",after:"será removido e o token revogado na Meta. Você pode reconectá-lo a qualquer momento (uso de novo slot)."}},sL={subtitle:"para Meta Ads",description1:"Converta valores entre múltiplas moedas diretamente no Meta Ads Manager.",description2:"Toggle intuitivo, cotação em tempo real e conversão automática.",downloadFree:"Download Gratuito",interactiveDemo:"Demonstração Interativa",dailyCost:"Custo por Dia",totalSpend:"Gasto Total",avgCpc:"CPC Médio",clickHint:"Clique nas moedas acima para ver a conversão em tempo real",features:{instant:{title:"Conversão Instantânea",description:"Toggle entre múltiplas moedas com um clique diretamente no Meta Ads"},liveRate:{title:"Cotação em Tempo Real",description:"Taxa de câmbio atualizada automaticamente para valores precisos"}
506,native:{title:"Integração Nativa",description:"Funciona perfeitamente dentro do Gerenciador de Anúncios"}}},lL={errors:{loadData:"Erro ao carregar dados",selectNotifier:"Selecione um número notificador",selectAdmin:"Selecione pelo menos um número admin",saveConfig:"Erro ao salvar configuração",saveMainConfigFirst:"Salve a configuração principal primeiro",selectInstance:"Selecione uma instância",addLimit:"Erro ao adicionar limite",updateLimit:"Erro ao atualizar limite",removeLimit:"Erro ao remover limite",updateMonitor:"Erro ao atualizar monitoramento"},toasts:{configSaved:"Configuração salva com sucesso!",limitUpdated:"Limite de leads atualizado!",limitAdded:"Limite de leads adicionado!",limitRemoved:"Limite removido"},unknownNumber:"Número desconhecido",loadingConfig:"Carregando configurações...",comingSoon:{title:"Em Breve",description:"A função de Notificar Admin está em desenvolvimento e será liberada em breve.",backToInbox:"Voltar para Inbox"},title:"Notificar Admin",subtitle:"Configure alertas e notificações",newNumber:"Novo Número",mainConfig:{title:"Configuração Principal",description:"Configure o número que envia as notificações e os números que recebem os alertas",notifierLabel:"Número Notificador",notifierDescription:"Este número irá enviar as mensagens de alerta",selectNumberPlaceholder:"Selecione um número",adminLabel:"Números Admin",adminDescription:"Estes números receberão os alertas",selectToAddPlaceholder:"Selecione um número para adicionar",allAdded:"Todos os números já foram adicionados",save:"Salvar Configuração"},leadLimit:{title:"Limite de Leads",description:"Receba alerta quando um número atingir o limite diário de conversas",resetInfo:"A contagem é resetada diariamente à s 00:00 (horário de BrasÃlia -03:00)",limitLine:"Limite: {{count}} conversas/dia",noneConfigured:"Nenhum limite configurado",addNumber:"Adicionar Número"},comingSoonBadge:"Em breve",instanceDisconnected:{title:"Instância Desconectada",descriptionBefore:"Envie",descriptionAfter:"para verificar as instâncias",infoText:"Ao enviar #status, você receberá o status de cada número monitorado"},noNumberConnected:"Nenhum número conectado",salesMonitor:{title:"Monitor de Vendas",descriptionBefore:"Envie",descriptionAfter:"para ver vendas do dia",infoText:"Dados provenientes do Tag Whats Cloud"},limitDialog:{editTitle:"Editar Limite de Leads",addTitle:"Adicionar Limite de Leads",description:"Configure o limite diário de conversas para um número",instanceLabel:"Número para Monitorar",dailyLimitLabel:"Limite Diário de Conversas",notifyHint:"Você será notificado quando este número atingir {{count}} conversas no dia"}},cL={errors:{loadInstances:"Erro ao carregar instâncias",nameRequired:"Digite um nome para a instância",nameInvalidChars:"O nome deve conter apenas letras, números e underscores",loadingInfo:"Aguarde, carregando informações...",operationInProgress:"Operação em andamento. Aguarde e tente novamente.",createInstance:"Erro ao criar instância",getQrCode:"Erro ao obter QR Code",refreshQrCode:"Erro ao atualizar QR Code",disconnect:"Erro ao desconectar",restart:"Erro ao reiniciar",delete:"Erro ao deletar"},toasts:{creditsDeducted:"{{count}} créditos debitados com sucesso!",instanceCreated:"Instância criada com sucesso",alreadyConnected:"WhatsApp já está conectado!",connected:"WhatsApp conectado!",connectedSuccess:"WhatsApp conectado com sucesso!",waitingConnection:"Aguardando conexão...",disconnected:"WhatsApp desconectado",restarted:"Instância reiniciada",deletingInstance:"Excluindo instância... isso pode levar alguns segundos",instanceDeleted:"Instância deletada"},status:{connected:"Conectado",disconnected:"Desconectado",connecting:"Conectando"},expiration:{today:"Expira hoje",oneDayLeft:"1 dia restante",daysLeft:"{{count}} dias restantes"},loadingInstances:"Carregando instâncias...",title:"Gerenciar Números",subtitle:"Adicione ou gerencie seus números do WhatsApp para notificações",countRegistered_one:"{{count}} número cadastrado",countRegistered_other:"{{count}} números cadastrados",newNumber:"Novo Número",empty:{title:"Nenhum número cadastrado",description:"Clique no botão acima para adicionar seu primeiro número"},addNumber:"Adicionar Número",awaitingConnection:"Aguardando conexão",createDialog:{title:"Adicionar Novo Número",description:"Crie uma nova instância para conectar seu WhatsApp",submit:"Criar Instância"},form:{instanceNameLabel:"Nome da Instância",instanceNamePlaceholder:"Ex: meu_numero_principal",instanceNameHint:"Use apenas letras, números e underscore"},purchaseDialog:{title:"Nova Instância WhatsApp",description:"Crie uma nova instância para conectar seu WhatsApp. Esta ação consumirá créditos.",periodLabel:"PerÃodo:",period30Days:"30 dias",costLabel:"Custo:",creditsAmount:"{{amount}} créditos",currentBalance:"Saldo atual",insufficientBadge:"Insuficiente",rechargeCredits:"Recarregar Créditos",confirmCreateButton:"Confirmar e Criar ({{amount}} créditos)"},qrDialog:{title:"Escanear QR Code",description:"Abra o WhatsApp no seu celular e escaneie o QR Code",notAvailable:"QR Code não disponÃvel",checkStatus:"Verificar Status"},deleteDialog:{title:"Confirmar Exclusão",description:'Tem certeza que deseja deletar a instância "{{name}}"? Esta ação não pode ser desfeita.'}
506,duplicateNameDialog:{title:"Nome já existe",description:"Já existe uma instância com esse nome. Escolha outro nome para sua instância."},systemName:"Instância WhatsApp"},dL={auto:"Automático (detectar pelo texto)",pt:"Português",en:"Inglês",es:"Espanhol",ar:"Ãrabe",bg:"Búlgaro",zh:"Chinês",ko:"Coreano",hr:"Croata",da:"Dinamarquês",sk:"Eslovaco",fi:"Finlandês",fr:"Francês",de:"Alemão",el:"Grego",hi:"Hindi",nl:"Holandês",id:"Indonésio",it:"Italiano",ja:"Japonês",ms:"Malaio",pl:"Polonês",ro:"Romeno",ru:"Russo",sv:"Sueco",ta:"Tâmil",cs:"Tcheco",tr:"Turco",uk:"Ucraniano",fil:"Filipino"},uL={"whisper-1":"Whisper-1 (padrão)","gpt-4o-mini-transcribe":"GPT-4o Mini Transcribe (mais rápido)","gpt-4o-transcribe":"GPT-4o Transcribe (mais preciso)"},mL={audioGenerator:$F,audioTranscriber:GF,extensaoAdsWhatsApp:HF,geradorPalavrasChaves:KF,hashCleaner:XF,numberOrganizer:YF,messageBlaster:QF,disparaZapOficial:ZF,productAnalysis:JF,productMetrics:eL,siteCloner:tL,smsBot:aL,smmPanel:oL,trackOfertas:nL,videoDownloader:rL,whatsappOficial:iL,zapdataConverter:sL,notifyAdmin:lL,notifyAdminAddNumber:cL,elevenLabsLanguages:dL,openaiTranscriptionModels:uL},pL="Meu Perfil",hL="Visualize suas informações e configurações",fL={changeHint:"Clique no Ãcone para alterar sua foto",invalidFile:{title:"Arquivo inválido",description:"Por favor, selecione uma imagem"},tooLarge:{title:"Arquivo muito grande",description:"A imagem deve ter no máximo 2MB"},updateSuccess:{title:"Foto atualizada!",description:"Sua foto de perfil foi salva com sucesso"},uploadError:{title:"Erro ao enviar foto"}},gL={label:"Nome de Usuário",placeholder:"Digite seu nome de usuário",invalid:{title:"Nome inválido",description:"Por favor, digite um nome de usuário"},alreadyExists:{title:"Nome já existe",description:"Este nome de usuário já está em uso. Escolha outro."},updateSuccess:{title:"Nome atualizado!",description:"Seu nome de usuário foi salvo com sucesso"},updateError:{title:"Erro ao salvar",description:"Não foi possÃvel salvar o nome de usuário"}},vL="Ãrea de Afiliado",bL={title:"Tema",dark:"Dark",light:"Light"},yL={title:"Alterar Senha",newPassword:"Nova senha",newPasswordPlaceholder:"Digite a nova senha",confirmNewPassword:"Confirmar nova senha",confirmNewPasswordPlaceholder:"Confirme a nova senha",changing:"Alterando...",requiredFields:{title:"Campos obrigatórios",description:"Preencha todos os campos de senha"},mismatch:{title:"Senhas não conferem",description:"A nova senha e a confirmação devem ser iguais"},tooShort:{title:"Senha muito curta",description:"A senha deve ter pelo menos 6 caracteres"},changeError:{title:"Erro ao alterar senha"},changeSuccess:{title:"Senha alterada com sucesso!",description:"Sua nova senha já está ativa"}},xL="Usuário",wL={title:pL,description:hL,avatar:fL,username:gL,affiliateArea:vL,theme:bL,password:yL,defaultDisplayName:xL},CL={save:"Guardar",cancel:"Cancelar",delete:"Eliminar",edit:"Editar",add:"Añadir",create:"Crear",confirm:"Confirmar",close:"Cerrar",back:"Volver",next:"Siguiente",previous:"Anterior",search:"Buscar",filter:"Filtrar",send:"Enviar",copy:"Copiar",copied:"¡Copiado!",duplicate:"Duplicar",download:"Descargar",upload:"Subir archivo",connect:"Conectar",disconnect:"Desconectar",activate:"Activar",deactivate:"Desactivar",enable:"Habilitar",disable:"Deshabilitar",refresh:"Actualizar",clear:"Limpiar",select:"Seleccionar",selectAll:"Seleccionar todo",apply:"Aplicar",continue:"Continuar",finish:"Finalizar",retry:"Intentar de nuevo",view:"Ver",preview:"Vista previa",share:"Compartir",export:"Exportar",import:"Importar",rename:"Renombrar",reset:"Restablecer",submit:"Enviar",viewMore:"Ver más",viewLess:"Ver menos",viewAll:"Ver todo",tryAgain:"Intentar de nuevo"},PL={loading:"Cargando...",saving:"Guardando...",sending:"Enviando...",processing:"Procesando...",deleting:"Eliminando...",connecting:"Conectando...",success:"Ãxito",error:"Error",warning:"Atención",empty:"No se encontraron resultados",noData:"Sin datos",noResults:"No se encontraron resultados",somethingWentWrong:"Algo salió mal. Inténtalo de nuevo.",changesSaved:"Cambios guardados con éxito",requiredField:"Campo obligatorio"},AL={name:"Nombre",email:"Correo electrónico",phone:"Teléfono",password:"Contraseña",confirmPassword:"Confirmar contraseña",date:"Fecha",status:"Estado",actions:"Acciones",details:"Detalles",description:"Descripción",price:"Precio",plan:"Plan",account:"Cuenta",type:"Tipo",value:"Valor",quantity:"Cantidad",total:"Total"},EL={areYouSure:"¿Estás seguro?",actionCannotBeUndone:"Esta acción no se puede deshacer.",yes:"SÃ",no:"No",confirmDelete:"¿Seguro que deseas eliminar?"},SL={today:"Hoy",yesterday:"Ayer",now:"Ahora"},NL={actions:CL,states:PL,fields:AL,confirm:EL,time:SL},kL="Abrir menú",TL="Notificaciones",IL="Perfil",RL="Panel de administración",DL="Cerrar sesión",ML="Cambiar tema",FL="Cambiar idioma",LL={openMenu:kL,notifications:TL,profile:IL,adminPanel:RL,logout:DL,toggleTheme:ML,changeLanguage:FL},jL="Menú",_L="Cuenta",OL="Meta",BL={dashboard:"Dashboard",inbox:"Inbox",flows:"Flujos",campaigns:"EnvÃos",contacts:"Contactos",crm:"CRM",quickReplies:"Respuestas Rápidas",marketplace:"Marketplace",ads:"ADS",tools:"Herramientas"},zL={whatsappOfficial:"WhatsApp API Oficial"},VL={settings:"Configuración",integrations:"Integraciones",subscription:"Mi Plan",affiliate:"Programa de Afiliados"},qL="Estado del sistema",UL="Tutoriales",WL="Canal de Actualizaciones",$L={sectionMenu:jL,sectionAccount:_L,sectionMeta:OL,nav:BL,metaNav:zL,accountNav:VL,systemStatus:qL,tutorials:UL,whatsappChannel:WL},GL="Bienvenido de nuevo",HL="Bienvenido",KL="Inicia sesión para continuar",XL="Crea tu cuenta",YL={login:"Ingresar",signup:"Crear cuenta"},QL={email:"Ingresa tu email",password:"Ingresa tu contraseña",createPassword:"Crea una contraseña",confirmPassword:"Confirma tu contraseña"},ZL={link:"Olvidé mi contraseña",dialogTitle:"Olvidé mi contraseña",dialogDescription:"Ingresa tu email y te enviaremos una nueva contraseña.",sendButton:"Enviar nueva contraseña",sending:"Enviando..."},JL={agreement:"Leà y acepto los",termsOfService:"Términos de Servicio",and:"y la",privacyPolicy:"PolÃtica de Privacidad"},ej={joinCommunity:"Ãnete a nuestra comunidad de usuarios",prefix:"Más de",suffix:"usuarios registrados"},tj={title:"Autenticación de Dos Factores",description:"Ingresa el código de 6 dÃgitos de tu aplicación autenticadora para continuar.",rememberDevice:"Recordar este dispositivo por 30 dÃas",verify:"Verificar",verifying:"Verificando..."},aj={login:"Inicio de sesión",twoFactorCheck:"Verificación 2FA",accountCreation:"Creación de cuenta"},oj={timeoutGeneric:"{{label}} tardó demasiado. Verifica tu conexión e inténtalo de nuevo.",requiredFields:{title:"Campos obligatorios",description:"Por favor, completa todos los campos"},verificationRequired:{title:"Verificación necesaria",description:"Por favor, completa la verificación de seguridad"},loginError:{title:"Error al iniciar sesión",fallback:"No se pudo iniciar sesión. Inténtalo de nuevo."},invalidCode:{title:"Código inválido",description:"El código 2FA es incorrecto. Inténtalo de nuevo."},invalidEmail:{title:"Email inválido",description:"Por favor, ingresa un email válido"},passwordMismatch:{title:"Las contraseñas no coinciden",description:"Las contraseñas ingresadas no son iguales"}
506,passwordTooShort:{title:"Contraseña muy corta",description:"La contraseña debe tener al menos 6 caracteres"},termsNotAccepted:{title:"Términos no aceptados",description:"Debes aceptar los Términos de Servicio y la PolÃtica de Privacidad para crear tu cuenta"},signupError:{title:"Error al crear la cuenta",fallback:"No se pudo completar el registro. Inténtalo de nuevo."},emailRequired:{title:"Email obligatorio",description:"Por favor, ingresa tu email"},generic:"Error",sendEmailFailed:"No se pudo enviar el email. Inténtalo de nuevo.",userNotFound:{title:"Usuario no encontrado"},turnstileNotConfigured:"Verificación de seguridad no configurada",turnstileLoadFailed:"Error al cargar la verificación de seguridad"},nj={title:"Ãxito",loginSuccess:"¡Inicio de sesión exitoso!",accountCreated:{title:"¡Cuenta creada!",description:"Ya puedes iniciar sesión",confirmEmailDescription:"Confirma tu email antes de iniciar sesión. Revisa tu bandeja de entrada y también la carpeta de spam."},emailSent:{title:"¡Email enviado!",fallback:"Revisa tu bandeja de entrada y también la carpeta de spam."}},rj={welcomeBack:GL,welcome:HL,loginSubtitle:KL,signupSubtitle:XL,tabs:YL,placeholders:QL,forgotPassword:ZL,terms:JL,userCount:ej,mfaDialog:tj,timeouts:aj,errors:oj,success:nj},ij={welcomeTitle:"剆Bienvenido!",welcomeSubtitle:"Elige el sistema que quieres usar",comingSoonBadge:"Próximamente",betaBadge:"Beta",contentSectionTitle:"Contenido",systems:{metricas:{title:"Sistema de Métricas",shortTitle:"Métricas",description:"Gestiona las métricas de tus productos y sigue tus resultados"},organizadorNumeros:{title:"Organizador de Números",shortTitle:"Organizador",description:"Organiza y administra tus números de trabajo"},trackOfertas:{title:"Track Ofertas",description:"Monitorea el rendimiento de los anuncios de tu competencia"},geradorAudio:{title:"Generador de Audio",shortTitle:"Audio",description:"Convierte texto en audio con voces realistas"},transcricaoAudio:{title:"Transcripción de Audio",shortTitle:"Transcripción",description:"Convierte audios en texto automáticamente"},tagWhats:{title:"Tag Whats",description:"Etiqueta ventas de WhatsApp automáticamente"},extensaoAds:{title:"Extensión Ads WhatsApp",shortTitle:"Extensión Ads",description:"Extensión para analizar anuncios en Chrome"},videoDownloader:{title:"Descargar Videos de TikTok",shortTitle:"TikTok",description:"Descarga videos de TikTok sin marca de agua"},automatizap:{title:"Automati-Zap",description:"Sistema para automatizar las conversaciones de WhatsApp"},disparador:{title:"DisparaZap",description:"EnvÃa mensajes masivos a múltiples contactos"}}},sj={feedTitle:"Feed de la Comunidad",feedSubtitle:"Comparte tus experiencias e interactúa con otros miembros"},lj={connectingFacebook:"Conectando con Facebook...",processingAuth:"Espera mientras procesamos tu autenticación",title:"¡Ups! Página no encontrada",backHome:"Volver al inicio"},cj={backToPanel:"Volver al panel",title:"Estado de ZapData",subtitle:"Consulta la disponibilidad de los servicios y las novedades",servicesTitle:"Servicios",noServices:"Aún no hay servicios registrados.",updatesTitle:"Novedades",noUpdates:"Aún no hay novedades publicadas.",footer:"ZapData â estado actualizado automáticamente"},dj={loading:"Cargando...",notFoundTitle:"Sitio no encontrado",iframeTitle:"Sitio publicado"},uj={pageTitle:"Herramientas",pageSubtitle:"Todo el arsenal de ZapData en un solo lugar",maintenanceBadge:"Mantenimiento",groups:{organizacao:{title:"Organización",metricas:{title:"Métricas",desc:"Sigue los resultados de tus productos"},organizadorNumeros:{title:"Organizador de Números",desc:"Organiza y administra tus números"}},criacaoOferta:{title:"Creación de Oferta",geradorAudio:{title:"Generador de Audio",desc:"Voz y narración con IA"},transcricao:{title:"Transcripción",desc:"Convierte audios en texto"},iaStudio:{title:"I.A Studio",desc:"Lienzo de creativos con IA"},limpaHash:{title:"Limpia Hash",desc:"Limpia hashes de videos"}},extensoes:{title:"Extensiones",zapConverter:{title:"Zap Converter",desc:"Conversor de monedas/valores"},extensaoAds:{title:"Extensión Ads",desc:"Analiza anuncios en Chrome"}}}},mj={shortPasswordTitle:"Contraseña corta",shortPasswordDesc:"Usa al menos 6 caracteres.",mismatchTitle:"Las contraseñas no coinciden",mismatchDesc:"Las dos contraseñas no son iguales.",errorTitle:"Error",leakedPassword:"Esta contraseña fue encontrada en filtraciones de datos. Elige una contraseña diferente.",genericError:"No fue posible restablecer la contraseña.",successTitle:"¡Contraseña restablecida!",successDesc:"Inicia sesión con tu nueva contraseña.",title:"Restablecer contraseña",subtitle:"Elige una nueva contraseña para tu cuenta.",invalidLink:"Enlace inválido o expirado. Solicita el restablecimiento de contraseña nuevamente.",backToLogin:"Volver al inicio de sesión",newPasswordLabel:"Nueva contraseña",newPasswordPlaceholder:"MÃnimo 6 caracteres",hidePassword:"Ocultar contraseña",showPassword:"Mostrar c
506ontraseña",confirmPasswordLabel:"Confirmar nueva contraseña",confirmPasswordPlaceholder:"Repite la nueva contraseña",submitButton:"Restablecer contraseña",doneMessage:"¡Contraseña restablecida! Redirigiendo al inicio de sesiónâ¦"},pj={title:"Cancelar suscripción",checking:"Verificandoâ¦",confirmMessage:"Confirma para dejar de recibir correos de ZapData.",confirmButton:"Confirmar cancelación",submitting:"Procesandoâ¦",success:"Suscripción cancelada con éxito.",alreadyUnsubscribed:"Ya habÃas cancelado la suscripción.",invalidLink:"Enlace inválido o expirado.",error:"Error al procesar. Intenta de nuevo."},hj={errors:{missingClientId:"Falta el identificador de la aplicación (client_id).",missingRedirectUri:"Falta la dirección de retorno (redirect_uri).",missingPkce:"Esta aplicación no envió la protección PKCE requerida.",unsupportedPkceMethod:"Método de PKCE no compatible: {{method}}. Solo aceptamos S256.",missingScopes:"La aplicación no indicó qué permisos quiere.",unknownScope:"Permiso desconocido: {{scope}}",consentFailed:"No fue posible registrar tu autorización para el análisis de conversaciones.",requiresPaidPlan:"Conectar Claude requiere un plan activo de ZapData.",redirectUriNotAllowed:"La dirección de retorno de esta aplicación no está permitida.",unrecognizedScope:"El asistente pidió un permiso que ZapData no reconoce.",missingPkceProtection:"El asistente no envió la protección de seguridad requerida (PKCE).",sessionExpired:"Tu sesión expiró. Recarga la página para volver a entrar.",authorizeFailed:"No fue posible autorizar: {{message}}",unknownError:"error desconocido"},title:"Conectar con ZapData",description:"Un asistente de IA está pidiendo acceso a tu cuenta{{emailSuffix}}.",invalidRequestTitle:"Solicitud inválida",whatItCanDo:"Qué podrá hacer",conversationsInfo:{heading:"Sobre el análisis de conversaciones",paragraph1:"Fragmentos de conversaciones reales (hasta 7 dÃas) se enviarán al proveedor de IA que conectaste, con tu propia suscripción. El teléfono, el correo y el CPF se enmascaran con patrones automáticos que <strong>no cubren todos los formatos</strong>: el texto <strong>no es anónimo</strong>.",paragraph2:"Puede incluir <strong>datos sensibles</strong>, como información de salud, si tus clientes escriben sobre eso.",paragraph3:"Al autorizar, declaras ser el <strong>responsable</strong> de esos datos y tener <strong>base legal</strong> para ese intercambio (LGPD). Puedes revocarlo cuando quieras en Configuración."},revokeNotice:"El acceso se puede revocar en cualquier momento en Configuración â Integraciones. No se comparte ninguna contraseña con el asistente.",declineButton:"Rechazar",authorizeButton:"Autorizar",appLabel:"Aplicación:"},fj={home:ij,homePage:sj,notFound:lj,statusPage:cj,publishedSite:dj,tools:uj,resetPassword:mj,unsubscribe:pj,mcpAuthorize:hj},gj={count_one:"{{count}} flujo activo",count_other:"{{count}} flujos activos",title:"Flujos Activos",subtitle:"Leads recibiendo flujos ahora",loading:"Cargando flujosâ¦",openConversation:"Abrir conversación",timeAgo:"Hace {{time}}",moreNotListed:"+{{count}} flujos activos no listados"},vj={title:"Generar audio con IA",registerTitle:"Registrar nueva voz",textLabel:"Texto del audio",textPlaceholder:"Escribe lo que se dirá en el audio...",voiceLabel:"Voz",voicePlaceholder:"Elige una voz",addVoiceGroup:"Agregar",registerNewVoice:"Registrar nueva voz",previewLabel:"Vista previa del audio generado",modelLabel:"Modelo de voz",languageLabel:"Idioma",autoDetectLanguageNote:"Este modelo detecta el idioma automáticamente por el texto.",v3TagsHint:"En Eleven v3 puedes usar etiquetas como [whispers], [laughs] y [sighs] en el texto.",charCount:"{{count}}/{{max}}",sendAsLabel:"Cómo enviar",sendAsRecorded:"Audio grabado",sendAsRecordedHint:"Aparece como nota de voz en WhatsApp.",sendAsViewOnce:"Visualización única",sendAsViewOnceHint:"El destinatario solo puede escucharlo una vez.",sendAsForwarded:"Audio reenviado",sendAsForwardedHint:'Aparece como "Reenviado" en WhatsApp.',generating:"Generando...",generate:"Generar audio",generateAnother:"Generar otro",sending:"Enviando...",newVoiceNameLabel:"Nombre de la voz",newVoiceNamePlaceholder:"Ej: Mi voz",newVoiceFileLabel:"Archivo de audio (mp3, wav, m4a, ogg)",newVoiceFileHint:"Usa una grabación clara de al menos 30 segundos (máx. 10MB).",registering:"Registrando...",registerVoice:"Registrar voz",registerSuccess:"¡Voz registrada con éxito!",errors:{textRequired:"Escribe el texto del audio",voiceRequired:"Elige una voz",audioNotReturned:"Audio no devuelto",generateFailed:"Error al generar audio",sendFailed:"Error al enviar audio",nameAndFileRequired:"Indica el nombre y selecciona un archivo de audio",registerFailed:"Error al registrar la voz"}},bj={dragOverlay:"Suelta las imágenes aquà para enviarlas",replyPreview:{label:"Respondiendo",audio:"ðµ Audio",image:"ð· Imagen",video:"ð¬ Video",document:"ð Documento",media:"Multimedia"},emoji:{loading:"Cargando emojisâ¦",opening:"Abriendo emojisâ¦"},attachMenu:{image:"Imagen",video:"Video",document:"Documento",location:"Ubicación"},insertVariable:"Insertar variable",variableHint:"Se inserta en el texto y se reemplaza por el valor real del lead al enviar.",globalVariablesTitle:"Variables Globales",triggerFlowDialog:{title:"Disparar Flujo Manual",activeCount_one:"{{count}} flujo activo",activeCount_other:"{{count}} flujos activos",searchPlaceholder:"Buscar flujo...",noneFound:"No se encontró ningún flujo",triggering:'Disparando {{type}} "{{name}}"...',triggered:'¡{{type}} "{{name}}" disparado!',typeAiAgent:"agente de IA",typeFlow:"flujo",typeAiAgentCap:"Agente de IA",typeFlowCap:"Flujo",aiBadge:"IA"},pastedImagesHint:{single:"El texto escrito se enviará como leyenda",multiple:"Varias imágenes: el texto se enviará por separado"},messagePlaceholder:"Escribe tu mensaje... (usa / para respuestas rápidas)",quickRepliesLabel:"Respuestas Rápidas",contentBlocksLabel:"Bloques Sueltos",mic:{sendAudio:"Enviar audio",recordNow:"Grabar ahora",generateWithAI:"Generar audio con IA"},mediaDialog:{titleImage:"Enviar Imagen",titleVideo:"Enviar Video (solo MP4)",titleDocument:"Enviar Documento",titleAudio:"Enviar Audio",selectFile:"Seleccionar Archivo",selected:"Seleccionado: {{name}}",captionLabel:"Leyenda (opcional)",captionPlaceholder:"Descripción del archivo..."},locationDialog:{title:"Enviar Ubicación",useMyLocation:"Usar mi ubicación actual",locating:"Obteniendo ubicación...",latitude:"Latitud",longitude:"Longitud",nameLabel:"Nombre (opcional)",namePlaceholder:"Ej: Tienda Principal",addressLabel:"Dirección (opcional)",addressPlaceholder:"Av. Principal, 1000"},success:{mediaSent:"¡Multimedia enviada!",audioSent:"¡Audio enviado!",locationSent:"¡Ubicación enviada!",quickReplySent:"¡Respuesta rápida envi
506ada!",locationCaptured:"Ubicación capturada",callPlaced:"Llamada disparada"},errors:{emojiLoadFailed:"No se pudieron cargar los emojis",uploadImageFailed:"Error al subir la imagen",sendImageFailed:"Error al enviar imagen: {{error}}",uploadOneImageFailed:"Error al subir una imagen",sendMessageFailed:"Error al enviar mensaje: {{error}}",sendFailed:"Error al enviar: {{error}}",selectFileRequired:"Por favor, selecciona un archivo",uploadFileFailed:"Error al subir el archivo",sendMediaFailed:"Error al enviar multimedia",onlyImagesCanBeDragged:"Solo se pueden arrastrar imágenes. Usa el adjunto para otros archivos.",invalidVideoFormat:"Formato de video inválido. Solo se aceptan archivos MP4.",recordingStartFailed:"Error al iniciar la grabación. Verifica los permisos del micrófono.",uploadAudioFailed:"Error al subir el audio",sendAudioFailed:"Error al enviar audio",uploadGeneratedAudioFailed:"Error al subir el audio generado",geolocationUnavailable:"Geolocalización no disponible en este navegador",locationFailed:"No se pudo obtener tu ubicación",invalidCoordinates:"Latitud/Longitud inválidas",
506sendLocationFailed:"Error al enviar ubicación: {{error}}",unknown:"desconocido",triggerFlowFailed:"Error al disparar el flujo",callFailed:"No se pudo llamar: {{error}}"},callDialog:{title:"Disparar llamada",body:"Sonará una llamada en el WhatsApp de {{name}}. El teléfono suena de verdad y la persona puede atender o rechazar.",silentWarning:"La llamada es MUDA: si atiende, ninguno de los dos lados escucha nada. Solo sirve para llamar la atención â úsala con moderación para evitar bloqueos.",cancel:"Cancelar",confirm:"Llamar ahora",placing:"Llamando...",contactFallback:"este contacto"},callButton:"Llamada"},yj={emptyMessage:"[Mensaje vacÃo]",deletedMessage:"ð« Mensaje eliminado",deleting:"Eliminando...",contactFallback:"Contacto",errors:{deleteNotAllowedTitle:"No se puede eliminar",deleteNotAllowedDescription:"WhatsApp permite eliminar mensajes para todos solo dentro de 1 hora después del envÃo.",deleteFailedTitle:"Error al eliminar",deleteFailedDescription:"No se pudo eliminar el mensaje"},success:{deletedForEveryone:"Mensaje eliminado para todos"},media:{recovering:"Recuperando multimedia...",pleaseWait:"Espera un momento",imageUnrecoverable:"Imagen no recuperable",imageUnavailable:"Imagen no disponible",audioUnrecoverable:"Audio no recuperable",audioUnavailable:"Audio no disponible",videoUnrecoverable:"Video no recuperable",videoUnavailable:"Video no disponible",notRecovered:"La multimedia no pudo ser recuperada",tapToRetry:"Toca para intentar recuperar"},pix:{defaultName:"Clave PIX",copiedToast:"¡Clave PIX copiada!",copyKey:"Copiar clave Pix",typePhone:"Celular",typeEmail:"Correo",typeRandom:"Clave Aleatoria"},audio:{playbackSpeed:"Velocidad de reproducción"},document:{defaultName:"Documento",clickToDownload:"Clic para descargar"},location:{fallback:"ð Ubicación",live:"En vivo",defaultName:"Ubicación"},interactive:{linkTitle:"Abre un enlace â no es posible saber si el lead llegó a hacer clic",leadSelected:"El lead seleccionó:",emptyReply:"[Respuesta de botón]"},carousel:{label:"Carrusel"},unsupported:{title:"Tipo de mensaje no reconocido â payload guardado para análisis",label:"Mensaje no compatible"},undecryptable:{title:"WhatsApp no pudo entregar el contenido real de este mensaje",label:"Mensaje no sincronizado por WhatsApp.",hint:"Suele resolverse cuando el contacto vuelve a abrir WhatsApp en su celular â el contenido real aparecerá aquà automáticamente cuando eso ocurra."},replyPreview:{image:"ð· Imagen",audio:"ðµ Audio",video:"ð¬ Video",document:"ð Documento",location:"ð Ubicación",generic:"[Mensaje]",customer:"Cliente",you:"Tú"},actions:{reply:"Responder",translate:"Traducir",transcribeAndTranslate:"Transcribir y Traducir",deleteForEveryone:"Eliminar para todos",deleteExpired:"Eliminar (vencido)"},translation:{errorTitle:"No se pudo traducir",errorGeneric:"Inténtalo de nuevo en unos instantes."},failedStatus:{dateConnector:"a las",timelockTitle:"Restricción aplicada por el propio WhatsApp para proteger el número de bloqueos. Generalmente ocurre cuando el lead nunca respondió o está fuera de la ventana de 24h. En cuanto responda, el envÃo vuelve a funcionar normalmente.",timelockHeading:"Fallo en el envÃo por restricción temporal",timelockBody:"WhatsApp bloqueó nuevas conversaciones con este contacto.",releaseExpected:"Liberación prevista para {{when}}.",tryAgainLater:"Espera unas horas o pide al contacto que responda antes de intentarlo de nuevo.",generic:"Fallo en el envÃo"},deleteDialog:{title:"¿Eliminar mensaje para todos?",description:"Esta acción eliminará el mensaje para ti y para el destinatario. No se puede deshacer."},call:{title:"Llamada",subtitle:"Llamada muda â el contacto puede atender o rechazar",subtitleWithDuration:"Llamada muda de {{duration}}s â el contacto puede atender o rechazar"}},xj={unknown:"Desconocido",leadViaAd:"Lead vÃa anuncio ⢠ID {{id}}",selectConversation:"Selecciona una conversación",selectConversationHint:"Elige una conversación de la lista para comenzar",loadingOlderMessages:"Cargando mensajes anteriores...",noMessagesYet:"Aún no hay mensajes",sendMessageToStart:"EnvÃa un mensaje para iniciar la conversación",newLabelPlaceholder:"Nueva etiqueta...",badges:{paused:"Pausado",pausedFlow:"Pausado: {{name}}",aiFlow:"IA: {{name}}",waitingForResponse:"Esperando respuesta",clickToCancel:"Haz clic en la X para cancelar",clickToRemove:"Haz clic para quitar",endFlow:"Finalizar flujo"},followUp:{scheduledAria:"Seguimiento programado",endFlowWithFollowUp:"Finalizar flujo (hay un seguimiento programado)",confirmTitle:"¿Finalizar el flujo de {{name}}?",confirmBody:"Hay un seguimiento automático programado para {{when}}. Al finalizar el flujo, también se cancelará.",confirmQuote:'El lead dijo: "{{quote}}"',confirmKeep:"Mantener flujo",confirmEnd:"Finalizar flujo y el seguimiento"},activity:{recordingWithIcon:"ðï¸ grabando audio...",typingWithIcon:"âï¸ escribiendo...",recording:"grabando audio...",typing:"escribiendo..."},menu:{resumeFlow:"Continuar Flujo",pauseFlow:"Pausar Flujo",advanceFlow:"Avanzar Flujo",advanceToNextComponent:"Avanzar al siguiente componente",markAsRead:"Marcar como leÃdo",markAsUnread:"Marcar como no leÃdo",restoreContact:"Restaurar Contacto",ignoreContact:"Ignorar Contacto",contactDetails:"Detalles del Contacto",clearConversation:"Limpiar Conversación",deleteContact:"Eliminar Contacto",moreActions:"Más acciones"},deleteContactDialog:{title:"¿Eliminar contacto?",description:"Esto eliminará permanentemente el contacto, todos los mensajes y las sesiones de flujo asociadas. El contacto podrá activar el flujo nuevamente al enviar un nuevo mensaje."},clearConversationDialog:{title:"¿Deseas limpiar esta conversación?",description:"La conversación quedará vacÃa, pero seguirá en tu lista de conversaciones."},connectionError:{title:"Instancia Desconectada",descriptionNamed:'La instancia "{{name}}" perdió la conexión.',descriptionGeneric:"La instancia perdió la conexión con WhatsApp.",reconnect:"Reconectar"},jumpToNode:{trigger:"Saltar a un bloque especÃfico",dialogHint:"Elige un bloque del flujo para saltar la conversación hasta él.",searchPlaceholder:"Buscar bloque por nombre o número...",empty:"Ningún bloque encontrado.",autoAdvance:"Avanzar automáticamente (siguiente por defecto)",blockLabel:"Bloque #{{number}} â {{label}}",confirmTitle:"¿Saltar al Bloque #{{number}} â {{label}}?",confirmDescription:"La conversación continuará desde este bloque. Los pasos entre el punto actual y el elegido no se enviarán."},toasts:{flowPaused:"Embudo pausado",pauseFlowError:"Error al pausar el embudo",flowResumed:"Embudo reanudado",resumeFlowError:"Error al reanudar el embudo",aiAgentEnded:"Agente de IA finalizado",flowEnded:"Flujo finalizado con éxito",flowEndedWithFollowUp:"Flujo finalizado â el seguimiento programado también fue cancelado",endFlowError:"Error al finalizar el flujo",noActiveFlowToAdvance:"No hay ningún flujo activo para avanzar",advanceFlowError:"Error al avanzar el flujo",flowProcessing:"Flujo en proceso⦠intenta de nuevo en unos segundos",stillWaitingForInput:"Aún esperando respuesta en este paso",flowAdvanced:"¡Flujo avanzado!",markedAsRead:"Marcado como leÃdo",markAsReadError:"Error al marcar como leÃdo",markedAsUnread:"Marcado como no leÃdo",markAsUnreadError:"Error al marcar como no leÃdo",contactIgnored:"Contacto ignorado",contactRestored:"Contacto restaurado",updateContactError:"Error al actualizar el contacto",deleteContactError:"Error al eliminar el contacto{{code}}",contactDeleted:"Contacto eliminado con éxito",clearConversationError:"Error al limpiar la conversación{{detail}}",conversationCleared:"Conversación limpiada con éxito",cancelScheduleError:"Error al cancelar la programación",scheduledMessageCancelled:"Mensaje programado cancelado",jumpedToNode:"¡Flujo saltado al bloque elegido!",jumpToNodeError:"Error al saltar al bloque"}},wj={noName:"Sin nombre",notesSaved:"Notas guardadas con éxito",saveNotesError:"Error al guardar notas: {{error}}",currencies:{BRL:"Real Brasileño (BRL)",USD:"Dólar Estadounidense (USD)",EUR:"Euro (EUR)",GBP:"Libra Esterlina (GBP)",ARS:"Peso Argentino (ARS)",MXN:"Peso Mexicano (MXN)",COP:"Peso Colombiano (COP)",CLP:"Peso Chileno (CLP)",PEN:"Sol Peruano (PEN)",JPY:"Yen Japonés (JPY)",CAD:"Dólar Canadiense (CAD)",AUD:"Dólar Australiano (AUD)",CHF:"Franco Suizo (CHF)"},info:{unreadMessages:"Mensajes no leÃdos:",lastMessage:"Ãltimo mensaje:",never:"Nunca",createdAt:"Creado el:"},tags:{title:"Etiquetas",removeTag:"Quitar etiqueta",empty:"Sin etiquetas agregadas"},customFields:{title:"Campos del Contacto"},facebookEvent:{title:"Enviar Evento de Facebook",noCtwaWarning:"Este contacto no tiene CTWA CLID. El evento se enviará pero podrÃa no atribuirse al anuncio.",eventTypes:{purchase:"Compra (Purchase)",lead:"Lead",initiateCheckout:"Iniciar Compra (InitiateCheckout)",addToCart:"Agregar al Carrito (AddToCart)"},valuePlaceholder:"Valor (ej: 97.00)",currencyTitle:"Moneda del evento",quantityPlaceholder:"Cant",quantityTitle:"Cantidad de eventos (máx 100)",selectPixelPlaceholder:"Seleccionar pÃxel...",allPixels:"Todos los pÃxeles",sendButton:"Disparar Evento",sendError:"Error al enviar eventos. Verifica la configuración del pÃxel.",sendErrorShort:"Error al enviar eventos",sendErrorGeneric:"Error al enviar evento",sentToast_one:"{{count}}x evento {{event}}
506 enviado para procesamiento{{valueLabel}}",sentToast_other:"{{count}}x eventos {{event}} enviados para procesamiento{{valueLabel}}"},eventHistory:{title:"Historial de Eventos",empty:"Aún no se ha enviado ningún evento."},notes:{title:"Notas",placeholder:"Agrega notas sobre este contacto...",empty:"Sin notas agregadas"},adOrigin:{title:"Origen del Anuncio",viewAd:"Ver Anuncio",titleLabel:"TÃtulo",adTextLabel:"Texto del Anuncio",viewLess:"Ver menos",viewMore:"Ver más"},actions:{archiveConversation:"Archivar Conversación"}},Cj={filterTitle:"Filtrar bloques sueltos",typeLabel:"Tipo",favoritesOnly:"Solo favoritos",noBlocksForFilter:"No hay bloques con ese filtro",types:{text:"Texto",audio:"Audio",image:"Imagen",video:"Video",document:"Documento"}},Pj={searchPlaceholder:"Buscar...",markAllAsRead:"Marcar todas como leÃdas",flowPausedTitle:"Embudo pausado",scheduledBadge:"Programada",loadingOlderConversations:"Cargando conversaciones anteriores...",searchOlderConversations:"Buscar en conversaciones más antiguas",loadOlderConversations:"Cargar conversaciones anteriores",searchTruncatedNotice:"Mostrando los primeros 200 resultados â refina la búsqueda para ver menos.",viewMode:{conversations:"Conversaciones",groups:"Grupos"},labelFilter:{label:"Etiqueta",all:"Todas"},filters:{all:"Todos",paid:"Pagados",ignored:"Ignorados",unread:"No leÃdas"},conversationStatusFilter:{all:"Todas las conversaciones",allDescription:"",open:"Conversaciones abiertas",openDescription:"Requiere atención humana",closed:"Conversaciones cerradas",closedDescription:"Cerrada por el agente o cuando el flujo concluye la sesión",inProgress:"En curso",inProgressDescription:"TodavÃa no fue abierta ni cerrada"},tagFilter:{pago:"Pago",notPago:"Sin la etiqueta Pago",notPagoDescription:"No tiene la etiqueta de pago",noTag:"Sin etiqueta",noTagDescription:"Contactos sin ninguna etiqueta"},filterPopover:{customize:"Personalizar filtro",back:"Volver",statusLabel:"Estado de la conversación",apply:"Aplicar filtro"},empty:{searching:"Buscando...",searchUnavailable:"No se pudo buscar",noConversations:"No se encontró ninguna conversación",searchFailedHint:"La búsqueda falló. Verifica la conexión e inténtalo de nuevo.",noMatchingContact:"Ningún contacto con ese nombre o número",noPaidContact:'Ningún contacto con la etiqueta "Pago"',noIgnoredContact:"Ningún contacto ignorado",conversationsWillAppear:"Las conversaciones aparecerán aquà cuando recibas mensajes"},toasts:{allMarkedAsRead:"Todas las conversaciones fueron marcadas como leÃdas",markAsReadError:"Error al marcar como leÃdas"}},Aj={title:"Crear nueva comunidad",description:"Crearás la comunidad con un grupo de anuncios principal. Agrega grupos después.",instanceLabel:"Instancia",selectPlaceholder:"Seleccionaâ¦",nameLabel:"Nombre de la comunidad",createdSuccess:"Comunidad creada con éxito.",linkGroupsHint:"Para vincular grupos, usa el administrador de grupos de la comunidad en el menú.",success:"Comunidad creada",errors:{selectInstance:"Selecciona una instancia",nameRequired:"Indica el nombre de la comunidad",createFailed:"Error al crear la comunidad"}},Ej={title:"Crear nuevo grupo",description:"El grupo se creará a partir de la instancia seleccionada con los participantes indicados.",nameLabel:"Nombre del grupo",namePlaceholder:"Ej.: Equipo de ventas",participantsLabel:"Participantes (teléfonos)",participantsPlaceholderHint:"Uno por lÃnea â solo dÃgitos con código de paÃs+área",validCount_one:"{{count}} válido · mÃnimo 1 además de ti.",validCount_other:"{{count}} válidos · mÃnimo 1 además de ti.",createButton:"Crear grupo",success:"Grupo creado",errors:{selectInstance:"Selecciona una instancia",nameRequired:"Indica el nombre del grupo",participantsRequired:"Indica al menos 1 participante (solo dÃgitos)",createFailed:"Error al crear el grupo"}},Sj={titles:{name:"Editar nombre en masa",description:"Editar descripción en masa",image:"Editar foto en masa",announce:"Permiso de envÃo",locked:"Permiso de edición",flow:"Disparar flujo de grupo",leave:"Salir de los grupos",resetInvite:"Restablecer enlaces de invitación",hide:"Quitar del chat"},descriptions:{name:"El nombre se aplicará a todos los grupos seleccionados.",description:"La descripción se aplicará a todos los grupos seleccionados.",image:"La imagen se aplicará como foto de todos los grupos seleccionados.",announce:"Cuando esté activado, solo los administradores podrán enviar mensajes.",locked:"Cuando esté activado, solo los administradores podrán editar la información del grupo.",flow:"El flujo seleccionado se disparará en cada grupo. Ãsalo con moderación.",leave:"Saldrás de cada uno de los grupos seleccionados. Esta acción no se puede deshacer.",resetInvite:"El enlace de invitación actual se invalidará y se generará uno nuevo.",hide:"Los grupos se eliminarán de tu lista de visibles. Seguirán existiendo en WhatsApp."},selectedCount_one:"{{count}} grupo seleccionado.",selectedCount_other:"{{count}} grupos seleccionados.",newNameLabel:"Nuevo nombre",newDescriptionLabel:"Nueva descripción",imageLabel:"Imagen",previewAlt:"vista previa",announceSwitchLabel:"Solo los admins pueden enviar mensajes",lockedSwitchLabel:"Solo los admins pueden editar la información",groupFlowLabel:"Flujo de grupo",selectFlowPlaceholder:"Selecciona un flujo",noActiveGroupFlow:"No hay ningún flujo de grupo activo.",leaveWarning_one:"Saldrás de {{count}} grupo en WhatsApp. Esta acción no se puede deshacer.",leaveWarning_other:"Saldrás de {{count}} grupos en WhatsApp. Esta acción no se puede deshacer.",resetInviteWarning_one:"El enlace actual de {{count}} grupo será invalidado.",resetInviteWarning_other:"Los enlaces actuales de {{count}}
506 grupos serán invalidados.",hideWarning_one:"{{count}} grupo se eliminará solo de tu lista. Sigues en el grupo en WhatsApp.",hideWarning_other:"{{count}} grupos se eliminarán solo de tu lista. Sigues en los grupos en WhatsApp.",pleaseWait:"Esperaâ¦",applyButton:"Aplicar",errors:{nameRequired:"Indica el nombre",descriptionRequired:"Indica la descripción",imageRequired:"Selecciona una imagen",flowRequired:"Selecciona un flujo"},toasts:{hidden_one:"{{count}} grupo ocultado del chat",hidden_other:"{{count}} grupos ocultados del chat",flowTriggered_one:"Flujo disparado en {{count}} grupo",flowTriggered_other:"Flujo disparado en {{count}} grupos",partialResult:"{{ok}} éxitos · {{fail}} fallos",left_one:"Saliste de {{count}} grupo",left_other:"Saliste de {{count}} grupos",invitesReset_one:"{{count}} enlace restablecido",invitesReset_other:"{{count}} enlaces restablecidos",updated_one:"{{count}} grupo actualizado",updated_other:"{{count}} grupos actualizados"}},Nj={selectedCount_one:"{{count}} grupo",selectedCount_other:"{{count}} grupos",editName:"Editar nombre",editDescription:"Editar descripción",editPhoto:"Editar foto",sendPermission:"Permiso de envÃo",editPermission:"Permiso de edición",triggerFlow:"Disparar flujo",resetInvite:"Restablecer invitación",leaveGroups:"Salir de los grupos",hideFromChat:"Quitar del chat",clearSelection:"Limpiar selección"},kj={pix:{label:"Clave PIX",copiedToast:"¡Clave PIX copiada!",copyFailedToast:"Error al copiar la clave",copyKey:"Copiar clave Pix"},contactFallback:"Contacto",stickerAlt:"Sticker",defaultFileName:"Archivo",selectGroup:"Seleccioná un grupo",selectGroupHint:"Elegà un grupo de la lista para empezar",errors:{sendFailed:"Error al enviar el mensaje",uploadFailed:"Error al subir el archivo",micBlocked:"Error al acceder al micrófono: {{detail}}",allowAccess:"revisá los permisos del micrófono en el navegador",cancelFailed:"Error al cancelar el flujo"},mediaTypes:{image:"imagen",video:"video",audio:"audio",document:"documento"},uploading:"Enviando {{type}}...",sent:"¡Enviado!",flowRunCancelled:"Flujo cancelado"},Tj={title:"Información del grupo",syncTooltip:"Sincronizar con WhatsApp",removePhoto:"Quitar foto",descriptionLabel:"Descripción",noDescription:"Sin descripción",permissionsLabel:"Permisos",sendMessagesLabel:"Enviar mensajes",onlyAdmins:"Solo administradores",allParticipants:"Todos los participantes",editInfoLabel:"Editar información del grupo",notAdminHint:"No sos administrador â cambios deshabilitados.",inviteLinkLabel:"Enlace de invitación",loadingShort:"Cargandoâ¦",unavailable:"No disponible",generateNewLink:"Generar nuevo enlace",membersHeading:"Miembros ({{count}})",memberCount_one:"{{count}} miembro",memberCount_other:"{{count}} miembros",youBadge:"Vos",roleCreator:"creador",roleAdmin:"admin",makeAdmin:"Hacer administrador",removeAdmin:"Quitar administrador",removeFromGroup:"Quitar del grupo",noMembersLoaded:"No se cargó ningún miembro.",addParticipantsDialog:{title:"Agregar participantes",phonesLabel:"Teléfonos (código de paÃs + área + número)",phonesPlaceholder:"5511999998888, 5511988887777...",hint:"Separá por coma, espacio o salto de lÃnea. Solo se usarán los dÃgitos."},removeParticipantDialog:{title:"¿Quitar a este participante?",description:"Esta acción quita al participante del grupo de inmediato.",confirm:"Quitar"},participantActionLabels:{add:"agregado(s)",remove:"quitado(s)",promote:"ascendido(s)",demote:"degradado(s)"},errors:{phoneRequired:"Ingresá al menos 1 teléfono válido",leaveFailed:"Error al salir del grupo",syncFailed:"Error al sincronizar",nameRequired:"El nombre es obligatorio",nameTooLong:"El nombre debe tener máximo 25 caracteres",updateNameFailed:"Error al actualizar el nombre",updateDescriptionFailed:"Error al actualizar la descripción",imageMustBeJpeg:"La imagen debe estar en formato JPEG",updatePhotoFailed:"Error al actualizar la foto",generic:"Error",updatePermissionFailed:"Error al actualizar el permiso",resetLinkFailed:"Error al restablecer el enlace",updateParticipantsFailed:"Error al actualizar participantes"},toasts:{leftGroup:"Saliste del grupo",nameUpdated:"Nombre actualizado",descriptionUpdated:"Descripción actualizada",photoUpdated:"Foto actualizada",photoRemoved:"Foto quitada",announceOnlyAdmins:"Solo los administradores pueden enviar",announceEveryone:"Todos pueden enviar mensajes",lockedOnlyAdmins:"Solo los administradores editan la info",lockedEveryone:"Todos pueden editar la info",linkReset:"Enlace restablecido",linkCopied:"Enlace copiado",participantsUpdated:"Participantes {{action}}"}},Ij={buttonTitle:"Flujos del grupo",title:"Flujos del grupo",descriptionPrefix:"Disparar manualmente o programar flujos para",tabs:{run:"Disparar",schedule:"Programar",list:"Programados"},flowLabel:"Flujo",selectFlowPlaceholder:"Seleccioná un flujo",selectPlaceholderShort:"Seleccioná",noActiveFlows:"No hay flujos de grupo activos. Creá uno en la pestaña Flujos.",runNowButton:"Disparar ahora",activeRunHint:"Ya hay un flujo corriendo en este grupo. Finalizalo desde la parte superior del chat antes de iniciar otro.",dateLabel:"Fecha",timeLabel:"Hora",recurrenceLabel:"Recurrencia",recurrence:{once:"Solo una vez",daily:"Diariamente",weekly:"Semanalmente"},scheduleButton:"Programar",noSchedules:"No hay programaciones.",dateConnector:"a las",recurrenceShort:{once:"Una vez",daily:"Diario",weekly:"Semanal"},inactiveSuffix:"Inactivo",errors:{selectFlow:"Seleccioná un flujo",activeRunExists:"Ya hay un flujo en ejecución en este grupo. Finalizalo antes de iniciar otro.",dateRequired:"Definà la fecha",invali
506dDateTime:"Fecha/hora inválida",dateMustBeFuture:"La fecha/hora debe ser futura"},toasts:{flowStarted:"Flujo iniciado en este grupo",flowScheduled:"Flujo programado"}},Rj={searchPlaceholder:"Buscar gruposâ¦",manageVisibleGroupsTitle:"Gestionar grupos visibles",refreshSelected:"Actualizar grupos seleccionados",refreshAll:"Actualizar grupos",selectedCount_one:"{{count}} seleccionado",selectedCount_other:"{{count}} seleccionados",selectAllWithCount:"Seleccionar todos ({{count}})",emptySelectionTitle:"TodavÃa no seleccionaste ningún grupo.",manageGroupsButton:"Gestionar grupos",noGroupsFound:"No se encontró ningún grupo.",adminBadge:"admin",memberCount_one:"{{count}} miembro",memberCount_other:"{{count}} miembros"},Dj={toasts:{contactNotFound:"Contacto no encontrado. Puede haber sido eliminado."},errors:{noContactSelected:"Ningún contacto seleccionado",flowAlreadyTriggering:"Esperá, el flujo ya se está disparando...",triggerAiFailed:"Error al disparar el agente de IA",triggerFlowFailed:"Error al disparar el flujo",activeFlowExists:"No se puede disparar otro flujo. Ya hay un flujo enviándose a este contacto en este momento."},groupsGate:{title:"Grupos es una función premium",description:"La gestión de grupos de WhatsApp está disponible a partir del plan Modo Acceso (R$99/mes).",upgradeButton:"Mejorar el plan",upgradeHint:"Incluye más instancias, créditos mensuales y todas las funciones avanzadas.",backButton:"Volver a Conversaciones"}},Mj={title:"Menú del Inbox",tabs:{numbers:"Números",labels:"Etiquetas",tagged:"Etiquetados"},noInstances:"Ningún número conectado",connectInstance:"Conectar número",status:{connected:"Conectado",disconnected:"Desconectado"},assignedFlowsLabel:"Flujos asignados:",noAssignedFlows:"Ningún flujo asignado",systemLabelsTitle:"Etiquetas predeterminadas",customLabelsTitle:"Etiquetas personalizadas",noCustomLabels:"No hay etiquetas personalizadas",newLabelPlaceholder:"Nueva etiqueta...",noTaggedContacts:"Ningún contacto etiquetado",reprocessing:"Reprocesando...",reprocessButton:"Reprocesar contactos",manageFlowsButton:"Gestionar flujos",errors:{removeLabelFailed:"Error al quitar la etiqueta",reprocessFailed:"Error al reprocesar contactos"},toasts:{labelRemoved:"Etiqueta quitada",reprocessed:"Reprocesado: {{phones}} teléfonos normalizados, {{names}} nombres corregidos"}},Fj={flowsTooltip:"Flujos",notificationsTooltip:"Notificaciones",enableNotificationSound:"Activar sonido de notificación",notifyEveryMessage:"Con cada mensaje nuevo recibido",notifyEveryLead:"Con cada lead nuevo",showContent:"Mostrar contenido",hideContent:"Ocultar contenido",filterByNumberTooltip:"Filtrar por número",allNumbers:"Todos los números",errors:{noInstancesConnected:"Ninguna instancia conectada. Conectá un número en el Maturador primero.",syncFailed:"Error al sincronizar contactos"},toasts:{contactsImported:"¡{{count}} contactos importados con éxito!",noNewContacts:"No se encontró ningún contacto nuevo"}},Lj={title:"Unirse a un grupo",description:"Pegá la URL completa de la invitación o solo el código.",instanceLabel:"Instancia",selectPlaceholder:"Seleccionáâ¦",inviteLabel:"URL o código de invitación",joinButton:"Unirse al grupo",errors:{selectInstance:"Seleccioná una instancia",inviteRequired:"Ingresá la URL o el código de invitación",joinFailed:"Error al unirse al grupo"},toasts:{joined:"Te uniste al grupo"}},jj={instanceFallback:"Instancia",title:"Gestionar grupos visibles",selectedOfTotal:"{{selected}} de {{total}} seleccionado(s)",searchPlaceholder:"Buscar gruposâ¦",onlyAdminActive:"Mostrando solo donde soy admin",onlyAdminInactive:"Filtrar: solo donde soy admin",syncAllTooltip:"Sincronizar todo",addMenuTooltip:"Agregar grupo / comunidad",createGroupItem:"Crear grupo nuevo",joinWithInviteItem:"Unirse con invitación",createCommunityItem:"Crear comunidad",clearFilter:"limpiar",deselectVisible:"Desmarcar visibles",selectAllVisible:"Seleccionar todos los visibles ({{count}})",clearSelection:"Limpiar selección",noGroupsFound:"No se encontró ningún grupo.",adminBadge:"admin",memberCount_one:"{{count}} miembro",memberCount_other:"{{count}} miembros",saveSelectionButton:"Guardar selección"},_j={title:"Nueva conversación",phoneLabel:"Número de teléfono",phonePlaceholder:"Ej: 11999998888",phoneHint:"Seleccioná el paÃs al lado e ingresá el número con el código de área. También podés pegar el número completo con +.",countrySearchPlaceholder:"Buscar paÃs o código...",countryNotFound:"No se encontró ningún paÃs.",instanceLabel:"Enviar desde el número",selectInstancePlaceholder:"Seleccioná un número",noInstances:"Ningún número conectado",creating:"Creando...",startButton:"Iniciar conversación",errors:{notLoggedIn:"Necesitás iniciar sesión",phoneRequired:"Ingresá el número de teléfono",instanceRequired:"Seleccioná un número para enviar",createContactFailed:"Error al crear el contacto",createConversationFailed:"Error al crear la conversación"},toasts:{created:"¡Conversación creada!"}},Oj={heading:"Mensaje programado",flowLabel:"Flujo",selectFlowPlaceholder:"Seleccioná el flujo...",dateLabel:"Fecha",timeLabel:"Horario",scheduleButton:"Programar envÃo",historyLabel:"Historial",noScheduledMessages:"No hay mensajes programados.",dateConnector:"a las",status:{scheduled:"Agendada",processing:"Procesando",sent:"Enviada",cancelled:"Cancelada",failed:"Falló"},errors:{selectFlow:"Seleccioná un flujo",selectDateTime:"Seleccioná la fecha y el horario",dateMustBeFuture:"La fecha debe ser en el futuro",scheduleFailed:"Error al programar: {{error}}",cancelFailed:"Error al cancelar: {{error}}",cancelFailedFallback:"No se pudo cancelar el mensaje programado.",notCancellable:"El mensaje no pudo cancelarse porque ya se está procesando o ya no está disponible.",notAuthenticated:"Tu sesión venció. Iniciá sesión nuevamente para continuar."},toasts:{scheduled:"¡Mensaje programado con éxito!",cancelled:"Mensaje programado cancelado"}},Bj={title:"Mensajes programados",empty:"No hay mensajes programados",emptyHint:"Programá flujos desde los detalles del contacto",flowLabel:"Flujo: {{name}}",dateConnector:"a las",unknownContact:"Desconocido",status:{scheduled:"Agendada",processing:"Procesando",sent:"Enviada",failed:"Falló",cancelled:"Cancelada"},errors:{cancelFailed:"Error al cancelar: {{error}}",cancelFailedFallback:"No se pudo cancelar el mensaje programado.",notCancellable:"El mensaje no pudo cancelarse porque ya se está procesando o ya no está disponible.",notAuthenticated:"Tu sesión venció. Iniciá sesión nuevamente para continuar."},toasts:{cancelled:"Mensaje programado cancelado"}},zj={heading:"Mensajes programados",subheading:"Mensajes programados para envÃo",flowFallback:"Flujo",dateConnector:"a las",count_one:"{{count}} mensaje programado",count_other:"{{count}} mensajes programados",errors:{cancelFailed:"Error al cancelar"},toasts:{cancelled:"Programación cancelada"}}
506,Vj={title:"Confirmación de envÃo",recipientLabel:"Destinatario:",errors:{sendFailed:"Error al enviar: {{error}}"}},qj={greetingWithName:"¡Hola, {{name}}!",greetingPlain:"¡Hola!",operationOverview:"â resumen general de tu operación",unknown:"Desconocido",status:{connected:"Conectado",connecting:"Conectando",disconnected:"Desconectado"},stats:{totalContacts:"Total de Contactos",savedContacts:"Contactos guardados",conversationsToday:"Conversaciones de Hoy",totalAllNumbers:"Total de todos los números",activeFlows:"Flujos Activos",connectedNumbers:"Números Conectados",ofTotal:"De {{count}} en total"},chart:{title:"Conversaciones por Número",instances:"Instancias",filterByInstance:"Filtrar por Instancia",all:"Todos",clear:"Limpiar",selectedOfTotal:"{{selected}} de {{total}} seleccionado(s)",custom:"Personalizado",loadError:'No se pudieron cargar los datos de este perÃodo (volumen muy grande). Prueba un intervalo más corto, como "7 dÃas".',dateFilters:{today:"Hoy",yesterday:"Ayer",last7days:"7 dÃas",last30days:"30 dÃas",thisWeek:"Esta semana",thisMonth:"Este mes"}},connectedNumbers:{heading:"Números Conectados",newNumber:"Nuevo Número",emptyTitle:"Ningún número conectado",emptyDescription:"Agrega tu primer número de WhatsApp",createNumber:"Crear Número",searchPlaceholder:"Buscar por nombre o número...",clearSearch:"Limpiar búsqueda",filters:{all:"Todos",connected:"Conectados",disconnected:"Desconectados"},selectAllConnected:"Seleccionar todos los conectados",numbersSelected:"número(s) seleccionado(s)",clear:"Limpiar",bulkEdit:"Editar en Masa",noSearchResults:"No se encontró ningún número para esa búsqueda."},instanceCard:{validateProxyLabel:"Validar proxy (IP y ubicación)",connectionDetailsLabel:"Detalles de la conexión",clickToValidateProxy:"Haz clic para validar el proxy",clickToViewDetails:"Haz clic para ver los detalles",connection:"Conexión",numberLabel:"Número: {{number}}",lastSeen:"Ãltimo acceso: {{date}}",createdAt:"Creado: {{date}}",ipAndLocation:"IP y ubicación",viaProxy:"VÃa proxy",noProxy:"Sin proxy (IP predeterminada)",checkingIpLocation:"Consultando IP y ubicación...",ipLabel:"IP: {{ip}}",clickIconToCheck:"Haz clic en el Ãcono para consultar IP y ubicación.",notConnectedYet:"Número aún no conectado",flowsAssigned:"{{count}} flujo(s) asignado(s)",noFlowsAssigned:"Ningún flujo asignado",active:"Activo",inactive:"Inactivo",connect:"Conectar",disconnect:"Desconectar",reset:"Restablecer",delete:"Eliminar",edit:"Editar"},createModal:{title:"Nuevo Número",description:"Crea un nuevo registro para conectar un número de WhatsApp",nameLabel:"Nombre identificador",namePlaceholder:"Ej: TIM 001",nameHint:"Cualquier nombre. Ejemplo: TIM 001, Mi Instancia",configureProxy:"Configurar Proxy (opcional)",socks5Label:"Cadena SOCKS5 del Marketplace",socks5Placeholder:"socks5://usuario:contraseña@host:puerto",socks5Hint:"Pega la cadena de proxy generada por el Marketplace en formato SOCKS5",validateIp:"Validar IP",proxyValid:"Proxy Válido",proxyInvalid:"Proxy Inválido",ipLabel:"IP:",latencyLabel:"Latencia:"},deleteDialog:{title:"Confirmar eliminación",description:'¿Estás seguro de que deseas eliminar el número "{{name}}"? Esta acción no se puede deshacer.'},resetDialog:{title:"Confirmar restablecimiento",description:'¿Estás seguro de que deseas restablecer "{{name}}"? La conexión se restablecerá en la API. Deberás escanear el código QR nuevamente. Tus contactos, mensajes y flujos se conservarán.'},confirmPurchaseModal:{title:"Nueva Instancia de WhatsApp",description:"Crea una nueva instancia para conectar tu WhatsApp. Esta acción consumirá créditos.",period:"PerÃodo:",periodValue:"30 dÃas",cost:"Costo:",credits:"{{count}} créditos",currentBalance:"Saldo actual",insufficient:"Insuficiente",rechargeCredits:"Recargar Créditos",processing:"Procesando...",confirmAndCreate:"Confirmar y Crear ({{count}} créditos)",systemName:"Instancia de WhatsApp"},duplicateNameModal:{title:"Nombre ya en uso",description:"Ya existe una instancia con el nombre",descriptionSuffix:"registrada en la plataforma.",chooseAnother:"Por favor, elige un nombre diferente para tu nueva instancia.",tipLabel:"Consejo:",tipText:"Usa un nombre único, como tu número de teléfono o una combinación de letras y números.",understood:"Entendido, elegiré otro nombre"},menuCards:{conversations:{title:"Conversaciones",description:"Gestiona todas las conversaciones en tiempo real"},flows:{title:"Flujos",description:"Crea y gestiona flujos de automatización"}
506,kanban:{title:"Kanban",description:"Visualiza y organiza leads en un pipeline"},contacts:{title:"Contactos",description:"Gestiona tus contactos y leads"},quickReplies:{title:"Respuestas Rápidas",description:"Atajos para mensajes predefinidos"}},toasts:{loadError:"Error al cargar los datos",waitBeforeRefresh:"Espera unos segundos antes de actualizar de nuevo",statusUpdated:"Estado actualizado",numbersSynced:"¡{{count}} número(s) sincronizado(s)!",syncNumbersError:"Error al sincronizar números",loadingSlots:"Cargando información de espacios disponibles, intenta de nuevo en unos segundos.",nameRequired:"El nombre del número es obligatorio",invalidProxyFormat:"Formato de proxy inválido. Usa: socks5://usuario:contraseña@host:puerto",operationInProgress:"Operación en curso. Espera e intenta de nuevo.",creditsDeducted:"¡{{count}} créditos debitados con éxito!",numberCreated:"¡Número creado con éxito!",createNumberError:"Error al crear el número",managedProxyApplyError:"Número creado, pero no fue posible aplicar la proxy seleccionada. Intenta de nuevo en Editar Instancia.",proxyConflict:"Usa la proxy gerenciada (por ubicación) O una proxy SOCKS5 manual, no ambas.",enterProxyFirst:"Ingresa primero la cadena de proxy",whatsappAlreadyConnected:"¡WhatsApp ya está conectado!",serverLimitReached:"Se alcanzó el lÃmite de instancias en este servidor. Elimina tu instancia y crea otra para intentarlo de nuevo.",qrNotAvailable:"Código QR no disponible. Intenta de nuevo.",qrNotAvailableShort:"Código QR no disponible",getQrError:"Error al obtener el código QR",updateQrError:"Error al actualizar el código QR",whatsappConnected:"¡WhatsApp conectado con éxito!",connectingWaitSync:"Conectando... espera la sincronización",waitingQrScan:"Esperando la lectura del código QR...",numberDisconnected:"Número desconectado",disconnectError:"Error al desconectar",numberRestarted:"Número reiniciado",restartError:"Error al reiniciar",invalidSession:"Sesión inválida â recarga la página e intenta de nuevo.",deletingInstance:"Eliminando instancia... esto puede tardar unos segundos",deleteHadNoEffect:"La eliminación no tuvo efecto â la instancia puede pertenecer a otro dueño o ya fue eliminada.",numbersRemoved:"{{count}} números eliminados",numberRemoved:"Número eliminado",removeNumberError:"Error al eliminar el número",resettingInstance:"Restableciendo instancia...",instanceReset:"¡Instancia restablecida con éxito!",resetInstanceError:"Error al restablecer la instancia",unknownError:"Error desconocido",proxyInfoError:"No se pudo obtener información del proxy",instanceIpError:"No se pudo obtener la IP de la instancia",validateProxyError:"Error al validar el proxy"}},Uj={orderSection:{title:"Pedido / Dirección",filled:"Completado",fields:{street:"Calle",number:"Número",neighborhood:"Barrio",city:"Ciudad",state:"Estado/Provincia",complement:"Complemento",reference:"Referencia",scheduleDate:"Fecha de Programación",deliveryDate:"Fecha de Entrega"}},card:{noNumber:"Sin número",contactAlt:"Contacto"},column:{changeColorTitle:"Cambiar color de la etiqueta",renameTitle:"Haz clic para renombrar",deleteTagTitle:"Eliminar etiqueta",noResultsHere:"Ningún resultado aquÃ",noLeadsHere:"TodavÃa no hay leads aquÃ",showingOf:"{{visible}} de {{total}} leads",noTagLabel:"Sin etiqueta",collaboratorOrderLockedTitle:"El orden de las columnas lo define el dueño de la cuenta"},csv:{name:"Nombre",phone:"Teléfono",tags:"Etiquetas"},detailModal:{noName:"Sin nombre",sourceNumber:"Número de origen:",createdAt:"Creado el:",notes:"Notas:",notesPlaceholder:"Agrega notas sobre este contacto...",save:"Guardar",cancel:"Cancelar",noNotes:"Ninguna nota agregada",adSource:"Origen del anuncio:",tags:"Etiquetas",deleteLead:"Eliminar Lead",openConversation:"Abrir Conversación",deleteConfirmTitle:"¿Eliminar lead?",deleteConfirmDescription:"¿Estás seguro de que deseas eliminar a <strong>{{name}}</strong>? Esta acción no se puede deshacer y se perderán todos los mensajes.",deleteConfirmCancel:"Cancelar",deleteConfirmAction:"Eliminar"},header:{title:"Pipeline de Leads",filtered:"Filtrado",clearFilterTitle:"Haz clic para quitar el filtro",subtitle:"Organiza tus leads en un Kanban.",leadsInFunnel:"{{count}} leads en el embudo",searchPlaceholder:"Buscar leads...",dateFilterPlaceholder:"Filtrar por fecha",dateFilters:{none:"Sin filtro",today:"Hoy",yesterday:"Ayer",last7days:"Ãltimos 7 dÃas",last30days:"Ãltimos 30 dÃas"},instanceFilterPlaceholder:"Filtrar por número",allNumbers:"Todos los números",syncTagsTitle:"Sincronizar etiquetas",visibleColumnsTitle:"Columnas visibles",exportCsvTitle:"Exportar contactos a CSV",deleteAllTitle:"Eliminar todos los contactos",deleteAllButton:"Eliminar Todos",newTag:"Nueva Etiqueta"},createTagModal:{title:"Nueva Etiqueta",nameLabel:"Nombre de la etiqueta",namePlaceholder:"Ej: Interesado",colorLabel:"Color",preview:"Vista previa",cancel:"Cancelar",create:"Crear Etiqueta"},deleteAllDialog:{title:"¿Eliminar todos los contactos?",description:"Esta acción eliminará permanentemente los {{count}} contactos y todo el historial de conversaciones. Los contactos solo volverán a aparecer cuando reciban o envÃen nuevos mensajes.",cancel:"Cancelar",confirm:"Eliminar Todo"},deleteTagDialog:{title:'¿Eliminar la etiqueta "{{tag}}"?',description:"Esta acción eliminará la etiqueta de todos los contactos, flujos (disparadores, condiciones y acciones) y del Kanban. Esta acción no se puede deshacer.",cancel:"Cancelar",confirm:"Eliminar Etiqueta"},toasts:{loadError:"Error al cargar los datos",columnsReordered:"Columnas reordena
506das",saveColumnOrderError:"No se pudo guardar el orden de las columnas",leadMoved:"Lead movido con éxito",moveLeadError:"Error al mover el lead",triggerTagFlowError:"El lead se movió, pero no se pudo iniciar el flujo de la etiqueta",notesSaved:"Notas guardadas con éxito",saveNotesError:"Error al guardar las notas",saveFieldError:"Error al guardar el campo",deletingContacts:"Eliminando contactos e historial... Esto puede tardar unos segundos.",deletingProgress:"Eliminando... {{deleted}} ya eliminados, {{remaining}} restantes.",deleteAllDone:"Listo. {{count}} contactos eliminados.",deleteAllError:"Error al eliminar contactos: {{error}}",tagAlreadyExists:"Esa etiqueta ya existe",syncSuccess:"Etiquetas sincronizadas con éxito",syncError:"Error al sincronizar",leadDeleted:"Lead eliminado con éxito",deleteLeadError:"Error al eliminar el lead",unknownError:"Error desconocido",contactsExported:"{{count}} contactos exportados"},truncated:{title:"Tablero truncado: mostrando solo los {{shown}} contactos con conversación más reciente.",withCount:"Esta cuenta tiene cerca de {{total}} contactos activos â {{hidden}} no aparecen en el tablero. Usa la búsqueda o el filtro por número para llegar a los que quedaron fuera.",withoutCount:"Los contactos con conversación más antigua no aparecen en el tablero. Usa la búsqueda o el filtro por número para llegar a los que quedaron fuera."}},Wj={header:{title:"Respuestas Rápidas",subtitle:"Crea atajos para mensajes frecuentes",newReply:"Nueva Respuesta"},empty:{title:"Ninguna respuesta rápida",description:"Crea respuestas rápidas para agilizar tu atención.",hint:'Escribe "/" en el chat para acceder a ellas.',createFirst:"Crear Primera Respuesta"},card:{noContent:"Sin contenido",allInstances:"Todas las instancias"},dialog:{editTitle:"Editar Respuesta Rápida",newTitle:"Nueva Respuesta Rápida",description:'Configura el atajo y el contenido de la respuesta. Usa "/" en el chat para acceder.',shortcutLabel:"Atajo",shortcutPlaceholder:"saludo",contentLabel:"Contenido",insertVariable:"Insertar variable",variableHint:"Se reemplaza por el valor real del lead cuando se envÃa la respuesta rápida.",globalVariablesTitle:"Variables Globales",contentPlaceholder:"¡Hola! ¿Cómo puedo ayudarte?",instancesLabel:"Instancias",allInstances:"Todas las instancias",cancel:"Cancelar",save:"Guardar",create:"Crear"},deleteDialog:{title:"Eliminar Respuesta Rápida",description:"¿Estás seguro de que deseas eliminar esta respuesta rápida? Esta acción no se puede deshacer.",cancel:"Cancelar",confirm:"Eliminar"},toasts:{loadError:"Error al cargar los datos",shortcutRequired:"El atajo es obligatorio",contentRequired:"El contenido es obligatorio",updated:"¡Respuesta rápida actualizada!",created:"¡Respuesta rápida creada!",saveError:"Error al guardar la respuesta rápida",deleted:"¡Respuesta rápida eliminada!",deleteError:"Error al eliminar la respuesta rápida"}},$j={header:{title:"Respuestas Rápidas",subtitle:"Atajos para mensajes predefinidos"},section:{title:"Respuestas Rápidas",hint:"Crea atajos escribiendo <code>/atajo</code> en el chat",newReply:"Nueva respuesta"},empty:"Ninguna respuesta rápida registrada",allInstances:"Todas las instancias",instanceCount_one:"{{count}} instancia",instanceCount_other:"{{count}} instancias",dialog:{editTitle:"Editar respuesta rápida",newTitle:"Nueva respuesta rápida",description:'Atajo disponible para usar escribiendo "/" en el campo de mensaje',shortcutLabel:"Atajo",shortcutPlaceholder:"hola",contentLabel:"Contenido",contentPlaceholder:"¡Hola! ¿Cómo puedo ayudarte?",instancesLabel:"Instancias",allInstances:"Todas las instancias",cancel:"Cancelar",save:"Guardar"},deleteDialog:{title:"¿Eliminar respuesta rápida?",description:"Esta acción no se puede deshacer.",cancel:"Cancelar",confirm:"Eliminar"},toasts:{loadError:"Error al cargar las respuestas rápidas",shortcutRequired:"Indica un atajo",contentRequired:"Indica el contenido de la respuesta",updated:"Respuesta rápida actualizada",created:"Respuesta rápida creada",saveError:"Error al guardar",deleted:"Respuesta rápida eliminada",deleteError:"Error al eliminar"}},Gj={telefone:"Teléfono del lead",telefone_br:"Teléfono BR (sin DDI, con 9º dÃgito)",contactName:"Nombre completo del lead",primeiro_nome:"Primer nombre del lead"},Hj={activeFlows:gj,aiVoiceDialog:vj,chatInput:bj,chatMessage:yj,chatPanel:xj,contactDetails:wj,contentBlocksFooterBar:Cj,conversationList:Pj,createCommunityDialog:Aj,createGroupDialog:Ej,groupBulkActionDialog:Sj,groupBulkActionsBar:Nj,groupChatPanel:kj,groupDetail
506s:Tj,groupFlowActionsButton:Ij,groupList:Rj,inboxLayout:Dj,inboxMenu:Mj,inboxSidebar:Fj,joinGroupDialog:Lj,manageVisibleGroupsDialog:jj,newConversationDialog:_j,scheduledMessageSection:Oj,scheduledMessagesDialog:Bj,scheduledMessagesIndicator:zj,sendBlockConfirmDialog:Vj,dashboard:qj,kanban:Uj,quickReplies:Wj,quickRepliesSettings:$j,inboxVariables:Gj},Kj={title:"Contactos",subtitle:"Gestiona tus contactos y leads"},Xj={totalContacts:"Total de contactos"},Yj={title:"Lista de contactos"},Qj={byInstance:"Filtrar por instancia",instances:"Instancias",noInstances:"No hay instancias disponibles",byTag:"Filtrar por etiqueta",tagsLabel:"Etiquetas",noTags:"No hay etiquetas disponibles",searchPlaceholder:"Buscar contactosâ¦"},Zj={newContact:"Nuevo contacto",exportSelection:"Exportar selección",exportFiltered:"Exportar filtrados",exportAll:"Exportar todo",loadMore:"Cargar más",openConversation:"Abrir conversación",editTags:"Editar etiquetas",tagsAction:"Etiquetas"},Jj={selectedCount_one:"{{count}} seleccionado",selectedCount_other:"{{count}} seleccionados",matchingFilterHint:"(todos los que coinciden con el filtro actual)",selectAllMatching:"Seleccionar los {{count}} que coinciden con el filtro",selecting:"Seleccionandoâ¦",matchingSelected:"{{count}} contactos seleccionados",selectAllError:"Error al seleccionar contactos"},e_={id:"ID",contact:"Contacto",phone:"Teléfono",tags:"Etiquetas",createdAt:"Creado el",empty:"No se encontraron contactos"},t_={load:"Error al cargar contactos",delete:"Error al eliminar",save:"Error al guardar contacto",phoneRequired:"Ingresa un teléfono"},a_={contactUpdated:"El contacto ya existÃa y fue actualizado",contactCreated:"Contacto creado",contactDeleted:"Contacto eliminado",deletedCount:"{{count}} contactos eliminados"},o_={title:"¿Eliminar {{count}} contactos?",description:"Esta acción no se puede deshacer. Los contactos y sus conversaciones serán eliminados."},n_={title:"Nuevo contacto",description:"Completa el teléfono (obligatorio) y el nombre (opcional). Si el teléfono ya existe, se actualiza el nombre.",phoneLabel:"Teléfono",nameLabel:"Nombre (opcional)",namePlaceholder:"Nombre del contacto"},r_={title:"Etiquetas en masa",description_one:"{{count}} contacto seleccionado.",description_other:"{{count}} contactos seleccionados.",addTab:"Agregar etiquetas",removeTab:"Quitar etiquetas",newTagPlaceholder:"Nueva etiquetaâ¦",removeHint:"Selecciona las etiquetas que deben quitarse de los contactos.",noTags:"TodavÃa no hay etiquetas creadas.",applying:"Aplicandoâ¦",add:"Agregar",remove:"Quitar",error:"Error al actualizar etiquetas",successAdded:"Etiquetas agregadas a {{count}} contactos",successRemoved:"Etiquetas quitadas de {{count}} contactos"},i_={page:Kj,kpi:Xj,list:Yj,filters:Qj,buttons:Zj,export:{titleFiltered:"Exporta todos los contactos que coinciden con el filtro actual (etiqueta/instancia/búsqueda), no solo los cargados en pantalla",titleAll:"Exporta todos los contactos, no solo los cargados en pantalla",nothingToExport:"Nada para exportar",loading:"Exportando contactosâ¦",loadingProgress:"Exportando contactos⦠{{pct}}% ({{loaded}}/{{total}})",error:"Error al exportar contactos",exportedCount:"{{count}} contactos exportados"},selection:Jj,table:e_,errors:t_,toast:a_,confirmDelete:o_,newContactDialog:n_,bulkTag:r_,import:{title:"Importar contactos",descIntro:"Sube un archivo .csv con las columnas",descRequired:"(obligatoria),",descAnd:"y",descSeparatedBy:"(separadas por",phonesUpdated:"Los teléfonos que ya existan se actualizan.",templateHint:"¿No sabes el formato? Descarga nuestra plantilla y completa los contactos.",downloadTemplate:"Descargar plantilla",fileLabel:"Archivo CSV",missingPhoneColumn:'El archivo debe tener una columna "phone" (o "telefone").',noValidContacts:"No se encontró ningún contacto válido en el archivo.",readError:"Error al leer el archivo",previewHeader:"Vista previa â {{count}} contactos detectados (mostrando los primeros 10)",previewPhone:"Teléfono",previewName:"Nombre",previewTags:"Etiquetas",importing:"Importandoâ¦",importButton:"Importar {{count}}",error:"Error al importar contactos",createdCount_one:"{{count}} contacto nuevo creado",createdCount_other:"{{count}} contactos nuevos creados",updatedCount_one:"{{count}} ya existÃa y fue actualizado",updatedCount_other:"{{count}} ya existÃan y fueron actualizados",failedCount_one:"{{count}} falló",failedCount_other:"{{count}} fallaron",completed:"Importación completada: {{details}}.",nothingProcessed:"No se procesó ningún contacto."}},s_={official:"oficial",unofficial:"no oficial",toast:'Este flujo es del canal {{flowChannel}}; la instancia "{{instanceName}}" es del canal {{instanceChannel}}. QuÃtala antes de guardar.',hidden:"Las instancias del canal {{otherChannel}} no aparecen aquà â este flujo es del canal {{flowChannel}}."},l_={title:"Respuesta IA"},c_={title:"IA Respondedor",tone:"Tono: {{tone}}
506",toneFormal:"Formal",toneInformal:"Informal",expiresIn:"Expira en {{minutes}} min",miniFlowCount_one:"{{count}} mini-flujo",miniFlowCount_other:"{{count}} mini-flujos",expiration:"Expiración",error:"Error",followUpBadge:"Seguimiento inteligente",followUpNoMiniFlow:"Seguimiento sin mini-flujo",followUpPausesExpiration:"(pausada por el seguimiento)"},d_={title:"Texto con IA",placeholder:"Configura el texto base...",autoVariations:"⨠Variaciones automáticas por IA"},u_={title:"Audio IA",viewOnceTitle:"Visualización única",forwardedTitle:"Se enviará como reenviado",voiceNotSelected:"Voz no seleccionada",configurePlaceholder:"Haz clic para configurar el texto...",success:"â Ãxito",error:"â Error"},m_={title:"Audio",viewOnceTitle:"Visualización única",forwardedTitle:"Se enviará como reenviado",playbackSpeedTitle:"Velocidad de reproducción",downloadAudioTitle:"Descargar audio",usingVariable:"ð Usar variable:",configurePlaceholder:"Haz clic para configurar..."},p_={title:"Calculadora",defaultResultVariable:"resultado"},h_={title:"Llamada",description:"Dispara una llamada muda"},f_={title:"Carrusel",aiBadge:"IA",bodyTextRequired:"Texto del cuerpo obligatorio",cardCount_one:"{{count}} tarjeta",cardCount_other:"{{count}} tarjetas",configureCards:"Configura las tarjetas...",cardsWithEmptyText_one:"{{count}} tarjeta sin texto",cardsWithEmptyText_other:"{{count}} tarjetas sin texto",timeoutLabel:"Tiempo lÃmite: {{time}}",timeoutHandle:"â± Tiempo lÃmite"},g_={title:"Condición",operators:{equals:"Igual a",notEquals:"Diferente de",contains:"Contiene",notContains:"No contiene",startsWith:"Empieza con",endsWith:"Termina con",greater:"Mayor que",less:"Menor que",exists:"Existe",notExists:"No existe"},configurePlaceholder:"Configura las condiciones...",tagHas:"Tiene",tagNotHas:"No tiene",tagSummary:'Etiqueta: {{state}} "{{name}}"',countrySummary:"PaÃs {{state}} {{name}}",countryIs:"es",countryIsNot:"no es",iaSummaryWithPrompt:"ð¤ {{prompt}}...",iaSummaryConfigured:"ð¤ Condición IA configurada",conditionsSummary:"{{count}} condiciones ({{op}})",and:"Y",or:"O",badgeVariable:"Var",badgeTag:"Etiqueta",badgeCountry:"PaÃs",badgeIa:"ð¤ IA",undefinedVariablesTitle:"Variables no definidas:",undefinedVariablesHint:'Agrega un nodo "Definir Variable", "Esperar Respuesta" o "Esperar Respuesta IA" antes de esta condición â o elige una variable ya guardada en la cuenta (de otro flujo).',yes:"â SÃ",no:"â No",iaError:"â Error IA"},v_={title:"Contacto",placeholder:"Configura el contacto..."},b_={title:"Retraso",variableBadge:"Variable",waitingFixed:"Espera {{delay}}{{unit}}",waitingRange:"Espera {{min}} a {{max}}{{unit}}"},y_={title:"Documento",genericFileType:"Archivo",placeholder:"Haz clic para configurar..."},x_={title:"Fin"},w_={title:"Conectar Flujo",placeholder:"Configura el flujo..."},C_={title:"Generador IA",typeMusic:"Música",typeVideo:"Video",typeImage:"Imagen",modelFreepikNotSelected:"Modelo Freepik no seleccionado",modelNotSelected:"Modelo no seleccionado",successVariableTitle:"Guarda el archivo en: {{variable}}",success:"â Ãxito",error:"â Error"},P_={title:"Imagen",viewOnceTitle:"Visualización única",previewAlt:"Vista previa",downloadImageTitle:"Descargar imagen",usingVariable:"ð Usar variable:",configurePlaceholder:"Haz clic para configurar..."},A_={typeButtons:"Botones",typeImageButtons:"Imagen + Botones",typeListMenu:"Menú Lista",typeDefault:"Mensaje Interactivo",optionFallback:"Opción {{number}}",aiBadge:"IA",optionsCount_one:"{{count}} opción",optionsCount_other:"{{count}} opciones",configureOptions:"Configura las opciones...",configureMessage:"Configura el mensaje...",timeoutLabel:"Tiempo lÃmite: {{time}}",overLimit:"Supera el lÃmite de {{max}} opciones",textExceeds:"El texto supera los 1024 caracteres",buttonExceeds:"El botón supera los 20 caracteres",fallbackLabel:"â© Respuesta inválida",timeoutHandle:"â± Tiempo lÃmite"},E_={title:"Menú",optionsCount_one:"{{count}} opción",optionsCount_other:"{{count}} opciones",placeholder:"Configura las opciones..."},S_={title:"Notificar Administrador",whatsappPrefix:"WhatsApp: {{phone}}",whatsappPlaceholder:"Configura el WhatsApp...",groupPrefix:"Grupo: {{name}}",groupPlaceholder:"Configura el grupo...",pushPrefix:"Push: {{title}}",pushPlaceholder:"Configura el push...",defaultPlaceholder:"Configura la notificación..."}
506,N_={title:"Conteo de Leads",noNameSet:"Sin nombre definido"},k_={title:"API de Pagos",gatewayNotChosen:"Gateway no elegido",imageModeQr:"QR Code",imageModeCustom:"Imagen propia",imageModeNone:"Sin imagen",sendsInstant:"EnvÃa y sigue al instante · {{imageLabel}}",defaultCredential:"Credencial predeterminada de la cuenta",missing:"Falta: {{message}}",missingMore:"(+{{count}})",outputSuccess:"â Continuó",outputError:"â Error",titleXpag:"XPag",imageModeVoucher:"código de barras"},T_={chooseGateway:"elige el gateway",gatewayNoMexico:"este gateway no cobra en México",enterAmount:"ingresa el valor",invalidAmount:'valor inválido ("{{amount}}")',belowMinimum:"valor por debajo del mÃnimo ({{symbol}} {{min}})",aboveMaximum:"valor por encima del máximo ({{symbol}} {{max}})",writeMessage:"escribe el mensaje",enterButtonText:"ingresa el texto del botón",chooseCustomImage:"elige la imagen personalizada",enterPayerName:"ingresa el nombre del pagador",enterPayerCpf:"ingresa el CPF del pagador",invalidPayerCpf:"CPF inválido",enterPayerEmail:"ingresa el correo del pagador",enterPayerRfcCurp:"ingresa el RFC/CURP del pagador",invalidRfcCurp:"RFC/CURP inválido (10 a 18 caracteres)",gatewayNoColombia:"esta pasarela no cobra en Colombia",gatewayNoArgentina:"esta pasarela no cobra en Argentina",invalidArDocument:"CUIT inválido (11 dÃgitos)",invalidCoDocument:"documento inválido (5 a 15 dÃgitos)",invalidNequiPhone:"celular Nequi inválido (10 dÃgitos, empieza en 3)",enterNequiPhone:"indica el celular Nequi (el teléfono es el destino del pago)",gatewayNoPeru:"esta pasarela no cobra en Perú",gatewayNoPhilippines:"esta pasarela no cobra en Filipinas",revalidateZenithCredential:"revalida la credencial Zenith para habilitar los métodos de Perú",methodUnavailableForCredential:"este método de Perú no está disponible en la credencial seleccionada",methodUnavailableForCredentialPh:"este método de Filipinas no está disponible en la credencial seleccionada",enterPhPhone:"indica el celular filipino (10 dÃgitos que empiezan en 9)",invalidPhPhone:"celular filipino inválido (10 dÃgitos nacionales que empiezan en 9; 0 o +63 opcionales)",bankButtonsCount:"configura de 1 a 3 botones para la transferencia",bankButtonLabel:"la etiqueta del botón {{number}} debe tener de 1 a 20 caracteres",bankButtonAction:"elige Copiar o Enlace en el botón {{number}}",bankButtonValue:"indica el valor del botón {{number}}",bankButtonUrl:"el enlace literal del botón {{number}} debe comenzar con http:// o https://"},I_={title:"Pixel",all:"Todos",configurePixelEvent:"Configura pixel y evento...",eventAllPixels:"{{event}} â Todos los Pixels",eventTarget:"{{event}} â {{target}}",value:"Valor: {{currency}} {{value}}",autoValue:"ð° Valor automático del PIX ({{currency}})",eventsConfigured_one:"{{count}} evento configurado",eventsConfigured_other:"{{count}} eventos configurados"},R_={title:"Aleatorizador",split:"Split {{name}}"},D_={title:"Enviar Cobro",configureCharge:"Configura el cobro..."},M_={title:"Enviar Clave PIX",configurePixKey:"Configura la clave PIX...",types:{CPF:"CPF",CNPJ:"CNPJ",PHONE:"Teléfono",EMAIL:"Correo",EVP:"Clave Aleatoria"}},F_={title:"Variable",configureVariable:"Configura la variable..."},L_={title:"Iniciar",trigger:"Disparador",matchContains:"Contiene",matchExact:"Exacta",matchNotContains:"No contiene",triggeredManualOrSchedule:"â¡ Activado manualmente o por programación",triggeredByAI:"â¡ Activado por la IA",groupFlowNoTrigger:"Los flujos de grupo no tienen disparador automático.",nextStep:"Siguiente paso",pixConflictTitle:"Conflicto de disparador PIX",pixConflictDescription:"Ya existe otro flujo PIX en las mismas instancias:",unnamedFlow:"Sin nombre",extraFlows:"+{{count}} flujo(s)",pixConflictEmptyInstances:"Lista de instancias vacÃa = aplica a TODAS las instancias. Selecciona instancias especÃficas en Configuración.",pixConflictSelectDifferent:"Selecciona instancias diferentes en Configuración o desactiva el flujo en conflicto.",automatic:"Automático",customizationsActive_one:"{{count}} personalización activa",customizationsActive_other:"{{count}} personalizaciones activas",warningsOpenSettings_one:"{{count}} aviso â abre la configuración",warningsOpenSettings_other:"{{count}} avisos â abre la configuración",doubleClickToConfigure:"Doble clic en el bloque para configurar",aiLabel:"IA:",matchType:"C
506oincidencia",keywords:"Palabras clave",addPlaceholder:"Agregar...",tags:"Etiquetas",webhookUrl:"URL del Webhook",urlCopied:"¡URL copiada!",webhookUrlHint:"Pega esta URL en la plataforma donde quieres recibir los eventos.",generatingUrl:"Generando URL...",pauseOtherFlows:"Pausar otros flujos",webhookPauseNote:"â¡ Pausa automáticamente otros flujos activos del contacto.",pauseBySchedule:"Pausar por horario",valueMismatch:"Valor diferente",fakeReceipt:"Comprobante falso",duplicateReceipt:"Comprobante repetido"},j_={title:"Figurita",loaded:"Figurita cargada",clickToConfigure:"Haz clic para configurar..."},__={title:"Acciones",configureTag:"Configura la etiqueta...",clearField:"Limpiar: {{field}}",configureField:"Configura el campo...",emptyValue:"(vacÃo)",deleteContact:"Elimina el contacto permanentemente",markRead:"Marca la conversación como leÃda",markUnread:"Marca la conversación como no leÃda",markOpen:"Reabre la conversación en el Kanban de Pipeline",markClosed:"Archiva la conversación en el Kanban de Pipeline",markConversationOpen:"Marca la conversación como abierta en el Inbox",markConversationClosed:"Marca la conversación como cerrada en el Inbox",editMessage:"Edita un mensaje ya enviado",selectMessage:"Selecciona el mensaje...",deleteMessage:"Borra un mensaje ya enviado",configureAction:"Configura la acción...",actionsCount_one:"{{count}} acción",actionsCount_other:"{{count}} acciones"},O_={title:"Texto",configureMessage:"Configura el mensaje..."},B_={title:"Transferir",humanAgent:"Agente",department:"Departamento"},z_={title:"Video",viewOnce:"Vista única",ptvBadge:"Video redondo (PTV)",videoplayBadge:"Reproducción automática",clickToPreview:"Haz clic para previsualizar",previewVideo:"Previsualizar video",downloadVideo:"Descargar video",clickToConfigure:"Haz clic para configurar (MP4)",previewDialogTitle:"Vista previa del video",usingVariable:"Usar variable:"},V_={title:"Esperar Respuesta IA",ai:"IA",variablesCount:"{{count}} variables",configureVariable:"Configura la variable...",missingApiKey:"Falta API Key",concatenates:"Concatena {{seconds}}s",listensAudio:"Escucha audios",noResponseTime:"Sin respuesta: {{time}}",maxAttempts:"Máx. intentos: {{count}}",outputs:{validResponse:"Respuesta válida",noResponse:"Sin respuesta",maxAttemptsExhausted:"Intentos agotados",aiError:"Error IA"}},q_={title:"Esperar Respuesta",configureVariable:"Configura la variable...",noResponseTime:"Sin respuesta: {{time}}",savesImage:"Guarda imagen/PDF",imageOnly:"Solo imagen/PDF",response:"Respuesta",noResponse:"Sin respuesta"},U_={title:"Webhook",configureUrl:"Configura la URL..."},W_={title:"Etiqueta de WhatsApp",configureLabel:"Configura la etiqueta..."},$_={seconds:"seg",minutes:"min",hours:"h",days:"d"},G_={title:"Clonar Embudo de Conversación",searchPlaceholder:"Buscar conversación...",noConversationsFound:"No se encontraron conversaciones",selectConversation:"Selecciona una conversación para clonar",messagesToClone:"{{count}} mensaje(s) recibido(s) serán clonados",noMessagesFound:"No se encontraron mensajes",willBeCloned:"será clonado",cloneButton:"Clonar ({{count}} mensajes)",cloning:"Clonando...",startNodeLabel:"Inicio",flowNamePrefix:"Clonado de {{name}}",messagePreview:{audio:"ðµ Audio",image:"ð· Imagen",video:"ð¥ Video",document:"ð Documento"},toasts:{loadMessagesError:"Error al cargar los mensajes",noMessagesToClone:"No hay mensajes recibidos para clonar",createFlowError:"Error al crear el flujo",cloneSuccess:"¡Flujo clonado con éxito!",cloneError:"Error al clonar el embudo"}},H_={typeLabels:{text:"Texto",audio:"Audio",image:"Imagen",video:"Video",document:"Documento"},titleEdit:"Editar bloque de {{type}}",titleNew:"Nuevo bloque de {{type}}",fields:{title:"TÃtulo",titlePlaceholder:"Ej: Audio de objeción de precio",content:"Contenido",contentPlaceholder:"Escribe el texto que se enviará...",caption:"Descripción (opcional)",captionPlaceholder:"Texto enviado junto con el archivo",folder:"Carpeta",noFolder:"Sin carpeta",markFavorite:"Marcar como favorito"},uploadedFileFallback:"Archivo enviado",uploading:"Enviando...",uploadButton:"Subir {{type}}",fileLimit:"LÃmite de 50MB por archivo.",createBlock:"Crear bloque",toasts:{fileTooLarge:"Archivo mayor a 50MB.",mustBeLoggedIn:"Necesitas iniciar sesión.",fileUploaded:"¡Archivo enviado!",uploadError:"Error al enviar: {{message}}",tryAgainFallback:"intenta de nuevo",titleRequired:"Ponle un tÃtulo al bloque.",contentRequired:"Escribe el contenido del texto.",fileRequired:"Sube un archivo de {{type}}.",saveError:"Error al guardar: {{error}}",blockUpdated:"¡Bloque actualizado!",blockCreated:"¡Bloque creado!"}},K_={title:"Crear flujo de grupo",description:"Solo envÃo de mensajes en grupos de WhatsApp. Sin captura de respuesta.",fields:{name:"Nombre",namePlaceholder:"Ej: Promoción semanal",description:"Descripción (opcional)"},toasts:{nameRequired:"Ponle un nombre al flujo",created:"Flujo de grupo creado"}},X_={label:"Detección de comprobante falso",descriptionEnabled:"El comprobante para un destinatario fuera de la lista se marca como falso. Configuración global â registra cada receptor/pasarela que uses.",descriptionDisabled:"Desactivada â se acepta cualquier comprobante reconocido. Configuración global.",recipientNamePlaceholder:"Nombre del receptor (ej: MI EMPRESA S.A.)",cpfCnpjPlaceholder:"CPF o CNPJ",noRecipients:"No hay receptores registrados â la validación solo funciona con al menos uno.",toasts:{enabled:"Detección de comprobante falso activada",disabled:"Detección de comprobante falso desactivada",toggleError:"Error al cambiar la configuración",fillNameAndDoc:"Completa el nombre y el CPF/CNPJ",recipientAdded:"¡Receptor agregado!",addError:"Error al agregar el receptor",recipientRemoved:"¡Receptor eliminado!",removeError:"Error al eliminar el receptor"}},Y_={title:"Configuración del Flujo",noNameFallback:"sin nombre",fields:{flowName:"Nombre del Flujo",flowNamePlaceholder:"Ej: Atención Inicial",description:"Descripción (opcional)",descriptionPlaceholder:"Describe el objetivo de este flujo...",triggerType:"Tipo de Disparador"},triggerOptions:{keyword:"Palabra clave",all:"Todos los mensajes",tag:"Etiqueta",webhook:"Webhook"},tagTriggerHint:"El flujo se activará automáticamente cuando se agregue una de las etiquetas al contacto.",conflictBanner:{intro:"â Conflicto: ya existe otro flujo PIX vinculado a uno de estos números:",limitPrefix:"Cada número acepta solo",limitStrong:"1 flujo PIX",limitSuffix:"(activo o inactivo). Elimina o cambia el disparador del flujo en conflicto antes de guardar."},checkingConflicts:"â³ Verificando conflictos PIXâ¦",pauseOtherFlows:{label:"Pausar otros flujos",hint:"Al activar, pausa todos los demás flujos activos del contacto para priorizar este flujo"},autoPauseHint:"â¡ Este disparador pausa automáticamente otros flujos activos del contacto.",pixAi:{label:"IA para leer el comprobante",visionHint:"La detección de PIX necesita leer imagen/PDF del comprobante â solo aparecen aquà los modelos con soporte de visión.",requiredHelpText:"Obligatorio â sin la clave, el comprobante PIX no se leerá (ZapData ya no ofrece IA nativa para este disparador).",keyDoesNotSupportVision:'Tu clave conectada ({{provider}}) no lee imagen/PDF â el comprobante PIX no se podrá leer. Conecta un proveedor con visión en Configuración, o usa "Mi clave" con un proveedor diferente.',keyStorageNotice:"Tu clave se guarda solo en este flujo. {{hint}}.",keyHintOpenai:"ConsÃguela en platform.openai.com/api-keys",keyHintAnthropic:"ConsÃguela en console.anthropic.com/settings/keys",keyHintGemini:"ConsÃguela en aistudio.google.com/app/apikey",modelLabel:"Modelo",modelAuto:"Automático (recomendado)",modelSavedOutOfCatalog:"{{model}} (modelo guardado, fuera del catálogo)",modelLegacySuffix:" (legado)",modelAutoHint:"Automático usa el modelo económico del proveedor y escala si el comprobante es difÃcil de leer."},nonPix:{label:"Aceptar otros comprobantes",hint:"También detecta boleto pagado, tarjeta/terminal, factura y comprobantes en otros idiomas â no solo PIX.",customPromptLabel:"Prompt personalizado (opcional) â {{count}}/{{max}}",customPromptPlaceholder:"Ej: también acepta comprobante de boleto de Cielo con el texto 'Pago vÃa boleto registrado'...",customPromptHint:"Se suma a las reglas estándar â nunca las reemplaza."},valueFilter:{label:"Filtrar por valor",min:"MÃnimo (R$)",minPlaceholder:"Sin mÃnimo",max:"Máximo (R$)",maxPlaceholder:"Sin máximo",hint:'El comprobante fuera de rango sigue por la salida "Valor diferente" en el nodo Iniciar del flujo (canvas). Sin conexión, la sesión simplemente termina.'},gatewayAutoTrigger:{label:"Activar al confirmarse el pago por API",hint:'También activa este disparador cuando un cobro generado por el bloque "API de Pagos" sea confirmado como pagado por la pasarela (XPag y otras) â sin que el lead tenga que enviar comprobante.'},branches:{fake:"Salida para comprobante falso",duplicate:"Salida para comprobante repetido",hint:"Conecta los caminos personalizados en el nodo Iniciar del flujo (canvas)."},tags:{label:"Etiquetas que Activan el Flujo",hint:"Selecciona qué etiquetas deben activar este flujo. Cuando se agregue cualquiera de ellas al contacto, el flujo se iniciará.",loading:"Cargando etiquetas...",empty:"No se encontraron etiquetas. Crea etiquetas en el Kanban primero.",deleteTagTitle:"Eliminar etiqueta",selected:"Seleccionad
506as:"},keyword:{matchType:"Tipo de Coincidencia",exact:"Palabra exacta",contains:"Contiene la palabra",notContains:"No contiene la palabra",exactHint:"El flujo se inicia cuando el mensaje es exactamente igual a una de las palabras clave.",containsHint:"El flujo se inicia cuando el mensaje contiene una de las palabras clave.",notContainsHint:"El flujo se inicia cuando el mensaje NO contiene ninguna de las palabras clave.",keywords:"Palabras clave",keywordsPlaceholder:"hola, buenas, quiero, comprar (separadas por comas)",keywordsHint:"Separa las palabras clave con comas"},instances:{label:"Números Asignados",hintPix:"Selecciona al menos 1 número. Cada número acepta solo 1 flujo PIX (activo o inactivo). No se permite dejar vacÃo para PIX.",hintDefault:"Selecciona en qué números debe funcionar este flujo. Si no seleccionas ninguno, funcionará en todos.",empty:"No se encontraron números.",disconnectedTitle:"Número desconectado",noNumber:"Sin número",online:"En lÃnea",offline:"Desconectado",logzzLinked:"Este flujo está vinculado a {{count}} integración(es) Logzz"},conflictWarning:{title:"â Conflicto de disparador PIX detectado",intro:"Cada número solo puede estar vinculado a",strong:"1 flujo activo",suffix:"con disparador de Pago PIX. Los números de este flujo ya están en uso por:",footer:"Ajusta los números de este flujo o desactiva el conflictivo para guardar."},flowSansName:"Flujo sin nombre",active:{label:"Flujo Activo",hint:"Activar o desactivar este flujo"},pauseSchedule:{label:"Pausar EnvÃo por Horario",hint:"No enviar mensajes durante el horario definido",start:"Inicio de la Pausa",end:"Fin de la Pausa",timezoneNote:"â° Zona horaria: São Paulo (UTC-3). Los mensajes que no se envÃen durante la pausa se enviarán al finalizar el horario definido."},buttons:{saving:"Guardando...",verifying:"Verificandoâ¦",conflictPix:"Conflicto PIX",save:"Guardar Configuración"},toasts:{nameRequired:"El nombre del flujo es obligatorio",checkingConflictsWait:"Verificando conflictos PIX, esperaâ¦",selectAtLeastOneInstance:'Selecciona al menos 1 número. El disparador PIX es por instancia â dejarlo vacÃo se trata como "todas las instancias" y entra en conflicto con cualquier flujo PIX existente.',conflictWithFlow:'Conflicto: ya existe otro flujo PIX usando este número (ej: "{{name}}").',conflictActiveFlow:"Conflicto: ya existe otro flujo activo con disparador PIX vinculado a uno de estos números. Cada número acepta solo 1 flujo PIX activo.",saveError:"Error al guardar la configuración: {{error}}",saveSuccess:"Configuración guardada con éxito"}},Q_={title:"Métricas del Embudo",period:"PerÃodo:",periods:{today:"Hoy",yesterday:"Ayer",last7days:"Ãltimos 7 dÃas",last30days:"Ãltimos 30 dÃas",custom:"Fecha especÃfica"},noData:"No se encontraron datos para el perÃodo seleccionado.",table:{component:"Componente",passages:"Pasos",percentOfTotal:"% del Total",percentDrop:"% de Pérdida"},defaultNodeName:"Paso {{index}}",funnelChartTitle:"Embudo de Paso",tooltipPeople:"{{count}} personas ({{percentage}}%)"},Z_={title:"Papelera",description:"Los flujos y carpetas eliminados permanecen aquà 7 dÃas antes de borrarse para siempre.",tabs:{flows:"Flujos",folders:"Carpetas"},loading:"Cargando...",emptyFlows:"No hay flujos en la papelera",emptyFolders:"No hay carpetas en la papelera",emptyFooter:"Los elementos eliminados permanecen aquà por 7 dÃas.",deletedInfo:"Eliminado el {{date}} · expira en {{days}} {{dayLabel}}",day:"dÃa",days:"dÃas",restore:"Restaurar",deletePermanentlyTitle:"Eliminar permanentemente",confirmDelete:{title:"¿Eliminar permanentemente?",descriptionPrefix:"Esta acción no se puede deshacer.",descriptionSuffix:"se eliminará para siempre.",confirmButton:"Eliminar para siempre"},toasts:{loadError:"Error al cargar la papelera",restoreFlowError:"Error al restaurar el flujo",flowRestored:"Flujo restaurado",restoreFolderError:"Error al restaurar la carpeta",folderRestored:"Carpeta restaurada",purgeError:"Error al eliminar permanentemente",purged:"Eliminado permanentemente"}},J_={flowFinishedNoNextNode:"â
Flujo finalizado (sin siguiente nodo)",flowStarted:"ð Flujo iniciado",defaultTextMessage:"Mensaje de texto",defaultImageCaption:"ð· Imagen",defaultVideoCaption:"ð¬ Video",defaultAudioCaption:"ðµ Audio",defaultDocumentFileName:"documento.pdf",contactLabel:"
506ð¤ Contacto: {{name}}",defaultContactName:"Contacto",waitingLabel:"â± Esperando {{delay}}{{unit}}...",waitingForResponse:"â¨ï¸ Esperando respuesta del lead... (â {{varName}})",waitingForResponseAI:"ð§ Esperando respuesta del lead (la IA extraerá â {{vars}})",defaultMenuTitle:"Elige una opción:",defaultOptionLabel:"Opción {{index}}",conditionEvaluated:"ð Condición evaluada",tagCondition:'ð·ï¸ Etiqueta "{{tagName}}" ({{status}}) â {{result}} (el simulador no rastrea etiquetas)',tagHas:"tiene",tagNotHas:"no tiene",countryCondition:"ð PaÃs {{status}} {{name}} â {{result}}",countryIs:"es",countryIsNot:"no es",variableConditionLine:'⢠{{variable}} {{operator}} "{{value}}" (actual: "{{current}}") â {{result}}',resultLine:"â Resultado: {{result}}",resultTrue:"â
Verdadero",resultFalse:"â Falso",iaGeneratorExecuted:"ð¨ IA Generator ejecutado (simulado)",variableSet:'ð Variable definida: {{name}} = "{{value}}"',actions:{addTag:"ð·ï¸ Etiqueta agregada: {{tagName}}",removeTag:"ð·ï¸ Etiqueta eliminada: {{tagName}}",setField:'ð Campo definido: {{fieldName}} = "{{fieldValue}}"',clearField:"ð§¹ Campo limpiado: {{fieldName}}",deleteContact:"ðï¸ Contacto eliminado (simulado)",markRead:"â
Conversación marcada como leÃda",markUnread:"ð© Conversación marcada como no leÃda",markOpen:"ð Conversación reabierta en el Kanban de Pipeline",markClosed:"ðï¸ Conversación archivada en el Kanban de Pipeline",markConversationOpen:"ð¬ Conversación marcada como abierta en el Inbox",markConversationClosed:"â
Conversación marcada como cerrada en el Inbox",editMessage:"âï¸ Mensaje editado (simulado)",deleteMessage:"ðï¸ Mensaje borrado (simulado)",defaultField:"campo",genericExecuted:"â¡ Acción ejecutada: {{actionType}}"},aiResponseSimulated:"ð¤ [Respuesta de IA simulada] â En producción, la IA responderÃa aquÃ.",randomizerChosen:'ð² Aleatorizador: camino "{{path}}" elegido',randomPathFallback:"aleatorio",redirectedTo:"âï¸ Redirigido a: {{flowName}}",otherFlowFallback:"otro flujo",pixKeyLabel:"ð Clave PIX: {{key}}",pixKeyFallback:"clave-ejemplo",chargeSent:"ðµ Cobro enviado: R$ {{amount}}",webhookSimulated:"ð Webhook simulado: {{url}}",webhookUrlFallback:"URL no definida",transferredTo:"ð¤ Transferido a: {{destination}}",attendantFallback:"agente",pixelFired:"ð Pixel disparado: {{eventLabel}}",adminNotificationSent:"ð Notificación de admin enviada (simulado)",callPlaced:"ð Llamada disparada â llamada muda; el lead puede atender o rechazar (simulado)",passageRegistered:"ð Paso registrado: {{label}}",defaultInteractiveBody:"Bloque interactivo",defaultButtonLabel:"Botón {{index}}",chooseLabel:"Elige:",carouselSent:"ð Carrusel enviado (simulado)",flowFinished:"ð Flujo finalizado",genericNodeExecuted:'âï¸ Nodo "{{type}}" ejecutado (simulado)',startNodeNotFound:'â Nodo "Inicio" no encontrado',aiExtracted:"ð§ IA extrajo (simulado) â {{vars}}",aiAnalyzing:"ð¤ IA analizando respuesta...",aiIdentified:'ð¤ IA identificó: "{{label}}"',aiNoMatch:"ð¤ La IA no identificó coincidencias. Esperando botón o tiempo de espera...",aiError:"â ï¸ Error en la IA. Esperando botón...",noButtonMatch:"â ï¸ La respuesta no coincide con ningún botón. Esperando...",iaManualTrue:"â
IA: Verdadero (manual)",iaManualFalse:"â IA: Falso (manual)",simulatedPaid:"â
Simulado: Pagó",simulatedNotPaid:"â Simulado: No pagó",iaChoiceTrue:"â
Verdadero (IA)",iaChoiceFalse:"â Falso (IA)",iaConditionPrompt:'ð¤ Condición IA #{{index}}: "{{prompt}}" â elige el resultado:',noPromptFallback:"(sin prompt)"},e2={featureName:"Flujos de Grupo",featureDescription:"Los flujos de grupo (envÃo manual o programado en grupos de WhatsApp) están disponibles a partir del plan Modo Acceso (R$99/mes).",title:"Flujos de Grupo",subtitle:"EnvÃo manual o programado en grupos de WhatsApp. Solo envÃo de mensajes.",newFlow:"Nuevo Flujo de Grupo",createDialog:{title:"Crear flujo de grupo",description:"Solo se admiten nodos de envÃo (texto, multimedia, espera). Sin captura de respuesta.",nameLabel:"Nombre",namePlaceholder:"Ej: Promoción semanal",descriptionLabel:"Descripción (opcional)"},emptyState:{title:"TodavÃa no hay flujos de grupo",description:"Crea un flujo para enviar mensajes a grupos manualmente o en horarios programados."},groupBadge:"GRUPO",deleteDialog:{title:"¿Eliminar flujo?"},toasts:{nameRequired:"Ponle un nombre al flujo",created:"Flujo de grupo creado",deleted:"Eliminado"}}
506,t2={loadingFlow:"Cargando flujo...",flowFallbackName:"Flujo",importButton:"Importar Flujo",importingButton:"Importando...",importedButton:"¡Importado!",errors:{missingFlowId:"No se indicó el ID del flujo",flowNotFound:"Flujo no encontrado",loadError:"Error al cargar el flujo",importUnavailableTrial:"La importación de flujos no está disponible durante el perÃodo de prueba gratuita. SuscrÃbete a un plan para importar.",importError:"Error al importar el flujo",importErrorWithMessage:"Error al importar: {{message}}"},toasts:{imported:"¡Flujo importado con éxito!"},authModal:{loginTitle:"Inicia sesión en tu cuenta",signupTitle:"Crear cuenta",needLoginHint:"Para importar este flujo, necesitas iniciar sesión.",passwordPlaceholder:"Tu contraseña",confirmPasswordPlaceholder:"Confirma tu contraseña",loginButton:"Entrar",signupButton:"Registrarme",joinUsersPrefix:"Ãnete a más de",joinUsersSuffix:"usuarios registrados",switchToSignup:"¿No tienes cuenta? RegÃstrate",switchToLogin:"¿Ya tienes cuenta? Inicia sesión",errors:{fillAllFields:"Completa todos los campos",confirmPassword:"Confirma tu contraseña",passwordsDontMatch:"Las contraseñas no coinciden",passwordTooShort:"La contraseña debe tener al menos 6 caracteres",wrongCredentials:"Correo o contraseña incorrectos",invalidEmail:"Usa un correo válido para registrarte",emailAlreadyRegistered:"Este correo ya está registrado. Inicia sesión."},toasts:{loginSuccess:"¡Sesión iniciada!",signupSuccess:"¡Registro exitoso! Revisa tu correo para confirmar."},emailPlaceholder:"[email protected]"},nodeTypeLabels:{start:"â¶ Inicio",text:"ð¬ Texto",aiText:"ð¤ IA Texto",image:"ð¼ Imagen",audio:"ð Audio",audioAI:"ð Audio IA",video:"ð¬ Video",document:"ð Documento",delay:"â± Retraso",waitInput:"â³ Esperar",waitInputAI:"ð§ Esperar IA",condition:"ð Condición",menu:"ð Menú",ai:"ð¤ IA",aiResponder:"ð§ IA Resp.",transfer:"â Transferir",webhook:"ð Webhook",setVariable:"ð Variable",tag:"ð· Etiqueta",end:"ð´ Fin",randomizer:"ð² Random",sendPixKey:"ð Clave PIX",sendCharge:"ð° Cobro",interactiveBlock:"ð§© Interactivo",pixel:"ð Pixel",notifyAdmin:"ð Notificar",goToFlow:"â¡ Ir a Flujo",carousel:"ð Carrusel",sticker:"ð Figurita",contact:"ð¤ Contacto",passageTracker:"ð£ Conteo",iaGenerator:"⨠Generador IA",pixApi:"ð API de Pagos",speiApi:"ð API de Pagos",whatsappLabel:"ð· Etiqueta WPP"}},a2={backToAutomatiZap:"Volver a AutomatiZap",backToDisparaZap:"Volver a DisparaZap",active:"Activo",inactive:"Inactivo",settingsButton:"Configuración",settingsDialogTitle:"Configuración del Flujo",flowNameLabel:"Nombre del Flujo",triggerTypeLabel:"Tipo de Disparador",defaultFlowName:"Nuevo Flujo",flowFallbackName:"Flujo",triggerTypes:{keyword:"Palabra clave",all:"Todos los mensajes",schedule:"Programado",webhook:"Webhook"},pixConflictWarning:{title:"â Conflicto de disparador PIX",emptySelection:'Selecciona al menos 1 número. Una lista vacÃa se trata como "todas las instancias" y entra en conflicto con cualquier otro flujo PIX.',alreadyInUse:"Los números seleccionados ya están en uso por:",unnamedFlow:"Flujo sin nombre",chooseDifferent:"Elige números diferentes o desactiva el flujo en conflicto."},pauseOtherFlows:{label:"Pausar otros flujos",description:"Al activarlo, pausa todos los demás flujos activos del contacto para priorizar este flujo"},pixAi:{sectionLabel:"IA para leer el comprobante",visionOnlyHint:"Solo aparecen aquà los proveedores con soporte de visión (lee imagen/PDF del comprobante).",requiredHelpText:"Obligatorio â sin la clave, el comprobante PIX no se leerá (ZapData ya no ofrece IA nativa para este disparador).",wrongProviderWarning:'Tu clave conectada ({{provider}}) no lee imagen/PDF â el comprobante PIX no se leerá. Conecta un proveedor con visión en Configuración, o usa "Mi clave" con un proveedor diferente.',storedInFlowOnly:"Tu clave se guarda solo en este flujo.",getKeyOpenAI:"ConsÃguela en platform.openai.com/api-keys",getKeyAnthropic:"ConsÃguela en console.anthropic.com/settings/keys",getKeyGoogle:"ConsÃguela en aistudio.google.com/app/apikey",modelLabel:"Modelo",modelAuto:"Automático (recomendado)",modelSavedNotInCatalog:"{{model}} (modelo guardado, fuera del catálogo)",modelLegacySuffix:" (antiguo)",modelAutoHint:"Automático usa el modelo económico del proveedor y escala si el comprobante es difÃcil de leer."},acceptNonPix:{label:"Aceptar otros comprobantes",description:"También detecta boleto pagado, tarjeta/terminal, factura y comprobantes en otros idiomas â no solo PIX."},customPrompt:{label:"Prompt personalizado (opcional) â {{count}}/{{max}}",placeholder:"Ej: también acepta comprobante de boleto de Cielo con el texto 'Pago vÃa boleto registrado'...",hint:"Se suma a las reglas estándar â nunca las reemplaza."},gatewayAutoTrigger:{label:"Disparar cuando la API de pago se confirme",description:'También dis
506para este disparador cuando un cobro generado por el bloque "API de Pagos" sea confirmado como pagado por el gateway (XPag y otros) â sin que el lead tenga que enviar comprobante.'},valueFilter:{label:"Filtrar por monto",minLabel:"MÃnimo (R$)",minPlaceholder:"Sin mÃnimo",maxLabel:"Máximo (R$)",maxPlaceholder:"Sin máximo",hint:'Un comprobante fuera del rango sigue por la salida "Monto diferente" del nodo Inicio del flujo (lienzo). Sin conexión, la sesión simplemente se cierra.'},fakeDuplicateBranch:{fakeLabel:"Salida para comprobante falso",duplicateLabel:"Salida para comprobante repetido",hint:"Conecta los caminos personalizados en el nodo Inicio del flujo (lienzo)."},keywordMatch:{label:"Tipo de Coincidencia",exact:"Palabra exacta",contains:"Contiene la palabra",notContains:"No contiene la palabra",exactHint:"El flujo se inicia cuando el mensaje es exactamente igual a una de las palabras clave.",containsHint:"El flujo se inicia cuando el mensaje contiene una de las palabras clave.",notContainsHint:"El flujo se inicia cuando el mensaje NO contiene ninguna de las palabras clave."},keywordsLabel:"Palabras clave (separadas por coma)",keywordsPlaceholder:"hola, buenos dÃas, quiero comprar",instancesLabel:"Instancias (Números)",instancesHint:"Selecciona en qué números se aplicará este flujo. Si no seleccionas ninguno, se aplicará a todos.",noInstancesFound:"No se encontraron instancias",instanceOnline:"En lÃnea",instanceOffline:"Desconectado",pauseOnMedia:{label:"Pausar al recibir imagen/PDF",description:"Pausa automáticamente el flujo cuando el contacto envÃa una imagen o documento"},pauseSchedule:{label:"Pausar EnvÃo por Horario",description:"No enviar mensajes durante el horario definido",startLabel:"Inicio de la Pausa",endLabel:"Fin de la Pausa",timezoneHint:"â° Zona horaria: São Paulo (UTC-3). Los mensajes que no se enviaron durante la pausa se enviarán al finalizar el horario definido."},flowActiveLabel:"Flujo Activo",funnelMetricsButton:"Métricas del Embudo",triggerSettingsSaveFailed:"Error al guardar la configuración del disparador â revisa el aviso",triggerSettingsSaving:"Guardando configuración del disparadorâ¦",noLeadCountDialog:{title:"Sin Conteo de Leads",description:'TodavÃa no agregaste ningún componente de "Conteo de Leads" a tu flujo. Arrastra el componente desde el menú de componentes para empezar a rastrear el paso de contactos.',gotIt:"Entendido"},toasts:{createFlowError:"Error al crear el flujo",loadFlowError:"Error al cargar el flujo",verifyingPixConflicts:"Verificando conflictos PIX, esperaâ¦",selectAtLeastOneInstance:'Selecciona al menos 1 número para el disparador PIX. Una lista vacÃa se trata como "todas las instancias" y entra en conflicto con cualquier otro flujo PIX.',pixConflictWithFlow:'Conflicto de disparador PIX: el número ya está en uso por el flujo "{{name}}". Cada número admite solo 1 flujo PIX.',unnamedFlow:"sin nombre",moreBlocksSameSituation_one:" Hay {{count}} bloque de pago más en la misma situación.",moreBlocksSameSituation_other:" Hay {{count}} bloques de pago más en la misma situación.",incompleteBlockTitle:'Bloque {{numPrefix}}"API de Pagos" incompleto: {{issues}}.',incompleteBlockDescription:"No se guardó nada en esta pantalla. Con el flujo activado, todo cobro de este bloque sale por la salida Error sin llegar al gateway â corrÃgelo, o desactiva el flujo para guardar de todas formas.{{extra}}",flowSavedSuccess:"Flujo guardado con éxito",pixConflictTitle:"Conflicto de disparador PIX",saveFlowErrorTitle:"Error al guardar el flujo",pixConflictDescription:'Ya existe otro flujo con disparador de Pago PIX en las mismas instancias. Atención: dejar la lista de instancias vacÃa significa "todas las instancias". Selecciona instancias especÃficas en Configuración o desactiva/elimina el flujo PIX en conflicto.'}},o2={duplicateSuffix:" (Copia)",tabs:{flows:"Flujos",looseBlocks:"Bloques Sueltos"},header:{activeAndTotal:"{{active}} activos · {{total}} en total",flowCount_one:"{{count}} flujo",flowCount_other:"{{count}} flujos"},rowActions:{selectFlow:"Seleccionar flujo",dragToReorder:"Arrastrar para mover/reordenar",settings:"Configuración",selectNumbers:"Seleccionar números",moveToFolder:"Mover a carpeta",moveFlowTo:"Mover flujo a",noFolder:"Sin carpeta"},triggerLabels:{pix:"PIX",keyword:"Palabra clave",tag:"Etiqueta",allMessages:"Todos los msjs",allMessagesFull:"Todos los mensajes",schedule:"Programado",webhook:"Webhook",unknown:"â",triggerTooltip:"Disparador: {{label}}"},toolbar:{searchPlaceholder:"Buscar flujos...",filters:"Filtros",filtersActive:"Filtros · Activos",filtersInactive:"Filtros · Inactivos",statusLabel:"Estado",all:"Todos",active:"Activos",inactive:"Inactivos",importFlow:"Importar Flujo",importFolder:"Importar Carpeta",cloneFunnel:"Clonar Embudo",trash:"Papelera",newFlow:"Nuevo Flujo",flowType:"Tipo de flujo",newFlowDesc:"Flujo estándar para contactos",newAiFlow:"Nuevo Flujo con IA",newAiFlowDesc:"Agente conversacional",newGroupFlow:"Nuevo Flujo de Grupo",newGroupFlowDesc:"EnvÃo a grupos de WhatsApp",newFolder:"Nueva carpeta"},bulkBar:{selectAllVisible:"Seleccionar todos los visibles",selected_one:"{{count}} flujo seleccionado",selected_other:"{{count}} flujos seleccionados",clear:"Limpiar"},emptyStates:{loadingFlows:"Cargando flujos...",emptyFolder:"Esta carpeta está vacÃa",emptyFolderHint:"Arrastra flujos desde la página principal o crea uno nuevo aquà dentro",newFlowInFolder:"Nuevo flujo en esta carpeta",noFlowsFound:"No se encontraron flujos",startCreating:"Comienza creando tu primer flujo de automatización",noFlowsAvailable:"No hay flujos disponibles",createFirstFlow:"Crear primer flujo",createFolder:"Crear carpeta"},folders:{label:"Carpetas",labelWithCount:"Carpetas · {{count}}"},aiFlows:{sectionTitle:"Agentes IA · {{count}}"},groupFlows:{sectionTitle:"Flujos de Grupo · {{count}}"},flowsSection:{results:"Resultados · {{count}}",flows:"Flujos · {{count}}"},instancesDialog:{title:"Seleccionar Números",description:"Selecciona en qué números debe funcionar este flujo. Si no seleccionas ninguno, funcionará en todos.",pixWarningPrefix:"Este flujo usa el disparador",pixWarningMiddle:". Cada número solo puede estar vinculado a",oneFlow:"1 flujo",pixWarningSuffix:"con este disparador â incluso si el otro flujo está desactivado. Los números ya en uso aparecen bloqueados.",checkingConflicts:"Verificando conflictosâ¦",infoTriggerPrefix:"Este flujo usa el disparador",infoTriggerMiddle1:". La regla de",oneFlowPerNumber:"1 flujo por número",infoTriggerMiddle2:"solo se aplica a flujos con disparador",infoTriggerMiddle3:". Para aplicarla aquÃ, abre",infoTriggerSuffix:"y cambia el disparador.",noInstancesFound:"No se encontraron números.",noNumber:"Sin número",alreadyLinked:'Ya vinculado al flujo "{{name}}" (disparador PIX)',disconnected:"Número desconectado",alreadyInUseBy:"Ya en uso por: {{name}}",otherFlow:"otro flujo",online:"En lÃnea",disconnectedBadge:"Desconectado",checking:"Verificandoâ¦"},createFlowDialog:{title:"Crear Nuevo Flujo",nameLabel:"Nombre del Flujo",namePlaceholder:"Ej: Atención Inicial",create:"Crear Flujo"},createFolderDialog:{title:"Crear Nueva Carpeta",nameLabel:"Nombre de la Carpeta",namePlaceholder:"Ej: Ventas",create:"Crear Carpeta"},editFolderDialog:{title:"Renombrar Carpeta",nameLabel:"Nombre de la Carpeta"},deleteFlowDialog:{title:"Eliminar flujo",description:"¿Seguro que deseas eliminar este flujo? Esta acción no se puede deshacer."},deleteFolderDialog:{title:"Eliminar carpeta",description:"¿Seguro que deseas eliminar esta carpeta? Los flujos dentro de ella se moverán fuera de la carpeta."},bulkDeleteDialog:{title_one:"¿Eliminar {{count}} flujo?",title_other:"¿Eliminar {{count}} flujos?",description:"Los flujos seleccionados se moverán a la papelera y permanecerán ahà por 7 dÃas. Puedes restaurarlos en cualquier momento antes de ese plazo."},exportFlowDialog:{title:"Exportar Flujo",description:"Usa el código de abajo para compartir o importar este flujo en otra cuenta.",shareLinkLabel:"O comparte mediante un enlace con vista previa:"},importFlowDialog:{title:"Importar Flujo",description:"Pega el código del flujo que deseas importar. El flujo se copiará a tu cuenta como inactivo.",codeLabel:"Código del Flujo",codePlaceholder:"Pega aquà el código del flujo...",importing:"Importando...",import:"Importar"},exportFolderDialog:{title:"Exportar Carpeta: {{name}}",description:"Usa el código de abajo para compartir esta carpeta con todos sus flujos. Quien la importe recibirá la carpeta y todos los flujos dentro de ella."},importFolderDialog:{title:"Importar Carpeta",description:"Pega el código de la carpeta que deseas importar. La carpeta y todos sus flujos se copiarán a tu cuenta como inactivos.",codeLabel:"Código de la Carpeta",codePlaceholder:"Pega aquà el código de la carpeta...",importing:"Importando...",import:"Importar Carpeta"},toasts:{moveFlowsError:"Error al mover los flujos",flowsMoved_one:"{{count}} flujo movido",flowsMoved_other:"{{count}} flujos movidos",deleteFlowsError:"Error al eliminar los flujos",flowsMovedToTrash_one:"{{count}} flujo movido a la papelera",flowsMovedToTrash_other:"{{count}} flujos movidos a la papelera",typeAFlowName:"Escribe un nombre para el flujo",createFlowError:"Error al crear el flujo: {{error}}",flowCreated:"Flujo creado con éxito",deleteFlowError:"Error al eliminar el flujo: {{error}}",flowDeleted:"Flujo eliminado con éxito",updateFlowError:"Error al actualizar el flujo: {{error}}",duplicateFlowError:"Error al duplicar el flujo: {{error}}",configureDuplicateError:"Error al configurar el flujo duplicado: {{error}}",pixDuplicatedNoNumbers:"Flujo PIX duplicado sin números. Asigna números diferentes a los del original (regla: 1 flujo PIX por número).",flowDuplicated:"Flujo duplicado con éxito",checkingPixConflicts:"Verificando conflictos PIX, esperaâ¦",selectAtLeastOneNumber:'Selecciona al menos 1 número. El disparador PIX es por instancia â dejarlo vacÃo se trata como "todas las instancias" y entra en conflicto con cualquier flujo PIX existente.',pixConflictWithFlow:'Conflicto: el disparador PIX ya está en uso por el flujo "{{name}}". Cada número solo puede tener 1 flujo (activo o inactivo) con ese disparador.',unnamedFlow:"sin nombre",numberAlreadyLinked:"Este número ya está vinculado a otro flujo con disparador PIX. Desactiva el flujo en conflicto antes.",updateInstancesError:"Error al actualizar los números: {{error}}
506",instancesUpdated:"Números actualizados con éxito",numberLinkedToFlow:'Número ya vinculado al flujo "{{name}}" (disparador PIX). Solo 1 flujo activo por número.',typeAFolderName:"Escribe un nombre para la carpeta",createFolderError:"Error al crear la carpeta",folderCreated:"¡Carpeta creada!",moveFlowsToTrashError:"Error al mover los flujos a la papelera",deleteFolderError:"Error al eliminar la carpeta",folderMovedToTrash:"Carpeta movida a la papelera (7 dÃas)",renameFolderError:"Error al renombrar la carpeta",folderRenamed:"¡Carpeta renombrada!",reorderError:"Error al guardar el nuevo orden",moveFlowError:"Error al mover el flujo",flowMovedToFolder:"¡Flujo movido a la carpeta!",flowRemovedFromFolder:"¡Flujo removido de la carpeta!",movedToFolder:'Movido a "{{name}}"',movedToNoFolder:'Movido a "Sin carpeta"',exportUnavailableTrial:"La exportación de flujos no está disponible durante el perÃodo de prueba gratuita.",trialGoToPlan:"Ver planes",pasteFlowCode:"Pega el código del flujo",userNotAuthenticated:"Usuario no autenticado",importUnavailableTrial:"La importación de flujos no está disponible durante el perÃodo de prueba gratuita. SuscrÃbete a un plan para importar.",importFlowError:"Error al importar el flujo",flowNotFoundCheckCode:"Flujo no encontrado. Verifica el código.",flowImported:"¡Flujo importado con éxito!",importFlowErrorWithMessage:"Error al importar el flujo: {{message}}",codeCopied:"¡Código copiado!",folderCodeCopied:"¡Código de la carpeta copiado!",pasteFolderCode:"Pega el código de la carpeta",sessionExpired:"Tu sesión expiró. Recarga la página e intenta de nuevo.",folderNotFoundCheckCode:"Carpeta no encontrada. Verifica el código.",importFolderError:"Error al importar la carpeta",importFolderErrorWithMessage:"Error al importar la carpeta: {{error}}",folderImported:"¡Carpeta importada con {{count}} flujo(s)!",importFolderErrorCatch:"Error al importar la carpeta: {{message}}",linkCopied:"¡Enlace copiado!"}},n2={actionLabel:"Acción {{number}}",actionType:"Tipo de Acción",tagName:"Nombre de la Tag",fieldName:"Nombre del Campo",fieldNamePlaceholder:"ej: ciudad, plan, puntos",value:"Valor",valuePlaceholder:"Valor o {{syntax}}",fieldNote:{before:"Campo guardado permanentemente en el contacto â queda disponible en otros flujos, no se pierde cuando la sesión termina, y se puede usar como",after:"en cualquier bloque de texto, condición o webhook de este u otro flujo."},deleteContactWarning:"Elimina el contacto y todo el historial de la conversación permanentemente. El flujo se termina justo después â no hay forma de continuar a los siguientes bloques.",markRead:"Marca los mensajes de la conversación como leÃdos y pone en cero el contador de no leÃdos.",markUnread:"Marca la conversación como no leÃda.",markOpen:"Reabre la conversación en el Kanban de Pipeline (vuelve a aparecer en las columnas).",markClosed:"Archiva la conversación en el Kanban de Pipeline (desaparece de las columnas, indicando que la interacción fue concluida).",markConversationOpen:"Marca la conversación como abierta en el Inbox. No afecta al flujo ni al Kanban de Pipeline.",markConversationClosed:"Marca la conversación como cerrada en el Inbox. No interrumpe el flujo ni afecta al Kanban de Pipeline.",targetMessage:"Mensaje objetivo",targetMessagePlaceholder:"Selecciona un bloque de mensaje anterior...",noMessageBlockAvailable:"TodavÃa no hay ningún bloque de mensaje disponible en este flujo.",noTextMessageBlockAvailable:"TodavÃa no hay ningún bloque de mensaje de texto disponible en este flujo.",targetMessageNote:"Apunta al mensaje enviado por ese bloque en esta conversación. Solo funciona dentro de la ventana permitida por WhatsApp (~1h) y si el bloque ya envió un mensaje a este contacto.",newText:"Nuevo texto",newTextPlaceholder:"Nuevo texto del mensaje o {{syntax}}",addAction:"Agregar Acción",emptyState:"Agrega una o más acciones para ejecutarse en secuencia cuando el flujo pase por este bloque."},r2={voiceCategories:{premade:"Voces estándar",cloned:"Voces clonadas",professional:"Voces profesionales",generated:"Voces generadas",famous:"Voces famosas",highQuality:"Alta calidad"},errors:{noVoicesLoaded:"No se pudieron cargar las voces.",loadVoices:"Error al cargar voces de ElevenLabs.",noAudioReturned:"Audio no devuelto.",generatePreview:"No se pudo generar la vista previa del audio."},charLimitToast:"LÃmite de {{max}} caracteres para este modelo.",noKeyWarning:{before:"No hay ninguna clave de ElevenLabs registrada. Sin ella, este bloque saldrá por la salida de",error:"error",after:"en lugar de enviar el audio."},manageKeys:"Gestionar claves",voice:"Voz",reloadVoices:"Recargar voces",loadingVoices:"Cargando voces...",selectVoice:"Selecciona la voz...",noVoicesFound:"No se encontró ninguna voz en tu cuenta de ElevenLabs.",listenVoicePreview:"Escuchar vista previa de la voz",previewUnavailable:"Vista previa no disponible",voiceModel:"Modelo de voz",language:"Idioma",multilingualAutoDetectWarning:"Multilingual v2 detecta el idioma automáticamente por el texto â no es posible forzar un idioma en este modelo.",autoLanguageNote:'"Automático" deja que el modelo detecte el idioma. Forzarlo ayuda en frases cortas/ambiguas.',textToConvert:"Texto para convert
506ir",textPlaceholder:"Escribe el texto que se transformará en audio...",textExample:"Ejemplo: Hola {{varName}}, tu pedido fue aprobado y será entregado pronto.",audioPreviewLabel:"Vista previa del audio (texto actual)",generatePreview:"Generar vista previa",listenPreview:"Escuchar vista previa",downloadMp3:"Descargar MP3",previewVariableNote:"La vista previa usa el texto tal cual está, sin reemplazar variables (eso solo pasa en el envÃo real al lead).",availableVariables:"Variables disponibles",flowVariables:"Variables del flujo",clickToInsert:"Haz clic para insertar en el texto",replyToLastMessage:"Responder al último mensaje",sendAsForwarded:"Enviar como reenviado",viewOnce:"Visualización única"},i2={notSupported:"Tu navegador no admite grabación de audio.",emptyRecording:"Grabación vacÃa. Intenta de nuevo.",tooLarge:"Grabación mayor a 50MB.",micDenied:"Permiso de micrófono denegado.",micNotFound:"No se encontró ningún micrófono.",startFailed:"No se pudo iniciar la grabación.",uploadingToast:"Enviando grabación...",mustBeLoggedIn:"Necesitas iniciar sesión",uploadError:"Error al enviar: {{message}}",uploaded:"¡Grabación importada!",unexpectedError:"Error inesperado: {{message}}",tryAgainFallback:"intenta de nuevo",sending:"Enviando",recordAudio:"Grabar audio",record:"Grabar"},s2={types:{text:"Texto",audio:"Audio",image:"Imagen",video:"Video",document:"Documento"},errors:{updateFavorite:"Error al actualizar favorito: {{error}}",moveBlock:"Error al mover bloque: {{error}}",deleteBlock:"Error al eliminar: {{error}}",generic:"Error: {{error}}",deleteFolder:"Error al eliminar la carpeta: {{error}}"},blockDeleted:"Bloque eliminado.",folderRenamed:"¡Carpeta renombrada!",folderCreated:"¡Carpeta creada!",folderDeleted:'Carpeta eliminada. Los bloques se movieron a "Sin carpeta".',title:"Bloques Sueltos",searchPlaceholder:"Buscar bloques...",filters:"Filtros",type:"Tipo",favoritesOnly:"Solo favoritos",newFolder:"Nueva carpeta",newBlock:"Nuevo Bloque",blockType:"Tipo de bloque",loadingBlocks:"Cargando bloques...",blockCount_one:"{{count}} bloque",blockCount_other:"{{count}} bloques",noBlocksFound:"No se encontró ningún bloque.",noBlocksInFolder:"TodavÃa no hay ningún bloque en esta carpeta.",noBlocksYet:'TodavÃa no hay ningún bloque suelto registrado. Haz clic en "Nuevo Bloque" para crear el primero.',favorite:"Marcar como favorito",moveToFolder:"Mover a carpeta",noFolder:"Sin carpeta",renameFolder:"Renombrar carpeta",folderNamePlaceholder:"Ej: Objeciones de venta",deleteBlockTitle:"¿Eliminar bloque?",deleteBlockDescription:'"{{title}}" será eliminado permanentemente y dejará de aparecer en el pie del chat.',deleteFolderTitle:"¿Eliminar carpeta?",deleteFolderDescription:'La carpeta "{{name}}" será eliminada. Los bloques dentro de ella NO serán borrados â solo quedarán sin carpeta.'},l2={translatingFlow:"Traduciendo flujo...",noTextToTranslate:"No hay texto para traducir en este flujo.",flowTranslatedPartial:"Flujo traducido parcialmente ({{reason}}). Intenta de nuevo para completar el resto.",somePartFailed:"una parte falló",flowTranslated:"¡Flujo traducido! Guarda para conservar los cambios.",translateFlowError:"Error al traducir el flujo",translatingAudioProgress:"Traduciendo audio {{current}}/{{total}}...",translateAudioFailed:"Falló la traducción del audio",unknownError:"error desconocido",audiosTranslated_one:"¡{{count}} audio traducido! Guarda para conservar los cambios.",audiosTranslated_other:"¡{{count}} audios traducidos! Guarda para conservar los cambios.",audiosTranslatedPartial:"{{succeeded}} de {{total}} audios traducidos. {{failed}} fallaron ({{reason}}).",audiosTranslateFailed:"Ningún audio pudo traducirse: {{reason}}",translatingMediaProgress:"Traduciendo imagen/documento {{current}}/{{total}}...",mediaTranslated_one:"¡{{count}} imagen/documento traducido! Guarda para conservar los cambios.",mediaTranslated_other:"¡{{count}} imágenes/documentos traducidos! Guarda para conservar los cambios.",mediaTranslatedPartial:"{{succeeded}} de {{total}} traducidos. {{failed}} fallaron ({{reason}}).",mediaTranslateFailed:"No se pudo traducir ninguna imagen/documento: {{reason}}",documentTranslateTimeout:"La traducción del documento está tardando más de lo esperado. Sigue en curs
506o â vuelve a abrir este diálogo en unos minutos para intentarlo de nuevo.",mediaCardRemoved:"La tarjeta del carrusel fue eliminada mientras la traducción estaba en curso â traducción descartada.",nothingToUndo:"Nada para deshacer",undone:"¡Deshecho!",cannotDeleteStartNode:"No es posible eliminar el nodo Inicio",blocksDeleted_one:"{{count}} bloque eliminado",blocksDeleted_other:"{{count}} bloques eliminados",cannotDuplicateStartNode:"No es posible duplicar el nodo Inicio",blocksDuplicated_one:"{{count}} bloque duplicado",blocksDuplicated_other:"{{count}} bloques duplicados",startNodeAlreadyExists:"Ya existe un bloque de inicio en el flujo.",allOutputsConnected:"Todas las salidas de este bloque ya están conectadas. El nuevo bloque se creó sin conexión.",selectedCount_one:"{{count}} seleccionado",selectedCount_other:"{{count}} seleccionados",centerOnStart:"Centrar en el Inicio",undoTitle:"Deshacer (Ctrl+Z)",testFlow:"Probar Flujo",translateFlow:"Traducir Flujo",translateExtrasDialog:{title:"Traducir Flujo",description:"El texto del flujo siempre se traduce. Mira abajo qué más puedes traducir junto.",audioCheckbox:"Traducir {{count}} bloque(s) de audio también (más lento â transcripción, traducción y recreación de la voz, uno por uno)",audioNotConnected:"Encontré {{count}} bloque(s) de Audio en este flujo. Para traducir, conecta tu clave de ElevenLabs.",connectElevenLabs:"Conectar ElevenLabs",mediaCheckbox:"Traducir {{count}} imagen(es)/documento(s) también (los documentos pueden tardar unos minutos)",mediaNotConnected:"Encontré {{count}} imagen(es)/documento(s) (PDF) en este flujo â incluye imagen en Mensaje Interactivo, Sticker, Carrusel y Pagos. Para traducir, conecta tu clave de Lara Translate.",connectLara:"Conectar Lara Translate",confirm:"Traducir"},showContent:"Mostrar contenido",hideContent:"Ocultar contenido",nodeLabels:{start:"Inicio",text:"Mensaje de Texto",image:"Enviar Imagen",audio:"Enviar Audio",audioAI:"Audio IA",video:"Enviar Video",document:"Enviar Documento",delay:"Esperar",waitInput:"Esperar Respuesta",condition:"Condición",menu:"Menú de Opciones",ai:"Respuesta IA",transfer:"Transferir",webhook:"Webhook",setVariable:"Definir Variable",calculator:"Calculadora",tag:"Acciones",end:"Fin",randomizer:"Aleatorizador",sendPixKey:"Enviar Clave PIX",sendCharge:"Enviar Cobro",pixel:"Pixel de Facebook",goToFlow:"Conectar Flujo",pixApi:"API de Pagos",speiApi:"API de Pagos",call:"Llamada"}},c2={dragToReorder:"Arrastrar para reordenar",mediaVariablePicker:{upload:"Subir",variable:"Variable",selectVariable:"Selecciona la variable...",inThisFlow:"en este flujo",fromOtherFlowGenerated:"de otro flujo (ya generada)",fromOtherFlowNamedNotGenerated:'de otro flujo "{{flowName}}" (aún no generada)',fromOtherFlowNotGenerated:"de otro flujo (aún no generada)",resolvedAtRuntimeNote:'El archivo se resolverá en tiempo de ejecución a partir de la variable (generada por un bloque "Generador de IA" para el mismo contacto).'},tagSelector:{newTagName:"Nombre de la nueva tag",selectTag:"Seleccionar etiqueta...",newTag:"Nueva etiqueta"},variablePickerPopover:{defaultPlaceholder:"Haz clic para insertar variable..."},optimizePrompt:{writeDescriptionFirst:"Escribe una descripción primero",emptyAiResponse:"Respuesta vacÃa de la IA",optimizedSuccess:"Prompt optimizado con IA",tooManyRequests:"Demasiadas solicitudes, intenta en unos instantes",creditsExhausted:"Créditos de IA agotados",genericFailure:"No se pudo optimizar ahora"},modelLabel:"Modelo",start:{configuredOnCanvas:'Este disparador se configura directamente en el bloque "Iniciar" del lienzo.',receiptAiLabel:"IA del comprobante",visionProvidersOnly:"Solo los proveedores con soporte de visión aparecen aquà (lee imagen/PDF del comprobante).",receiptKeyRequired:"Obligatorio â sin la clave, el comprobante no se leerá (sin IA nativa).",connectedKeyCannotRead:"Tu clave conectada ({{provider}}) no lee imagen/PDF â el comprobante no se leerá.",automaticRecommended:"Automático (recomendado)",modelOutsideCatalog:"{{model}} (modelo guardado, fuera del catálogo)",legacySuffix:"(legado)",automaticModelNote:"Automático usa el modelo económico del proveedor y escala si el comprobante es difÃcil de leer.",acceptOtherReceipts:"Aceptar otros comprobantes",acceptOtherReceiptsNote:"También detecta boleto pagado, tarjeta/terminal, factura y comprobantes en otros idiomas â no solo PIX.",customPromptLabel:"Prompt personalizado (opcional) â {{current}}/{{max}}",customPromptPlaceholder:"Ej: también acepta comprobante de boleto de Cielo con el texto 'Pago vÃa boleto registrado'...",customPromptNote:"Se suma a las reglas estándar â nunca las reemplaza.",filterByValue:"Filtrar por valor",minimumValue:"MÃnimo (R$)",noMinimum:"Sin mÃnimo",maximumValue:"Máximo (R$)",noMaximum:"Sin máximo",outOfRangeConnected:'El comprobante fuera del rango sigue por la salida "Valor diferente" en el bloque Iniciar.',outOfRangeNotConnected:"Salida activada pero no conectada â el comprobante fuera del rango solo termina la sesión, sin camino personalizado.",firstBlockWaitInputWarning:'El primer bloque de ese camino es "Esperar respuesta" â la sesión se traba en silencio. Usa un bloque de mensaje antes.',firstBlockWaitInputWarningShort:'El primer bloque de ese camino es "Esperar respuesta" â la sesión se traba en silencio.',triggerOnGatewayConfirmed:"Activar al confirmarse el pago por API",triggerOnGatewayConfirmedNote:'También activa este disparador cuando un cobro generado por el bloque "API de Pagos" sea confirmado como pagado por el gateway (XPag y otros) â sin que el lead tenga que enviar comprobante.',fakeReceiptOutput:"Salida p/ comprobante falso",fakeReceiptNotConnected:"Salida activada pero no conectada â el comprobante falso solo termina la sesión.",duplicateReceiptOutput:"Salida p/ comprobante repetido",duplicateReceiptNotConnected:"Salida activada pero no conectada â el comprobante repetido solo termina la sesión."},availableVariables:"Variables disponibles",variableGroups:{system:"Sistema",flow:"Variables del Flujo",global:"Variables Globales",logzz:"Logzz (Webhook)"},webhookVarsAutoNote:"Si el usuario usa webhook, las variables `webhook_*` aparecerán aquà automáticamente después del primer payload recibido.",replyToLastMessage:"Responder al último mensaje del lead",reactToLastMessage:"Reaccionar al último mensaje del lead",reactionEmoji:"Emoji de la reacción",clickToInsertInText:"Haz clic para insertar en el texto",text:{message:"Mensaje",messagePlaceholder:"Escribe el mensaje...",enableLinkPreview:"Activar vista previa de enlaces"},aiText:{intro:"La IA generará variaciones automáticas del texto base para cada usuario, manteniendo el mismo
506sentido pero con palabras diferentes.",aiProvider:"Proveedor de IA",apiKeyLabel:"Clave de la API (variación por IA)",requiredHelpText:"Sin clave configurada, la variación por IA se omite y el mensaje original se envÃa tal cual.",disconnectedHelpText:"Ninguna clave conectada en la Integración de IA de Plataforma. Sin ella, la variación por IA se omite y el mensaje original se envÃa tal cual.",baseText:"Texto Base",baseTextPlaceholder:"Escribe el texto base que la IA variará...",baseTextNote:"La IA mantendrá el sentido del texto, pero cambiará palabras y, si hay emojis, también los variará."},mustBeLoggedIn:"Necesitas iniciar sesión",tryAgain:"Intenta de nuevo",media:{image:"Imagen",audio:"Audio",video:"Video",document:"Documento",file:"Archivo",sendLabel:"Enviar {{media}}",otherSendMethods:"Otras formas de enviar",upload:"Subir",linkUrl:"Enlace / URL",fileTooLarge:"Archivo muy grande (máximo 50MB). Tu archivo: {{size}}",unsupportedFormat:"Formato no admitido. Usa: {{formats}}",uploadingWithSize:"Enviando {{media}} ({{size}})...",storageLimitExceeded:"LÃmite de almacenamiento superado",connectionError:"Error de conexión. Verifica tu internet e intenta de nuevo.",uploadErrorGeneric:"Error al enviar: {{message}}",fileSent:"¡Archivo enviado!",unexpectedErrorGeneric:"Error inesperado: {{message}}",selectOrRecord:"Selecciona un archivo o graba directo desde el micrófono (máx 50MB)",clickToSelectFile:"Haz clic para seleccionar un archivo (máx 50MB)",mp4Only:"Solo se aceptan archivos MP4",remove:"Quitar",urlPlaceholder:"https://... o {{syntax}}",urlNote:{before:"Acepta URL pública o variables (ej:",after:")."},resolvedAtRuntime:"Se resolverá en tiempo de ejecución.",avifNotSupported:"El formato AVIF no es aceptado por WhatsApp. Usa PNG, JPG o WEBP.",previewAlt:"Vista previa",base64Placeholder:"Pega aquÃ: data:image/png;base64,iVBORw0... o {{syntax}}",clipboardEmpty:"Portapapeles vacÃo",pasted:"¡Pegado!",clipboardReadError:"No se pudo leer el portapapeles",paste:"Pegar",sendAsForwarded:"Enviar como reenviado",forwardedNote:'El audio aparecerá como "Reenviado" en WhatsApp (estilo naranja)',captionOptional:"Descripción (opcional)",captionPlaceholder:"Descripción...",sendAsViewOnce:"Enviar como visualización única",viewOnceNote:"El archivo solo podrá verse una vez por el destinatario",videoFormat:{label:"Formato de envÃo",video:"Normal",videoplay:"Reproducción automática",ptv:"Video redondo",videoNote:"EnvÃo estándar de video, con descripción opcional.",videoplayNote:"El mismo archivo, pero con reproducción automática en bucle en WhatsApp.",ptvNote:'Video redondo ("nota de video", como una nota de voz). No admite descripción.'}},timeUnits:{seconds:"Segundos",minutes:"Minutos",hours:"Horas",days:"DÃas"},delay:{delayType:"Tipo de Retraso",fixedTime:"Tiempo Fijo",variableTime:"Tiempo Variable",waitTime:"Tiempo de Espera",minTime:"Tiempo MÃnimo",maxTime:"Tiempo Máximo",randomBetween:"El retraso será aleatorio entre el tiempo mÃnimo y máximo",showPresence:"Mostrar presencia durante la espera",none:"Ninguna",typing:"Escribiendo",recordingAudio:"Grabando audio",typingQuoted:'"escribiendo"',recordingAudioQuoted:'"grabando audio"',presenceNote:"WhatsApp muestra {{state}} durante la espera. Coloca el bloque de texto/audio justo después de este retraso. LÃmite de 5 min (300s)."},waitInput:{saveResponseIn:"Guardar respuesta en",variableNamePlaceholder:"Nombre de la variable",saveImageSentByLead:"Guardar imagen o documento enviado por el lead",saveImageSentByLeadNote:{before:"Cuando el lead envÃe una imagen o documento, el archivo se guardará en una variable separada. Usa esta variable",only:"en Notificar Admin",after:"para reenviar el archivo por WhatsApp. Las imágenes también se pueden usar en el Generador IA."},saveImageInVariable:"Guardar archivo en la variable",imageVariablePlaceholder:"ej: foto_lead",imageVariableNote:{before:"Variable",separate:"separada",after:"de la variable de texto. Puedes tener varias variables de imagen/PDF en flujos diferentes."},imageOnlyLabel:"Aceptar SOLO imagen o PDF",imageOnlyNote:"Los mensajes de texto serán ignorados â el flujo solo avanza cuando se recibe una imagen o documento (PDF) (o vence el tiempo lÃmite).",timeoutOptional:"Tiempo lÃmite (opcional)",timeoutNote:'Cuando está activado, después de este tiempo el flujo seguirá por la salida "Sin respuesta". Si está desactivado, el bloque espera indefinidamente hasta que el lead responda (las sesiones huérfanas se limpian a los 7 dÃas).',maxWaitTime:"Tiempo máximo de espera",componentOutputs:"Salidas del componente:",responseReceived:"Respuesta recibida",noResponseAfter:"Sin respuesta (después de {{value}} {{unit}})"},waitInputAI:{intro:"La IA analizará la respuesta del lead e intentará extraer las variables configuradas abajo. Si alguna variable obligatoria no se encuentra, el bloque pregunta de nuevo automáticamente.",modelOutsideCatalog:"{{model}}
506 (modelo guardado, fuera del catálogo)",apiKeyWithProvider:"Clave de la API {{provider}}",apiKeyRequired:"Obligatorio. Sin tu clave de API, este bloque no puede analizar la respuesta del lead.",keyStoredOnlyHere:"La clave se almacena solo en este bloque.",getKeyOpenAI:"ConsÃguela en platform.openai.com/api-keys",getKeyAnthropic:"ConsÃguela en console.anthropic.com/settings/keys",getKeyDeepSeek:"ConsÃguela en platform.deepseek.com/api_keys",getKeyGemini:"ConsÃguela en aistudio.google.com/app/apikey",noAudioTranscription:"{{provider}} no transcribe audio â si el lead responde por audio, el mensaje será ignorado.",variablesToExtract:"Variables a extraer",addVariable:"Agregar variable",extractNote:"La IA leerá la respuesta del lead e intentará extraer cada variable configurada abajo.",noVariableConfigured:"TodavÃa no hay ninguna variable configurada.",variableIndex:"Variable {{number}}",variableNameExample:"ej: nombre_completo",variableDescriptionExample:"Describe qué debe buscar la IA en la respuesta del lead...",optimizeWithAi:"Optimizar con IA",requiredReaskIfMissing:"Obligatoria â pregunta de nuevo si no la encuentra",globalInstructionOptional:"Instrucción general (opcional)",globalInstructionPlaceholder:"Instrucciones adicionales para la IA sobre cómo interpretar la respuesta del lead...",globalInstructionNote:"Se suma a las descripciones de cada variable â útil para dar contexto general sobre la conversación.",reaskTone:"Tono de la nueva pregunta",informalFriendly:"Informal (relajado)",formal:"Formal (profesional)",useEmojisInReask:"Usar emojis al preguntar de nuevo",listenToLeadAudio:"Escuchar audio del lead",autoEnabledByConcat:"Activado automáticamente por la concatenación de audios de abajo.",audioCreditsNote:"Consume créditos de transcripción de audio.",concatenateInWindow:"Concatenar mensajes en una ventana de tiempo",concatWindowSeconds:"Ventana de espera (segundos)",concatWindowNote:"Junta los mensajes (texto y audio) enviados en secuencia dentro de esa ventana antes de enviarlos a la IA para analizar.",maxAttempts:"Máximo de intentos",maxAttemptsNote:{before:"Después de ese número de intentos sin una respuesta válida, el flujo sigue por la salida",exhaustedLabel:"Intentos agotados",after:"."},timeoutNote:'Cuando está activado, después de este tiempo el flujo seguirá por la salida "Sin respuesta". Si está desactivado, el bloque espera indefinidamente hasta que el lead responda.',validResponseOutput:"Respuesta válida",attemptsExhaustedOutput:"Intentos agotados (máx. {{count}})",aiErrorOutput:"Error IA"},menuForm:{menuMessage:"Mensaje del Menú",menuMessagePlaceholder:"Elige una opción...",optionsOnePerLine:"Opciones (una por lÃnea)",optionsPlaceholder:`1. Opción 1 5072. Opción 2 5083. Opción 3`},aiForm:{systemPrompt:"Prompt del Sistema",systemPromptPlaceholder:"Eres un asistente de ventas amigable...",usesGpt4oMini:"La IA usará GPT-4o-mini para responder a los mensajes del cliente según este prompt."},aiResponder:{apiKeyLabel:"Clave de la API *",apiKeyRequiredHelp:"Obligatorio. Sin tu clave de API, este bloque no responde â no hay IA nativa de ZapData en este bloque.",identifyModelsIntro:"Cómo identificar a qué modelos tiene acceso tu API key:",modelOutsideCatalog:"{{model}} (modelo guardado, fuera del catálogo actual)",modelUnavailableWarning:"Si el modelo seleccionado no está disponible en tu API key, la ejecución fallará.",responseFieldLabel:"Campo para guardar la respuesta de la IA",responseAlsoSavedNote:{before:"La respuesta siempre se guardará también en",after:"."},autoSendResponse:"Enviar respuesta automáticamente",autoSendResponseNote:"EnvÃa la respuesta de la IA como mensaje al lead automáticamente",promptBehaviorLabel:"Prompt de IA / Comportamiento *",promptBehaviorPlaceholder:`Eres un asistente útil. 509Responde siempre en español. 510Sé claro y directo.`,promptVariablesNote:{before:"Acepta variables como",after:"o cualquier variable â se resuelven al valor real antes de enviarse a la IA."},conversationTone:"Tono de la conversación",toneInformal:"Informal (relajado)",toneFormal:"Formal (profesional)",useEmojisInResponses:"Usar emojis en las respuestas",useEmojisNote:"La IA podrá usar emojis para hacer las respuestas más expresivas",mediaCapabilities:"Capacidades de multimedia",understandAudio:"Entender audio",audioUnsupportedTooltip:"{{provider}} no transcribe audio. Selecciona GPT (OpenAI) o Gemini para usar esta función.",unavailableWithProvider:"No disponible con el proveedor {{provider}}",understandAudioNote:"Permite procesar mensajes de audio (transcripción)",understandImage:"Entender imagen",imageUnsupportedTooltip:"{{provider}} no admite imagen (sin visión). Selecciona otro proveedor para usar esta función.",understandImageNote:"Permite procesar imágenes (visión)",understandPdf:"Entender PDF",pdfUnsupportedTooltip:"{{provider}} no admite PDF. Selecciona otro proveedor para usar esta función.",understandPdfNote:"Permite procesar documentos PDF (extracción de texto)",mayConsumeMoreTokens:"Estas opciones pueden consumir más tokens.",deepseekTextOnly:"DeepSeek no admite audio, imagen ni PDF â modelo solo de texto.",keepConversationContext:"Mantener contexto de la conversación",keepConversationContextNote:"Mantiene el historial de las últimas interacciones para mejor contexto (máximo 20)",contextMessageCount:"Número de mensajes en el contexto",audioResponseTitle:"Respuesta en Audio",answerWithAudioRandomly:"Responder en audio aleatoriamente",answerWithAudioRandomlyNote:"La IA envÃa algunas respuestas en audio",alwaysAudioOnAudioInput:"Siempre responder audio con audio",alwaysAudioOnAudioInputNote:"Si el lead envÃa audio, la respuesta siempre será en audio",audioResponseChance:"Probabilidad de respuesta en audio (%)",audioResponseChanceNote:"Probabilidad de que cada respuesta se envÃe como audio (cuando no está forzado por audio del lead)",chooseYourVoice:"Elige tu Voz",selectAVoice:"Selecciona una voz",noVoiceRegisteredShort:"No hay ninguna voz registrada â clona una en el Generador de Audio",customVoices:"Personalizadas",noVoiceRegistered:"No hay ninguna voz registrada.",cloneVoiceHint:"Clona una voz en el Generador de Audio para usarla aquÃ.",expirationTime:"Tiempo de Expiración",enableExpiration:"Activar expiración",enableExpirationNote:"Después del tiempo definido, la IA se detiene y sigue por la salida de expiración",timeInMinutes:"Tiempo en minutos",maxMinutes:"Máximo: 1440 minutos (24 horas)",notifyOnError:"Notificar por push en caso de error",notifyOnErrorNote:"Te avisa por push cuando la IA falle por credenciales inválidas o créditos agotados (máximo 1 aviso cada 30 min por integración).",debounceLabel:"Esperar silencio antes de responder",debounceUnitOff:"segundos (0 = desactivado
510)",debounceNote:"Junta los mensajes enviados en secuencia: solo responde después de ese tiempo sin nuevos mensajes del contacto.",splitMessages:"Dividir la respuesta en varios mensajes",splitMessagesNote:"En vez de un texto único, se envÃa en partes cortas (más humano).",splitMaxChars:"Tamaño máx. por mensaje (caracteres)",splitMaxCharsDefault:"Predeterminado: 350 (máx 6 partes)",knowledgeBase:"Base de Conocimiento",knowledgeBaseNote:"Crea mini-flujos que la IA activará automáticamente al identificar la intención del cliente.",noNameFallback:"Sin nombre",nodeCount:"{{count}} nodos",active:"Activo",inactive:"Inactivo",addMiniFlow:"Agregar Mini-Flujo"},transfer:{transferTo:"Transferir a",humanAgent:"Agente Humano",department:"Departamento",transferMessage:"Mensaje de Transferencia",transferMessagePlaceholder:"Transfiriendo a un agente..."},webhookForm:{webhookUrl:"URL del Webhook",willBeFiredNote:"Se disparará con los datos del lead. El flujo continúa al siguiente bloque justo después del envÃo.",method:"Método",payloadFormat:"Formato del cuerpo (payload)",payloadDefault:"Predeterminado",payloadCustom:"Personalizado",payloadRawJson:"JSON puro",payloadWrappedNote:'El JSON incluye automáticamente los datos del lead y sus variables dentro de "variables".',payloadCustomRootNote:"Defines cada campo del JSON en la raÃz. Usa punto para anidar (ej: client.name) y [0] para listas.",payloadRawJsonNote:"Escribe el JSON exacto que se enviará, usando {{variaveis}} donde quieras.",jsonBody:"Cuerpo JSON",jsonBodyTip:{before:"Consejo:",after:"entrega el teléfono BR sin el 55 y con el 9 garantizado."},jsonFields:"Campos del JSON",payloadVariables:"Variables en el payload",dotNotationNote:{before:"Campo en dot-notation (ej:",middle:"). Usa",after:"o cualquier variable."},extraFieldsNote:{before:"Campos adicionales enviados en el JSON. Usa",after:"o cualquier variable."},noExtraVariables:"No hay ninguna variable extra. El payload ya incluye automáticamente los datos del lead (teléfono, nombre, tags, instancia).",fieldPlaceholder:"campo (ej: client.name)",keyPlaceholder:"clave (ej: producto)",valuePlaceholder:"valor o {{variavel}}",typeText:"texto",typeNumber:"número",typeBool:"bool",customHeaders:"Headers personalizados (opcional)",headerPlaceholder:"Header (ej: Authorization)",valuePlaceholderShort:"valor",testAndDetectVariables:"Probar y detectar variables de la respuesta",responseFlattenedNote:{before:'La respuesta queda disponible "aplanada" como',after:"en los siguientes bloques."},responseExtractors:{title:"Extraer variables adicionales (opcional)",helpNote:"Toma un pedazo de dentro de una variable de texto (ej.: una lÃnea especÃfica de un campo con varias lÃneas) y lo convierte en una variable nueva.",empty:"Ningún extractor configurado.",sourcePlaceholder:"variable de origen (ej: webhook_response.deposit_instructions.qr_payload)",saveAsPlaceholder:"nombre de la nueva variable (ej: reference)",mode:"Modo",modeLinePrefix:"LÃnea con prefijo",modeRegex:"Regex avanzado",prefixPlaceholder:"prefijo de la lÃnea (ej: Reference:)",patternPlaceholder:"patrón regex (ej: Reference:\\s*(.+))",flagsPlaceholder:"flags (opcional)",groupPlaceholder:"grupo",sourceHint:'Usa el nombre mostrado en "Probar y detectar variables" arriba, SIN las llaves {{ }} (si lo pegas con llaves, se eliminan automáticamente al salir del campo).',prefixHint:'No distingue mayúsculas/minúsculas ni importa si la lÃnea termina en ":" â "reference" ya coincide con una lÃnea "Reference: ...".'},insertVariable:"Insertar variableâ¦"},setVariableForm:{variableName:"Nombre de la Variable",value:"Valor",valuePlaceholder:"Valor o {{outra_variavel}}"},calculator:{operandA:"Operando A",operandPlaceholder:"Número o {{variavel}}",operandANote:"Acepta número fijo (ej: 10) o variable (ej: {{valor_compra}}).",operation:"Operación",opAdd:"Suma (+)",opSubtract:"Resta (â)",opMultiply:"Multiplicación (Ã)",opDivide:"División (÷)",operandB:"Operando B",decimalPlaces:"Decimales",saveResultIn:"Guardar resultado en",resultAvailableAs:{before:"El resultado queda disponible como",after:"en los siguientes bloques."}},whatsappLabelForm:{labelName:"Nombre de la Etiqueta",labelNamePlaceholder:"Ej: Pagado, VIP, Atendido...",action:"Acción",remove:"Quitar",mustExistWarning:"La etiqueta ya debe existir en WhatsApp. Si no existe, la acción se ignorará silenciosamente."},endForm:{marksFlowEnd:"Este nodo marca el fin del flujo."},randomizer:{minTwoSplits:"MÃnimo de 2 splits",description:"Divide el flujo aleatoriamente entre los splits según los porcentajes.",namePlaceholder:"Nombre",addSplit:"Agregar Split",distribute:"Distribuir",total:"Total",mustBe100:"(debe ser 100%)"},pixApiForm:{intro:{before:"Genera un cobro PIX en tu gateway, manda el mensaje con el botón para copiar el código y",followsNow:"sigue el flujo al instante",middle:"â no espera el pago. Sale por",or:"o"},outputFollowed:"Siguió",outputError:"Error",gateway:"Gateway",country:"PaÃ
510s",countryBrazil:"Brasil â PIX",countryMexico:"México â SPEI",countryPeru:"Perú â PEN",countryIndia:"India â INR",countryPhilippines:"Filipinas â PHP",countryArgentina:"Argentina â Transferencia",argentinaChargeNote:"Cobro en pesos argentinos (ARS) por transferencia bancaria: el lead recibe un CBU de 22 dÃgitos y transfiere desde su home banking. Misma credencial que el PIX.",amountNoteArgentina:"El valor es en PESOS argentinos. El lead debe transferir el importe exacto â otros importes no se confirman automáticamente.",argentinaTextNote:"en el texto â sin código QR para leer, es el texto el que lleva el dato para pagar. El titular es el nombre que el lead verifica en su home banking antes de transferir.",imageModeCustomNoteArgentina:"Tu imagen acompaña al mensaje. El lead paga copiando el CBU con el botón.",argentinaAutoNote:'En Argentina ZapData envÃa solo un nombre genérico de "Consumidor Final" â el CUIT es opcional en XPag y NO se completa solo, porque no existe un CUIT oficial de consumidor no identificado e inventarlo usarÃa el documento de otra persona.',cuitOptional:"CUIT (opcional)",variableWithCuit:"Variable con el CUIT",fixedCuit:"CUIT fijo (11 dÃgitos)",mexicoChargeNote:"Cobro en pesos por transferencia SPEI: el lead recibe una CLABE de 18 dÃgitos y transfiere desde la app del banco. Misma credencial que el PIX.",brazilChargeNote:"Cobro en reales por PIX: el lead recibe el código copia y pega.",peruChargeNote:"Cobro en soles peruanos (PEN). Solo se muestran los métodos habilitados en la credencial Zenith seleccionada.",credential:"Credencial",noAccountConnected:"No hay ninguna cuenta {{provider}} conectada. Sin credencial, el bloque sale por la salida de Error sin cobrar nada.",connectProvider:"Conectar {{provider}}",chooseAccount:"Elige la cuenta",noNickname:"(sin apodo)",defaultSuffix:"predeterminada",credentialMissingWarning:"La credencial que estaba elegida ya no existe en esta cuenta. Elige otra â tal como está, el bloque saldrá por la salida de Error.",capabilitiesMissing:"Esta credencial todavÃa no tiene verificados sus métodos de Perú. Hasta revalidarla, no hay ningún método PE disponible.",revalidateCredential:"Revalidar credencial",revalidateSucceeded:"Credencial revalidada. Se actualizó la lista de métodos de Perú.",revalidateFailed:"No se pudo revalidar la credencial Zenith.",emptyUsesDefault:{before:"En blanco, usa la credencial marcada como predeterminada de esta cuenta en",after:"."},amountLabel:"Valor ({{currency}}) *",amountNote:"Acepta variable. Un valor inválido o cero manda al lead por la salida de Error.",amountNoteMexico:"El valor es en PESOS mexicanos, y el gateway no acepta menos de MX$ 20.00.",amountNoteKairos:"Kairos cobra desde R$ 0.01.",amountNotePeru:"El monto está en soles peruanos (PEN).",amountNotePhilippines:"El monto está en pesos filipinos (PHP). La pasarela acepta de â± 300,00 a â± 50.000,00.",requiredToSave:"Obligatorio para guardar el flujo",messageLabel:"Mensaje *",useInText:"Usa",and:"y",mexicoTextNote:"en el texto â sin código QR para leer, es el texto el que lleva el dato para pagar.",brazilTextNote:"para insertar el código en el texto.",sendCopyButtonLabel:"Enviar botón de copiar",sendCopyButtonHint:"DesactÃvalo para armar el mensaje solo con texto y variables.",sendPayButtonLabel:"Enviar botón de pagar",sendPayButtonHint:"El botón abre el checkout. Si lo desactivas, incluye la variable del enlace de pago en el texto.",buttonTextLabel:"Texto del botón *",buttonMaxChars:"Máximo 20 caracteres (lÃmite de WhatsApp).",bankButtonsTitle:"Botones de la transferencia",bankButtonsHint:"Agrega de 1 a 3 botones de copiar o abrir enlace.",addBankButton:"Agregar",bankButtonNumber:"Botón {{number}}",bankButtonLabel:"Etiqueta (1 a 20 caracteres)",bankButtonCopy:"Copiar",bankButtonUrl:"Abrir enlace",bankButtonPlaceholders:"En el valor puedes usar",bankPlaceholders:"Texto libre. Placeholders disponibles:",cashDynamicNote:"El código, el nombre del servicio y los puntos de pago vienen dinámicamente de Zenith; el editor no tiene una lista fija.",peruQrOnlyNote:"Yape y Plin envÃan solamente la imagen del QR. No hay código ni botón de copiar.",peruCheckoutTextNote:"en el texto â es el enlace del checkout. El botón ya abre esa página; la variable sirve si quieres el enlace en otro lugar.",indiaTextNote:"en el texto â es el enlace del checkout UPI. El botón ya abre esa página; la variable sirve si quieres el enlace en otro lugar.",indiaChargeNote:"Cobro en rupias (INR) por UPI: el lead recibe un botón que abre el checkout seguro de Zenith.",philippinesTextNote:"en el texto â es el enlace del checkout GCash/Maya. El botón ya abre esa página; la variable sirve si quieres el enlace en otro lugar.",philippinesChargeNote:"Cobro en pesos filipinos (PHP) por GCash o Maya: el lead recibe un botón que abre el checkout seguro de Zenith.",phPhoneLabel:"Celular filipino *",phPhoneNote:{before:"Ya viene con",after:", el número del lead. Si no es un celular filipino (10 dÃgitos que empiezan en 9), el motor genera un número PH estable solo para crear el checkout â el pagador informa su celular real en GCash/Maya."},messageImage:"Imagen del mensaje",imageModeQrColombia:"Código QR de Bre-B (generado automáticamente)",imageModeQrNoteColombia:"El código QR se genera a partir del código Bre-B de este cobro, con el monto ya incluido.",imageModeCustomNoteColombia:"Tu imagen reemplaza el código QR. Sin el QR, el lead paga con el botón de copiar o con la llave â y con la llave él ingresa el monto a mano.",colombiaAutoNote:"En Colombia XPag completa los datos del pagador por su cuenta, en el formato que valida el proveedor local. ZapData no envÃa nombre, documento ni correo â solo el monto y el teléfono.",varLlave:"la llave del c
510obro (dirección Bre-B)",varPayLink:"el enlace de pago",varMethodName:"nombre del método (Bre-B / Nequi)",imageModeQr:"Código QR del PIX (generado automáticamente)",imageModeCustom:"Imagen personalizada",imageModeNone:"Sin imagen (solo texto y botón)",imageModeQrNote:"El código QR se genera a partir del código PIX de este cobro. El botón de copiar va junto.",imageModeCustomNoteMexico:"Tu imagen acompaña al mensaje. El lead paga copiando la CLABE con el botón.",imageModeCustomNoteBrazil:"Tu imagen entra en lugar del código QR. El lead paga con el botón de copiar â el código PIX no se convierte en QR aquÃ.",imageModeNoneNote:"Solo el mensaje y el botón de copiar.",imageModeQrOnlyPeru:"Código QR obligatorio. Este método no envÃa código ni botón de copiar.",imageModeVoucherOnlyPeru:"Voucher obligatorio como imagen, con el código devuelto por Zenith.",imageModeCustomNotePeru:"Tu imagen acompaña el mensaje. El lead paga con el botón que abre el checkout.",imageModeCustomNoteIndia:"Tu imagen acompaña el mensaje. El lead paga con el botón que abre el checkout UPI.",imageModeCustomNotePhilippines:"Tu imagen acompaña el mensaje. El lead paga con el botón que abre el checkout GCash o Maya.",imageMode
510NoneNoteCheckout:"Solo el mensaje y el botón que abre el checkout.",customImageLabel:"Imagen personalizada *",customImageNote:"Acepta subida, URL pública o variable. Sin imagen, el bloque manda solo el texto y el botón â el cobro no se pierde.",payerData:"Datos del pagador",kairosPayerIntro:{before:"Kairos exige nombre, correo, teléfono y documento en todo cobro. Nombre y correo ya vienen sugeridos a partir del lead; el",cpfYouInform:"CPF lo informas tú",after:"â ZapData no inventa uno, porque un CPF válido pertenece a alguien real."},nameRequired:"Nombre *",kairosNameNote:'Acepta variable. Un nombre con menos de 3 caracteres se convierte en "Cliente" (Kairos lo rechaza).',cpfRequired:"CPF *",kairosCpfNote:"Va exactamente como lo escribas. Kairos acepta el mismo CPF en varios cobros.",emailRequired:"Correo *",emailOptional:"Correo (opcional)",kairosEmailNote:"Acepta variable. La sugerencia usa el teléfono del lead, que siempre existe.",kairosPayerErrorNote:{before:"Tal como está,",every:"todo",after:"cobro sale por la salida Error sin ni siquiera llegar al gateway."},autoFillPayerData:"Completar datos del pagador automáticamente",autoFillPayerDataNote:"Activado, solo necesitas informar el valor.",xpagAutoNote:{before:"XPag pide nombre y documento en todo cobro. ZapData manda el nombre del contacto y",theA:"el",theCpfOf:"el CPF de"},genericSatRfc:"RFC genérico del SAT",publicoEnGeneral:'"público en general"',unidentifiedConsumer:"consumidor no identificado",noOtherPersonData:"No se usa ningún dato de otra persona.",varFallbackNote:"En el campo de arriba va la variable con el dato del lead; en el de abajo, el valor fijo usado cuando esté vacÃa.",nameLabel:"Nombre",variableOptional:"Variable (opcional)",defaultName:"Nombre predeterminado",rfcCurpRequired:"RFC/CURP *",variableWithRfcCurp:"Variable con el RFC/CURP",fixedRfcCurp:"RFC/CURP fijo (10 a 18 caracteres)",variableWithCpf:"Variable con el CPF",fixedCpf:"CPF fijo (11 dÃgitos)",xpagNoEmailPhoneNote:"XPag no pide correo ni teléfono del pagador â por eso esos campos no aparecen aquÃ.",zuckAutoNote:{before:"ZuckPay exige nombre, documento, correo y teléfono en todo cobro. ZapData manda el nombre del contacto, el teléfono del lead, un correo derivado del teléfono",and:"y",theA:"el",officialDocMexico:"el documento oficial de quien no se identifica en México",theCpfOf:"el CPF de"},zuckManualNote:{before:"En el campo de arriba va la variable con el dato del lead; en el de abajo, el valor fijo usado cuando esté vacÃa. Atención: un lead de WhatsApp",doesNotBring:"no trae {{doc}} ni correo",after:"â al desactivar lo automático, necesitas re
510colectar ambos antes, en el flujo."},variableWithEmail:"Variable con el correo",zuckPayerErrorNote:{before:"Tal como está,",every:"todo",after:"cobro va a salir por la salida Error sin ni siquiera llegar al gateway â activa el llenado automático de arriba, o completa ambos."},rfcAlphanumericNote:"RFC y CURP son ALFANUMÃRICOS (ej.: PEPJ800101HDFRRL09) â van tal como los escribas, sin filtrar dÃgitos.",zuckCpfOnlyNote:"ZuckPay solo acepta CPF de 11 dÃgitos; CNPJ es rechazado.",generatedVariables:"Variables generadas",varClabe:"la CLABE de 18 dÃgitos",varCbu:"el CBU de 22 dÃgitos para transferir",varAccountHolder:"el titular de la cuenta de destino",varBankName:"el banco del destinatario",varValuePesos:"valor cobrado, en pesos",varReference:"referencia interna del adquirente",varNetValue:"valor neto",varTransactionId:"id del cobro en el gateway",varErrorReason:"motivo, cuando sale por Error",varPixCode:"el código PIX",varCheckoutUrl:"el enlace del checkout seguro",varValueRupees:"monto cobrado, en rupias",varValuePhp:"monto cobrado, en pesos filipinos",varValueSoles:"monto cobrado, en s
510oles",varValueCharged:"valor cobrado",varStatus:"pendiente / pagado / expirado",chargeAgainNote:{before:"Para cobrar de nuevo más adelante en el funnel, usa un",newBlock:"nuevo",after:"bloque API de Pagos â no conectes la flecha de vuelta a este mismo bloque."},openValueToggle:{label:"CLABE sin monto fijo",description:"El lead transfiere el monto que quiera vÃa SPEI, en vez de un valor fijo definido acá."},openValueInfo:{before:"Sin monto fijo: el lead paga lo que quiera en la CLABE. Después del pago, usá",after:"para saber cuánto llegó.",warning:"â ï¸ Confirma el pago por el aviso de XPag, sin volver a consultar su API después â seguridad menor que el resto del bloque."},countryColombia:"Colombia",colombiaChargeNote:"El cobro se genera en pesos colombianos (COP).",copMethod:"Medio de pago",copMethodBreb:"Bre-B (código QR)",copMethodPse:"PSE (débito en lÃnea)",copMethodNequi:"Nequi (billetera digital)",copBrebNote:"El lead recibe la imagen del QR y paga escaneándola en la app de su banco. Sin botón: los bancos colombianos no tienen copiar y pegar.",copPseNote:"El lead recibe un botón que abre la página de pago en el navegador.",amountNoteColombia:"MÃnimo COP$ 10.000. El lead debe pagar el valor exacto.",colombiaTextNote:"en el texto. La llave es la dirección del cobro (el pagador puede escribirla en la app de su banco), pero ahà él ingresa el monto a mano â solo el QR lleva el monto fijo.",imageModeQrOnly:"Código QR de Bre-B (obligatorio): es la única forma de pagar en Colombia.",payMethod:{pix:"PIX (QR y copiar y pegar)",spei:"SPEI (transferencia bancaria)",mx_oxxo:"OXXO (pagar en efectivo en tienda)",mx_codi:"CoDi (código QR del banco)",cop_breb:"Bre-B (código QR)",cop_breb_llave:"Bre-B (enlace de pago)",cop_pse:"PSE (débito en cuenta)",cop_nequi:"Nequi (billetera digital)",pe_yape:"Yape (checkout)",pe_plin:"Plin (checkout)",pe_cash:"Pago en efectivo (checkout)",pe_bank_transfer:"Transferencia bancaria",in_upi:"UPI (checkout)",ph_gcash:"GCash (checkout)",ph_maya:"Maya (checkout)"},payMethodNote:{pix:"El lead paga desde la app del banco, leyendo el QR o pegando el código.",spei:"El lead recibe una CLABE de 18 dÃgitos y transfiere desde la app del banco.",mx_oxxo:"El lead recibe una referencia y paga EN EFECTIVO en el mostrador de cualquier tienda OXXO. El voucher dura dÃas, asà que la confirmación no es inmediata.",mx_codi:"El lead escanea el QR con la app de su banco. Es instantáneo, por eso la validez por defecto es corta (1 hora).",cop_breb:"El lead recibe la imagen del QR y paga escaneándola con la app del banco.",cop_breb_llave:"El lead recibe un enlace y completa el pago en la página de Zenith.",cop_pse:"El lead recibe un botón que abre la página de pago en el navegador.",cop_nequi:"El lead recibe un enlace y completa el pago en la página de Zenith.",cop_nequi_push:"El cobro llega a la app Nequi del lead (push) y se paga ahà mismo. Zenith no devuelve ningún enlace, asà que este bloque no manda botón â el lead nunca sale de WhatsApp.",pe_yape:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar con Yape.",pe_plin:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar con Plin.",pe_cash:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar en efectivo.",pe_bank_transfer:"El lead recibe un botón que abre el checkout seguro de Zenith para la transferencia.",in_upi:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar con UPI.",ph_gcash:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar con GCash.",ph_maya:"El lead recibe un botón que abre el checkout seguro de Zenith para pagar con Maya."},imageModeVoucher:"Código de barras del voucher (generado automáticamente)",imageModeVoucherNote:"Generamos el código de barras a partir de la referencia de este cobro. El número va impreso debajo â si el lector de la caja no lo toma, el cajero lo teclea.",varOxxoReference:"la referencia que el lead muestra en caja",varDueDate:"hasta cuándo damos seguimiento al pago",varVoucherUrl:"enlace de la imagen del voucher (para bloques SIGU
510IENTES, no para el texto de este)",varCodiCode:"el código CoDi copiable",varQrUrl:"enlace de la imagen del QR (para bloques SIGUIENTES, no para el texto de este)",zenithAutoNote:"Completamos el pagador con el nombre del contacto en WhatsApp y un correo de consumidor (gmail/hotmail) con token único â el formato que pidió la propia Zenith. Zenith solo acepta letras, espacios, apóstrofo y guion en el nombre (emoji, números y puntuación se quitan) y exige nombre Y apellido: cuando el contacto no tiene ambos (solo número, emoji, apodo o un nombre suelto), sorteamos un nombre real y estable para ese lead, y el correo sale del mismo nombre. En estos paÃses Zenith no pide ningún documento.",zenithManualNameNote:"Zenith exige nombre Y apellido, solo con letras, espacios, apóstrofo o guion â si falta, rechaza el cobro. Si lo que llega aquà no sirve, enviamos un nombre sorteado, real y estable para ese lead, para que el cobro nazca igual.",zenithNoDocumentNote:"En estos paÃses Zenith no pide CPF, RFC ni CURP â solo nombre y correo.",zenithPixPayerIntro:{before:"El PIX de Zenith solo nace con nombre y CPF reales del cliente. El bloque no completa nada solo y",neverInvent:"no inventa un CPF",after:"â un número válido pertenece a alguien de verdad. Recoge esos datos en el flujo (variables) antes de este cobro."},zenithPixNameNote:"Acepta variable. Zenith exige nombre Y apellido, solo con letras. Si el valor resuelto no sirve, el cobro sale por Error â no sorteamos nombre.",zenithPixCpfNote:"Acepta variable con el CPF del cliente. Sin CPF válido el cobro ni llega al gateway. Zenith no acepta el mismo CPF en dos cobros abiertos: si el cliente vuelve con el mismo valor, reenviamos el PIX que ya existe â no inventamos otro CPF.",zenithPixEmailNote:"Opcional. Si lo dejas vacÃo, armamos el correo a partir del nombre del cliente ([email protected]), el mismo formato que ya usan México, Colombia y Perú de Zenith. El código del final evita que el recibo del cobro caiga en la casilla de otra persona con el mismo nombre. Si lo completas, enviamos el tuyo sin cambiarlo.",oxxoTextNote:"en el texto â el lead necesita ambos en la caja del OXXO.",codiTextNote:"en el texto. El QR va como imagen, siempre.",colombiaLinkTextNote:"en el texto â es el enlace del cobro. El botón ya lleva ahà también; la variable sirve para quien quiera ofrecer el enlace de otra forma.",leavesWhatsappWarning:"Este método saca al lead de WhatsApp: en PSE, siempre (va a la página del banco); en Nequi, solo cuando se usa el botón de recuperación (el cobro ya llega directo a la app por el push).",nequiPhoneLabel:"Celular Nequi *",nequiPhoneNote:{before:"Ya viene con",after:", el número del lead en WhatsApp â es ahà donde llega el cobro Nequi. Cámbialo por otra variable o por un número fijo si el Nequi del lead está en otro número. No puede quedar vacÃo: sin celular colombiano (10 dÃgitos que empiezan en 3) el cobro ni siquiera se crea."},colombiaNoLinkTextNote:"en el texto. Este método no tiene enlace ni botón: el cobro llega a la app del lead por push, y lo que hace el mensaje es decirle que la abra."},sendPixKeyForm:{intro:"EnvÃa un botón nativo de WhatsApp con tu clave PIX para el pago.",pixKeyType:"Tipo de Clave PIX",phone:"Teléfono",email:"Correo",randomKey:"Clave Aleatoria (EVP)",pixKey:"Clave PIX",pixKeyPlaceholder:"Tu clave PIX...",recipientName:"Nombre del Receptor",recipientNamePlaceholder:"Nombre mostrado al cliente",recipientNameNote:"Nombre que aparecerá para el cliente en el momento del pago"},sendChargeForm:{intro:'EnvÃa un cobro nativo de WhatsApp con botón "Revisar y pagar".',amountLabel:"Valor (R$) *",amountPlaceholder:"Ej: 25,00 o {{valor}}",amountNote:{before:"Acepta número (ej:",middle:"/",after:") o variable (ej: {{valor}}). El sistema extrae el número automáticamente."},insertVariablePlaceholder:"+ Insertar variable en el valor...",itemNameLabel:"Nombre del Ãtem/Producto *",itemNamePlaceholder:"Ej: Zapatito de Croché",descriptionLabel:"Descripción (opcional)",descriptionPlaceholder:"Descripción del cobro...",pixReceivingData:"Datos PIX para Recibir *",pixKeyRequired:"Clave PIX *",recipientNameRequired:"Nombre del Receptor *"},call:{intro:"Dispara una llamada al WhatsApp del lead. Su teléfono suena de verdad y puede atender o rechazar â pero la llamada es MUDA: ninguno de los dos lados escucha n
510ada. Solo sirve para llamar la atención.",durationLabel:"Duración de la llamada (segundos)",durationNote:"Entre 3 y 60 segundos. Ese tiempo se envÃa a la API, pero no todas las versiones lo respetan â si lo ignora, la llamada suena hasta que el lead atienda o rechace.",noteLabel:"Nota:",uazapiOnlyNote:"Funciona solo con instancias UazAPI. Ãsalo con moderación para evitar bloqueos."},interactiveBlockForm:{typeButtonDescription:"Crea botones clicables para acciones rápidas.",typeImageButtonDescription:"EnvÃa una imagen con botones interactivos.",typeListDescription:"Crea un menú de lista con secciones organizadas.",buttonTextPlaceholder:"Texto del Botón",menuTextPlaceholder:"Texto del Menú",optionPlaceholder:"Opción",interactionType:"Tipo de Interacción",typeButtonMessage:"Mensaje con Botones",typeImageWithButtons:"Imagen con Botones",typeListMenu:"Menú Lista",mainTextRequired:"Texto Principal *",mainTextPlaceholder:"Escribe el mensaje que acompaña la interacción...",charsCount:"{{count}}/{{max}} caracteres",footerTextOptional:"Texto del Pie (opcional)",footerTextPlaceholder:"Pie del mensaje",imageRequired:"Imagen *",listButtonTextRequired:"Texto del Botón de la Lista *",viewOptions:"Ver opciones",optionsRequired:"Opciones *",maxOptionsWarning:"Máximo de {{max}} opciones para {{type}}.",typeButtons:"Botones",buttonTypeReply:"Respuesta",buttonTypeCopy:"Copiar",copyValuePlaceholder:"Valor a copiar (ej: código pix, cupón)",clickAddToCreateOptions:'Haz clic en "Agregar" para crear opciones',aiCapture:"Captura con IA",aiCaptureNote:"Cuando está activo, si el usuario envÃa texto en lugar de hacer clic en el botón, la IA intentará identificar qué opción corresponde al mensaje. Si no encuentra coincidencia, sigue esperando hasta el tiempo lÃmite o el clic en el botón.",aiCaptureApiKey:"Clave de la API (captura por IA)",aiCaptureKeyRequiredHelp:"Sin clave configurada, la captura con IA queda inactiva (sigue directo a la respuesta estándar/tiempo lÃmite).",aiCaptureKeyDisconnectedHelp:"Ninguna clave conectada en la Integración de IA de Plataforma. Sin ella, la captura con IA queda inactiva (sigue directo a la respuesta estándar/tiempo lÃmite).",captureDifferentResponse:"Capturar respuesta distinta de los botones",captureDifferentResponseNote:"Habilita una salida separada en caso de que el usuario responda algo que no sea una de las opciones de botón.",timeoutOptional:"Tiempo lÃmite (opcional)",timeoutNote:'Cuando está activado, después de este tiempo el flujo seguirá por la salida "Tiempo lÃmite". Si está desactivado, el bloque espera indefinidamente hasta que el lead haga clic en un botón.',maxWaitTime:"Tiempo máximo de espera",noteLabel:"Nota:",mobileOnlyNote:"Puede que no aparezcan correctamente en WhatsApp Web, solo en el dispositivo móvil."},notifyAdminForm:{notificationTypeRequired:"Tipo de Notificación *",selectTypePlaceholder:"Selecciona el tipo...",typeWhatsapp:"WhatsApp (Número)",typePush:"Notificación Push",targetNumberRequired:"Número de Destino *",targetNumberNote:"Número con código de paÃs + área (ej: 5511999999999)",messageRequired:"Mensaje *",adminMessagePlaceholder:"Escribe el mensaje para el administrador...",availableVariables:"Variables disponibles",webhookVariablesAvailableNote:"Las variables del webhook de este usuario ya están disponibles en este bloque.",importantLabel:"Importante:",instanceMustBeInGroupNote:"La instancia que ejecuta el flujo debe estar dentro del grupo para poder enviar mensajes.",groupInviteLinkRequired:"Enlace de Invitación del Grupo *",groupInviteLinkNote:"Pega el enlace de invitación del grupo de WhatsApp",groupFound:"Grupo encontrado",noNameFallback:"Sin nombre",groupIdAutoResolveNote:"El ID del grupo se resolverá automáticamente al ejecutar el flujo.",groupMessagePlaceholder:"Escribe el mensaje para el grupo...",pushTitleRequired:"TÃtulo de la Notificación *",pushTitlePlaceholder:"TÃtulo de la notificación push...",pushBodyRequired:"Texto de la Notificación *",pushBodyPlaceholder:"Texto de la notificación push...",noteLabel:"Nota:",pushNote:"La notificación push se enviará al usuario actual (dueño de la instancia).",selectTypeToConfigure:"Selecciona el tipo de notificación para configurar"}
510,goToFlowForm:{targetFlowRequired:"Flujo de Destino *",selectFlowPlaceholder:"Selecciona un flujo...",noFlowAvailable:"No hay ningún flujo disponible",targetFlowNote:"Cuando el flujo llegue a este bloque, se finalizará y el flujo de destino se iniciará para el mismo contacto.",transferVariables:"Transferir variables",transferVariablesNote:"Copiar las variables actuales al nuevo flujo",noteLabel:"Nota:",noOutputNote:"Este bloque no tiene salida. El contacto seguirá recibiendo mensajes del flujo de destino automáticamente."},stickerForm:{sendSticker:"Enviar Figurita",uploadError:"Error al enviar figurita: {{message}}",uploaded:"¡Figurita enviada!",acceptedFormats:"Formatos aceptados: .webp, .png, .jpg, .gif",previewAlt:"Vista previa"},contactForm:{fullNameRequired:"Nombre Completo *",fullNamePlaceholder:"Juan Pérez",phoneRequired:"Teléfono *",insertVariablePlaceholder:"+ Insertar variable...",instanceChipLabel:"Instancia (Chip)",instanceNumberHint:"Número del chip que está enviando el flujo",phoneNote:"Número completo con código de paÃs (ej: 5511999999999). Usa la variable de arriba para el número del propio chip, o escribe un número fijo."},carouselForm:{cardsReordered:"Tarjetas reordenadas â revisa las conexiones de los botones en el lienzo.",bodyText:"Texto del Cuerpo",bodyTextPlaceholder:"Texto principal del carrusel...",cardsCount:"Tarjetas ({{count}}/10)",card:"Tarjeta",cardNumber:"Tarjeta {{number}}",cardImage:"Imagen de la Tarjeta",imageUploadError:"Error al enviar imagen: {{message}}",imageUploaded:"¡Imagen enviada!",cardText:"Texto de la tarjeta",cardTextPlaceholder:"Descripción...",buttonsCount:"Botones ({{count}}/3)",buttonTextPlaceholder:"Texto del botón",addAtLeastTwoCards:"Agrega al menos 2 tarjetas al carrusel.",aiCaptureNote:"Cuando está activo, si el usuario envÃa texto en lugar de hacer clic en un botón del carrusel, la IA intentará identificar qué botón corresponde al mensaje. Si no lo encuentra, sigue esperando hasta que se haga clic en algún botón o venza el tiempo lÃmite.",timeoutNote:'Cuando está activado, después de este tiempo el flujo seguirá por la salida "Tiempo lÃmite". Si está desactivado, el carrusel espera indefinidamente hasta que se haga clic en un botón.',componentOutputs:"Salidas del componente:",cardButtonsOutput:"Botones de las tarjetas",timeoutOutput:"Tiempo lÃmite (después de {{value}} {{unit}})"},passageTrackerForm:{identifierNameRequired:"Nombre del Identificador *",identifierNamePlaceholder:"Ej: Inicio del Funnel",identifierNameNote:"Dale un nombre descriptivo para identificar este punto de paso en las métricas."},iaGeneratorForm:{keyLooksLikeKie:"Esta clave parece ser de KIE.AI (32 caracteres hex). Confirma que pegaste la clave de Freepik.",keyLooksLikeFreepik:"Esta clave parece ser de Freepik. Confirma que pegaste la clave de KIE.AI.",tokenLooksLikeFreepik:"Este token parece ser de Freepik. Confirma que generaste el token de webhook en el panel de KIE.AI.",provider:"Proveedor",mediaType:"Tipo de archivo",mediaTypeImage:"Imagen",mediaTypeMusic:"Música",mediaTypeVideo:"Video",saveMediaAsVariable:"Guardar archivo generado como variable",duplicatedVariableWarning:'Otro bloque "Generador de IA" ya usa este nombre â elige uno diferente para que cada archivo quede en su propia variable.',saveMediaAsVariableNote:"Esta variable podrá reutilizarse en los bloques de Imagen / Video / Audio (de este flujo o de otros) para el mismo contacto. El archivo está aislado por usuario y por lead.",freepikKey:"Clave Freepik",kieKey:"Clave KIE.AI",keyStoredPerBlock:"La clave se almacena por bloque. ConsÃguela en",hmacTokenLabel:"Token Validador (HMAC)",pasteFreepikTokenPlaceholder:"Pega aquà el token de webhook de Freepik",pasteKieTokenPlaceholder:"Pega aquà el token de webhook de KIE.AI",tokenRequiredWarning:"Obligatorio â sin el token, el callback del proveedor es rechazado.",tokenNote:{before:"Obligatorio. Genera el token de webhook en el panel de",after:"y pégalo aquà â lo usamos para validar que el callback vino realmente del proveedor."},imageModelLabel:"Modelo de Imagen",aspectRatio:"Proporción",resolution:"Resolución",sunoModel:"Modelo Suno",musicStyle:"Estilo musical",musicStylePlaceholder:"Ej.: Pop alegre, Sertanejo, Lo-fi",musicDescription:"Descripción de la música",musicDescriptionPlaceholder:"Ej.: Canción romántica para mi esposa MarÃa, hablando de nuestro primer encuentro",musicDescriptionNote:"Tema/base de la canción â la IA usará esto como inspiración para crear la letra. No escribas la letra aquÃ.",autoLyrics:"Dejar que la IA cree la letra automáticamente",lyrics:"Letra (se cantará exactamente como está escrita)",lyricsPlaceholder:"Escribe la letra completa de la canción aquÃ...",titleOptional:"TÃtulo (opcional)",titleNote:"Máx. 80 caracteres. Si está vacÃo, se generará a partir de la descripción/estilo.",vocalGender:"Género de la voz",vocalGenderNote:'Aumenta la probabilidad del género elegido (no garantiza el 100%). Se ignora si "Instrumental" está activo.',negativeTags:"Tags negativos (opcional)",negativeTagsPlaceholder:"Ej.: Heavy Metal, baterÃa agitada",negativeTagsNote:"Estilos a evitar en la generación.",instrumental:"Instrumental (sin voz)",modelLabel:"Modelo",durationSeconds:"Duración (segundos)",maxSeconds:"Máximo: {{seconds}}s.",generationMode:"Modo de generación",standardMode:"Standard (más rápido / económico)",proMode:"Pro (mayor resolución)",nativeAudio:"Audio nativo",nativeAudioNote:"Genera pista + diálogos sincronizados. Aumenta el costo en créditos.",pixverse1080pNote:"1080p disponible solo con duración de 5s.",styleOptional:"Estilo (opcional)",noneRealistic:"Ninguno (realista)",styleNote:'Aplica un estilo visual al video generado. Deja en "Ninguno" para un resultado realista estándar.',requiresReferenceImageNote:'Este modelo requiere imagen de referencia. Habilita "Usar imagen de referencia" abajo.',promptRequired:"Prompt *",promptPlaceholder:"Describe lo que quieres generar...",musicPromptRequired:"Prompt de la música *",musicTitlePlaceholder:"Ej.: Madrugada de Verano",musicPromptFreepikPlaceholder:"Ej.: Lo-fi chill con piano y baterÃa suave",mustBeLoggedIn:"Necesitas iniciar sesión",imageLimitReached:"LÃmite de {{max}} imágenes alcanzado para este modelo",unsupportedFormat:"Formato no admitido: {{name}}. Usa PNG/JPG/WebP.",fileExceeds8mb:'El archivo "{{name}}" supera los 8MB',uploadingFile:"Enviando {{name}}...",uploadFailed:"Error al enviar {{name}}: {{message}}",fileUploaded:"{{name}}
510 enviada",noPublicUrl:"Sin URL pública para {{name}}",useReferenceImage:"Usar imagen de referencia",useReferenceImageNote:"Habilita el modo {{mode}}. Este modelo acepta hasta {{max}} imagen{{plural}} (del lead y/o tuyas).",imagesUsedCount:"{{used}} de {{max}} {{imageWord}} ({{leadCount}} del lead + {{ownCount}} {{ownWord}})",pixverseTransitionNote:"Pixverse Transition requiere exactamente 2",leadImageVariables:"Variables de imagen del lead",noImageVariableAvailable:"No hay ninguna variable de imagen disponible.",selectVariablePlaceholder:"Selecciona la variable...",removeAction:"Quitar",myReferenceImages:"Mis imágenes de referencia",leadVariable:"Variable del lead",uploadFromComputer:"Subir desde mi computadora",noLeadVariableNote:{before:"Para usar variables del lead, agrega antes un bloque",middle:'con "Guardar imagen enviada por el lead" habilitada, u otro',after:'(tipo Imagen) con "Guarda el archivo en" completado.'},waitInputBlock:'"Esperar respuesta"',iaGeneratorBlock:'"Generador IA"',errorVariable:"Variable de error",errorVariableNote:"Recibe el mensaje de error.",sendAsViewOnce:"Enviar como visualización única",sendAsViewOnceNote:"El archivo desaparece después de que el lead lo vea (solo imagen y video en WhatsApp).",blockOutputs:"Salidas del bloque:",outputSuccess:"Ãxito",outputSuccessNote:"archivo generado y enviado al lead",outputError:"Error",outputErrorNote:"cualquier fallo",image:"imagen",images:"imágenes",yourSingular:"tu",yourPlural:"tus"},dialog:{editComponent:"Editar componente",mentionAllGroup:"Mencionar a todos del grupo (@all)",mentionAllGroupNote:"Cuando está activo, este mensaje mencionará a todos los participantes del grupo.",miniFlowSaved:"¡Mini-flujo guardado con éxito!"},pixelDialog:{title:"Registrar Pixel de Facebook",nameOptional:"Nombre (opcional)",namePlaceholder:"Ej: Pixel Principal",pixelIdRequired:"ID del Pixel",pageId:"Page ID",accessTokenRequired:"Token de Acceso",accessTokenPlaceholder:"Token de acceso de Facebook",savePixel:"Guardar Pixel",pixelRegistered:"¡Pixel registrado!",registerError:"Error al registrar el pixel: {{message}}"},condition:{outputNote:'El flujo seguirá por la salida "SÃ" si las condiciones son verdaderas, o "No" en caso contrario.'}},d2={configureUrlFirst:"Configura primero la URL del webhook",testFailed:"Error al probar",variablesSaved:"{{count}} variables guardadas para usar en los siguientes bloques.",testWebhook:"Probar webhook",statusLabel:"Estado {{status}}",variablesDetected:"Variables detectadas ({{count}}):",saveDetectedVariables:"Guardar variables detectadas",savedVariablesNote:"{{count}} variables guardadas â úsalas como",inNextBlocks:"en los siguientes bloques.",extractedVariables:"Variables extraÃdas:",someExtractorsDidNotMatch:"Algún extractor configurado no encontró coincidencia en la respuesta de prueba.",usingRealSample:'Probando con los datos del último evento recibido en "{{source}}".',missingVariables:"{{count}} variable(s) no existen y se enviarán en blanco:",resolvedByPrefix:"Corregido automáticamente â el nombre real lleva el prefijo webhook_:",sentBody:"Cuerpo enviado:",receivedResponse:"Respuesta recibida:"},u2={eventReceived:"¡Evento recibido!",listeningCancelled:"Escucha cancelada",saveFlowFirst:"Guarda el flujo antes de probar el webhook",startError:"No se pudo iniciar la escucha: {{message}}",noEventReceived:"No se recibió ningún evento en 1 minuto",listenTooltip:"Escuchar el próximo evento durante 1 minuto",startingListen:"Iniciando escucha...",listenTestEvent:"Escuchar evento de prueba",listening:"Escuchando... {{mm}}:{{ss}}",stopListening:"Dejar de escuchar",viewReceivedParams:"Ver parámetros recibidos",listenAgain:"Escuchar de nuevo",receivedParamsTitle:"Parámetros recibidos en el webhook",receivedAt:"Recibido el {{date}}",copyJson:"Copiar JSON",headers:"Headers",useFieldNamesNote:"Usa estos nombres de campo como variables en el flujo:",generatedVariables:"Variables generadas ({{count}})",copyAllNames:"Copiar nombres",clickToCopy:"Clic para copiar"},m2={loadError:"No se pudieron cargar los emojis",loadingEmojis:"Cargando emojis...",insertEmoji:"Insertar emoji"},p2={defaultRequiredHelp:"Obligatorio. Sin tu clave de API, este bloque no responde.",defaultDisconnectedHelp:"Ninguna clave conectada en la Integración de IA de Plataforma. Sin ella, este bloque no responde.",myKey:"Mi clave",integrationKey:"Clave de la Integración",loadingIntegrationStatus:"Cargando estado de la integraciónâ¦",usingKey:"Usando {{keyName}} ({{provider}}).",yourKey:"tu clave",manage:"Gestionar",noNickname:"(sin apodo)",defaultSuffix:"(predeterminada)",connectNow:"Conectar ahora"},h2={currencies:{BRL:"Real Brasileño (BRL)",USD:"Dólar Estadounidense (USD)",EUR:"Euro (EUR)",GBP:"Libra Esterlina (GBP)",ARS:"Peso Argentino (ARS)",MXN:"Peso Mexicano (MXN)",COP:"Peso Colombiano (COP)",CLP:"Peso Chileno (CLP)",PEN:"Sol Peruano (PEN)",JPY:"Yen Japonés (JPY)",CAD:"Dólar Canadiense (CAD)",AUD:"Dólar Australiano (AUD)",CHF:"Franco Suizo (CHF)"},eventLabel:"Evento {{number}}",pixelLabel:"Pixel *",allPixels:"Todos los Pixels",selectPixelPlaceholder:"Selecciona un pixel...",pixelFallbackName:"Pixel {{id}}",noPixelConfigured:"No hay ningún pixel configurado.",registerPixel:"Registrar Pixel",eventTypeLabel:"Evento *",eventTypes:{purchase:"Compra (Purchase)",lead:"Lead",initiateCheckout:"Iniciar Checkout (InitiateCheckout)",addToCart:"Agregar al Carrito (AddToCart)"},currencyLabel:"Moneda",currencyDefaultNote:{before:"Predeterminado:",brl:"BRL (Real Brasileño)",after:". El evento se enviará a Meta con la moneda seleccionad
510a."},eventValueLabel:"Valor del Evento ({{symbol}})",eventValuePlaceholder:"Ej: 97.00 o {{syntax}}",eventValueTitle:"Valor extraÃdo automáticamente del comprobante PIX",eventValueButton:"event_value (valor del PIX)",eventValueNote:{before:"Deja vacÃo o usa",after:"para enviar el valor extraÃdo del comprobante PIX automáticamente. Moneda:"},addEvent:"Agregar Evento",emptyState:"Agrega uno o más eventos para dispararse en secuencia cuando el flujo pase por este bloque."},f2={categories:{messages:"Mensajes",control:"Control",actions:"Acciones"},nodeLabels:{text:"Texto",aiText:"Texto con IA",image:"Imagen",audio:"Audio",audioAI:"Audio IA",video:"Video",document:"Documento",sticker:"Figurita",contact:"Contacto",call:"Llamada",interactiveBlock:"Mensaje Interactivo",carousel:"Carrusel",iaGenerator:"Generador de IA",delay:"Retraso",waitInput:"Esperar Respuesta",waitInputAI:"Esperar Respuesta IA",aiResponder:"IA Respondedor",condition:"Condición",randomizer:"Aleatorizador",pixel:"Pixel",passageTracker:"Conteo de Leads",tag:"Acciones",sendPixKey:"Enviar Clave PIX",pixApi:"API de Pagos",sendCharge:"Enviar Cobro",notifyAdmin:"Notificar Admin",goToFlow:"Conectar Flujo",whatsappLabel:"Etiqueta de WhatsApp",webhook:"Webhook",calculator:"Calculadora",xpag:"XPag",zenith:"Zenith"},components:"Componentes",comingSoon:"Próximamente",removalDate:"Se elimina el 11/may",deprecatedTooltip:"Este bloque se eliminará el 11/may. Usa el disparador de PIX detectado en lugar de este bloque."},g2={blockNumberTitle:"Bloque #{{number}} â usa este número al hablar con soporte"},v2={nodeLabels:{text:"Texto",aiText:"Texto IA",image:"Imagen",audio:"Audio",audioAI:"Audio IA",video:"Video",document:"Documento",sticker:"Figurita",contact:"Contacto",interactiveBlock:"Interactiva",carousel:"Carrusel",delay:"Retraso",waitInput:"Esperar",condition:"Condición",randomizer:"Random",pixel:"Pixel",tag:"Acciones",sendPixKey:"PIX",zenith:"Zenith",pixApi:"API Pag.",xpag:"XPag",notifyAdmin:"Notificar",goToFlow:"Ir a Flujo"},defineNameError:"Define el nombre del mini-flujo",defineTriggerError:"Define el disparador/intención del mini-flujo",flowName:"Nombre del flujo",flowNamePlaceholder:"Ej: Objeción de precio",triggersLabel:"Disparadores / Intenciones",triggersPlaceholder:"Describe cuándo la IA debe activar este flujo... Ej: Cuando el cliente diga que no tiene dinero, que está caro, o pida descuento",triggersHint:"Describe en lenguaje natural las intenciones que deben activar este flujo.",flowActive:"Flujo activo",blocks:"Bloques",incompletePaymentBlock:"Bloque de pago incompleto: {{issues}}",saveMiniFlow:"Guardar Mini-Flujo",configureBlock:"Configurar Bloque",dialogTitle:"Base de Conocimiento - Mini Flujo"},b2={uploadingImage:"Enviando imagen...",uploadError:"Error al enviar: {{message}}",imageUploaded:"¡Imagen enviada!",unexpectedError:"Error inesperado: {{message}}",tryAgainFallback:"intenta de nuevo",upload:"Subir",base64Variable:"Base64 / Variable",imageLoaded:"Imagen cargada.",noImageSelected:"No hay ninguna imagen seleccionada.",urlPlaceholder:"https://ejemplo.com/imagen.jpg",base64Placeholder:"data:image/png;base64,... o {{syntax}}",previewUnavailable:"Vista previa no disponible: el valor contiene una variable, se resolverá en tiempo de ejecución.",previewAlt:"Vista previa"},y2={removed:"Flujo de grupo eliminado",groupBadge:"GRUPO",editTooltip:"Editar flujo de grupo",deleteTitle:"¿Eliminar flujo de grupo?",deleteDescription:'"{{name}}" será eliminado permanentemente.'},x2={speed:"Velocidad",imageNotLoaded:"ð· Imagen no cargada",defaultDocumentName:"documento.pdf",pdfTapToOpen:"PDF ⢠Toca para abrir",simulator:"Simulador",online:"en lÃnea",offline:"desconectado",restart:"Reiniciar",flowSimulatorTitle:"Simulador de Flujo",testFlowSubtitle:"Prueba tu flujo como si fueras un lead real",startTest:"Iniciar Prueba",typing:"Escribiendo... {{seconds}}s",variables:"Variables:",messagePlaceholder:"Mensaje",waitingPlaceholder:"Esperando...",testAgain:"Probar de nuevo"},w2={period:"PerÃodo:",today:"Hoy",yesterday:"Ayer",last7Days:"Ãltimos 7 dÃas",sessions_one
510:"{{count}} sesión",sessions_other:"{{count}} sesiones",conversionRate:"{{rate}}% finalizaron"},C2={messageType:{text:"Texto",audio:"Audio",document:"Documento",media:"Multimedia (imagen, video o figurita)"},deleteVariableError:"Error al eliminar la variable",variableDeleted:'Variable "{{name}}" eliminada con éxito',tagCreated:'Tag "{{name}}" creada con éxito',variableCreated:'Variable "{{name}}" creada con éxito',combineWith:"Combinar condiciones con",andOperator:"Y (todas deben ser verdaderas)",orOperator:"O (al menos una verdadera)",variableBadge:"Variable",tagBadge:"Tag",countryBadge:"PaÃs",aiBadge:"IA",andShort:"Y",orShort:"O",variableLabel:"Variable",selectPlaceholder:"Selecciona...",systemGroup:"Sistema",systemSuffix:"(sistema)",customGroup:"Personalizadas",webhookGroup:"Webhook",newVariable:"+ Nueva variable",operatorLabel:"Operador",operators:{equals:"Igual a",notEquals:"Diferente de",contains:"Contiene",notContains:"No contiene",startsWith:"Empieza con",endsWith:"Termina con",greater:"Mayor que",less:"Menor que",exists:"Existe (no vacÃo)",notExists:"No existe (vacÃo)"},valueLabel:"Valor",valuePlaceholder:"Valor...",valuePlaceholderTime:"Ej: 13:00",valuePlaceholderHour:"Ej: 13",variableHints:{horario:"reloj HH:MM",horaAtual:"hora 0â23",dataAtual:"fecha YYYY-MM-DD",timeOfDay:"dia | tarde | noite",diaDaSemana:"segunda-feira ⦠domingo"},timeOfDay:{day:"DÃa (05:00â11:59)",afternoon:"Tarde (12:00â17:59)",night:"Noche (18:00â04:59)"},tagConditionLabel:"Condición de la Tag",tagHas:"El contacto TIENE la tag",tagNotHas:"El contacto NO TIENE la tag",tagNameLabel:"Nombre de la Tag",selectTagPlaceholder:"Selecciona una tag...",noTagsYet:"TodavÃa no se creó ninguna tag",newTag:"+ Nueva tag",countryConditionLabel:"Condición del PaÃs",countryIs:"El teléfono ES de este paÃs",countryIsNot:"El teléfono NO ES de este paÃs",countryLabel:"PaÃs",selectCountryPlaceholder:"Selecciona un paÃs...",countryMostUsedGroup:"Más usados",countryOthersGroup:"Otros paÃses",countryNote:"Identifica el paÃs por el código de discado (DDI) del teléfono del contacto. Los DDI compartidos por varios paÃses (ej.: +1 = EE. UU./Canadá) aparecen como una sola opción.",iaIntro:"La IA analizará las tags, el contexto de la conversación, la base de conocimiento y el último mensaje para decidir Sà o No.",iaExclusiveNote:{before:"Tipo exclusivo â este nodo no se puede combinar con variables o tags. Conecta la salida",errorLabel:"â Error IA",after:"para manejar fallos de la IA (tiempo agotado, cuota, etc.)."},criteriaYes:"Criterio para SÃ",criteriaYesPlaceholder:"Ej: El cliente mostró interés en comprar el producto",criteriaNo:"Criterio para NO",criteriaNoPlaceholder:"Ej: El cliente no mostró interés o rechazó la oferta",criteriaNote:"La IA considerará ambos criterios, la base de conocimiento y el contexto de la conversación.",aiModelLabel:"Modelo de IA (decisión SÃ/NO)",aiModelNote:"La condición con IA usa TU clave (OpenAI, Gemini, Anthropic o DeepSeek) o la clave ya conectada en la Integración de IA de Plataforma â sin clave, la condición no se ejecuta.",providerLabel:"Proveedor",providerPlaceholder:"Selecciona el proveedor (tu clave)",providerGemini:"Gemini (Google) â tu clave",providerOpenAI:"GPT (OpenAI) â tu clave",providerAnthropic:"Claude (Anthropic) â tu clave",providerDeepSeek:"DeepSeek â tu clave",apiKeyLabel:"Clave de la API *",apiKeyHelp:"Clave obligatoria. También se usa para transcribir audio (si está activado abajo, y si el proveedor lo admite).",modelLabel:"Modelo",understandAudio:"Entender audio",audioUnsupportedNote:"No disponible para Claude (Anthropic) y DeepSeek â cambia a OpenAI o Gemini para usar esta función.",audioSupportedNote:"Transcribe audios antes de que la IA los analice. Requiere proveedor OpenAI o Gemini con clave configurada arriba.",audioNoKeyWarning:"Configura un proveedor (OpenAI o Gemini) con tu clave, o conecta la Integración de IA de Plataforma, arriba, para transcribir audio en este bloque.",audioScopeLabel:"Alcance de audios",audioScopeLast:"Solo el último audio",audioScopeAll:"Todos los audios de la conversación",audioScopeNote:"Define cuántos audios se transcribirán para que la IA los analice.",variableNamePlaceholder:"Nombre de la variable",newTagPlaceholder:"Nombre de la tag",exclusiveIaRemoveForVariable:"La condición IA es exclusiva â elimÃn
510ala para agregar una variable",addVariableButton:"+ Variable",exclusiveIaRemoveForTag:"La condición IA es exclusiva â elimÃnala para agregar una tag",addTagButton:"+ Tag",exclusiveIaRemoveForCountry:"La condición IA es exclusiva â elimÃnala para agregar paÃs",addCountryButton:"+ PaÃs",iaAlreadyExists:"Ya existe una condición IA (máx 1)",iaExclusiveRemoveOthers:"La condición IA es exclusiva â elimina variables/tags antes de agregar",addIaCondition:"+ Condición IA",maxOneSuffix:"(máx 1)",exclusiveSuffix:"(exclusiva)",emptyState:"Agrega condiciones para verificar variables, tags o el paÃs del contacto â o una condición IA (exclusiva)."},P2={keyword:"Palabra clave",all:"Cualquier mensaje",sale:"Pago detectado",tag:"Etiqueta",webhook:"Webhook"},A2={models:{eleven_v3:"Eleven v3 â más expresivo",eleven_multilingual_v2:"Multilingual v2 â más natural",eleven_turbo_v2_5:"Turbo v2.5 â rápido",eleven_flash_v2_5:"Flash v2.5 â más rápido"},modelHelp:"Eleven v3 es el más expresivo (admite etiquetas como [whispers] y [laughs]). Multilingual v2 suena natural en español. Turbo y Flash son más rápidos.",languages:{auto:"Automático (detectado por el texto)",pt:"Portugués",es:"Español",en:"Inglés",fr:"Francés",de:"Alemán",it:"Italiano",nl:"Neerlandés",pl:"Polaco",sv:"Sueco",tr:"Turco",ru:"Ruso",uk:"Ucraniano",ar:"Ãrabe",hi:"Hindi",zh:"Chino (mandarÃn)",ja:"Japonés",ko:"Coreano",id:"Indonesio",ms:"Malayo",vi:"Vietnamita",fil:"Filipino"}},E2={descriptions:{kieImage:{"gpt-image-2":"Fotorrealismo, edición precisa, texto nÃtido. Acepta hasta 16 imágenes de referencia y elección de resolución 1K/2K/4K.",wanV27ImagePro:"Generación y edición de imágenes en alta resolución (hasta 4K en text-to-image). Acepta imagen de referencia (image-to-image, máx. 2K)."},kieVideo:{"gemini-omni-video":"Multimodal de Google: 4/6/8/10s, hasta 4K. Acepta hasta 7 imágenes de referencia.",kling30:"Video cinemático de hasta 15s con audio nativo, multi-shot y modos STD/PRO."},freepikImage:{"nano-banana-pro":"Modelo insignia de Freepik para generación de imágenes. Acepta hasta 4 imágenes de referencia.","nano-banana-pro-flash":"Versión más rápida y económica de Nano Banana Pro. Acepta hasta 4 imágenes de referencia."},freepikVideo:{"kling-v2-5-pro":"Video cinemático image-to-video (Kling 2.5 Turbo Pro). Requiere imagen de referencia.","veo-3-1":"Modelo Google Veo 3.1 (calidad). Admite text-to-video e image-to-video (hasta 2 frames).","veo-3-1-fast":"Versión rápida de Veo 3.1. Admite text-to-video e image-to-video (hasta 2 frames).","pixverse-v5":"Image-to-video Pixverse V5. Requiere imagen inicial.","pixverse-v5-transition":"Transición entre dos frames (inicial y final). Requiere dos imágenes."},freepikMusic:{"music-generation":"Generación de música por prompt. Admite vocal o instrumental."}},vocalGenders:{auto:"Automático",m:"Masculino",f:"Femenino"}},S2={actionTypes:{add_tag:{label:"Añadir etiqueta",shortLabel:"Etiqueta"},remove_tag:{label:"Quitar etiqueta",shortLabel:"Etiqueta"},set_field:{label:"Definir campo del usuario",shortLabel:"Campo"},clear_field:{label:"Borrar campo personalizado",shortLabel:"Campo"},delete_contact:{label:"Eliminar contacto",shortLabel:"Contacto"},mark_read:{label:"Marcar conversación como leÃda",shortLabel:"LeÃda"},mark_unread:{label:"Marcar conversación como no leÃda",shortLabel:"No leÃda"},mark_open:{label:"Reabrir en el Kanban (Pipeline)",shortLabel:"Reabrir Kanban"},mark_closed:{label:"Archivar en el Kanban (Pipeline)",shortLabel:"Archivar Kanban"},mark_conversation_open:{label:"Marcar conversación del Inbox como abierta",shortLabel:"Abierta (Inbox)"},mark_conversation_closed:{label:"Marcar conversación del Inbox como cerrada",shortLabel:"Cerrada (Inbox)"},edit_message:{label:"Editar mensaje",shortLabel:"Editar msj"},delete_message:{label:"Borrar mensaje",shortLabel:"Borrar msj"}},groups:{contact:"Datos del contacto",inbox:"Bandeja de entrada",messages:"Mensajes"}},N2={channelInstanceMismatch:s_,aiNode:l_,aiResponderNode:c_,aiTextNode:d_,audioAiNode:u_,audioNode:m_,calculatorNode:p_,callNode:h_,carouselNode:f_,conditionNode:g_,contactNode:v_,delayNode:b_,documentNode:y_,endNode:x_,goToFlowNode:w_,iaGeneratorNode:C_,imageNode:P_,interactiveBlockNode:A_,menuNode:E_,notifyAdminNode:S_,passageTrackerNode:N_,pixApiNode:k_,pixApiValidation:T_,pixelNode:I_,randomizerNode:R_,sendChargeNode:D_,sendPixKeyNode:M_,setVariableNode:F_,startNode:L_,stickerNode:j_,tagNode:__,textNode:O_,transferNode:B_,videoNode:z_,waitInputAINode:V_,waitInputNode:q_,webhookNode:U_,whatsAppLabelNode:W_,timeUnits:$_,cloneFunnel:G_,contentBlockForm:H_,createGroupFlow:K_,fakeReceiptDetection:X_,flowSettingsDialog:Y_,passageMetricsDialog:Q_,trashDialog:Z_,simulator:J_,groupFlowsPage:e2,preview:t2,editor:a2,flowList:o2,actionsEditor:n2,audioAIProperties:r2,audioRecorderButton:i2,contentBlocksTab:s2,flowCanvas:l2,propertiesPanel:c2,webhookNodeTester:d2,webhookTestListener:u2,textareaWithEmoji:m2,platformAIKeySourceField:p2,pixelEventsEditor:h2,nodeSidebar:f2,nodeAnalyticsWrapper:g2,miniFlowBuilder:v2,interactiveImageInput:b2,groupFlowInlineRow:y2,flowSimulatorPhone:x2,flowAnalyticsBar:w2,conditionEditor:C2,triggerLabels:P2,audioAIModels:A2,iaGeneratorModels:E2,actionsBlock:S2},k2={metrics:{spend:"Gasto total",cpc:"CPC (costo por clic en el link)",cpa:"CPA (costo por venta)",costPerMessage:"Costo por mensaje"},toasts:{addError:"Error al agregar la regla",updateError:"Error al actualizar",removeError:"Error al eliminar"},accountsLabel:{all:"Todas las cuentas activas",count:"{{count}}
510 cuentas seleccionadas"},rulesInfo:{pre:"Reglas evaluadas cada 10 min con filtro",today:"diario (hoy)",post:"Notifica cada vez que la regla se cumple."},empty:'TodavÃa no creaste ninguna regla. Hacé clic en "Agregar regla" para empezar.',active:"Activa",inactive:"Desactivada",metric:"Métrica",adAccounts:"Cuentas de anuncios",leaveEmptyAllAccounts:"Dejalo vacÃo = todas las cuentas",noActiveAccounts:"No hay cuentas activas.",operator:"Operador",operators:{gt:"> (mayor que)",gte:">= (mayor o igual)",lt:"< (menor que)",lte:"<= (menor o igual)"},addRule:"Agregar regla"},T2={systems:{automatiZap:{label:"Automati-Zap",description:"Acceso al sistema de automatización"},metricas:{label:"Métricas",description:"Acceso a las métricas de ventas"},organizadorNumeros:{label:"Organizador de Números",description:"Acceso al organizador"}},automatiZapDetails:{flows:{label:"Acceder a Flujos",description:"Ver y acceder a los flujos de automatización"},editFlows:{label:"Editar Flujos",description:"Crear y editar flujos"},deleteContacts:{label:"Borrar Contactos",description:"Eliminar contactos del inbox"}},toasts:{loadError:"Error al cargar los colaboradores",settingSaved:"¡Configuración guardada!",settingSaveError:"Error al guardar la configuración",fillAllFields:"Completá todos los campos",passwordMinLength:"La contraseña debe tener al menos 6 caracteres",createSuccess:"¡Colaborador creado con éxito!",createError:"Error al crear el colaborador",updateSuccess:"¡Colaborador actualizado!",updateError:"Error al actualizar",removeSuccess:"¡Colaborador eliminado!",removeError:"Error al eliminar"},systemsTitle:"Sistemas",automatiZapDetailsTitle:"Detalles Automati-Zap",globalSettings:{title:"Configuración de los Colaboradores",description:"Configuraciones globales que afectan a todos los colaboradores",hideInstances:{label:"Ocultar instancias",description:"Los colaboradores verán solo las conversaciones, sin filtro de instancia"},messageSigning:{label:"Firmar mensajes",description:"Mostrar el nombre del colaborador arriba de cada mensaje que envÃa"}},title:"Colaboradores",subtitle:"Creá subcuentas con acceso limitado para tu equipo",newCollaborator:"Nuevo Colaborador",createDialog:{title:"Crear Colaborador",namePlaceholder:"Nombre del colaborador",emailLabel:"Email (login)",emailPlaceholder:"[email protected]",passwordPlaceholder:"MÃnimo 6 caracteres"},permissionsTitle:"Permisos",empty:{title:"TodavÃa no creaste ningún colaborador",description:"Creá subcuentas para que tu equipo acceda a tus sistemas"},status:{active:"Activo",inactive:"Inactivo"},deleteDialog:{title:"¿Eliminar colaborador?",description:{pre:"Esto eliminará permanentemente el acceso de"}},visibleInstances:{title:"Instancias Visibles",description:"Definà qué instancias puede ver este colaborador",noInstancesFound:"No se encontraron instancias",online:"En lÃnea",noneSelectedWarning:"No hay ninguna instancia seleccionada - el colaborador no verá ninguna instancia",allVisible:"Todas las instancias están visibles (sin restricción)"},savePermissions:"Guardar Permisos"},I2={title:"Integración ElevenLabs",subtitle:"Usá tu propia cuenta de ElevenLabs para generar audios y voces. El consumo se cobra directo en tu cuenta de ElevenLabs.",toasts:{pasteKey:"Pegá tu clave de API de ElevenLabs.",validateError:"No se pudo validar la clave.",connected:"¡Integración ElevenLabs conectada!",saveError:"Error al guardar la integración. Intentá de nuevo.",removed:"Integración eliminada.",removeError:"Error al eliminar la integración."},apiKey:{title:"Clave de la API",connected:"Conectado",notConfigured:"No configurado",descriptionConnected:"Tu clave está guardada. Pegá una nueva clave abajo para reemplazarla.",descriptionNotConnected:"Pegá tu clave de API de ElevenLabs para activar las funciones de voz.",placeholderSaved:"â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢ (guardada)",validating:"Validando...",testAndSave:"Probar y guardar",createKeyAt:"Creá tu clave en",keyStoredPre:"La clave se guarda solo en tu cuenta. Al crearla, dejá la opción",restrictKeyOff:'"Restrict Key" desactivada',keyStoredPost:"las claves restringidas por permisos suelen ser rechazadas por faltar un acceso que ElevenLabs no deja claro.",connectedOn:"Conectado el {{date}}",keyConfigured:"Clave configurada"},subscription:{plan:"Plan",usage:"Uso",characters:"caracteres"}
510,legacyVoices:{title:"Voces personalizadas antiguas",description:{pre:"Las voces personalizadas que clonaste antes de este cambio vivÃan en una cuenta compartida y",noLongerWork:"ya no funcionan",mid:"Para seguir usando voz clonada, reclonala en el",audioGenerator:"Generador de Audio",post:"se va a crear ahora en tu propia cuenta de ElevenLabs."},readyVoicesNote:"Las voces predefinidas (no personalizadas) siguen funcionando normalmente."},usedIn:{title:"Dónde se usa la integración",audioGenerator:"Generador de Audio (texto â voz)",voiceCloning:"Clonación de voz personalizada",aiFlowResponse:'Respuesta en audio de los flujos de IA y del bloque "IA responder"',noKeyNote:"Sin la clave configurada, estas funciones quedan indisponibles y los flujos de IA responden en texto."}},R2={title:"Lara Translate",subtitle:'Conecta tu cuenta de Lara Translate para que "Traducir Flujo" también traduzca imágenes y documentos (PDF) de los bloques del flujo â hoy ya traduce texto y audio. La traducción usa tu cuota de Lara, no la de ZapData.',connectCard:{title:"Conectar Lara Translate",description:"Probamos la credencial en Lara antes de guardar â si no funciona, lo descubres aquà y no en medio de una traducción."},fields:{label:"Apodo (opcional)",labelPlaceholder:"Ej: Cuenta principal...",accessKeyId:"Access Key ID",accessKeyIdPlaceholder:"Pega el Access Key ID",accessKeySecret:"Access Key Secret",accessKeySecretPlaceholder:"Pega el Access Key Secret"},generateCredentialsAt:"Generar credenciales en Lara",testing:"Probando...",testAndConnect:"Probar y conectar",toasts:{validateError:"No fue posible validar la credencial.",connected:"¡Lara Translate conectada!",saveError:"Error al guardar la credencial. Intenta de nuevo.",renameError:"Error al renombrar.",defaultUpdated:"Credencial predeterminada actualizada.",defaultError:"Error al definir la credencial predeterminada.",removed:"Credencial eliminada.",removeError:"Error al eliminar."},connectedAccounts:{title:"Cuentas conectadas",description:'La credencial marcada "Predeterminada" es la usada cuando el bloque de traducción no elige una especÃfica.',default:"Predeterminada",noLabel:"(sin apodo)",connectedOn:"Conectado el {{date}}",makeDefault:"Hacer predeterminada"},deleteDialog:{title:"Eliminar credencial",descriptionDefault:"Esta es la credencial predeterminada. Al eliminarla, otra credencial conectada se promueve a predeterminada automáticamente (o, si era la única, traducir imagen/documento queda indisponible hasta que conectes otra).",descriptionNotDefault:"Eliminar esta credencial no afecta a la predeterminada.",confirm:"Eliminar"},usedIn:{title:"Dónde se usa la integración",description1:"En el botón Traducir Flujo del Flow Builder â cuando el flujo tiene bloques de imagen o documento (PDF), aparece la opción de traducirlos también usando esta cuenta.",description2:'Sin ninguna cuenta conectada, la opción de traducir imagen/documento queda deshabilitada; el resto de "Traducir Flujo" (texto y audio) sigue funcionando normalmente.'}},D2={toasts:{nameRequired:"El nombre de la integración es obligatorio",created:"¡Webhook global creado!",createError:"Error al crear el webhook",activated:"Webhook activado",deactivated:"Webhook desactivado",statusChangeError:"Error al cambiar el estado",updated:"¡Webhook actualizado!",updateError:"Error al actualizar el webhook",deleted:"¡Webhook eliminado!",deleteError:"Error al eliminar el webhook",urlCopied:"¡URL copiada!"},title:"Webhook Global",newBadge:"Nuevo",subtitle:"Recibà eventos de cualquier sistema externo y disparás flujos automáticamente",newIntegration:"Nueva Integración",howItWorks:{title:"¿Cómo funciona?",description:"Configurá una URL de webhook y enviá cualquier payload JSON. El sistema detecta automáticamente el campo de teléfono (phone, telefone, client_phone, whatsapp, celular, mobile) y dispara el flujo configurado. Todos los campos del payload quedan disponibles como variables con el prefijo"},empty:{title:"No hay ningún webhook configurado",description:"Creá tu primer webhook global para empezar a recibir eventos externos"},createWebhook:"Crear Webhook",status:{active:"Activo",inactive:"Inactivo"},webhookUrl:"URL del Webhook",flowToTrigger:"Flujo a disparar",selectFlow:"Seleccioná un flujo...",instanceToTrigger:"Instancia para Disparar",firstConnected:"Primera conectada (predeterminada)",instanceWillTrigger:"Esta instancia se usará para disparar el flujo.",history:"Historial (últimas 24h)",hide:"Ocultar",viewPayload:"Ver payload",noEventsLast24h:"No hay eventos en las últimas 24 horas",createDialog:{title:"Nueva Integración Webhook",de
510scription:"Configurá una nueva integración para recibir eventos externos",nameLabel:"Nombre de la Integración *",namePlaceholder:"Ej: Hotmart, Kiwify, Mi API..."},deleteDialog:{title:"Eliminar Webhook",description:"¿Estás seguro de que querés eliminar este webhook? Esta acción no se puede deshacer."},eventTriggered:"Flujo disparado",eventNotTriggered:"No disparó",eventErrors:{noConnectedInstance:"Ningún WhatsApp estaba conectado cuando llegó el evento â el flujo no se ejecutó.",selectedInstanceOffline:"El WhatsApp elegido para este webhook estaba desconectado â el flujo no se ejecutó.",noPhone:"No se pudo identificar el teléfono del cliente en este payload.",noFlow:"Ningún flujo seleccionado para este webhook.",flowNotFound:"El flujo seleccionado fue eliminado o está en la papelera.",groupFlow:"Los flujos de grupo no se pueden disparar por webhook.",contactFailed:"Error al crear el contacto a partir de este evento."}},M2={title:"Integraciones",subtitle:"Gestioná todas las integraciones de la plataforma",tabs:{pixel:"Pixel de Facebook",logzz:"Integración Logzz",elevenlabs:"Integración ElevenLabs",platformAi:"Integración de IA de Plataforma",mcp:"Conectar con Claude (MCP)",pixGateway:"Gateways de Pago",xpag:"XPag",zenith:"Zenith",laraTranslate:"Lara Translate"},badgeBeta:"Beta",badgeNew:"Nuevo"},F2={loadError:"Error al cargar las instancias",invalidValue:"Valor inválido",invalidValueDescription:"Usá un número mayor o igual a 1, o dejalo vacÃo para usar el valor global.",overrideRemoved:"Personalización eliminada",overrideSaved:"¡LÃmite personalizado guardado!",backToGlobalLimit:"Esta instancia volvió a usar el lÃmite global.",nowUsesLimit:"Esta instancia ahora usa {{limit}} leads/dÃa como lÃmite.",customizePerInstance:"Personalizar por instancia",loadingInstances:"Cargando instancias...",noInstancesFound:"No se encontraron instancias.",noRowUpdatedError:"No se actualizó ninguna fila (¿permiso?)"},L2={eventTypes:{pedido:"Pedido",abandonoCarrinho:"Carrito Abandonado",expedicaoTradicional:"Expedición Tradicional"},toasts:{routingOn:"Va a seguir siempre en la instancia de origen del lead",routingOff:"Va a usar la instancia configurada en cada webhook",routingUpdateError:"Error al actualizar la configuración",nameRequired:"Escribà un nombre para la integración",createSuccess:"¡Integración creada con éxito!",createError:"Error al crear la integración",removeSuccess:"¡Integración eliminada!",removeError:"Error al eliminar la integración",tokenRegenerated:"¡Token regenerado!",tokenRegenerateError:"Error al regenerar el token",activated:"¡Integración activada!",deactivated:"¡Integración desactivada!",statusChangeError:"Error al cambiar el estado",flowUpdated:"¡Flujo actualizado!",flowUpdateError:"Error al actualizar el flujo",instanceUpdated:"¡Instancia actualizada!",instanceUpdateError:"Error al actualizar la instancia",orderStatusesUpdated:"¡Estados del pedido actualizados!"},title:"Integraciones Logzz",subtitle:"Recibà webhooks de pedidos y disparás flujos automáticamente",newIntegration:"Nueva Integración",routing:{title:"Evitar contacto duplicado entre instancias",description:"Si el mismo lead cae en webhooks configurados para instancias distintas (por ej.: Logzz entrega el mismo pedido a más de una integración tuya), siempre continúa en la instancia donde ese lead ya tiene una conversación, en vez de abrir un contacto nuevo en la instancia configurada en ese webhook especÃfico. Dejalo apagado si usás varias instancias a propósito, para enviar el mismo mensaje por más de un número."},empty:{title:"No hay ninguna integración configurada",description:"Creá tu primera integración para empezar a recibir eventos de Logzz"},createIntegration:"Crear Integración",unnamedIntegration:"Integración sin nombre",status:{active:"Activo",inactive:"Inactivo",label:"Estado"},event:"Evento",webhookUrl:"URL del Webhook",flowToTrigger:"Flujo a disparar",selectFlow:"Seleccioná un flujo",noFlow:"Ningún flujo",instanceToTrigger:"Instancia para Disparar",selectInstance:"Seleccioná una instancia",useFirstConnected:"Usar primera conectada",instanceWillTriggerFallback:"Esta instancia se usará para disparar el flujo. Si no se selecciona ninguna, se usará la primera conectada.",allStatuses:"Todos los estados",deselectAll:"Desmarcar Todos",selectAll:"Seleccionar Todos",filterStatusesNote:"Filtrá qué estados de pedido deben disparar el flujo. VacÃo = todos.",history:"Historial (últimas 24h)",noRecentRequests:"No hay solicitudes recientes",noIdentification:"Sin identificación",detail
510:{customer:"Cliente",phone:"Teléfono",product:"Producto",order:"Pedido",type:"Tipo",checkout:"Checkout"},viewFullPayload:"Ver payload completo",instructions:{title:"Cómo configurar en Logzz",step1Pre:"Entrá a",step2:"Andá a Configuración â Integraciones â Webhooks",step3:'Agregá un nuevo webhook de "Pedidos"',step4:"Pegá la URL del webhook de la integración deseada",step5:"Guardá y probá la integración"},createDialog:{title:"Nueva Integración Logzz",description:"Configurá una nueva integración para recibir eventos de Logzz",nameLabel:"Nombre de la Integración",namePlaceholder:"Ej: Webhook de Pedidos",eventTypeLabel:"Tipo de Evento",eventTypeHelp:"Seleccioná el tipo de evento que querés recibir",orderStatusLabel:"Estado del Pedido (opcional)",orderStatusHelp:"Seleccioná qué estados de pedido deben disparar el flujo. VacÃo = todos los estados.",flowLabel:"Flujo a disparar (opcional)",flowHelp:"El flujo se disparará automáticamente cuando se reciba el evento",instanceLabel:"Instancia para Disparar (opcional)",instanceHelp:"Esta instancia se usará para disparar el flujo seleccionado"},creating:"Creando..."},j2={never:"nunca",copied:"Copiado",confirmRevoke:'¿Revocar la credencial "{{name}}"? Quien la esté usando pierde el acceso al instante.',toasts:{consentSaveError:"No se pudo guardar tu elección. Intentá de nuevo.",consentGranted:"Análisis de conversaciones habilitado.",consentRevoked:"Acceso al texto de las conversaciones revocado.",nameRequired:"Ponele un nombre a la credencial (ej.: Claude, Cursor).",requiresActivePlan:"Las credenciales MCP requieren un plan activo de ZapData.",createError:"No se pudo crear la credencial. Intentá de nuevo.",revokeError:"No se pudo revocar la credencial.",revoked:"Credencial revocada."},server:{title:"Conectar con Claude (MCP)",description:'Conectá Claude, Cursor o n8n con ZapData y preguntá sobre tu negocio en lenguaje natural â por ejemplo, "¿qué provincias me compran más?".',addressLabel:"Dirección del servidor",whereItWorksTitle:"Dónde funciona hoy",whereItWorksDescription:"Claude Code, Cursor y n8n â que aceptan credencial por encabezado. Claude en el navegador todavÃa no acepta este tipo de credencial; estamos preparando el acceso por login para él."},consent:{title:"Dejar que la IA analice tus conversaciones",activeBadge:"Activo",description:'Necesario para que la IA responda cosas como "¿cuáles son las principales dudas de mis clientes?" o "¿qué está frenando mis ventas?".',whatLeavesTitle:"Qué sale de tu cuenta cuando lo activás",bullet1:"Fragmentos cortos de conversaciones reales, de hasta 7 dÃas atrás.",bullet2Pre:"El nombre y el teléfono",bullet2Registered:"registrados",bullet2Mid:"del contacto no se envÃan. Dentro del texto, teléfono, email, documento y links se enmascaran con patrones automáticos â que",bullet2NotAllFormats:"no cubren todos los formatos",bullet2TextIs:"El texto",bullet2NotAnonymous:"no es anónimo",bullet2Post:"un cliente puede haber escrito su propio nombre, teléfono o dirección completa.",bullet3Pre:"Si tus clientes escriben sobre salud u otro tema personal, eso también puede aparecer en los fragmentos â incluyendo",bullet3Sensitive:"datos sensibles",bullet3Post:"que la ley de protección de datos trata con una regla propia.",bullet4Pre:"El texto se envÃa al proveedor de IA que",bullet4You:"vos",bullet4Post:"conectes (ej.: Anthropic/Claude, en Estados Unidos), con tu propia suscripción â no la de ZapData.",loading:"Cargandoâ¦",authorizedDescription:"Autorizaste el análisis de las conversaciones. Podés deshacerlo cuando quieras â el acceso se corta al instante.",revoke:"Revocar",authorizedOn:"Autorizaste{{when}}",onDate:" el {{date}}",before:" antes",textChangedDescription:"pero el texto de esta autorización cambió. Confirmá de nuevo para que el análisis siga funcionando.",confirmAgain:"Confirmar de nuevo",withoutItDescription:"Sin esto, la IA igual puede ver el volumen y el resumen de tu cuenta â pero no el texto de las conversaciones.",legalPre:"Al autorizar, declarás ser el",legalController:"responsable",legalMid:"de esos datos y tener",legalBasis:"base legal",legalShare:"para compartirlos, conforme a la",termsSection:"Sección 7 de los Términos",readAndAuthorize:"Leà y autorizo"},credentials:{title:"Credenciales",newCredential:"Nueva credencial",description:"Cada credencial da acceso solo a lo que elijas, y se puede revocar en cualquier momento. Expiran solas a los 90 dÃas.",empty:{title:"No hay ninguna credencial",description:"Creá una para conectar tu asistente."},createCredential:"Crear credencial",tokenKind:"Token",expired:"Expirada",lastUsed:"Ãltimo uso",expiresOn:"Expira el {{date}}"},createDialog:{createdTitle:"Credencial creada",createdDescription:"Copiala ahora â por seguridad, no se va a volver a mostrar.",keepSafe:"Guardala en un lugar seguro. Quien tenga esta credencial puede ver los reportes de tu cuenta. Si se filtra, revocala acá mismo y creá otra.",yourCredential:"Tu credencial",connectClaudeCode:"Para conectar en Claude Code",cursorN8nNote:"En Cursor o n8n, usá la dirección de arriba y el encabezado",finish:"Listo",newCredentialTitle:"Nueva credencial",chooseAuthType:"Elegà el tipo de autenticación.",staticToken:"Token estático",staticTokenHint:"Cursor, n8n, Claude Code.",oauthHint:"Claude.ai y Claude Desktop.",oauth:{howToConnect:"Cómo conectar",step1Pre:"En Claude, andá a",step1Path:"Configuración â Conectores â Agregar conector personalizado",step2:"Ponele un nombre (ej.: ZapData) y pegá la dirección de abajo.",step3Pre:"Hacé clic en",connect:"Conectar",step3Post:"Claude abre el login de ZapData y pide tu autorización.",noIdSecretNote:"No hace falta completar ID ni secreto de OAuth. Después de autorizar, la credencial aparece en esta lista y podés revocarla acá."},namePlaceholder:"Ej.: Claude, Cursor",permission:"Permiso",comingSoon:"Próximamente",consentWarningPre:"TodavÃa no autorizaste el análisis de conversaciones. La credencial se va a crear, pero solo va a leer",consentWarningVolumeSummary:"volumen y resumen",consentWarningPost:"hasta que autorices arriba.",authorizeNow:"Autorizar ahora"}},_2={toasts:{loadError:"Error al cargar los pÃxeles",requiredFields:"Campos obligatorios",requiredFieldsDescription:"Completá el ID del PÃxel y el Token de Acceso",addSuccess:"¡PÃxel agregado con éxito!",addError:"Error al agregar el pÃxel",fillIdAndToken:"Completá el ID y el Token",updateSuccess:"¡PÃxel actualizado!",removeSuccess:"¡PÃxel eliminado!"},addPixel:"Agregar PÃxel",trackingNote:"El tracking solo es válido para campañas directo a WhatsApp, sin pressel.",nameOptional:"Nombre (opcional)",namePlaceholder:"Ej: PÃxel Principal",idLabel:"ID",pageIdLabel:"Page ID",pixelId:"ID del PÃxel",pixelIdPlaceholder:"Ej: 1234567890123456",pageIdPlaceholder:"Ej: 123456789012345",accessToken:"Token de Acceso",accessTokenPlaceholder:"Token de acceso de Facebook",configuredPixels:"PÃxeles Configurados",pixelsCount_one:"{{count}} pÃxel registrado",pixelsCount_other:"{{count}} pÃxeles registrados",pageIdForMessages:"Page ID (para mensajes)",unnamedPixel:"PÃxel sin nombre",active:"Activo",inactive:"Inactivo",token:"Token",howToConfigure:"Cómo configurar",watchVideo:"Ver video",clickToWatchPre:"Hacé clic en",clickToWatchPost:"para ver el paso a paso.",deleteDialog:{title:"Eliminar PÃxel",description:"¿Estás seguro de que querés eliminar este pÃxel? Esta acción no se puede deshacer."}},O2={providers:{nexuspag:{docLabel:"Abrir NexusPag",blurb:"Obtén la API Key en el panel de NexusPag (Integraciones). Es una sola clave, empieza con nxp_live_. Cobro mÃnimo de R$ 1,00."},skalepay:{docLabel:"Abrir la documentación de SkalePayments",blurb
510:"Obtén la API Key en el panel de SkalePayments. Es una sola clave, empieza con sk_. Atención al lÃmite del gateway: cada cobro debe quedar entre R$ 5,00 y R$ 600,00."},kairos:{docLabel:"Abrir panel de Kairos",blurb:"Conseguà la Clave Pública (Client ID) y la Clave Privada (Client Secret) en el área de credenciales de API del panel de Kairos â esos son los nombres que aparecen ahÃ. Las dos son obligatorias: Kairos autentica con las dos juntas, en headers separados."},xpag:{docLabel:"Crear cuenta en XPag",blurb:"Generá el Client ID y el Client Secret en el panel de XPag, en Dashboard â API. XPag cobra en CUATRO paÃses con la misma credencial: PIX en Brasil, SPEI en México, Bre-B/Nequi en Colombia y transferencia bancaria en Argentina â solo tenés que elegir el paÃs dentro del bloque. También es la adquirente detrás del SPEI de otros gateways, asà que cobrar directo acá saca una capa de intermediación."},zenith:{docLabel:"Crear cuenta en Zenith",blurb:"PIX en Brasil (copia-y-pega + QR) y, con la misma credencial, México, Colombia y Perú. En Perú, Yape, Plin, efectivo y transferencia aparecen según la disponibilidad verificada en tu credencial."}},toasts:{keyGenError:"No se pudo generar la clave.",keyGenErrorRetry:"Error al generar la clave. Intentá de nuevo.",copyError:"No pude copiar â seleccioná y copiá manualmente.",validateError:"No se pudo validar la credencial.",connectedTo:"¡Conectado a {{account}}!",connected:"¡Gateway conectado!",saveError:"Error al guardar la credencial. Intentá de nuevo.",renameError:"Error al renombrar.",defaultUpdated:"Credencial predeterminada actualizada.",defaultError:"Error al definir la credencial predeterminada.",removed:"Credencial eliminada.",removeError:"Error al eliminar."},title:"Gateways de Pago",subtitle:'Conectá tu cuenta de gateway para que el bloque "API de Pagos" genere cobros dentro de los flujos. Podés conectar los que quieras, incluso más de uno del mismo proveedor â el dinero cae directo en tu cuenta del gateway, ZapData no intermedia.',connectGateway:"Conectar gateway",connectGatewayDescription:"Probamos la credencial en el gateway y mostramos cualquier falla acá, antes de que afecte una atención.",provider:"Proveedor",nicknameOptional:"Apodo (opcional)",nicknamePlaceholder:"Ej: Cuenta principal, Tienda 2...",clientIdLabel:"Client ID",clientSecretLabel:"Client Secret",pasteClientId:"Pegá el Client ID",pasteClientSecret:"Pegá el Client Secret",publicKeyLabel:"Clave Pública (Client ID)",pastePublicKey:"Pegá la Clave Pública",privateKeyLabel:"Clave Privada (Client Secret)",pastePrivateKey:"Pegá la Clave Privada",kiwify:{step1Title:"1. Generá tu clave",step1Description:"Creamos el par de claves por vos â nada de terminal. Solo copiás la clave pública y la registrás en Kiwify.",generating:"Generando...",generateKey:"Generar clave",keyGenerated:"Clave generada. Copiá la pública abajo y registrala en Kiwify (Configuración â Credenciales de API), marcando el permiso de gestionar QR Codes.",publicKeyOpenssh:"Clave pública â formato OpenSSH",askedForPem:"¿Kiwify pidió el formato PEM?",copyPem:"Copiar PEM",privateKeyReadyNote:"La clave privada correspondiente ya está lista acá y nunca aparece en pantalla. Solo se guarda cuando completás con el Access ID de abajo.",haveOwnKey:"Ya tengo mi propia clave â pegarla manualmente",privateKeyPkcs8:"Clave privada (PKCS#8)",generateForMe:"Generarla por mÃ",ed25519Pre:"Tiene que ser Ed25519 en formato PKCS#8",ed25519Post:"Una clave de",ed25519Post2:"no funciona.",step2Label:"2. Access ID (Kiwify lo muestra al registrar la clave)"},testing:"Probando...",testAndConnect:"Probar y conectar",connectedGateways:"Gateways conectados",connectedGatewaysDescription:'La credencial marcada "Predeterminada" es la que se usa cuando el bloque de flujo no elige una especÃfica. Es predeterminada por proveedor.',default:"Predeterminada",nickname:"Apodo",noNickname:"(sin apodo)",connectedOn:"Conectado el {{date}}",makeDefault:"Hacer predeterminada",usedIn:{title:"Dónde se usa la integración",descriptionPre:"En el bloque",paymentApiBlock:"API de Pagos",de
510scriptionPost:'del Flow Builder, que genera el cobro, manda el QR Code y el botón para copiar el código al lead, y después espera la confirmación del pago para seguir por "Pagado" o "Expiró".',noGatewayNote:"Sin ningún gateway conectado, el bloque sale por la salida de error sin cobrar nada â el resto del flujo sigue funcionando normalmente."},deleteDialog:{title:"Eliminar credencial",descriptionDefault:"Esta es la credencial predeterminada de este proveedor. Al eliminarla, otra credencial del mismo proveedor se promueve a predeterminada automáticamente (o, si era la única, los bloques que usan este proveedor pasan a salir por la salida de error).",descriptionNotDefault:"Los bloques configurados para usar especÃficamente esta credencial van a salir por la salida de error hasta que los apuntes a otra."},zenithTab:{subtitle:"Conecta tu cuenta Zenith y gestiona los métodos disponibles en su bloque exclusivo."},connectedAccounts:"Cuentas conectadas",zenith:{apiKeyLabel:"API Key",pasteApiKey:"Pega la API Key de Zenith",apiSecretLabel:"API Secret",pasteApiSecret:"Pega la API Secret de Zenith",noSandboxNote:"Zenith no tiene entorno de pruebas: todo cobro creado es real. Prueba con el monto mÃnimo.",webhookRegisterFailed:"Credencial conectada, pero no pude registrar el webhook en Zenith. El pago igual se confirma solo (el sistema consulta el gateway), solo tarda un poco más. Puedes registrar la URL del webhook a mano en su panel.",registerWebhook:"Registrar webhook",webhookRegistered:"Webhook registrado en Zenith. La confirmación de pago ahora llega al instante.",revalidate:"Revalidar",revalidated:"Credencial revalidada y métodos de Perú actualizados.",revalidationFailed:"No se pudo revalidar la credencial Zenith.",revalidationFailedAfterCreate:"La credencial se guardó, pero falló la revalidación del servidor: {{error}}. RevalÃdala antes de usar métodos de Perú.",availableMethods:"Perú: {{methods}}",noPeruMethods:"Esta credencial no tiene métodos de Perú habilitados.",capabilitiesMissing:"Los métodos de Perú todavÃa no fueron verificados.",cashMethod:"Efectivo",bankTransferMethod:"Transferencia bancaria"}},B2={startingFrom:"Desde {{price}}",toasts:{pasteKey:"Pegá tu clave de API.",connected:"¡Clave conectada!",saveError:"Error al guardar la clave. Intentá de nuevo.",renameError:"Error al renombrar la clave.",defaultUpdated:"Clave predeterminada actualizada.",defaultError:"Error al definir la clave predeterminada.",removed:"Clave eliminada.",removeError:"Error al eliminar la clave."},title:"Integración de IA de Plataforma",subtitle:"Conectá tus propias claves de IA (Gemini, OpenAI, Anthropic o DeepSeek) para los bloques de flujo que usan IA auxiliar. Podés conectar las que quieras, incluso más de una del mismo proveedor â el consumo se cobra directo en tu cuenta de cada proveedor.",addKey:"Agregar clave",addKeyDescription:"Elegà el proveedor, ponele un apodo (opcional, útil si vas a agregar más de una clave del mismo proveedor) y pegá la clave de API.",provider:"Proveedor",noAudioWarning:"Este proveedor no procesa audio de forma nativa â si también usás esta clave en la herramienta de Transcripción de Audio, no va a funcionar. Preferà Gemini u OpenAI para transcripción.",nicknameOptional:"Apodo (opcional)",nicknamePlaceholder:"Ej: Cuenta principal, Cliente X...",apiKey:"Clave de la API",getKeyAt:"Conseguila en",keyStoredNote:"La clave se guarda solo en tu cuenta.",connectedKeys:"Claves conectadas",connectedKeysDescription:'La clave marcada "Predeterminada" la usa cualquier bloque/flujo que no tenga una clave especÃfica elegida.',usedIn:{title:"Dónde se usa la integración",buttonMatcher:"Matcher de botón interactivo (identifica respuesta libre del lead)",antiSpamVariation:'Variación anti-spam de texto (bloque "AI Text")',genericAiNode:'Nodo genérico "ai" del Flow Builder',aiConverterBlock:'Bloque "IA Converter"',audioTranscription:"Transcripción de Audio (herramienta independiente)",flowTranslation:"Traducción de flujo: transcripción y traducción del texto del audio original (la clonación de voz y el habla traducida usan tu clave de ElevenLabs, por separado)",keySelectorBlocks:"Bloques con selector de clave (IA Responder, Esperar Respuesta IA, Condición IA, disparador Pix Detectado, etc.)",noKeyNote:'Sin ninguna clave conectada, esos bloques quedan sin efecto (sin match, sin variación, sin respuesta generada, sin transcripción) â el resto del flujo sigue funcionando normalmente. Los bloques con selector de clave sin selección explÃcita usan la clave marcada "Predeterminada".'},deleteDialog:{title:"Eliminar clave",descriptionDefault:'Esta es la clave predeterminada. Al eliminarla, otra clave conectada se va a promover a predeterminada automáticamente (o, si esa era la única, los bloques que usan "Clave de la Integración" quedan sin efecto hasta que conectes otra).',descriptionNotDefault:"Los flujos configurados para usar especÃficamente esta clave van a pasar a usar tu clave predeterminada automáticamente."}},z2={title:"Notificaciones Push",subtitle:"Recibà alertas en tiempo real en tu dispositivo",addDeviceToken:"Agregar token del dispositivo",tokenPlaceholder:"Pegá el token acá",generateTokenHere:"Generar token acá",registeredDevices_one:"{{count}} dispositivo registrado",registeredDevices_other:"{{count}} dispositivos registrados",notificationTypes:"Tipos de notificación",checkNow:"Verificar ahora",sendingTest:"Enviando prueba...",testNotification:"Enviar notificación de prueba",adIssues:{disabled:{label:"Cuenta desactivada",description:"Meta desactivó la cuenta de anuncios â generalmente por un problema de pago."},unsettled:{label:"Factura pendiente",description:"La cuenta tiene una factura pendiente de pago."},riskReview:{label:"En revisión de riesgo",description:"La cuenta está en análisis de riesgo por parte de Meta."},pendingSettlement:{label:"Cobro pendiente",description:"La cuenta está pausada esperando el cobro."},gracePeriod:{label:"PerÃodo de tolerancia",description:"La cuenta está en tolerancia â regularizá el pago antes de que se desactive."},pendingClosure:{label:"Cierre pendiente",description:"La cuenta está camino al cierre definitivo."},closed:{label:"Cuenta cerrada",description:"Meta cerró definitivamente la cuenta de anuncios."},balanceDue:{label:"Saldo pendiente",description:"La cuenta tiene un saldo pendiente de pago."}},toasts:{enabled:"Notificaciones push activadas",disabled:"Notificaciones push desactivadas",willReceive:"Vas a recibir notificaciones push en este dispositivo.",willNotReceive:"Ya no vas a recibir notificaciones push.",settingsChangeError:"Error al cambiar la configuración",saleOn:"Notificación de ventas activada",saleOff:"Notificación de ventas desactivada",disconnectOn:"Notificación de desconexión activada",disconnectOff:"Notificación de desconexión desactivada",leadRotationOn:"Notificación de rotación de leads activada",leadRotationOff:"Notificación de rotación de leads desactivada",logzzOn:"Notificación de pedidos Logzz activada",logzzOff:"Notificación de pedidos Logzz desactivada",desktopOn:"Notificación en el navegador activada",desktopOff:"Notificación en el navegador desactivada",adAccountIssueOn:"Notificación de problemas en la cuenta de anuncios activada",adAccountIssueOff:"Notificación de problemas en la cuenta de anuncios desactivada",adMetricsOn:"Notificación de métricas de anuncios activada",adMetricsOff:"Notificación de métricas de anuncios desactivada",limitUpdated:"¡LÃmite actualizado!",limitSetTo:"El lÃmite diario de rotación ahora es {{limit}} leads.",notificationsSent:"¡Notificaciones enviadas!",checkComplete:"Verificación completada",checkError:"Error al verificar",tokenExists:"Este token ya está registrado",tokenAdded:"¡Dispositivo agregado!",tokenRemoved:"Dispositivo eliminado",testSent:"¡Notificación de prueba enviada!",testSentDescription_one:"Enviada a {{count}} dispositivo.",testSentDescription_other:"Enviada a {{count}} dispositivos.",testFailed:"Error al enviar la notificación de prueba",testFailedDescription:"Verificá que el token sea correcto e intentá de nuevo.",testError:"Error al probar la notificación"},facebookGate:{pre:"Disponible solo con una",active:"cuenta de anuncios activa",mid:"conectada. Conectá una en",adsTab:"Ads â Configuración",post:"."},whatsapp:{title:"WhatsApp",newSales:{label:"Nuevas ventas",description:"Recib
510à una alerta cada vez que se detecte una venta."},disconnect:{label:"Desconexión de WhatsApp",description:"Te avisamos cuando un número se desconecte."},leadRotation:{label:"Rotación de leads",description:"Avisa cuando un número llega al lÃmite diario de leads.",maxLimit:"LÃmite diario máximo"},logzz:{label:"Pedidos Logzz",description:"Recibà una alerta cada vez que llegue un pedido de Logzz."},desktop:{label:"Notificación en el navegador",description:"Recibà notificaciones también por el navegador (escritorio), además de la app."}},facebook:{title:"Facebook Ads",accountIssue:{label:"Problemas en la cuenta de anuncios",description:"Te avisamos cuando Meta desactive, pause o cierre una cuenta."},whichAlerts:"¿Qué alertas querés recibir?",whichAlertsDescription:"Elegà los tipos de problema que deben generar una notificación.",adMetrics:{label:"Métricas de anuncios",description:"Te avisamos cuando una métrica (gasto, CPC, CPA...) supere el lÃmite definido."}},facebookTest:{testError:"Error al probar",notificationsSent:"¡Notificaciones enviadas!",notificationsQueued:"{{count}} notificaciones encoladas para enviar.",noActiveRule:"No hay ninguna regla de métrica activa",missingToken:"{{count}} cuenta(s) sin token de acceso configurado â revisá la integración de Facebook Ads.",fbErrorAllAccounts:"Facebook rechazó {{count}} cuenta(s) â ninguna pudo verificarse.",rulesEvaluatedNoSpend:"{{rules}} regla(s) evaluada(s) en {{accounts}} cuenta(s); {{noData}} sin datos en el perÃodo.",rulesEvaluatedBelowThreshold:"{{rules}} regla(s) evaluada(s) â ninguna alcanzó el lÃmite configurado.",rulesAndAccountsChecked:"{{rules}} regla(s) evaluada(s) en {{accounts}} cuenta(s).",noProblematicAccount:"No se encontró ninguna cuenta con problemas.",checkCompleteNothing:"Verificación completada",checkingRules:"Verificando reglas...",testNow:"Probar ahora"}},V2={title:"Configuración",menu:{notifications:{label:"Notificaciones Push",description:"Configurá alertas y dispositivos",submenu:{sales:"Personalizar Ventas",logzz:"Personalizar Logzz"}},collaborators:{description:"Gestioná las subcuentas de tu equipo"},globalVariables:{label:"Variables Globales",description:"Creá valores reutilizables para flujos y mensajes"}}},q2={title:"Variables Globales",subtitle:"Creá valores reutilizables de tu cuenta y usá {{token}} en todos tus flujos y mensajes",newButton:"Nueva Variable",createButton:"Crear Variable",searchPlaceholder:"Buscar por nombre o descripción",loading:"Cargando variables...",emptyTitle:"Ninguna variable encontrada",emptyDescription:"Creá tu primera variable para usar en flujos y en el chat en vivo",noResults:"Ninguna variable coincide con la búsqueda.",noValue:"sin valor",typeText:"Texto",typeNumber:"Número",form:{createTitle:"Nueva Variable Global",editTitle:"Editar Variable Global",description:"Creá un identificador reutilizable en flujos como {{token}}.",nameLabel:"Nombre",namePlaceholder:"Ej: nombre_01 (el prefijo g_ se agrega automáticamente)",nameInvalid:"Usá solo letras minúsculas, números y _ (máx. 50 caracteres)",descriptionLabel:"Descripción",descriptionPlaceholder:"Describà qué representa esta variable",typeLabel:"Tipo",typeNote:"Si cambiás el tipo, ajustá el valor para que sea compatible (número válido o texto).",valueLabel:"Valor inicial (opcional)",valuePlaceholder:"Ej: texto libre",valueInvalidNumber:"Para el tipo Número, informá un valor numérico válido (ej: 7.90)",cancel:"Cancelar",create:"Crear",save:"Guardar"},deleteDialog:{title:"¿Excluir variable global?",description:"{{name}} será eliminada de tu cuenta. Los mensajes que usen {{token}} se enviarán con el valor vacÃo.",confirm:"Eliminar"},toasts:{created:"¡Variable creada!",updated:"¡Variable actualizada!",deleted:"Variable eliminada",error:"Error al guardar la variable",duplicate:"Ya existe una variable con ese nombre",limitReached:"LÃmite de 100 variables globales alcanzado",valueTooLong:"Valor o descripción demasiado largos (máx. 2000 y 200 caracteres)"}},U2={pageTitle:"Personalizar Notificaciones de Ventas",howItWorks:{title:"¿Cómo funciona?",pre:"Creá varios templates de notificación y, cuando se detecte una venta, se va a elegir uno de ellos",random:"al azar",post:"para enviarlo.",availableVariables:"Variables disponibles:"},variables:{valor:"Valor de la venta",moeda:"SÃmbolo de la moneda detectada (R$, US$, MX$...)",telefone:"Teléfono del cliente",cliente:"Nombre del cliente (destinatario del Pix)"},hideValue:{label:"Ocultar el valor de la venta",hiddenDescription:"El valor va a quedar oculto en las notificaciones",visibleDescription:"El valor se va a mostrar en las notificaciones"},toasts:{valueHidden:"Valor oculto",valueVisible:"Valor visible",hiddenToastDescription:"El valor de la venta no se va a mostrar en las notificaciones",visibleToastDescription:"El valor de la venta se va a mostrar en las notificaciones",templateAdded:"¡Template agregado!",templateSaved:"¡Template guardado!",templateRemoved:"Template eliminado",templateActivated:"Template activado",templateDeactivated:"Template desactivado"},templatesSection:{title:"Templates de Notificación",emptyDescription:"Agregá templates personalizados",activeCount:"{{active}} de {{total}} activos",empty:"TodavÃa no hay templates configurados",emptyNote:"Se va a usar el template predeterminado del sistema",titleLabel:"TÃtulo",titlePlaceholder:"TÃtulo de la notificación",messageLabel:"Mensaje",messagePlaceholder:"Usá {moeda} {valor} para incluir la moneda y el valor de la venta",active:"Activo",inactive:"Inactivo"},deleteDialog:{title:"¿Eliminar template?",description:"Esta acción no se puede deshacer. El template se va a eliminar de forma permanente.",confirm:"Eliminar"}},W2={pageTitle:"Personalizar Notificaciones de Logzz",howItWorks:{title:"¿Cómo funciona?",pre:"Creá varios templates de notificación y, cuando se reciba un pedido de Logzz, se va a elegir uno de ellos",random:"al azar",post:"para enviarlo.",availableVariables:"Variables disponibles:"},variables:{valor:"Valor del pedido",status:"Estado del pedido",cliente:"Nombre del cliente",pedido:"Número de pedido",produto:"Nombre del producto"},templatesSection:{title:"Templates de Notificación",emptyDescription:"Agregá templates personalizados",activeCount:"{{active}} de {{total}} activos",empty:"TodavÃa no hay templates configurados",emptyNote:"Se va a usar el template predeterminado del sistema",titleLabel:"TÃtulo",titlePlaceholder:"TÃtulo de la notificación",messageLabel:"Mensaje",messagePlaceholder:"Usá {valor}, {status}, {cliente}, {pedido}, {produto}",active:"Activo",inactive:"Inactivo"},toasts:{templateAdded:"¡Template agregado!",templateSaved:"¡Template guardado!",templateRemoved:"Template eliminado",templateActivated:"Template activado",templateDeactivated:"Template desactivado"},deleteDialog:{title:"¿Eliminar template?",description:"Esta acción no se puede deshacer.",confirm:"Eliminar"}},$2={flows_draft:{label:"Crear borrador de flujo",description:"Crea flujos DESACTIVADOS, sin número asignado, para que los revises y actives. No envÃa mensajes a nadie."},flows_edit:{label:"Leer y editar flujos existentes",description:"Permite que la IA lea tus flujos para aprender de ellos y modifique uno que ya existe. Si el flujo está ACTIVADO, el cambio vale al instante. Se puede deshacer. Las claves (IA, PIX) nunca se leen ni se modifican."},reports_geography:{label:"GeografÃa de compradores",description:"De qué paÃses (código de paÃs) y estados vienen tus ventas. Solo datos agregados â nunca teléfono, nombre o conversación."},reports_conversations:{label:"Historial de conversaciones",description:"Permite que la IA analice las conversaciones de tu cuenta y saque insights (dudas, objeciones, qué frena la venta)."}},G2={adMetricRules:k2,collaborators:T2,elevenLabs:I2,laraTranslate:R2,globalWebhook:D2,integrationsSettings:M2,leadRotationOverrides:F2,logzz:L2,mcp:j2,pixel:_2,pixGateway:O2,platformAI:B2,pushNotifications:z2,settingsPage:V2,globalVariables:q2,saleNotifications:U2,logzzNotifications:W2,mcpScopes:$2},H2={title:"Financiero",subtitle:"Control de inversiones, ventas y métricas de marketing",productPlaceholder:"Producto",allProducts:"Todos los productos",newProductTitle:"Nuevo producto",productLabelAll:"todos",productLabelFallback:"producto",tabs:{dashboard:"Dashboard",dados:"Datos",graficos:"Gráficos",consolidado:"Consolidado"}},K2={hoje:"Hoy",semana:"Esta semana","este-mes":"Este mes","mes-passado":"Mes pasado","este-ano":"Este año",tudo:"Todo el perÃodo",personalizado:"Personalizado"},X2={selectDates:"Seleccionar fechas",selectEndDate:"Selecciona la fecha final",selectStartAndEndDate:"Selecciona la fecha inicial y la final"},Y2={0:"Enero",1:"Febrero",2:"Marzo",3:"Abril",4:"Mayo",5:"Junio",6:"Julio",7:"Agosto",8:"Septiembre",9:"Octubre",10:"Noviembre",11:"Diciembre"},Q2={date:"Fecha",product:"Producto",spend:"Gasto",revenue:"Ingresos",investment:"Inversión",sales:"Ventas",leads:"Leads",profit:"Ganancia",roi:"ROI",cpa:"CPA",cpl:"CPL",conversion:"Conv.",actions:"Acciones",month:"Mes"},Z2={investmentTotal:"Inversión Total",totalSales:"Total de Ventas",totalLeads:"Total de Leads"},J2={date:"Fecha",product:"Producto",spend:"Gasto",revenue:"Ingresos",sales:"Ventas",leads:"Leads",profit:"Ganancia",roiPercent:"ROI%",cpa:"CPA",cpl:"CPL",conversionPercent:"Conversión%"},eO={errorNameRequired:"Ingresa un nombre para el producto",successCreated:"¡Producto creado!",errorCreate:"Error al crear el producto. Intenta de nuevo.",title:"Nuevo producto",description:"Crea un producto para registrar sus datos financieros.",nameLabel:"Nombre del producto",namePlaceholder:"Ej: Curso WhatsApp Pro",creating:"Creando...",create:"Crear producto"},tO={newProduct:"Nuevo Producto",newRecord:"Nuevo Registro",title:"Registros Diarios",emptyStateBefore:"Sin registros. Haz clic en",emptyStateAfter:"para empezar.",confirmDelete:"¿Eliminar este registro?",deletedToast:"Registro eliminado."},aO={exportCsv:"Exportar CSV",netProfitTotal:"Ganancia Neta Total",roiLabel:"ROI",roasLabel:"ROAS",totalRevenue:"Facturación Total",costPerLead:"Costo por Lead",avgCpa:"CPA Promedio",conversionRate:"Tasa de Conversión",emptyStateBefore:"No hay registros en el perÃodo seleccionado. Agrega datos en la pestaña",emptyStateTabName:"Datos"},oO={emptyState:"Sin datos en el perÃodo. Agrega registros en la pestaña Datos.",chartLucroDiario:"Ganancia Diaria",chartFaturamentoDiario:"Facturación Diaria",chartVolumeVendas:"Volumen de Ventas",chartRoas:"ROAS",chartLeadsRecebidos:"Leads Recibidos",chartTaxaConversao:"Tasa de Conversión",statLucro:"{{value}} en el perÃodo",statFaturamento:"{{value}} en el perÃodo",statVendas:"{{value}} ventas en el perÃodo",statRoas:"{{value}}% en el perÃodo",statLeads:"{{value}} leads en el perÃodo",statConversao:"{{value}}% en el perÃodo",suffixVendas:" ventas",suffixLeads:" leads"},nO={yearLabel:"Año:",viewAnnual:"Vista Anual",viewMonthly:"Por Mes",revenueTotal:"Ingresos Totales",netProfit:"Ganancia Neta",annualRoi:"ROI Anual",monthlyBreakdownTitle:"Consolidado mes a mes â {{year}}",totalYear:"Total {{year}}"}
510,rO={errorSelectProduct:"Selecciona un producto.",successUpdated:"¡Registro actualizado!",successAdded:"¡Registro agregado!",errorSave:"Error al guardar el registro.",titleEdit:"Editar registro",titleNew:"Nuevo registro",description:"Completa los datos; Ganancia, ROI, CPA, CPL y Conversión se calculan automáticamente.",productLabel:"Producto",selectPlaceholder:"Selecciona",spendLabel:"Gasto (R$)",revenueLabel:"Ingresos (R$)",saveChanges:"Guardar cambios",addRecord:"Agregar registro"},iO={credits:"créditos"},sO={active:"Renovación automática activa",description:"Tus instancias se renovarán automáticamente con la tarjeta guardada."},lO={yourWallet:"Tu Billetera",recharge:"Recargar Créditos",recentTransactions:"Ãltimas transacciones"},cO={testModeDeactivated:"Modo de prueba desactivado",partialSimulationTitle:"Simulación: Miembro Parcial",testModeTitle:"Modo Prueba Admin",partialDescription:"Estás viendo exactamente lo que verÃa un miembro parcial (0 instancias gratis, sistemas bloqueados)",testDescription:"Sistema de créditos activo solo para ti. Prueba todas las funciones.",deactivate:"Desactivar"},dO={expiresToday:"¡Vence hoy!",oneDay:"1 dÃa",daysCount:"{{count}} dÃas",trialBadge:"Prueba {{badge}}",expiringTitle:"¡La instancia está por vencer!",keepActiveTitle:"Mantén tu instancia activa",description:"Para mantener esta instancia activa después del vencimiento, suscrÃbete a un plan. La renovación con créditos ya no está disponible.",expiresTodayLong:"¡Esta instancia vence hoy!",remainingDays_one:"Queda {{count}} dÃa de uso",remainingDays_other:"Quedan {{count}} dÃas de uso",viewPlans:"Ver Planes"},uO={title:"Créditos Insuficientes",descriptionPrefix:"No tienes créditos suficientes para usar",currentBalance:"Tu saldo actual",required:"Necesario",missingPrefix:"Faltan",recharge:"Recargar Créditos"},mO={premiumFeatureTitle:"{{featureName}} â Función Premium",notAvailableOnPlan:"no está disponible en tu plan",startingModePlan:"Modo Inicial",upgradeToUnlock:"Mejora a un plan superior para desbloquear el uso.",availableOnPlans:"está disponible en los planes",accessModePlan:"Modo Acceso",orHigher:"o superiores.",upgradeYourPlan:"Mejora tu plan",plansWithFeature:"Planes que incluyen esta función",migrateHint:"Cambia a Acceso, Expansión, Ascenso, Dominación o Titan y úsalo sin lÃmites.",allPlansHint:"Acceso, Expansión, Ascenso, Dominación y Titan â uso ilimitado.",upgradeButton:"Mejorar Plan",viewPlansButton:"Ver Planes"},pO={title:"SuscrÃbete a un plan",description:"Para crear o mantener instancias activas, elige un plan. El pago por crédito individual fue descontinuado.",planLabel:"Plan {{planName}}",perMonth:"/mes",instancesIncluded_one:"{{count}} instancia incluida",instancesIncluded_other:"{{count}} instancias incluidas",aiCredits:"{{count}} créditos de IA",viewPlans:"Ver Planes Disponibles"},hO={title:"Crear Nueva Instancia",description:"Elige cómo deseas crear esta instancia",usePlanSlot:"Usar cupo del plan",instanceAvailable_one:"{{count}} instancia disponible en tu plan",instanceAvailable_other:"{{count}} instancias disponibles en tu plan",noPlanSlot:"No hay cupos del plan disponibles",useExtraSlot:"Usar cupo adicional",slotAvailable_one:"{{count}} cupo",slotAvailable_other:"{{count}} cupos",noExtraSlot:"No hay cupos adicionales disponibles"},fO={perUse:"por uso",free:"Gratis",costPerEach:"Cada {{item}} cuesta {{cost}} créditos"},gO={title:"Mi Plan",description:"Administra tu suscripción y plan"},vO={title:"¿Cómo deseas recargar?",pixDescription:"Pago vÃa PIX",cardTitle:"Tarjeta de Crédito",cardDescription:"Pago con tarjeta de crédito"},bO={title:"Agregar Tarjeta",description:"Agrega una tarjeta para recargas más rápidas y renovación automática.",cardNumber:"Número de Tarjeta",expiry:"Vencimiento",cardholderName:"Nombre del Titular",cardholderPlaceholder:"TITULAR DE LA TARJETA",saving:"Guardando...",saveCard:"Guardar Tarjeta",encryptedNote:"Tus datos están cifrados y seguros.",cardSavedToast:"¡Tarjeta guardada con éxito!",cardSavedTitle:"¡Tarjeta Guardada!",cardSavedDescription:"Tu tarjeta fue agregada con éxito.",errors:{unavailableTitle:"Pago no dis
510ponible",unavailableMessage:"El formulario de tarjeta aún no cargó. Intenta de nuevo en unos instantes.",cardFieldUnavailableTitle:"Campo de tarjeta no disponible",cardFieldUnavailableMessage:"No pudimos cargar el campo de la tarjeta ahora. Cierra y vuelve a abrir.",cardDeclined:"Tarjeta rechazada",couldNotSaveCard:"No fue posible guardar la tarjeta",invalidCardData:"Datos de la tarjeta inválidos",invalidExpiry:"Vencimiento inválido",invalidCvv:"CVV inválido",cardholderRequired:"Ingresa el nombre del titular tal como aparece en la tarjeta.",saveCardError:"Error al guardar la tarjeta",saveCardErrorFallback:"No fue posible guardar la tarjeta ahora. Intenta de nuevo en unos minutos."}},yO={title:"Recarga con Tarjeta",cardholderRequired:"Ingresa el nombre del titular tal como aparece en la tarjeta.",chooseAmount:"Elige el monto a recargar",customAmount:"Monto personalizado",orChooseAmount:"O elige un monto",continueWithAmount:"Continuar con R$ {{amount}}",amountLimits:"Monto mÃnimo: R$ 5,00 ⢠Monto máximo: R$ 5.000,00",chooseMethod:"Elige el Método",payAmount:"Pagar R$ {{amount}}",expiresOn:"Vence en {{month}}/{{year}}",useNewCard:"Usar nueva tarjeta",cardholderName:"Nombre del Titular",cardholderPlaceholder:"TITULAR DE LA TARJETA",cardNumber:"Número de Tarjeta",expiry:"Vencimiento",processing:"Procesando...",securePayment:"Pago seguro y cifrado.",paymentApproved:"¡Pago Aprobado!",paymentApprovedToast:"¡Pago aprobado!",amountAddedToBalance:"Se agregaron R$ {{amount}} a tu saldo.",errors:{stripeNotLoaded:"Stripe no cargó",cardElementNotFound:"No se encontró el campo de la tarjeta",paymentError:"Error al procesar el pago",confirmError:"Error al confirmar el pago. Contacta con soporte.",unexpectedStatus:"Estado del pago inesperado. Intenta de nuevo.",minAmount:"Monto mÃnimo: R$ 5,00",maxAmount:"Monto máximo: R$ 5.000,00",chargeCardError:"Error al cobrar la tarjeta"}},xO={title:"Elige qué números mantener",descriptionPrefix:"Tu plan cambió y ahora permite",descriptionSuffix:"número(s) conectado(s). Selecciona hasta {{count}} para mantener â los demás serán desconectados. O vuelve a un plan mayor.",selectedCount:"{{selected}} / {{max}} seleccionado(s)",keepSelectedButton:"Mantener seleccionados y continuar",backToLargerPlan:"Volver a un plan mayor",readyTitle:"¡Listo!",readyDescription:"Números ajustados a tu plan.",errors:{tooManyKept:"Solo puedes mantener {{count}} número(s).",couldNotComplete:"No fue posible completar. Recarga la página e intenta de nuevo.",genericTitle:"Error",tryAgain:"Intenta de nuevo."}},wO={genericRequestError:"Error al procesar la solicitud.",pix:{generateFailedTitle:"No fue posible generar el PIX",tryAgainShortly:"Intenta de nuevo en unos instantes.",generateErrorFallback:"Error al generar el PIX",paymentConfirmedTitle:"¡Pago confirmado!",planActivated:"Plan {{planName}} activado.",chargeExpired:"Cobro vencido",confirmedTitle:"¡Pago Confirmado!",activatedSuccess:"Plan {{planName}} activado con éxito.",headerAmountPlan:"PIX R$ {{amount}} â {{planName}}",scanQrCode:"Escanea el Código QR",scanInstructions:"Abre la app de tu banco, escanea el código de abajo o cópialo y pégalo. El plan se activará automáticamente después del pago.",qrCodeAlt:"Código QR PIX",copyCode:"O copia el código PIX:",codeCopied:"¡Código copiado!",waitingPayment:"Esperando el pago...",loadingHeader:"PIX â Plan {{planName}}",generatingQr:"Generando Código QR PIX..."},plans:{subtitles:{iniciante:"Da el primer paso",acesso:"Triplicó la operación",expansao:"Sin cola, sin lÃmite",ascensao:"Vende mientras duermes",dominacao:"La máquina no se detiene",titan:"Escala industrial",enterprise:"Escala bajo demanda"},features:{cloud:"100% en la nube, 24/7",aiAgent:"Agente de IA",metaPixel:"PÃxel de Meta",pixAuto:"PIX identificado automáticamente",crmKanban:"CRM Kanban",iaStudio:"IA Studio",adsTab:"Pestaña Ads (controla tus anuncios)",groupTab:"Pestaña Grupo (gestiona tus grupos)"}},cardForm:{alreadyActivePlanTitle:"Ya tienes un plan activo",couldNotStartSubscription:"No fue posible iniciar la suscripción",missingClientSecret:"No fue posible obtener el secreto del pago. Intenta de nuevo.",couldNotSaveCard:"Error al guardar la tarjeta",cardDeclined:"Tarjeta rechazada",processError:"Error al procesar el pago",unexpectedStatus:"Estado del pago inesperado. Intenta de nuevo.",approvedTitle:"¡Pago Aprobado!",planActivatedSuccess:"Plan {{planName}} activado con éxito.",confirmPayment:"Confirmar Pago R$ {{amount}}",cardholderRequired:"Ingresa el nombre del titular tal como aparece en la tarjeta.",cardholderName:"Nombre del Titular",cardholderPlaceholder:"TITULAR DE LA TARJETA",cardNumber:"Número de Tarjeta",expiry:"Vencim
510iento",freeTrialBanner:{freeDays:"7 dÃas gratis",youIntro:"â no se te cobrará",notChargedToday:"nada hoy",cardSavedLeadIn:". Tu tarjeta queda guardada y el primer cobro de",onlyHappens:"solo ocurre",in7Days:"dentro de 7 dÃas",cancelFooter:". Puedes cancelar antes de eso sin pagar nada."},processing:"Procesando...",startFreeTrial:"Iniciar prueba gratis de 7 dÃas",freeTrialSecureNote:"Sin cobro hoy · tarjeta guardada de forma segura",securePaymentNote:"Pago 100% seguro y cifrado.",timeoutTitle:"Se agotó el tiempo. Intenta de nuevo.",timeoutDescription:"El procesamiento tardó más de lo esperado."},toasts:{planActivatedTitle:"¡Plan activado!",freePlanActivated:"Plan Modo Recarga activado con éxito.",genericErrorTitle:"Error",couldNotActivatePlan:"No fue posible activar el plan.",subscriptionCreated:"Tu suscripción fue creada con éxito.",planUnlockedTitle:"¡Plan desbloqueado!",freeTrialReady:"Tu cuenta de prueba gratis está lista para usar.",pixConfirmed:"¡Pago vÃa PIX confirmado! Tu suscripción fue creada."},preparingCheckout:"Preparando tu checkoutâ¦",header:{chooseYourPlan:"Elige tu plan",chooseYourPlanSubtitle:"Selecciona el plan ideal para tu negocio",monthly:"Mensual",quarterly:"Trimestral",yearly:"Anual"},mostPopular:"Más Popular",instancesConnected_one:"{{count}} instancia conectada",instancesConnected_other:"{{count}} instancias conectadas",priceFrom:"Desde R$ {{price}},00/mes",perMonth:"/mes",perDay:"/dÃa",totalLabel:"Total:",everyMonths:"cada {{months}} meses",viaRecharge:"VÃa Recarga",allFeatures:"Todas las funciones",processingButton:"Procesando...",startButton:"Comenzar",selectPlanButton:"Seleccionar Plan",empire:{customQuote:"A medida",name:"Modo Empire",subtitle:"De tu tamaño",customInstances:"Instancias personalizadas",priceOnRequest:"Valor a consultar",priceOnRequestHint:"armamos el plan ideal para tu operación",talkToSupport:"Hablar con soporte â"},enterprisePlan:{name:"Modo Enterprise",subtitle:"Escala bajo demanda"}},CO={panel:H2,periods:K2,periodFilter:X2,months:Y2,columns:Q2,metrics:Z2,csv:J2,createProductModal:eO,dadosTab:tO,dashboardTab:aO,graficosTab:oO,consolidadoTab:nO,recordFormModal:rO,shared:iO,autoRenewal:sO,creditWallet:lO,creditsBanner:cO,instanceRenewalTag:dO,insufficientCreditsModal:uO,planRequiredModal:mO,planUpsellModal:pO,slotChoiceModal:hO,systemCreditBadge:fO,subscriptionPage:gO,paymentMethodModal:vO,addPaymentMethodModal:bO,cardRechargeModal:yO,downgradeOverageModal:xO,planSelectionModal:wO},PO="Configurar clave KIE.AI",AO={dragToCanvas:"Arrastra al lienzo",image:"Imagen",video:"Video",audio:"Audio",creation:"Creación",premiumLockedTitle:"Función premium â haz clic para desbloquear",zoomOut:"Alejar",zoomIn:"Acercar",fitView:"Ajustar vista",projectNamePlaceholder:"Nombre del proyecto"},EO={defaultProjectName:"Proyecto sin nombre",loadError:"Error al cargar el proyecto",savedToast:"Proyecto guardado"},SO={title:"I.A Studio â Función Premium",descriptionIniciante:"El bloque de <0>Creación</0> no está disponible en tu plan <1>Modo Iniciante</1>. Mejora a un plan superior para desbloquear su uso.",descriptionDefault:"El bloque de <0>Creación</0> está disponible en los planes <1>Modo Acceso</1> o superiores.",upgradeHeading:"Mejora tu plan",plansHeading:"Planes con I.A Studio incluido",upgradeSubtext:"Cambia a Acceso, Expansión, Ascensión, Dominación o Titan y usa el I.A Studio sin lÃmites.",plansSubtext:"Acceso, Expansión, Ascensión, Dominación y Titan â uso ilimitado.",upgradeButton:"Mejorar plan",viewPlansButton:"Ver planes"},NO={codeInactive:"Ese código ya no está activo",invalidCode:"Código inválido",importSuccess:"¡Importado con éxito!",importError:"Error al importar",title:"Importar proyecto o carpeta",description:"Pega el código de compartición que recibiste.",verify:"Verificar",folder:"Carpeta",project:"Proyecto",summary_one:"{{count}} proyecto ⢠{{totalNodes}} bloques",summary_other:"{{count}} proyectos ⢠{{totalNodes}} bloques",expiresAt:"Expira el {{date}}",usesRemaining_one:"{{count}} importación restante",usesRemaining_other:"{{count}} importaciones restantes",codeInactiveExpired:"Código inactivo, vencido o agotado",importButton:"Importar a mi cuenta"},kO={missingApiKey:"Ingresa tu clave KIE",missingHmacSecret:"Ingresa el Webhook HMAC Secret",savedSuccess:"Configuración guardada con éxito",saveError:"Error al guardar la configuración",removedSuccess:"Configuración eliminada",removeError:"Error al eliminar la configuración",title:"Configurar KIE.AI",descPrefix:"El I.A Studio usa tu propia clave de",descSuffix:"para generar creativos. Los créditos se descuentan directamente de tu cuenta en KIE.",apiKeyLabel:"Tu API Key",getKeyPrefix:"Consigue tu clave en",getKeySuffix:". La clave se almacena de forma segura y se usa solo para tus generaciones.",hmacLabel:"Webhook HMAC Secret",hmacPlaceholder:"MÃn. 8 caracteres",removeButton:"Eliminar"},TO={types:{image:"Imagen",video:"Video",videoPro:"Video Pro",productVideo:"Video Producto",textVideo:"Video Texto",faceHq:"Rostro HQ",faceLq:"Rostro LQ",animate:"Imagen a Video",imitate:"Imitación",copy:"Copy",logo:"Logo"},emptyTitle:"TodavÃa no hay creaciones",emptySubtitle:"Tus generaciones aparecerán aquà automáticamente",noText:"Sin texto",imageAlt:"Creación",deletedSuccess:"Creación eliminada",deleteError:"Error al eliminar",creditsUsed_one:"{{count}} crédito",creditsUsed_other:"{{count}} créditos"},IO={title:"Proyectos Guardados",empty:"TodavÃa no hay proyectos guardados",updatedAt:"Actualizado: {{date}}"},RO={expiry:{h24:"24 horas",d7:"7 dÃas",d30:"30 dÃas",never:"Sin vencimiento"},uses:{one:"1 uso",ten:"10 usos",unlimited:"Ilimitado"},linkGenerated:"¡Enlace generado!",generateError:"Error al generar el enlace",folderWord:"carpeta",projectWord:"proyecto",title:"Compartir {{type}}",descriptionFolder:"Genera un enlace para que otro usuario pueda importar esta carpeta y todos los proyectos que contiene a su cuenta. Las imágenes subidas, credenciales y generaciones no se comparten.",descriptionProject:'Genera un enlace para que otro usuario pueda importar "{{title}}" a su cuenta. Las imágenes subidas, credenciales y generaciones no se comparten.',validityLabel:"Vigencia",usesLimitLabel:"LÃmite de importaciones",generateButton:"Generar enlace",codeLabel:"Código",linkLabel:"Enlace",frozenNoteFolder:"El contenido queda congelado en este momento. Si editas el contenido de la carpeta después, genera un nuevo enlace para reflejar los cambios.",frozenNoteProject:"El contenido queda congelado en este momento. Si editas el proyecto después, genera un nuevo enlace para reflejar los cambios."},DO={confirmDeleteTitle:"¿Eliminar bloque?",confirmDeleteDescription:"Esta acción no se puede deshacer. El bloque y sus conexiones serán eliminados."},MO={title:"Vista previa",complete:"Completo",downloadMusic:"Descargar música",downloadCreative:"Descargar creativo",resultAlt:"Resultado",waitingResult:"Esperando resultado..."},FO={unsupportedFormat:"Formato no compatible. Usa MP3, WAV, AAC, M4A u OGG.",tooLarge:"Audio de más de 10MB. Reduce el archivo.",tooLong:"Audio de más de {{max}}s ({{duration}}s). La sincronización labial acepta como máximo {{max}} segundos.",durationValidationError:"No se pudo validar la duración del audio. Prueba con otro archivo.",uploadFailed:"Error al enviar el audio.",dragHint:"Arrastra un audio",formatHint:"MP3, WAV, AAC, OGG ⢠hasta 10MB ⢠máx. 15s"},LO={alt:"Subida",dragHint:"Arrastra una imagen",formatHint:"JPG, PNG, WEBP ⢠hasta 20MB"},jO={dragHint:"Arrastra un video",formatHint:"MP4, MOV ⢠hasta 500MB"},_O={title:"Bloque de Creación",modelLabel:"Modelo",llmLabel:"LLM",collapse:"Contraer",expand:"Expandir",openBilling:"Abrir kie.ai/billing â",generating:"Generando...",generatingVideo:"Generando video... (puede tardar 1-3 min)",processing:"Procesando...",processingImage:"Procesando imagen...",generatingGptImage:"Generando imagen con GPT Image 2... (puede tardar hasta 5 min)",sendingForGeneration:"Enviando para generación...",stepProgress:"Paso {{current}}/{{total}} â {{label}}",videoTimeHint:"Los videos pueden tardar 1-3 minutos",registerKieKeyButton:"Registrar clave KIE",generateButton:"Generar Creativo",validation:{connectReferenceImage:"Conecta 1 imagen de referencia",connectReferenceVideo:"Conecta 1 video de referencia",connectCharacterImage:"Conecta 1 imagen del personaje",connectAudio:"Conecta 1 audio",connectAtLeastOneImage:"Conecta al menos 1 imagen de referencia",maxImages_one:"Este modelo acepta como máximo {{count}} imagen de referencia",maxImages_other:"Este modelo acepta como máximo {{count}} imágenes de referencia",maxVideos_one:"Máximo de {{count}} video permitido",maxVideos_other:"Máximo de {{count}} videos permitidos",maxAudios_one:"Máximo de {{count}} audio permitido",maxAudios_other:"Máximo de {{count}} audios permitidos",addPrompt:"Agrega un prompt",lipsyncPromptRequired:"El prompt es obligatorio para la sincronización labial"},errors:{registerKieKey:"Registra tu clave KIE para generar creativos",mustRegisterKieKey:"Necesitas registrar tu clave KIE para continuar.",invalidKieKey:"Tu clave KIE es inválida. ActualÃzala.",invalidOrExpiredKieKey:"Tu clave KIE es inválida o venció. ActualÃzala en la configuración.",insufficientCredits:"Tu clave KIE.AI se quedó sin saldo. Recarga en kie.ai/billing",insufficientCreditsDetail:"Tu clave KIE.AI se quedó sin saldo. Recarga en https://kie.ai/billing para seguir generando.",timeoutNoResponseKie:"Tiempo agotado â sin respuesta de KIE.",timeout20min:"Tiempo agotado â KIE no respondió en 20 minutos.",connectionErrorRetry:"Error de conexión. Inténtalo de nuevo.",generationFailed:"Falló la generación",connectionError:"Error de conexión.",generationError:"Error al generar el creativo",timeoutNoProviderResponse:"Tiempo agotado - sin respuesta del proveedor"}},OO={criarImagem:{label:"Crear Imagen",instruction:"Las imágenes de referencia son opcionales. Sin imágenes, genera directamente desde el texto.",llms:{nanoBananaPro:{description:"Google ⢠C
510omposición multipersonaje con hasta 8 imágenes de referencia (opcional)"},seedream45Edit:{description:"Edición con hasta 14 imágenes ⢠Sin imágenes, genera directamente desde el texto"},grokImagineImageToImage:{description:"xAI ⢠Edición con 1 imagen o generación solo por texto"},gptImage2:{description:"OpenAI ⢠Hasta 16 imágenes de referencia (opcional) con elección de resolución 1K/2K/4K"}}},produtoVideo:{label:"Producto a Video",instruction:"Conecta 1 imagen del producto (obligatorio)",llms:{sora2:{description:"OpenAI Sora 2 (Standard / Pro)"}}},textoVideo:{label:"Texto a Video",instruction:"No requiere imagen - solo texto",llms:{veo3Fast:{description:"Google ⢠Generación rápida"},veo3:{description:"Google ⢠Mayor calidad, más lento"},geminiOmniVideo:{description:"Google ⢠Multimodal 4/6/8/10s con hasta 4K"},kling30:{description:"Kling ⢠Standard / Pro con sonido opcional"},grokImagineTextToVideo:{description:"xAI ⢠Videos rápidos de 6-30s"},wan27TextToVideo:{description:"Alibaba Wan ⢠hasta 1080p, duración 2-15s"}}},animarImagem:{label:"Imagen a Video",instruction:"Conecta 1 imagen de referencia y usa el prompt para describir el video. Veo acepta 2 imágenes (primer y último cuadro).",llms:{veo3Fast:{description:"Google ⢠Acepta 1 o 2 imágenes (primer/último cuadro)"},veo3:{description:"Google ⢠Mayor calidad"},geminiOmniVideo:{description:"Google ⢠Hasta 7 imágenes de referencia, 4/6/8/10s, hasta 4K"},kling30:{description:"Kling ⢠Animación a partir de imagen con sonido opcional"},grokImagineImageToVideo:{description:"xAI ⢠Animación rápida 6-30s"},wan27ImageToVideo:{description:"Alibaba Wan ⢠primer/último cuadro"}}},sincronizacaoLabial:{label:"Sincronización Labial",instruction:"Conecta 1 imagen del personaje y 1 audio (obligatorios)",warning:"La imagen debe mostrar el rostro del personaje. Audio de hasta 10MB en formatos MP3, WAV, AAC, M4A u OGG.",llms:{klingAiAvatarPro:{description:"Kling ⢠Avatar de alta fidelidad a partir de imagen + audio"},infinitalkFromAudio:{description:"InfiniteTalk ⢠Lip sync con elección de resolución (480p/720p)"}}},imitarMovimento:{label:"Imitar Movimiento",instruction:"Conecta 1 imagen del personaje y 1 video de referencia (obligatorios)",warning:"Dos modos: 'Personaje en el Video' reemplaza a la persona del video por el personaje de la imagen. 'Animar Imagen' anima la imagen con los movimientos del video.",llms:{kling26MotionControl:{description:"Versión estable"},kling30MotionControl:{description:"Versión más nueva"}}},criarMusica:{label:"Crear Música",instruction:"Texto a Música vÃa Suno. No requiere imagen ni audio.",warning:"En modo Custom, define estilo y tÃtulo. En modo Simple, describe la música en el prompt (hasta 500 caracteres).",llms:{v55:{description:"Modelos personalizados, calidad superior"},v5:{description:"Expresión musical superior, generación rápida (recomendado)"},v45Plus:{description:"Sonido más rico, nuevas formas de crear (hasta 8 min)"},v45:{description:"Prompts más inteligentes, generación rápida (hasta 8 min)"},v45All:{description:"V4.5 ALL, generación rápida (hasta 8 min)"}
510,v4:{description:"Calidad vocal mejorada (hasta 4 min)"}}}},BO={labels:{proporcao:"Proporción",resolucao:"Resolución",duracaoSegundos:"Duración (s)",duracao:"Duración",qualidade:"Calidad",formato:"Formato",modo:"Modo",som:"Sonido",modoGeracao:"Modo de Generación",resolucaoModo:"Resolución / Modo",vozPreferida:"Voz preferida",estiloCustom:"Estilo (Custom)",tituloCustom:"TÃtulo (Custom)",tagsNegativasCustom:"Etiquetas negativas (Custom, opcional)",instrumental:"Instrumental",prompt:"Prompt"},descriptions:{basic2kHigh4k:"Basic = 2K ⢠High = 4K",gptImageRatio:"Con imágenes conectadas ejecuta image-to-image (hasta 16 refs). Sin imágenes, genera directamente desde el texto.",gptImageResolution:"Auto y 1:1 solo admiten 1K. 1:1 no puede llegar a 4K.",klingAutoAdapt:"Cuando hay imagen, el sistema puede adaptarse automáticamente",grokSpicyUnavailable:"Spicy no está disponible para imágenes externas (solo para task_id de Grok)",infinitalkResolution:"InfiniteTalk acepta 480p o 720p",customModeMusic:"Simple: describe la idea. Custom: control total (estilo, tÃtulo, letra).",instrumental:"Sin voz / vocales.",vocalGender:"Preferencia de género vocal (válido solo en modo Custom).",styleCustom:"Obligatorio en modo Custom. Define género, mood y dirección artÃstica.",titleCustom:"Obligatorio en modo Custom. Máx. 80 caracteres.",negativeTags:"Estilos a evitar (solo en modo Custom).",characterOrientation:"Personaje en el Video: reemplaza a la persona del video por el personaje de la imagen | Animar Imagen: la imagen se anima con los movimientos del video"},placeholders:{promptDefault:"Describe lo que quieres generar...",promptEditDesired:"Describe la edición deseada...",promptEditDesiredSingleImage:"Describe la edición deseada (1 imagen de entrada obligatoria)...",promptAnimacao:"Describe la animación...",promptAnimacao7Refs:"Describe la animación... (hasta 7 imágenes de referencia)",promptAnimacaoDesejada:"Describe la animación deseada...",promptFrameInicialFinal:"Conecta 1 imagen (cuadro inicial) y opcionalmente 2 (cuadro final)...",promptLipsyncKling:"Describe expresiones, escenario o estilo deseados (obligatorio, máx. 5000 caracteres)...",promptLipsyncInfinitalk:"Describe al personaje y la escena (ej: 'A young woman with long dark hair talking on a podcast.')...",promptImitarMovimento:"Describe al personaje o la escena (opcional)...",promptMusica:"Simple: describe la música (hasta 500 caracteres). Custom + voces: este texto se convierte en la letra (hasta 5000 caracteres).",styleExample:"Ej: Pop, Rock, Hip-hop, Jazz, Classical...",titleExample:"Ej: Madrugada de Verano",negativeTagsExample:"Ej: Heavy Metal, Upbeat Drums"},options:{auto:"Auto",ratio169Horizontal:"16:9 (Horizontal)",ratio916Vertical:"9:16 (Vertical)",ratio219UltraWide:"21:9 (Ultra panorámico)",basic2k:"Basic (2K)",high4k:"High (4K)",normal:"Normal",profissional:"Profesional",horizontal:"Horizontal",vertical:"Vertical",tenSeconds:"10 segundos",fifteenSeconds:"15 segundos",ratio11Quadrado:"1:1 (Cuadrado)",standardFast:"Standard (rápido)",proQuality:"Pro (calidad)",comSom:"Con sonido",semSom:"Sin sonido",ratio23Vertical:"2:3 (Vertical)",ratio32Horizontal:"3:2 (Horizontal)",funCriativo:"Fun (creativo)",spicyIntenso:"Spicy (intenso)",standard:"Standard",pro:"Pro",fun:"Fun",personagemNoVideo:"Personaje en el Video",animarImagemOption:"Animar Imagen",standard720p:"Standard (720p)",pro1080p:"Pro (1080p)",p480Fast:"480p (rápido)",p720Quality:"720p (calidad)",simplesRecomendado:"Simple (recomendado)",custom:"Custom",comVocais:"Con voces",apenasInstrumental:"Solo instrumental",automatico:"Automático",masculino:"Masculino",feminino:"Femenino"}},zO={backToProjects:"Proyectos"},VO={subtitle:"Gestiona tus proyectos, carpetas y creaciones con IA",tabProjects:"Mis Proyectos",tabCreations:"Mis Creaciones",newFolder:"Nueva carpeta",newProject:"Nuevo proyecto",allProjects:"Todos los proyectos",noFolder:"Sin carpeta",createProjectError:"Error al crear el proyecto",createFolderError:"Error al crear la carpeta",confirmDeleteFolder:"¿Eliminar la carpeta? Los proyectos que contiene volverán a la raÃz.",renameFolderError:"Error al renombrar la carpeta",folderDeletedSuccess:"Carpeta eliminada",deleteFolderError:"Error al eliminar la carpeta",projectDeletedSuccess:"Proyecto eliminado",deleteError:"Error al eliminar",nameUpdatedSuccess:"Nombre actualizado",renameError:"Error al renombrar",projectMovedSuccess:"Proyecto movido",moveError:"Error al mover",emptyInFolder:'No hay proyectos en "{{name}}"',emptyNoProjects:"TodavÃa no hay proyectos",createProjectLink:"Crear proyecto",blocksCount_one:"{{count}} bloque",blocksCount_other:"{{count}} bloques",updatedAt:"Actualizado: {{date}}",moveToLabel:"Mover aâ¦",moreButton:"Más"},qO={preparing:"Preparando la importaciónâ¦"},UO={configureKieTitle:PO,toolbar:AO,flowCanvas:EO,gateModal:SO,importDialog:NO,kieDialog:kO,myCreations:TO,projectsModal:IO,shareDialog:RO,nodeActions:DO,previewNode:MO,uploadAudio:FO,uploadImage:LO,uploadVideo:jO,creationNode:_O,models:OO,fields:BO,page:zO,projectsPage:VO,shareImportPage:qO},WO={tabs:{dashboard:"Dashboard",campaigns:"Campañas",billing:"Facturación",settings:"Configuración"}},$O={account:"Cuentas",campaign:"Campañas",adset:"Conjuntos",ad:"Anuncios"},GO={groups:{identification:"Identificación",financial:"Financieras",sales:"Ventas",messages:"Mensajes",traffic:"Tráfico",meta:"Meta"},columns:{name:"Nombre",thumbnail:"Vista previa",daily_budget:"Presupuesto",spend:"Gasto",conversion_value:"Facturación",profit:"Ganancia",roas:"ROAS",roi:"ROI",margin:"Margen",cpa:"CPA",sales:"Ventas",messaging_conversations_started:"Conversaciones Iniciadas",cost_per_message:"Costo por Conversación",impressions:"Impresiones",reach:"Alcance",clicks:"Clics en el enlace",cpc:"CPC",cpm:"CPM",ctr:"CTR",account_status:"Estado de la Cuenta",account_total_spend:"Total Gastado en la Cuenta",external_id:"ID",last_synced_at:"Ãltima Actualización",created_at:"Fecha de Creación",delivery:"Entrega"},hints:{clicks:"Clics en el enlace del anuncio (inline_link_clicks).",cpc:"Costo por clic en el enlace.",ctr:"Tasa de clics en el enlace (clics en el enlace ÷ impresiones)."}},HO={title:"Personaliza las columnas â {{level}}",subtitle:"Elige cómo quieres visualizar las columnas en la tabla",searchPlaceholder:"Buscar por columna",noColumnsFound:"No se encontraron columnas",selected:"Seleccionad
510as",dragToReorder:"Arrastra para reordenar",noColumnsSelected:"Ninguna columna seleccionada. Marca opciones a la izquierda.",restoreDefault:"Restaurar predeterminado",reorder:"Reordenar",comingSoon:"próximamente",removeColumn:"Quitar {{column}}"},KO={title:"Dashboard",subtitle:"Resumen general de tus campañas",noAccounts:{title:"Ninguna cuenta conectada",description:"Para ver tus datos de anuncios, conecta tu cuenta de Facebook en configuración.",button:"Ir a Configuración"},accountSelector:{allAccounts:"Todas las cuentas",oneAccount:"1 cuenta",nAccounts:"{{count}} cuentas"},dateFilter:{max:"Máximo",today:"Hoy",yesterday:"Ayer",last7Days:"Ãltimos 7 dÃas",thisMonth:"Este mes",lastMonth:"Mes pasado",custom:"Personalizado",selectPeriod:"Seleccionar perÃodo"},sync:{sessionExpired:"Sesión expirada. Inicia sesión nuevamente.",partialSync:"Sincronizado parcialmente: {{synced}} cuenta(s) OK, {{failed}} falló(aron).",failedSync:"Error al sincronizar {{failed}} cuenta(s). Intenta nuevamente.",success:"¡Datos sincronizados con éxito!",timeout:"La sincronización demoró demasiado. Mostrando la última actualización disponible. Intenta nuevamente en unos instantes.",error:"Error al sincronizar datos"},cards:{revenue:"Facturación",spend:"Gasto en Meta Ads",profit:"Ganancia",ticketAvg:"Ticket Promedio",margin:"Margen de Ganancia",roas:"ROAS",leads:"Leads",sales:"Ventas",conversionRate:"Tasa de Conversión",costPerSale:"Costo por Venta",costPerConversation:"Costo por Conversación",expenses:"Tasas y Gastos"},viewToggle:{label:"Ver métricas de:",metaLabel:"Meta Ads",systemLabel:"Sistema (detectado)"},salesChart:{salesInPeriod:"{{count}} ventas en el perÃodo",tooltipSales_one:"{{count}} venta",tooltipSales_other:"{{count}} ventas"},periodChart:{heading:"Ventas y Facturación por PerÃodo",noMetaDailyData:'Meta no devolvió datos diarios para este perÃodo. Intenta sincronizar o cambia a la vista "Sistema (detectado)".'},coverage:{none:"Sin datos sincronizados para este perÃodo â los valores de Meta abajo están en cero hasta que la sincronización traiga algo.",syncing:"Sincronizando los datos de este perÃodo con Metaâ¦",partial:"Cobertura parcial: {{covered}} de {{total}} dÃa(s) sincronizados en este perÃodo. Los valores de Meta abajo pueden estar incompletos."},instanceChart:{heading:"Ventas por Instancia",empty:"Sin ventas con instancia identificada en el perÃodo",unknownInstance:"Sin instancia"},hourChart:{heading:"Ventas por horario",empty:"Sin ventas en el perÃodo"},geographyChart:{heading:"Ventas por ubicación",byCountry:"PaÃses",byState:"Estados (BR)",empty:"Sin ventas con teléfono identificable en el perÃodo"},othersLabel:"Otras",systemOnlyCaption:"Basado en las ventas detectadas por el sistema â Meta no ofrece ese detalle.",salesHistory:{heading:"Historial de ventas",subtitle:"Ventas detectadas por el sistema en el perÃodo seleccionado",unknownInstance:"Sin instancia",unknownClient:"Sin nombre",exportCsv:"Exportar CSV",empty:"Ninguna venta registrada en el historial del perÃodo",openConversation:"Abrir conversación",conversationUnavailable:"Conversación no encontrada",columns:{instance:"Instancia",instanceNumber:"N.º de la Instancia",leadNumber:"N.º del Lead",client:"Cliente (Nombre)",date:"Fecha",value:"Valor",actions:"Acciones"}},expensesCard:{breakdownTitle:"Detalle del perÃodo",empty:"Ninguna tasa o gasto activo",totalLabel:"Total"},expenseRules:{triggerButton:"Configurar tasas y gastos",dialogTitle:"Tasas y gastos",formHeadingAdd:"Nueva regla",formHeadingEdit:"Editar regla",listHeading:"Reglas registradas",empty:"Ninguna tasa o gasto registrado",emptyHint:"Registra arriba tu primera tasa o gasto",kindFixed:"Fijo (R$)",kindPercentage:"Porcentual (%)",appliesToSpend:"Gasto en Anuncios",appliesToRevenue:"Facturación",appliesToProfitBeforeFees:"Ganancia antes de las tasas",periodicityDaily:"Por dÃa",periodicityWeekly:"Por semana",periodicityMonthly:"Por mes",validitySince:"desde {{date}}",validityUntil:"hasta {{date}}",active:"Activa",inactive:"Inactiva",edit:"Editar",delete:"Eliminar",dialog:{nameLabel:"Nombre",namePlaceholder:"Ej.: Impuesto de Meta",kindLabel:"Tipo",valueLabelFixed:"Valor (R$)",valueLabelPercentage:"Porcentaje (%)",appliesToLabel:"Aplica sobre",periodicityLabel:"Periodicidad",startDateLabel:"Vigencia inicial",endDateLabel:"Vigencia final",endDateHint:"Déjalo en blanco para vigencia por tiempo indeterminado",activeLabel:"Activa",addButton:"Agregar",saveButton:"Guardar cambios",cancelEdit:"Cancelar edición"},toasts:{created:"Tasa/gasto registrado",updated:"Tasa/gasto actualizado",deleted:"Tasa/gasto eliminado",errorLoading:"Error al cargar tasas y gastos",errorSaving:"Error al guardar",errorDeleting:"Error al eliminar",confirmDelete:'¿Eliminar "{{name}}"?',fillRequiredFields:"Completa todos los campos obligatorios",invali
510dDateRange:"La vigencia final no puede ser anterior a la inicial"}}},XO={title:"Campañas",subtitle:"Gestiona tus campañas de anuncios",updatedAt:"Actualizado {{date}}",syncing:"Actualizando...",rename:"Renombrar",onOff:"On/Off",columnsButton:"Columnas",campaignCount_one:"{{count}} campaña",campaignCount_other:"{{count}} campañas",reachFetchError:"Error al obtener el alcance",search:{account:"Buscar cuenta...",campaign:"Buscar campaña...",adset:"Buscar conjunto...",ad:"Buscar anuncio..."},dateFilter:{periodPlaceholder:"PerÃodo",today:"Hoy",yesterday:"Ayer",last7Days:"Ãltimos 7 dÃas",last30Days:"Ãltimos 30 dÃas",thisMonth:"Este mes",specificDate:"Fecha especÃfica",select:"Seleccionar"},accountFilter:{allAccounts:"Todas las cuentas",selectedAccounts_one:"{{count}} cuenta seleccionada",selectedAccounts_other:"{{count}} cuentas seleccionadas"},bulkActions:{selectedCount_one:"{{count}} seleccionado",selectedCount_other:"{{count}} seleccionados",pause:"Pausar",changeBudget:"Cambiar Presupuesto",openInManagerTooltip:"Abrir en el administrador de anuncios de Meta",openInManager:"Abrir en el administrador"},dynamicLabel:{adsetsFromCampaigns_one:"CJs de {{count}} campaña",adsetsFromCampaigns_other:"CJs de {{count}} campañas",adsFromAdsets_one:"ADs de {{count}} conjunto",adsFromAdsets_other:"ADs de {{count}} conjuntos",adsFromCampaigns_one:"ADs de {{count}} campaña",adsFromCampaigns_other:"ADs de {{count}} campañas"},empty:{accounts:"No se encontraron cuentas de anuncios",campaigns:"No se encontraron campañas",adsets:"No se encontraron conjuntos de anuncios",ads:"No se encontraron anuncios",connectAccountHint:"Conecta una cuenta de Facebook en Configuración para empezar.",syncHint:"Haz clic en sincronizar para buscar datos de Facebook"},status:{active:"Activo",paused:"Pausado"}
510,delivery:{active:"Entregando",paused:"Pausado",inactive:"Inactivo"},accountStatus:{active:"Activa",disabled:"Desactivada",unpaid:"Con saldo pendiente",underReview:"En revisión",pending:"Pendiente",closed:"Cerrada",statusN:"Estado {{status}}"},editBudgetDialog:{title:"Editar Presupuesto Diario",newBudgetLabel:"Nuevo Presupuesto (R$)"},bulkBudgetDialog:{title:"Cambiar Presupuesto en Masa",updatingCount_one:"Cambiando presupuesto de {{count}} elemento",updatingCount_other:"Cambiando presupuesto de {{count}} elementos",newBudgetLabel:"Nuevo Presupuesto Diario (R$)",applyToAll:"Aplicar a Todos"},renameDialog:{titleCampaign:"Renombrar campaña",titleAdset:"Renombrar conjunto",titleAd:"Renombrar anuncio",newNameLabel:"Nuevo nombre",newNamePlaceholder:"Escribe el nuevo nombre"},toasts:{sessionExpired:"Sesión expirada. Inicia sesión nuevamente.",synced:"¡Datos sincronizados!",syncPartial:"Sincronización parcial: uno o más niveles fallaron. Los datos mostrados pueden estar incompletos.",errorSyncing:"Error al sincronizar",campaignActivated:"¡Campaña activada!",campaignPaused:"¡Campaña pausada!",adsetActivated:"¡Conjunto activado!",adsetPaused:"¡Conjunto pausado!",adActivated:"¡Anuncio activado!",adPaused:"¡Anuncio pausado!",errorTogglingStatus:"Error al cambiar el estado",bulkActivated_one:"{{count}} elemento activado",bulkActivated_other:"{{count}} elementos activados",bulkPaused_one:"{{count}} elemento pausado",bulkPaused_other:"{{count}} elementos pausados",errorTogglingItems:"Error al cambiar los elementos",budgetUpdated:"¡Presupuesto actualizado!",errorUpdatingBudgets:"Error al actualizar los presupuestos",errorUpdatingBudget:"Error al actualizar el presupuesto",managerAccountNotFound:"No se pudo identificar la cuenta del administrador.",popupBlocked:"El navegador bloqueó la apertura. Permite ventanas emergentes para este sitio.",invalidName:"Ingresa un nombre válido",nameUpdated:"¡Nombre actualizado!",errorRenaming:"Error al renombrar",fillRequiredFields:"Completa todos los campos obligatorios",campaignCreated:"¡Campaña(s) creada(s) con éxito!",errorCreatingCampaign:"Error al crear la campaña"}},YO={title:"Avisos Inteligentes",subtitle:"Recibe alertas sobre tus anuncios y números de WhatsApp",alertsHeading:"Alertas",empty:"Ninguna alerta por el momento",types:{adRejected:"Anuncio Rechazado",accountRestricted:"Cuenta Restringida",paymentFailed:"Falla de Pago",numberDown:"Número CaÃdo"},numbersForAlerts:{heading:"Números para Avisos",dialogTitle:"Agregar Número para Avisos",phoneLabel:"Número de WhatsApp",nicknameLabel:"Apodo (opcional)",nicknamePlaceholder:"Mi WhatsApp",empty:"Agrega un número para recibir avisos"},monitoredNumbers:{heading:"Números Monitoreados",empty:"Configura números en el Tracker de WhatsApp",online:"En lÃnea",offline:"Desconectado"},toasts:{numberAdded:"¡Número agregado!",numberAlreadyRegistered:"Número ya registrado",errorAdding:"Error al agregar",numberRemoved:"Número eliminado",errorRemoving:"Error al eliminar el número"}},QO={title:"Facturación",checking:"Verificando...",checkNow:"Verificar ahora",filterLabel:"Filtro:",filterPending:"Solo pendientes",filterAll:"Todas",status:{active:"Activa",disabled:"Desactivada",pastDue:"Con saldo pendiente",underReview:"En revisión",paused:"Pausada",grace:"PerÃodo de gracia",closed:"Cerrada"},summary:{totalDebtLabel:"Saldo pendiente total:",accountsWithIssue_one:"{{count}} cuenta con pendiente",accountsWithIssue_other:"{{count}} cuentas con pendiente",noPendingAccounts:"No se detectaron cuentas con pendientes"},table:{account:"Cuenta",status:"Estado",linkedCard:"Tarjeta vinculada",debtBalance:"Saldo pendiente",action:"Acción",emptyPending:"Ninguna cuenta con pendiente. Todo en orden por aquà â¨",emptyAll:"Ninguna cuenta de anuncios seleccionada.",unavailable:"No disponible",unavailableTooltip:"Facebook no expone el valor exacto de esta cuenta vÃa API",spentInCycle:"(gasto en el ciclo: {{value}})",clickToPayTooltip:"Haz clic en Pagar para ver el valor en el Administrador.",pay:"Pagar",payTooltipLine1:"Abre el Administrador de Anuncios para pagar con el método registrado en Facebook.",payTooltipLine2:"No es posible cobrar vÃa ZapData â Facebook no expone una API para eso."},toasts:{errorLoading:"Error al cargar cuentas: {{message}}",updated:"Cuentas actualizadas con éxito",errorChecking:"Error al verificar: {{message}}",unknownError:"error desconocido"}},ZO={title:"Configuración",subtitle:"Gestiona tus conexiones de Facebook",accountStatus:{active:"Activa",disabled:"Desactivada",unverified:"No Verificada",pending:"Pendiente",statusN:"Estado {{status}}"},facebookAccounts:{heading:"Cuentas de Facebook",description:"Conecta tu cuenta de Facebook para acceder a los datos de anuncios",chooseMethod:"Elige cómo conectarte: inicia sesión en el popup o genera un enlace para abrir en otro navegador o computadora.",popupButton:"Abrir popup de Facebook",linkButton:"Generar enlace para otro dispositivo",copyButton:"Copiar enlace",linkHint:"Abre este enlace en otro navegador o computadora. Conecta Facebook a esta cuenta de ZapData, vence en 30 minutos y solo se puede usar una vez. La lista se actualizará automáticamente.",popupBlocked:"Popup bloqueado. Usa el enlace de abajo o permite ventanas emergentes.",linkCopied:"¡Enlace copiado!",copyManually:"Selecciona el enlace y cópialo manualmente.",connectButton:"Conectar Facebook",empty:"Ninguna cuenta conectada",emptyHint:"Conecta tu cuenta de Facebook para empezar",defaultAccountName:"Cuenta de Facebook",syncing:"Sincronizando...",syncAccountsButton:"Sincronizar Cuentas",adAccountsHeading:"Cuentas de Anuncios ({{count}})",idLabel:"ID: {{id}} ⢠{{currency}}",syncHint:'Haz clic en "Sincronizar Cuentas" para buscar tus cuentas de anuncios'},instructions:{heading:"Instrucciones de Configuración",step1:'1. Haz clic en "Conectar Facebook" para autorizar el acceso a tu cuenta.',step2:'2. Después de conectar, haz clic en "Sincronizar Cuentas" para buscar tus cuentas de anuncios.',step3:"3. Activa las cuentas que deseas monitorear usando el interruptor.",step4:"4. Los datos de las campañas se sincronizarán automáticamente."},toasts:{sessionExpired:"Sesión expirada",sessionExpiredDescription:"Inicia sesión nuevamente e intenta conectar Facebook.",loginAgain:"Inicia sesión nuevamente.",errorConnectingFacebook:"Error al conectar con Facebook",accountDisconnected:"Cuenta desconectada",errorDisconnecting:"Error al desconectar",errorUpdating:"Error al actualizar",adAccountsSynced:"¡Cuentas de anuncios sincronizadas!",errorSyncing:"Error al sincronizar"}},JO={layout:WO,viewLevels:$O,columnsCatalog:GO,columnCustomizer:HO,dashboard:KO,campaigns:XO,alerts:YO,billing:QO,settings:ZO},eB={title:"Panel de Afiliado"},tB={requestWithdrawal:"Solicitar Retiro"},aB={title:"Conviértete en Afiliado",description:"Genera tu link de referido y gana comisiones sobre los depósitos de los usuarios que se registren con tu link.",generateLink:"Generar Mi Link de Afiliado"},oB={today:"Hoy",sevenDays:"7 dÃas",thirtyDays:"30 dÃas",custom:"Personalizado",from:"Desde",to:"Hasta",until:"hasta"},nB={salesCompleted:"Ventas Realizadas",salesInPeriod_one:"{{count}} venta en el perÃodo",salesInPeriod_other:"{{count}} ventas en el perÃodo",directCommission:"Comisión Directa",commissionRate:"Comisión: {{rate}}%",subCommission:"Comisión Sub",signups:"Registros",totalOverall:"Total general: {{count}}
510",mrrForecast:"MRR Proyectado",activeSubscriptions_one:"{{count}} suscripción activa",activeSubscriptions_other:"{{count}} suscripciones activas",availableBalance:"Saldo Disponible",totalAccumulated:"Total acumulado: {{value}}",negativeBalanceWarning:"Saldo por regularizar: este valor se descontará automáticamente de las próximas comisiones antes de que se habiliten nuevos retiros."},rB={title:"Ventas por DÃa",noData:"Sin datos en el perÃodo seleccionado",sales:"Ventas",commission:"Comisión"},iB={affiliateLink:"Link de Afiliado",trialLink:"Link Free Trial (7 dÃas)"},sB={title:"Suscripciones de Referidos",found_one:"{{count}} suscripción encontrada",found_other:"{{count}} suscripciones encontradas",searchPlaceholder:"Buscar usuario...",columns:{user:"Usuario",plan:"Plan",status:"Estado",since:"Desde",dueDate:"Vencimiento"},status:{active:"Activo",canceled:"Cancelado",expired:"Vencido",pastDue:"Moroso",incomplete:"Incompleto"},willCancel:" (se cancelará)"},lB={title:"Historial",onlyDepositors:"Solo Suscriptores",searchPlaceholder:"Buscar usuario...",filters:{all:"Todos",pix:"PIX",card:"Tarjeta"},sortByDate:"Ordenar por Fecha",sortByRelease:"Ordenar por Liberación",columns:{user:"Usuario",type:"Tipo",amount:"Monto",date:"Fecha",status:"Estado"},empty:"No se encontraron registros",types:{indirect:"Indirecta",referral:"Referido",withdrawal:"Retiro"},badges:{freeTrial:"Free Trial",card:"Tarjeta",pix:"PIX"},withdrawalStatus:{approved:"Aprobado",rejected:"Rechazado",pending:"Pendiente"},commissionPending:"Pendiente",releasesOn:"Se libera {{date}}",released:"Liberada",withdrawalRequested:"Retiro solicitado - {{name}}",affiliateFallback:"Afiliado"},cB={pageInfo:"Página {{page}} de {{total}} ({{count}} registros)",previous:"Anterior",next:"Siguiente"},dB={title:"Solicitar Retiro",availableBalance:"Saldo disponible",pixKeyLabel:"Clave PIX",pixKeyPlaceholder:"CPF, email, celular o clave aleatoria",amountLabel:"Monto del Retiro (R$)",amountPlaceholder:"MÃnimo R$ 50,00",minAmountLabel:"Monto mÃnimo para retiro:",paymentDeadlineLabel:"Plazo de pago:",paymentDeadlineSuffix:"después de la solicitud."},uB={linkGeneratedTitle:"Listo",linkGeneratedDescription:"¡Tu link de afiliado fue generado!",errorTitle:"Error",linkCopiedTitle:"¡Copiado!",linkCopiedDescription:"Link copiado al portapapeles",trialLinkCopiedTitle:"¡Copiado!",trialLinkCopiedDescription:"Link de Free Trial copiado al portapapeles",invalidAmountTitle:"Monto inválido",invalidAmountDescription:"Ingresa un monto válido",minAmountTitle:"Monto mÃnimo",minAmountDescription:"El retiro mÃnimo es de R$ 50,00",insufficientBalanceTitle:"Saldo insuficiente",insufficientBalanceDescription:"No tienes saldo suficiente",withdrawErrorDescription:"Error al solicitar el retiro",withdrawRequestedTitle:"¡Solicitud enviada!",withdrawRequestedDescription:"Tu retiro será procesado en breve"},mB={conversionRate:"Tasa de conversión: {{rate}}"},pB={panel:"ð Panel de Afiliado",cta:"𥠡Gana 20% de comisión!"},hB={dashboard:eB,actions:tB,becomeAffiliate:aB,period:oB,metrics:nB,chart:rB,links:iB,subscriptions:sB,history:lB,pagination:cB,withdrawModal:dB,toasts:uB,funnel:mB,widget:pB},fB="Notificación",gB={tabs:{notifications:"Notificaciones",news:"Novedades"},empty:{title:"No hay notificaciones",description:"Activa las notificaciones de escritorio para recibir alertas en tiempo real.",enableButton:"Activar notificaciones"},blogEmpty:"TodavÃa no hay novedades"},vB={dismiss:"Descartar notificación"},bB={novidade:"Novedad",melhoria:"Mejora",correcao:"Corrección",manutencao:"Mantenimiento",aviso:"Aviso"},yB={iconAlt:fB,center:gB,banner:vB,blogCategories:bB},xB={previewText:"Esta es la voz seleccionada, ¿te gustó?",pageTitle:"ðï¸ Generador de Audio",pageSubtitle:"Convierte texto en audio con voces realistas",configTitle:"Configuración del Audio",configDescription:"Ingresa el texto y elige la voz deseada",noKeyWarning:"No hay ninguna clave de ElevenLabs registrada. Conecta tu propia clave para crear voces y generar audio â la generación usa tu cuenta, sin cobro de créditos.",connectKeyLink:"Conectar clave de ElevenLabs â",customVoicesLabel:"Voces Personalizadas",addVoiceButton:"Agregar Voz",createVoiceTitle:"Crear Voz Personalizada",createVoiceDescription:"Sube un audio para clonar la voz. Usa grabaciones de 30 segundos a 5 minutos para mejores resultados.",whatsappWarning:"<0>â ï¸ Atención con audios de WhatsApp:</0> los mensajes de voz grabados directo en la app (PTT) pueden venir en formato <1>.opus</1> y fallar. Para mejor resultado, envÃa el audio como <2>documento</2> por WhatsApp o conviértelo antes a MP3 estándar (44.1kHz).",voiceNameLabel:"Nombre de la Voz",voiceNamePlaceholder:"Ej: Mi Voz, Narrador, etc...",audioFileLabel:"Archivo de Audio",selectedFileLabel:"Seleccionado: {{fileName}}",creatingVoice:"Creando voz...",createVoiceButton:"Crear Voz",noCustomVoices:'TodavÃa no creaste ninguna voz personalizada. Haz clic en "Agregar Voz" para crear una.',orChooseReady:"o elige una voz lista",availableV
510oicesLabel:"Voces Disponibles",choosePlaceholder:"Elige una voz...",customVoiceGroupLabel:"â Voz Personalizada",reclonarSuffix:" â reclonar",testVoiceTitle:"Probar voz",deleteVoiceTitle:"Eliminar voz",noVoicesRegistered:"No hay voces registradas.",clickAddVoiceToCreate:'Haz clic en "Agregar Voz" para crear la tuya.',categoryWoman:"ð© Mujer",categoryMan:"ð¨ Hombre",categoryChild:"ð¶ Niño",categoryBonus:"ð Bono",clickToTestSelected:"Haz clic en el botón de al lado para probar la voz seleccionada",voiceModelLabel:"Modelo de voz",voiceLanguageLabel:"Idioma de la voz",autoDetectLanguageNote:"Este modelo detecta el idioma automáticamente según el texto.",textToConvertLabel:"Texto a Convertir",textPlaceholder:"Escribe o pega el texto que quieres convertir en audio...",charCount:"{{count}}/{{max}} caracteres",generatingAudio:"Generando audio...",generateAudioButton:"Generar Audio",generatedAudioTitle:"Audio Generado",fromCacheBadge:"â¡ desde caché (24h)",pauseButton:"Pausar",playButton:"Reproducir",downloadMp3Button:"Descargar MP3",deleteVoiceDialogTitle:"Eliminar voz personalizada",deleteVoiceDialogDescription:'¿Seguro que quieres eliminar la voz "{{voiceName}}"? Esta acción no se puede deshacer.',toastInvalidFormatTitle:"Formato inválido",toastInvalidFormatDescription:"Selecciona un archivo de audio (MP3, WAV o M4A).",toastFileTooSmallTitle:"Archivo muy pequeño",toastFileTooSmallDescription:"El archivo parece estar dañado o vacÃo. Usa una grabación de al menos 30 segundos.",toastFileTooBigTitle:"Archivo muy grande",toastFileTooBigDescription:"El archivo debe pesar como máximo 10MB. Intenta reducir la calidad o recortar el audio.",toastErrorTitle:"Error",toastFillVoiceNameAndFile:"Completa el nombre de la voz y selecciona un archivo de audio.",toastNeedLoginCreateVoice:"Debes iniciar sesión para crear voces personalizadas.",toastDefaultErrorCreatingVoice:"Error al crear la voz personalizada.",toastSuccessTitle:"¡Listo!",toastVoiceCreatedSuccess:'¡Voz "{{voiceName}}" creada con éxito!',toastNeedLoginGeneric:"Debes iniciar sesión.",toastDefaultErrorDeletingVoice:"Error al eliminar la voz",toastVoiceDeletedSuccess:'Voz "{{voiceName}}" eliminada con éxito.',toastErrorDeletingVoiceDescription:"Error al eliminar la voz.",toastErrorGeneratingPreview:"No se pudo generar la vista previa de la voz.",toastEnterTextToGenerate:"Ingresa un texto para generar el audio.",toastSelectAVoice:"Selecciona una voz.",toastKeyRequiredTitle:"Se necesita la clave de ElevenLabs",toastKeyRequiredDescription:"Conecta tu clave en Configuración â Integración de ElevenLabs antes de generar audio.",toastSuccessTitleShort:"Listo",toastAudioFromCacheDescription:"Audio recuperado desde la caché (generado en las últimas 24h, misma voz/modelo/idioma/texto).",toastAudioGeneratedSuccess:"¡Audio generado con éxito!",toastErrorGeneratingAudio:"Error al generar el audio."},wB={pageTitle:"ð Transcripción de Audio y Video",pageSubtitle:"Convierte audios y videos en texto automáticamente",cardTitle:"Subir Audio o Video",cardDescription:"Formatos aceptados: MP3, OGG, OPUS (audio) y MP4 (video) â máx. {{minutes}} minutos / {{sizeMb}}MB",loadingIntegrationStatus:"Cargando estado de la integraciónâ¦",noKeyConnected:"No hay ninguna clave conectada en la Integración de IA de Plataforma. Sin ella, esta herramienta no transcribe.",connectNowLink:"Conectar ahora â",providerNotSupported:"El proveedor de esta clave ({{provider}}) no admite transcripción de audio ni video.",chooseAnotherKey:" Elige otra clave abajo (OpenAI o Gemini).",connectOpenAiOrGemini:" Conecta una clave de OpenAI o Gemini en Configuración â Integración de IA de Plataforma.",manageLink:"Gestionar â",usingKey:"Usando {{keyLabel}} ({{provider}}).",yourKey:"tu clave",connectedKeyLabel:"Clave conectada",noNickname:"(sin nombre)",defaultSuffix:" (predeterminada)",transcriptionModelLabel:"Modelo de transcripción",selectModelPlaceholder:"Selecciona el modelo...",transcribing:"Transcribiendo...",uploadPrompt:"Haz clic para subir un archivo de audio o video (MP4)",orDragAndDrop:"o arrastra y suelta aquÃ",transcriptionHeading:"Transcripción",newAudioButton:"Nuevo Audio",copiedButton:"Copiado",copyButton:"Copiar",charCount:"{{count}} caracteres",toastUnsupportedFormatTitle:"Formato no compatible",toastUnsupportedFormatDescription:"EnvÃa archivos MP3, OGG, OPUS (audio) o MP4 (video).",toastFileTooBigTitle:"Archivo muy grande",toastFileTooBigDescription:"El archivo debe pesar como máximo {{maxSizeMb}}MB.",toastSuccessTitle:"Listo",toastTranscribedSuccess:"¡Audio transcrito con éxito!",toastErrorTitle:"Error",toastDefaultTranscribeError:"Error al transcribir el audio.",toastCopiedTitle:"¡Copiado!",toastCopiedDescription:"Texto copiado al portapapeles.",toastCopyErrorDescription:"No se pudo copiar el texto."},CB={backButton:"Volver",chromeWebStoreBadge:"Chrome Web Store",forZapdataCustomersBadge:"Para clientes de Zapdata",pageTitle:"Extensión Ads WhatsApp",heroDescription:"Encuentra, filtra y guarda anuncios de WhatsApp directo en la Biblioteca de Anuncios de Facebook â el botón para guardar aparece en el propio anuncio, sin salir de la página.",addToChromeButton:"Agregar a Chrome",oneClickInstall:"Directo desde la Chrome Web Store · instalación en 1 clic",saveOfferBadge:"Guardar Oferta",mockupCaption:"Este botón aparece automáticamente en cada anuncio de la Biblioteca de Anuncios",featureFilterTitle:"Filtro por WhatsApp",featureFilterDescription:"Activa el filtro de la extensión para ver solo los anuncios relacionados con WhatsApp en la Biblioteca de Anuncios.",featureBulkSelectTitle:"Selección múltiple",featureBulkSelectDescription:"Marca varios anuncios a la vez y guárdalos todos juntos, sin repetir el proceso uno por uno.",featureSaveTitle:"Guarda en segundos",featureSaveDescription:"Haz clic en el botón que aparece en cada anuncio, ponle un nombre a la oferta y se guarda al instante.",featureTrackOfertasTitle:"Directo en Track Ofertas",featureTrackOfertasDescription:"Cada oferta guardada entra organizada en Track Ofertas â la sección de Zapdata donde llevas el control de tus ofertas guardadas.",installStep1Title:'Haz clic en "Agregar a Chrome"',installStep1Description:"Te lleva directo a la Chrome Web Store, donde la extensión está publicada oficialmente.",installStep2Title:'Confirma en "Agregar extensión"',installStep2Description:"Chrome pide una confirmación rápida. Después de eso, el Ãcono ya aparece en la barra de herramientas â sin necesidad de tocar ninguna configuración.",tabInstall:"Cómo instalar",tabUse:"Cómo usar",useStep1:"Después de instalarla, abre la <link>Biblioteca de Anuncios de Facebook <icon/></link> e inicia sesión con tu cuenta de Zapdata cuando la extensión lo pida.",useStep2:'Aparece un botón <strong>"Guardar Oferta"</strong> en cada tarjeta de anuncio. Haz clic, ponle un nombre a la oferta y cae organizada en tu Track Ofertas.',useStep3:"También puedes marcar varios anuncios a la vez y guardarlos todos de una sola vez, directo desde la extensión â sin repetir el proceso anuncio por anuncio.",useStep4:"Usa los filtros de la extensión para mostrar solo anuncios relacionados con WhatsApp e ignorar el resto de la biblioteca.",faqHeading:"Preguntas frecuentes",faqFreeQuestion:"¿La extensión es gratuita?",faqFreeAnswer:"SÃ, para quienes tienen cuenta en Zapdata. El inicio de sesión que pide es el de tu cuenta Zapdata, para conectar las ofertas guardadas con tu Track Ofertas.",faqWhereSavedQuestion:"¿Dónde quedan las ofertas que guardo?",faqWhereSavedAnswer:"Directo en tu cuenta Zapdata, dentro de Track Ofertas â no quedan guardadas solo en el navegador, asà que puedes acceder desde
510cualquier computadora.",faqUpdatesQuestion:"¿Tengo que reinstalarla cuando sale una actualización?",faqUpdatesAnswer:"No. Como viene de la Chrome Web Store, el propio Chrome actualiza la extensión solo cuando sale una versión nueva â no necesitas hacer nada."},PB={pageHeading:"Generador de Palabras Clave",pageDescription:"Descubre las mejores palabras clave para encontrar anuncios de WhatsApp en el administrador de anuncios",inputPlaceholder:"Pregunta sobre palabras clave para tu nicho...",generatingKeywords:"Generando palabras clave...",copiedToast:"¡Copiado! ð¥",copyErrorToast:"Error al copiar",genericErrorMessage:"Perdón, ocurrió un error al procesar tu mensaje. Intenta de nuevo.",quickActionReligion:"Religión",quickActionCraft:"Manualidades",quickActionRecipes:"Recetas",quickActionEducation:"Educación",quickActionReligionPrompt:"Dame palabras clave para el nicho de productos religiosos",quickActionCraftPrompt:"Necesito palabras clave para anuncios de manualidades y crochet",quickActionRecipesPrompt:"Sugiéreme palabras clave para anuncios de recetas y reposterÃa",quickActionEducationPrompt:"Quiero palabras clave para anuncios de cursos y mentorÃas",featureModalName:"Generador de Palabras Clave"},AB={pageTitle:"Limpiador de Hash",pageDescription:"Elimina metadatos y modifica el hash de imágenes y videos para evitar la detección de duplicados por Facebook.",loaderText:"Limpiando hash de los archivos...",filesCardTitle:"Archivos",filesCardDescription:"Arrastra o selecciona imágenes y videos",clearAllButton:"Limpiar Todo",dropZonePrompt:"Haz clic o arrastra archivos aquÃ",dropZoneFormats:"JPG, PNG, WEBP, MP4, WEBM, MOV",processingLabel:"Procesando...",hashLabel:"Hash:",statusPending:"Pendiente",statusProcessing:"Procesando",statusReady:"Listo",statusError:"Error",processedCount:"{{processed}} de {{total}} procesado(s)",cleanHashButton:"Limpiar Hash",downloadAllButton:"Descargar Todos ({{count}})",emptyState:"TodavÃa no agregaste ningún archivo",infoMetadataTitle:"Eliminación de Metadatos",infoMetadataDescription:"Elimina EXIF, XMP, IPTC y otros metadatos que pueden identificar el origen del archivo.",infoHashTitle:"Cambio de Hash",infoHashDescription:"Modifica pÃxeles/bytes de forma imperceptible para generar un hash completamente nuevo.",infoClientSideTitle:"100% en tu Navegador",infoClientSideDescription:"Todo el procesamiento se hace en tu navegador. Tus archivos nunca se envÃan a servidores.",toastUnsupportedFormat:"Formato no compatible: {{fileName}}",toastFilesAdded:"{{count}} archivo(s) agregado(s)",toastAddFilesFirst:"Agrega archivos primero",toastProcessError:"Error al procesar: {{fileName}}",toastProcessingComplete:"¡Procesamiento completado!",toastNoProcessedFiles:"No hay ningún archivo procesado para descargar",toastZipDownloaded:"¡ZIP descargado con éxito!"},EB={pageTitle:"Administración de WhatsApps",pageSubtitle:"Gestiona tus chips y números de WhatsApp",totalLabel:"Total",statusActivePlural:"Activos",statusInactivePlural:"Inactivos",statusAnalysisPlural:"En análisis",statusLostPlural:"Perdidos",statusRelogarPlural:"Reloguear",tabAll:"Todos",exportButton:"Exportar",addChipButton:"Agregar Chip",searchPlaceholder:"Buscar por nombre, aplicación o número...",clearSearchAriaLabel:"Limpiar búsqueda",noResultsForSearch:"No se encontró ningún chip para esa búsqueda.",noChipsInFilter:"Ningún chip en este filtro.",noChipsRegistered:"Ningún chip registrado.",colName:"Nombre",colStatus:"Estado",colApp:"Aplicación",colNumber:"Número",colChipId:"ID Chip",colCreatedAt:"Creado el",colStatusSince:"Estado desde",colTimeInStatus:"Tiempo en el estado",colObservations:"Observaciones",colActions:"Acciones",csvHeaderName:"Nombre",csvHeaderStatus:"Estado",csvHeaderApp:"Aplicacion",csvHeaderNumber:"Numero",csvHeaderChipId:"ID Chip",csvHeaderCreatedAt:"Creado el",csvHeaderStatusSince:"Estado desde",csvHeaderObservations:"Observaciones",confirmRemoveChip:"¿Eliminar este chip?",toastLoadChipsError:"Error al cargar los chips",toastSaveChipError:"Error al guardar el chip",toastChipUpdated:"¡Chip actualizado!",toastAddChipError:"Error al agregar el chip",toastChipAdded:"¡Chip agregado!",toastRemoveError:"Error al eliminar",toastChipRemoved:"¡Chip eliminado!"},SB={delayUnitSeconds:"{{count}} segundos",delayUnitMinute:"{{count}} minuto",delayUnitMinutes:"{{count}} minutos",delayUnitMinSec:"{{minutes}}min {{seconds}}s",pageSubtitle:"Dispara flujos en masa ⢠Cuota de hoy: {{used}}/{{limit}}",connectedInstancesSuffix:" ({{count}} instancia{{plural}} conectada{{plural}})",newCampaignButton:"Nueva Campaña",createCampaignDialogTitle:"Crear Nueva Campaña",campaignNameLabel:"Nombre de la Campaña",campaignNamePlaceholder:"Ej: Black Friday 2026",flowToDispatchLabel:"Flujo a disparar",chooseActiveFlowPlaceholder:"Elige un flujo activo...",noActiveFlow:"Ningún flujo activo",flowStartNote:"El flujo se iniciará para cada número de la lista, igual que en los disparos automáticos.",phoneNumbersLabel:"Números de Teléfono",downloadTemplateButton:"Descargar plantilla",manualTab:"Manual",fileTab:"Archivo",phoneNumbersPlaceholder:`Pega los números (uno por lÃnea) 511Ej: 5511999999999 5125521988888888`,fileUploadNote:'Acepta .csv o .txt (un número por lÃnea). Se ignora el encabezado "phone".',validNumbersCount:"{{count}} números válidos ⢠máx {{max}} por campaña",validatingButton:"Validando...",validateNumbersButton:"Validar Números",validCount:"{{count}}
512 válidos",invalidCount:"{{count}} inválidos",keepOnlyValidButton:"Mantener solo los válidos",instancesToSendLabel:"Instancias para enviar",noInstanceConnected:"Ningún número conectado.",noNumberFallback:"Sin número",connectedBadge:"Conectado",selectedCount:"{{count}} seleccionada(s)",delayBetweenDispatchesLabel:"Retraso entre envÃos (segundos)",approxDelay:"â {{delay}}",delayRecommendationNote:"MÃnimo {{min}}s, máximo {{max}}s (30min). Recomendado: <strong>8s</strong> para volumen bajo, <strong>60-300s (1-5min)</strong> para 1k+ contactos, <strong>600-1800s (10-30min)</strong> para 5k+ contactos. Espaciar más reduce el riesgo de bloqueo del número.",alternateInstanceLabel:"Cuántos números antes de alternar de instancia",alternateEveryDispatch:"1 (alterna en cada envÃo)",alternateNote:"Distribuye los envÃos entre las instancias seleccionadas.",createCampaignButton:"Crear Campaña",connectedNumbersDialogTitle:"Números Conectados",noNumberConnectedDialog:"Ningún número conectado",connectNumberButton:"Conectar Número",manageNumbersButton:"Gestionar Números",statCampaigns:"Campañas",statSent:"Enviados",statFailed:"Fallidos",statInstances:"Instancias",noCampaignsFound:"No se encontró ninguna campaña",createFirstCampaign:"Crea tu primera campaña",createdOn:"Creada el {{date}}",progressLabel:"Progreso",inProgressLabel:"En curso",totalLabel:"Total",flowBadge:"Flujo",flowRunningBadge:"Flujo en ejecución",instanceDisconnectedWarning:'La instancia de esta campaña está desconectada. Los envÃos pendientes se reanudan solos en cuanto se reconecte, o haz clic en "Verificar conexión".',startButton:"Iniciar",checkConnectionButton:"Verificar conexión",pauseButton:"Pausar",stopButton:"Detener",resumeButton:"Continuar",completedButton:"Completado",endedButton:"Finalizado",viewMessagesTitle:"Ver mensajes",deleteCampaignDialogTitle:"Eliminar Campaña",actionCannotBeUndone:"Esta acción no se puede deshacer.",stopCampaignDialogTitle:"Detener Campaña",stopCampaignDialogDescription:"Esto finalizará la campaña y cancelará todas las sesiones de flujo en curso. No se puede reanudar después.",stopCampaignButton:"Detener campaña",sentMessagesDialogTitle:"Mensajes Enviados",noLogsFound:"No se encontró ningún registro",statusDisconnectedBadge:"Instancia desconectada",statusDraft:"Borrador",statusSending:"Enviando",statusPaused:"Pausada",statusCompleted:"Completada",statusCancelled:"Finalizada",toastLoadCampaignsError:"Error al cargar las campañas",toastFileLoaded:"Archivo cargado: {{fileName}}",toastSelectInstanceToValidate:"Selecciona una instancia para validar",toastAddNumbersToValidate:"Agrega números para validar",toastValidationLimit:"LÃmite de 100 números por validación",toastInstanceTokenNotFound:"No se encontró el token de la instancia.",toastUazapiConfigNotFound:"No se encontró la configuración de UAZAPI",toastValidationError:"Error en la validación",toastValidationResult:"{{valid}} válidos, {{invalid}} inválidos",toastValidateError:"Error al validar: {{message}}",toastOnlyValidKept:"Solo se mantuvieron los válidos",toastEnterName:"Escribe un nombre",toastSelectFlow:"Selecciona un flujo",toastAddValidNumber:"Agrega al menos un número válido",toastMaxContacts:"Máximo de {{max}} contactos por campaña",toastSelectInstance:"Selecciona al menos una instancia",toastMinDelay:"Retraso mÃnimo: {{min}}s",toastMaxDelay:"Retraso máximo: {{max}}s",toastQuotaExceeded:"Cuota diaria superada. Usaste {{used}}/{{limit}} en las últimas 24h ({{instanceCount}} instancia{{plural}} conectada{{plural}} à {{perInstance}}). Conecta más números para aumentar tu cuota.",toastCreateCampaignError:"Error al crear la campaña: {{message}}",toastCampaignCreated:"¡Campaña creada!",toastStartedCampaign:"¡Campaña iniciada!",toastPausedCampaign:"Campaña pausada",toastResumedCampaign:"Campaña reanudada",toastEndedCampaign:"Campaña finalizada",toastActionError:"Error: {{message}}",toastGenericError:"Ocurrió un error.",toastStillDisconnected:"La instancia sigue desconectada. Reconecta el número e inténtalo de nuevo.",toastReconnected:"¡Instancia reconectada! Reanudando los envÃos pendientes.",toastCheckConnectionError:"Error al verificar la conexión: {{message}}",toastDeleteError:"Error al eliminar",toastCampaignDeleted:"Campaña eliminada"},NB={campaignStatus:{draft:"Borrador",queued:"En cola",running:"En ejecución",paused:"Pausada",awaitingDelivery:"Esperando entrega",completed:"Completada",cancelled:"Cancelada",failed:"Falló"},metaErrorReasons:{0:"Error genérico de Meta. Intenta de nuevo en unos minutos.",3:"Permiso de la API insuficiente â revisa el token de acceso de WhatsApp Business.",10:"Permiso denegado por Meta para esta cuenta.",100:"Parámetro inválido en la solicitud enviada a Meta.",190:"Token de acceso vencido o inválido. Reconecta el WhatsApp Business.",200:"Falta el permiso de Meta para enviar mensajes.",368:"Cuenta bloqueada temporalmente por Meta por violación de polÃticas.",1006:"Se perdió la conexión con Meta. Intenta de nuevo.",130429:"Se alcanzó el lÃmite de envÃos por segundo de Meta (rate limit). Espera unos minutos.",131e3:"Error genérico de WhatsApp al procesar el mensaje.",13100
5125:"Acceso denegado por Meta para esta operación.",131008:"Falta un parámetro obligatorio en el mensaje.",131009:"Valor de parámetro inválido en el mensaje.",131016:"Servicio de Meta temporalmente no disponible.",131021:"No se pudo enviar el mensaje a uno mismo (remitente = destinatario).",131026:"El destinatario no tiene WhatsApp o no puede recibir mensajes en este momento.",131031:"Cuenta bloqueada por Meta. Verifica el estado del número en el Business Manager.",131042:"Falla de pago en Meta. Verifica que haya un método de pago válido registrado en WhatsApp Business y que la factura esté al dÃa.",131045:"Template no aprobado o distinto â verifica que el template siga aprobado por Meta.",131047:"Ventana de 24h vencida â el destinatario no interactuó en las últimas 24h y solo se pueden enviar templates.",131048:"Se alcanzó el lÃmite antispam de Meta. Reduce el ritmo de envÃo.",131049:"Mensaje no entregado por restricciones de calidad del número.",131050:"El usuario optó por no recibir mensajes de este número (opt-out).",131051:"Tipo de mensaje no compatible.",131052:"Falla al descargar el contenido multimedia del mensaje.",131053:"Falla al subir el contenido multimedia a Meta.",131056:"Se alcanzó el lÃmite de pares de conversación (par de números) en Meta. Espera.",131057:"Cuenta en modo mantenimiento por parte de Meta.",132e3:"El template tiene un número incorrecto de parámetros.",132001:"El template no existe o fue eliminado en Meta.",132005:"El texto traducido del template supera el lÃmite permitido.",132007:"La categorÃa del template fue modificada por Meta â requiere nueva aprobación.",132012:"Formato de parámetro del template inválido.",132015:"Template pausado por Meta por baja calidad.",132016:"Template desactivado por Meta por baja calidad.",132068:"Template en flujo pausado por Meta.",132069:"Template en flujo bloqueado por Meta.",133e3:"Falla al registrar el número en la Cloud API.",133004:"Servidor de Meta temporalmente no disponible.",133005:"PIN de verificación en dos pasos incorrecto.",133006:"Es necesario reverificar el número en Meta.",133008:"Demasiados intentos de PIN â espera antes de volver a intentar.",133009:"PIN bloqueado por exceso de intentos.",135e3:"Falla genérica al procesar el mensaje en Meta."},metaErrorFallback:"Error Meta {{code}} (sin descripción mapeada).",metaErrorNoCode:"Falla señalada por Meta sin código.",metaLanguages:{ptBR:"Portugués (Brasil)",ptPT:"Portugués (Portugal)",enUS:"Inglés (EE. UU.)",enGB:"Inglés (Reino Unido)",esES:"Español (España)",esMX:"Español (México)",esAR:"Español (Argentina)",frFR:"Francés",itIT:"Italiano",de:"Alemán"},tierNotSynced:"No sincronizado",tier50:"50 / 24h",tier250:"250 / 24h",tier1k:"1.000 / 24h",tier10k:"10.000 / 24h",tier100k:"100.000 / 24h",tierUnlimited:"Ilimitado",toastSyncTemplatesSuccess:"Sincronización completada â {{count}} template(s) actualizados.",toastSyncError:"Error al sincronizar",toastSyncNumbersSuccess:"Números sincronizados â {{added}} nuevo(s), {{updated}} actualizado(s).",toastSyncNumbersPartial:"{{count}} sincronizado(s), {{problems}} con problema",toastSyncNumbersPartialDesc:"Motivo principal: {{reason}}. Consulta el detalle en cada tarjeta.",toastOrphanNotFound:"número no encontrado en Meta",toastCheckToken:"revisa el token",toastSyncNumbersError:"Error al sincronizar números",toastCampaignDeletedShort:"Campaña eliminada",copyOf:"Copia de {{name}}",toastDuplicateError:"Error al duplicar",toastLoadCampaignError:"Error al cargar la campaña",blockReasonNoConnection:"Conecta al menos 1 número oficial en el WhatsApp Coexistente.",blockReasonNoApprovedTemplate:"Crea y espera la aprobación de al menos 1 template.",officialApiSuffix:"(API oficial)",pageDescription:"EnvÃo de templates aprobados vÃa Meta Cloud API â números del WhatsApp Coexistente.",createTemplateButton:"Crear template",newCampaignButton:"Nueva campaña",officialNumbersTitle:"Números oficiales disponibles",officialNumbersDescription:"Números conectados en el WhatsApp Coexistente que pueden enviar por la API oficial.",syncingButton:"Sincronizando...",syncButton:"Sincronizar",noNumberConnectedYet:"TodavÃa no conectaste ningún número.",connectNowLink:"Conectar ahora",metaLimitLabel:"LÃmite Meta:",myTemplatesTitle:"Mis templates",myTemplatesDescription:"Todos los templates de tu cuenta con el estado actual en Meta.",noTemplatesYet:"TodavÃa no tienes templates. Crea uno desde la biblioteca oficial de Meta y luego haz clic en <strong>Sincronizar</strong> para traer los templates que ya existen en tu cuenta de WhatsApp.",campaignsTitle:"Campañas",campaignsDescription:"Ãltimas 50 campañas â se actualiza cada 5s.",noCampaignsYetShort:"TodavÃa no creaste ninguna campaña.",colName:"Nombre",colStatus:"Estado",sendProgressTooltipLabel:"Progreso de envÃo (Meta)",sendProgressTooltipContent:"Porcentaje de contactos cuyo dis
512paro ya fue <strong>enviado a Meta</strong> (aceptado o rechazado por la API). No refleja la entrega real al destinatario â esa información aparece en la columna <em>Entrega real (Meta)</em>.",sentFailedLabel:"Enviados / Fallidos",sentFailedTooltipContent:"Cantidad de envÃos enviados a Meta (aceptados por la API de WhatsApp). Esto <strong>no significa</strong> que el mensaje ya llegó al destinatario â la entrega real aparece en la columna <em>Entrega real (Meta)</em>.",realDeliveryColumn:"Entrega real (Meta)",actionsColumn:"Acciones",ofTotal:"de {{total}}",successDispatchBadge:"{{count}} envÃo{{plural}} exitoso{{plural}}",awaitingConfirmationTitle:"Meta aceptó pero todavÃa no confirmó la entrega al destinatario",awaitingConfirmationBadge:"{{count}} esperando confirmación",failureBadge:"{{count}} fallo{{plural}}",metaReasonLabel:"Motivo indicado por Meta{{codeSuffix}}:",metaReasonCodeSuffix:" (código {{code}})",pauseTitle:"Pausar",resumeTitle:"Reanudar",cancelCampaignTitle:"Cancelar",duplicateCampaignTitle:"Duplicar campaña",deleteCampaignTitle:"Eliminar campaña",deleteCampaignConfirmTitle:"¿Eliminar campaña?",deleteCampaignConfirmDescription:"La campaña <strong>{{name}}</strong> y todo su historial de envÃos se eliminarán de forma permanente. Esta acción no se puede deshacer.",apagarButton:"Eliminar",createTemplateSectionTitle:"Crear template",createTemplateSectionDescription:"Crea templates desde la biblioteca oficial de Meta y sigue el estado de revisión en tiempo real.",numberPlaceholder:"Número",syncAllButton:"Sincronizar todos",createFromMetaButton:"Crear desde Meta",connectNumberFirstNote:"Conecta un número primero para gestionar templates.",noTemplateForNumberNote:'No hay ningún template creado para este número. Usa "Crear desde Meta" para empezar.',colLanguage:"Idioma",colCategory:"CategorÃa",colLastSync:"Ãltima sincronización",checkStatusButton:"Verificar estado",toastVerifyFailed:"Error al verificar",toastStatusResult:"Estado: {{status}}",toastSyncFailed:"Error al sincronizar",toastSyncedCount:"Sincronizados {{upserted}}/{{total}}",createFromLibraryWizardTitle:"Crear template desde la biblioteca oficial de Meta",step1NumberTab:"1. Número",step2LibraryTab:"2. Biblioteca Meta",step3EditSendTab:"3. Editar y enviar",selectNumberLabel:"Selecciona el número",publicLibraryTab:"Biblioteca Meta (pública)",myWabaTab:"De mi cuenta de WhatsApp",searchPlaceholderGeneric:"Buscar...",languagePlaceholder:"Idioma",allLanguages:"Todos los idiomas",refreshButton:"Actualizar",noTemplateInPublicLibrary:"No se encontró ningún template en la biblioteca pública de Meta para este filtro.",noTemplateInWaba:"No se encontró ningún template en esta WABA. Crea uno desde la Biblioteca pública.",nameSlugLabel:"Nombre (slug único)",slugHintNote:"Solo minúsculas, números y _.",languageLabel:"Idioma",selectLanguagePlaceholder:"Selecciona el idioma",buttonDataLabel:"Datos de los botones del template",buttonFallback:"Botón {{index}}",buttonDataNote:"Meta exige el mismo número de entradas de botón definido en la biblioteca; deja en blanco para usar el valor predeterminado mostrado.",buttonUrlRequiredGeneric:"Completa la URL del botón para enviar este template.",buttonPhoneRequiredGeneric:"Completa el teléfono del botón para enviar este template.",previewLabel:"Vista previa",templateContentFixedNote:"El contenido de este template lo define Meta y no se puede modificar. Selecciona el modelo deseado y envÃalo a revisión.",alreadyInWabaButton:"Ya existe en tu WABA",submitForReviewButton:"Enviar a revisión",alreadyInWabaTitle:"Este template ya existe en tu WABA â no es necesario reenviarlo.",errorTokenExpired:"Token de Meta vencido. Reconecta el número en el WhatsApp Coexistente.",errorMissingScope:"El token no tiene el permiso whatsapp_business_management. Reconecta otorgando todos los permisos.",errorForbidden:"Esta conexión no pertenece al usuario conectado.",errorUnknownMeta:"Error desconocido de Meta",errorCallingFunction:"Error al llamar a la función.",toastLoadLibraryError:"Error al cargar la biblioteca",toastLoadWabaError:"Error al cargar los templates de la WABA",toastAlreadyExistsInWaba:"Este template ya existe en tu WABA. Usa la pestaña 'Templates' para seguir el estado â no es necesario reenviarlo.",toastTemplateSubmitted:"Template enviado a revisión (estado: {{status}})",toastSubmitTemplateError:"Error al enviar el template",toastConnectionUnavailable:"La conexión original ya no está disponible. Selecciona otro número.",toastTemplateNoLongerApproved:"El template original ya no está aprobado. Selecciona otro template.",newCampaignWizardTitle:"Nueva campaña â DisparaZap (API oficial)",step2TemplateTab:"2. Template",step3ContactsTab:"3. Contactos y envÃo",campaignNameLabel:"Nombre de la campaña",campaignNamePlaceholder:"Ej: Black Friday 2026 - leads frÃos",officialNumberLabel:"Número oficial",searchNamePlaceholder:"Buscar nombre...",allCategories:"Todas las categorÃas",allLanguagesShort:"Todos los idiomas",noApprovedTemplateNote:'No se encontró ningún template APPROVED para este número. Crea uno en la sección "Crear template".',contactsListLabel:"Lista de contactos (CSV)",csvInstru
512ctionsNote:"Pega el CSV con encabezado o súbelo. Separador <0>,</0> o <1>;</1>. ¿Sin encabezado? 1 teléfono por lÃnea (asume la columna <2>phone</2>).",contactsCsvPlaceholder:`phone,nombre,producto 5135511999999999,Juan,Curso X 5145521988888888,MarÃa,Curso Y`,loadCsvButton:"Cargar CSV",linesReadCount:"{{count}} lÃnea(s) leÃda(s)",columnsSuffix:" · columnas: {{columns}}",columnMappingLabel:"Mapeo de columnas",phoneColumnLabel:"Columna de teléfono *",chooseColumnPlaceholder:"Elige la columna",noVariablesNote:"Este template no tiene variables.",urlButtonLabel:"Botón URL",variableLabel:"Variable",csvColumnOption:"Columna del CSV",fixedValueOption:"Valor fijo",chooseColumnPlaceholder2:"Elegir columna",urlSuffixPlaceholder:"Sufijo de la URL (reemplaza {{token}})",fixedValuePlaceholder:"Valor fijo",validContactsCount:"â {{count}} contacto(s) válido(s)",invalidContactsSuffix:" · {{count}} ignorado(s) (teléfono inválido)",previewFirstContactLabel:"Vista previa (1er contacto)",delayBetweenSendsLabel:"Retraso entre envÃos (s)",jitterLabel:"Variación aleatoria (s)",jitterTooltip:"Variación aleatoria sumada o restada al retraso base para que el ritmo de envÃo sea menos robótico y más natural. Ej.: con un retraso de 5s y variación de 2s, cada envÃo sale en un intervalo aleatorio entre <strong>3s y 7s</strong> (5 ± 2). Esto reduce el patrón automático que percibe Meta y ayuda a preservar la calidad del número.",summaryLabel:"Resumen",summaryText:"{{count}} contactos · retraso {{delay}}s ± {{jitter}}s â tiempo estimado: ~{{minutes}}min",tierLimitNote:"â EnvÃo dentro de los lÃmites del tier de Meta. Ante un 429, el sistema reprograma automáticamente.",nextButton:"Siguiente",createAndStartButton:"Crear e iniciar envÃo",toastCampaignCreatedCount:"Campaña creada: {{count}} contactos en cola",toastCreateCampaignErrorGeneric:"Error al crear la campaña",toastMaxButtons:"Meta admite un máximo de 10 botones por template.",validateSelectConnection:"Selecciona el número de la conexión.",validateNameFormat:"El nombre debe contener solo letras minúsculas, números y _.",validateBodyRequired:"El cuerpo del template es obligatorio.",validateBodyMaxLength:"El cuerpo debe tener como máximo 1024 caracteres.",validateFooterMaxLength:"El pie de página debe tener como máximo 60 caracteres.",validateHeaderMaxLength:"El encabezado de texto debe tener como máximo 60 caracteres.",validateMediaUrlRequired:"Indica una URL pública de ejemplo para el encabezado multimedia.",validateFillVarExamples:"Completa los {{count}} ejemplo(s) de las variables del cuerpo.",validateButtonTextRequired:"Botón {{index}}: el texto es obligatorio.",validateButtonTextMaxLength:"Botón {{index}}: el texto debe tener como máximo 25 caracteres.",validateButtonUrlRequired:"Botón {{index}}: indica la URL.",validateButtonPhoneRequired:"Botón {{index}}: indica el teléfono (formato +55...).",createFromScratchTitle:"Crear template desde cero",numberConnectionLabel:"Número (conexión)",categoryLabel:"CategorÃa",headerLabel:"Encabezado",noHeaderOption:"Sin encabezado",textOption:"Texto",imageOption:"Imagen",videoOption:"Video",documentOption:"Documento",headerTextPlaceholder:"Texto del encabezado (máx. 60 caracteres)",mediaUrlPlaceholder:"URL pública de ejemplo del contenido multimedia (https://...)",mediaUrlNote:"Meta usa esta URL solo como ejemplo durante la revisión. En el envÃo real adjuntas el contenido multimedia.",bodyLabel:"Cuerpo del mensaje *",bodyTemplatePlaceholder:"Hola {{token1}}, tu compra de {{token2}} fue confirmada!",variablesHintUse:"Usa",variablesHintSuffix:"⦠para variables. {{count}}/1024",variableExamplesRequiredNote:"Ejemplos de las variables (obligatorio para la revisión)",variableExamplePlaceholder:"Ejemplo para {{token}}",footerLabel:"Pie de página (opcional)",footerPlaceholder:"Texto pequeño al final (máx. 60 caracteres)",buttonsLabel:"Botones (hasta 10)",quickReplyButton:"+ Respuesta rápida",urlButtonAdd:"+ URL",phoneButtonAdd:"+ Teléfono",buttonTextPlaceholder:"Texto del botón (máx. 25)",urlButtonPlaceholder:"https://tusitio.com (usa {{token}} para variable dinámica)",imagePlaceholderTag:"[Imagen]",videoPlaceholderTag:"[Video]",documentPlaceholderTag:"[Documento]",bodyWillAppearHere:"El cuerpo aparecerá aquÃâ¦",metaReviewNote:"Meta analiza el contenido antes de aprobarlo. Los templates de MARKETING suelen ser más estrictos â evita el lenguaje promocional agresivo y respeta las polÃticas de WhatsApp."}
514,kB={title:"Análisis de Rendimiento",emptyMetrics:"Agrega métricas al producto para generar el análisis de rendimiento.",context:{title:"Contexto de la Campaña",description:"Responde algunas preguntas para un análisis más preciso y recomendaciones personalizadas",q1:"1. ¿Qué tipo de campaña estás usando?",campaignType:{conversionMessage:"Conversión - Compra por Mensaje",maximizeMessages:"Maximizar Mensajes",conversionSales:"Conversión optimizada para ventas",engagementSales:"Campaña de Interacción optimizada para ventas",engagementConversation:"Campaña de interacción optimizada para conversación",other:"Otro tipo"},q2:"2. ¿Qué tipo de creativo estás usando?",creativeType:{video:"Video",image:"Imagen"},q3:"3. ¿Cuál es tu presupuesto diario por campaña?",budget:{upTo10:"Hasta $10/dÃa","10to50":"$10 - $50/dÃa","50to200":"$50 - $200/dÃa",above200:"Más de $200/dÃa"}},generateButton:{analyzing:"Analizando...",generate:"Generar Análisis Profesional"},generateDescription:"Análisis detallado con diagnóstico y recomendaciones personalizadas",newContext:"Ingresar Nuevo Contexto",viewDetailedMetrics:"Ver Métricas Detalladas",updating:"Actualizando...",updateMetrics:"Actualizar Métricas",sections:{cpl:"Análisis de CPL (Costo por Lead)",conversion:"Análisis de Tasa de Conversión",roas:"Análisis de ROAS (Retorno)",summary:"Resumen Ejecutivo"},cta:{title:"Acelera Tus Resultados",description:"¿Quieres aplicar estas estrategias con el apoyo de especialistas? Conoce nuestros entrenamientos completos.",button:"ENTRENAMIENTO X1"},toasts:{notEnoughMetrics:"No hay métricas suficientes para el análisis",analysisGenerated:"¡Análisis generado con éxito!",analysisError:"Error al generar el análisis. Intenta de nuevo."}},TB={lastUpdate:"Ãltima actualización: {{date}}",addNewMetric:"Agregar Nueva Métrica",comparativeCharts:"Gráficos Comparativos"},IB={steps:{fetch:"Buscando página",structure:"Analizando estructura",styles:"Extrayendo estilos",media:"Identificando contenido multimedia",content:"Extrayendo contenido",prompt:"Generando prompt"},toasts:{invalidUrlTitle:"Error",invalidUrlDescription:"Ingresa una URL válida",successTitle:"Ãxito",successDescription:"¡Sitio analizado con éxito!",errorTitle:"Error",errorDescription:"Error al analizar el sitio",copiedDescription:"Prompt copiado al portapapeles",deleteErrorTitle:"Error",deleteErrorDescription:"Error al eliminar",deletedTitle:"Eliminado",deletedDescription:"Sitio eliminado del historial"},title:"Clonador de Entregables",subtitle:"Analiza cualquier sitio y genera un prompt detallado para recrearlo con IA",tabs:{analyze:"Analizar",history:"Historial ({{count}})"},urlCard:{title:"URL del Sitio",description:"Pega la URL del sitio que deseas clonar",placeholder:"https://ejemplo.com",analyzeButton:"Analizar"},results:{structureTitle:"Estructura",titleLabel:"TÃtulo:",notFound:"No encontrado",descriptionLabel:"Descripción:",layoutLabel:"Diseño:",sectionsLabel:"Secciones ({{count}}):",stylesTitle:"Estilos",colorsLabel:"Colores ({{count}}):",fontsLabel:"Fuentes:",fontsNotDetected:"No detectadas",cssFrameworkLabel:"Framework CSS:",promptTitle:"Prompt Generado",promptDescription:"Usa este prompt para recrear el sitio con IA",copyPrompt:"Copiar Prompt"},history:{empty:"Ningún sitio clonado",emptyDescription:"Analiza un sitio para guardarlo en el historial",untitled:"Sin tÃtulo",view:"Ver"},planModal:{featureName:"Clonador de Sitios"}},RB={orderCard:{statusReceived:"Recibido",statusCancelled:"Cancelado",statusExpired:"Vencido",clickToCopy:"Haz clic para copiar",copyNumber:"Copiar Número",smsCode:"Código SMS:"},toasts:{loadCountriesError:"Error al cargar los paÃses",loadServicesError:"Error al cargar los servicios",limitedAvailability:"Solo hay {{count}} números disponibles",reduceQuantity:"Reduce la cantidad e intenta de nuevo.",requiredAmount:"Necesario: {{amount}}",purchaseSuccessMultiple:"¡{{count}} números adquiridos con éxito!",purchaseSuccessSingle:"¡Número adquirido con éxito!",purchaseError:"Error al comprar el número",smsReceived:"¡SMS recibido!",cancelError:"Error al cancelar",cancelSuccess:"Cancelado. Reembolso: {{amount}}"},title:"ð± Números Virtuales",subtitle:"Compra números virtuales para recibir SMS",balance:{label:"Tu saldo",recharge:"Recargar"},tabs:{buy:"Comprar Número",orders:"Mis Pedidos"},country:{chooseTitle:"1. Elige el paÃs",collapse:"Colapsar",showMore:"Ver más paÃses ({{count}})"},service:{chooseTitle:"2. Elige el servicio",searchPlaceholder:"Buscar servicio...",noneAvailable:"Ningún
514servicio disponible",available:"{{count}} disponibles",buy:"Comprar"},tutorial:{title:"Cómo recibir SMS del número virtual en WhatsApp",step1:"Copia el número adquirido y solicita el SMS de verificación directamente desde la app de WhatsApp (en la pantalla de inicio de sesión/registro).",step2:{before:"Si WhatsApp muestra un aviso para intentar de nuevo en 1 hora, ",bold:"cancela el número dentro de los 20 minutos",after:" (antes de que expire) para recibir el reembolso y comprar un número nuevo."}},orders:{title:"Historial de Pedidos",empty:"No se encontró ningún pedido"}},DB={errors:{loadServices:"Error al cargar los servicios",genericTitle:"Error",loadServicesDescription:"No se pudieron cargar los servicios",requiredFieldsTitle:"Campos obligatorios",requiredFieldsDescription:"Completa el link y la cantidad",invalidLinkTitle:"Link inválido",commentsRequiredTitle:"Comentarios obligatorios",commentsRequiredDescription:"Ingresa al menos {{min}} comentarios, uno por lÃnea. Enviaste {{count}}.",tooManyCommentsTitle:"Demasiados comentarios",tooManyCommentsDescription:"Este servicio acepta como máximo {{max}} comentarios; enviaste {{count}}.",invalidQuantityTitle:"Cantidad inválida",invalidQuantityDescription:"La cantidad debe estar entre {{min}} y {{max}}",notAuthenticated:"No autenticado",insufficientBalanceTitle:"Saldo insuficiente",insufficientBalanceDescription:"Necesitas {{required}} pero tienes {{balance}}",createOrder:"Error al crear el pedido",checkStatus:"Error al verificar el estado",cancelOrder:"Error al cancelar el pedido"},toasts:{orderCreatedTitle:"¡Pedido creado!",orderCreatedDescription:"Pedido #{{id}} creado con éxito",statusUpdatedTitle:"Estado actualizado",statusUpdatedDescription:"Estado: {{status}}",orderCancelledTitle:"Pedido cancelado",orderCancelledDescription:"Pedido cancelado con éxito"},title:"ð Panel de Marketing",subtitle:"Compra seguidores, me gusta y visualizaciones para tus redes sociales",balanceLabel:"Saldo disponible",recharge:"Recargar",tabs:{services:"Servicios",orders:"Mis Pedidos"},quickFilters:{instagramFollowers:"ð¸ Instagram Seguidores",instagramLikes:"â¤ï¸ Instagram Me Gusta",facebookComments:"ð¬ Facebook Comentarios",facebookPostLikes:"ð Facebook Me Gusta de Publicación"},searchPlaceholder:"Buscar servicio...",categoryPlaceholder:"CategorÃa",allCategories:"Todas las categorÃas",form:{link:"Link",quantity:"Cantidad",quantityDefinedByComments:"(definida por los comentarios)",quantityMinMax:"(mÃn: {{min}}, máx: {{max}})",customComments:"Comentarios Personalizados ({{count}} comentarios)",customCommentsHelp:"Ingresa los comentarios deseados, uno por lÃnea. La cantidad se determinará automáticamente.",customCommentsPlaceholder:`Comentario 1 515Comentario 2 516Comentario 3 517...`,pricePer1000:"Precio por 1000:",total:"Total:",buyButton:"Comprar"},per1000:"por 1000",noOrders:"TodavÃa no hiciste ningún pedido",orderCard:{quantity:"Cant: {{count}}",progress:"Progreso",start:"Inicio: {{count}}",remaining:"Restante: {{count}}"}},MB={errors:{loadOffers:"Error al cargar las ofertas",requiredFieldsTitle:"Campos obligatorios",requiredFieldsDescription:"Completa el nombre y el link de la oferta.",invalidLinkTitle:"Link inválido",invalidLinkDescription:"El link debe ser de la Biblioteca de Anuncios de Facebook.",genericTitle:"Error",genericDescription:"Ocurrió un error al procesar tu solicitud.",requiredNameTitle:"Nombre obligatorio",requiredNameDescription:"Completa el nombre de la oferta.",updateOfferTitle:"Error al actualizar la oferta",deleteOfferTitle:"Error al eliminar la oferta",saveMetricTitle:"Error al guardar la métrica",saveNotesTitle:"Error al guardar las observaciones",requiredQuantityTitle:"Campo obligatorio",requiredQuantityDescription:"Completa la cantidad de anuncios."},toasts:{offerCreatedTitle:"¡Oferta registrada!",offerCreatedDescription:"Ahora puedes ingresar los datos de anuncios manualmente.",offerUpdatedTitle:"¡Oferta actualizada!",offerUpdatedDescription:"El nombre de la oferta se actualizó con éxito.",offerDeletedTitle:"Oferta eliminada",offerDeletedDescription:"La oferta se eliminó con éxito.",metricSavedTitle:"¡Métrica guardada!",metricSavedDescription:"Anuncios del dÃa {{date}} actualizados con éxito.",notesSavedTitle:"¡Observaciones guardadas!",notesSavedDescription:"Las observaciones se actualizaron con éxito."},loadingOffers:"Cargando ofertas",loadingOffersEllipsis:"Cargando ofertas...",subtitle:"Sigue el rendimiento de los anuncios activos de tus ofertas",addOffer:"Agregar Oferta",createDialog:{title:"Registrar Nueva Oferta",description:"Completa los datos a continuación para empezar a rastrear una nueva oferta."}
517,form:{offerNameLabel:"Nombre de la Oferta *",offerNamePlaceholder:"Ej: Producto XYZ - Campaña Verano",libraryLinkLabel:"Link de la Biblioteca de Anuncios *",funnelNumberLabel:"Número de WhatsApp de la oferta (opcional)",funnelNumberPlaceholder:"Ej: 5511999999999",submitting:"Registrando...",submit:"Registrar Oferta"},empty:{title:"Ninguna oferta registrada",description:"Empieza registrando tu primera oferta para seguir el rendimiento de los anuncios activos.",cta:"Registrar Primera Oferta"},confirmDelete:'¿Seguro que quieres eliminar la oferta "{{name}}"?',viewAds:"Ver anuncios",updateAds:"Actualizar Anuncios ({{date}})",chart:{adsLegend:"Anuncios",activeAdsLegend:"Anuncios Activos"},variation:{label:"Variación",vsYesterday:"Variación vs. DÃa Anterior",moreAds:"Anuncios de más",fewerAds:"Anuncios de menos",none:"Sin variación"},lastRecord:"Ãltimo Registro",editDialog:{title:"Editar Oferta",description:"Cambia el nombre de la oferta según sea necesario.",save:"Guardar Cambios"},updateDialog:{title:"Actualizar Anuncios",description:"Indica la cantidad de anuncios activos para hoy ({{date}}).",quantityLabel:"Cantidad de Anuncios",quantityPlaceholder:"Ej: 15"},viewLibrary:"Ver biblioteca de anuncios",editPreviousDays:"Editar DÃas Anteriores",offerWhatsapp:"WhatsApp de la Oferta",notes:{title:"Observaciones",placeholder:"Agrega observaciones sobre esta oferta...",save:"Guardar Observaciones"}},FB={errors:{urlRequiredTitle:"URL obligatoria",urlRequiredDescription:"Pega el link del video de TikTok que deseas descargar",invalidLinkTitle:"Link inválido",invalidLinkDescription:"Usa solo links de TikTok",processDownload:"Error al procesar la descarga",downloadFile:"Error al descargar el archivo",downloadErrorTitle:"Error en la descarga",downloadErrorDescription:"No se pudo descargar el video"},downloadingTitle:"Descargando...",downloadingDescription:"Espera mientras preparamos tu archivo",downloadCompleteTitle:"¡Descarga completa!",downloadCompleteDescription:"Archivo descargado con éxito",title:"Descargar Videos de TikTok",subtitle:"Descarga videos de TikTok sin marca de agua gratis",linkLabel:"Link del Video",linkPlaceholder:"Pega el link de TikTok aquÃ...",tiktokDetected:"TikTok detectado â",formatLabel:"Formato",formatVideo:"Video (MP4) - Sin marca de agua",formatAudio:"Solo Audio (MP3)",downloadingButton:"Descargando...",howToUse:{title:"ð¡ Cómo usar",step1:"1. Abre TikTok y encuentra el video que deseas descargar",step2:'2. Toca "Compartir" y copia el link',step3:'3. Pega el link aquà y haz clic en "Descargar"',step4:"4. ¡El video se descargará sin marca de agua!"}},LB={errors:{loadConnections:"Error al cargar las conexiones",configNotLoadedTitle:"Configuración no cargada",configNotLoadedDescription:"Espera unos segundos e intenta de nuevo.",connectionCancelledTitle:"Conexión cancelada",connectionCancelledDescription:"Cerraste la ventana emergente o no autorizaste.",incompleteDataTitle:"Datos incompletos",incompleteDataDescription:"No recibimos waba_id ni phone_number_id de Meta.",connectErrorTitle:"Error al conectar",startConnectionErrorTitle:"Error al iniciar la conexión",unknownFailure:"Falla desconocida",disconnectErrorTitle:"Error al desconectar",tryAgain:"Intenta de nuevo.",loadSdkFailed:"Error al cargar el SDK de Facebook"},success:{connectedTitle:"¡WhatsApp conectado!",connectedWithNumber:"Número {{number}} vinculado.",connectedGeneric:"Conexión creada con éxito.",disconnected:"Número desconectado"},title:"WhatsApp Coexistente",tutorialTitle:"Tutorial â WhatsApp Coexistente",slotBalance_one:"{{count}} espacio disponible",slotBalance_other:"{{count}} espacios disponibles",intro:{before:"Conecta tu número oficial usando el modelo de ",bold:"Coexistencia",after:" de Meta â el único modelo compatible con Zap Data."},whatIsTitle:"¿Qué es la Coexistencia?",whatIsDescription:{before:"Modelo oficial de Meta que hace que tu WhatsApp funcione en",highlight:'"dos lugares al mismo tiempo"',after:": en el celular (conversaciones, grupos y estados) y en la API oficial que usa Zap Data para las automatizaciones. Todo sincronizado â sin perder conversaciones ni cambiar de número."},addNumberCard:{title:"Agregar número en modo Coexistencia",descriptionBefore:"Cada número conectado cuesta ",descriptionBold:"$97,00 por mes",descriptionAfter:", vÃa pago recurrente. Después del pago, serás redirigido al registro
517seguro de Meta."},openingMeta:"Abriendo Meta...",connectNumber:"Conectar número",connectedNumbers:{title:"Números conectados",none:"Ningún número conectado todavÃa.",activeCount_one:"{{count}} número activo.",activeCount_other:"{{count}} números activos."},addNumber:"Agregar número",emptyState:'Haz clic en "Conectar WhatsApp" arriba para vincular tu primer número.',table:{number:"Número",verifiedName:"Nombre verificado"},disconnect:"Desconectar",disconnectDialog:{title:"¿Desconectar número?",before:"El número",after:"se eliminará y el token se revocará en Meta. Puedes reconectarlo en cualquier momento (usando un nuevo espacio)."}},jB={subtitle:"para Meta Ads",description1:"Convierte valores entre múltiples monedas directamente en el Meta Ads Manager.",description2:"Toggle intuitivo, cotización en tiempo real y conversión automática.",downloadFree:"Descarga Gratis",interactiveDemo:"Demostración Interactiva",dailyCost:"Costo por DÃa",totalSpend:"Gasto Total",avgCpc:"CPC Promedio",clickHint:"Haz clic en las monedas de arriba para ver la conversión en tiempo real",features:{instant:{title:"Conversión Instantánea",description:"Alterna entre múltiples monedas con un clic directamente en Meta Ads"},liveRate:{title:"Cotización en Tiempo Real",description:"Tipo de cambio actualizado automáticamente para valores precisos"},native:{title:"Integración Nativa",description:"Funciona perfectamente dentro del Administrador de Anuncios"}}},_B={errors:{loadData:"Error al cargar los datos",selectNotifier:"Selecciona un número notificador",selectAdmin:"Selecciona al menos un número admin",saveConfig:"Error al guardar la configuración",saveMainConfigFirst:"Guarda primero la configuración principal",selectInstance:"Selecciona una instancia",addLimit:"Error al agregar el lÃmite",updateLimit:"Error al actualizar el lÃmite",removeLimit:"Error al eliminar el lÃmite",updateMonitor:"Error al actualizar el monitoreo"},toasts:{configSaved:"¡Configuración guardada con éxito!",limitUpdated:"¡LÃmite de leads actualizado!",limitAdded:"¡LÃmite de leads agregado!",limitRemoved:"LÃmite eliminado"},unknownNumber:"Número desconocido",loadingConfig:"Cargando configuraciones...",comingSoon:{title:"Próximamente",description:"La función de Notificar Admin está en desarrollo y se liberará próximamente.",backToInbox:"Volver a la Bandeja de Entrada"},title:"Notificar Admin",subtitle:"Configura alertas y notificaciones",newNumber:"Nuevo Número",mainConfig:{title:"Configuración Principal",description:"Configura el número que envÃa las notificaciones y los números que reciben las alertas",notifierLabel:"Número Notificador",notifierDescription:"Este número enviar
517á los mensajes de alerta",selectNumberPlaceholder:"Selecciona un número",adminLabel:"Números Admin",adminDescription:"Estos números recibirán las alertas",selectToAddPlaceholder:"Selecciona un número para agregar",allAdded:"Ya se agregaron todos los números",save:"Guardar Configuración"},leadLimit:{title:"LÃmite de Leads",description:"Recibe una alerta cuando un número alcance el lÃmite diario de conversaciones",resetInfo:"El conteo se reinicia diariamente a las 00:00 (horario de Brasilia -03:00)",limitLine:"LÃmite: {{count}} conversaciones/dÃa",noneConfigured:"Ningún lÃmite configurado",addNumber:"Agregar Número"},comingSoonBadge:"Próximamente",instanceDisconnected:{title:"Instancia Desconectada",descriptionBefore:"EnvÃa",descriptionAfter:"para verificar las instancias",infoText:"Al enviar #status, recibirás el estado de cada número monitoreado"},noNumberConnected:"Ningún número conectado",salesMonitor:{title:"Monitor de Ventas",descriptionBefore:"EnvÃa",descriptionAfter:"para ver las ventas del dÃa",infoText:"Datos provenientes de Tag Whats Cloud"},limitDialog:{editTitle:"Editar LÃmite de Leads",addTitle:"Agregar LÃmite de Leads",description:"Configura el lÃmite diario de conversaciones para un número",instanceLabel:"Número a Monitorear",dailyLimitLabel:"LÃmite Diario de Conversaciones",notifyHint:"Se te notificará cuando este número alcance {{count}} conversaciones en el dÃa"}},OB={errors:{loadInstances:"Error al cargar las instancias",nameRequired:"Escribe un nombre para la instancia",nameInvalidChars:"El nombre debe contener solo letras, números y guiones bajos",loadingInfo:"Espera, cargando información...",operationInProgress:"Operación en curso. Espera e intenta de nuevo.",createInstance:"Error al crear la instancia",getQrCode:"Error al obtener el código QR",refreshQrCode:"Error al actualizar el código QR",disconnect:"Error al desconectar",restart:"Error al reiniciar",delete:"Error al eliminar"},toasts:{creditsDeducted:"¡{{count}} créditos debitados con éxito!",instanceCreated:"Instancia creada con éxito",alreadyConnected:"¡WhatsApp ya está conectado!",connected:"¡WhatsApp conectado!",connectedSuccess:"¡WhatsApp conectado con éxito!",waitingConnection:"Esperando conexión...",disconnected:"WhatsApp desconectado",restarted:"Instancia reiniciada",deletingInstance:"Eliminando instancia... esto puede tardar unos segundos",instanceDeleted:"Instancia eliminada"},status:{connected:"Conectado",disconnected:"Desconectado",connecting:"Conectando"},expiration:{today:"Vence hoy",oneDayLeft:"1 dÃa restante",daysLeft:"{{count}} dÃas restantes"},loadingInstances:"Cargando instancias...",title:"Gestionar Números",subtitle:"Agrega o gestiona tus números de WhatsApp para notificaciones",countRegistered_one:"{{count}} número registrado",countRegistered_other:"{{count}} números registrados",newNumber:"Nuevo Número",empty:{title:"Ningún número registrado",description:"Haz clic en el botón de arriba para agregar tu primer número"},addNumber:"Agregar Número",awaitingConnection:"Esperando conexión",createDialog:{title:"Agregar Nuevo Número",description:"Crea una nueva instancia para conectar tu WhatsApp",submit:"Crear Instancia"},form:{instanceNameLabel:"Nombre de la Instancia",instanceNamePlaceholder:"Ej: mi_numero_principal",instanceNameHint:"Usa solo letras, números y guion bajo"},purchaseDialog:{title:"Nueva Instancia de WhatsApp",description:"Crea una nueva instancia para conectar tu WhatsApp. Esta acción consumirá créditos.",periodLabel:"PerÃodo:",period30Days:"30 dÃas",costLabel:"Costo:",creditsAmount:"{{amount}} créditos",currentBalance:"Saldo actual",insufficientBadge:"Insuficiente",rechargeCredits:"Recargar Créditos",confirmCreateButton:"Confirmar y Crear ({{amount}} créditos)"},qrDialog:{title:"Escanear Código QR",description:"Abre WhatsApp en tu celular y escanea el código QR",notAvailable:"Código QR no disponible",checkStatus:"Verificar Estado"},deleteDialog:{title:"Confirmar Eliminación",description:'¿Seguro que quieres eliminar la instancia "{{name}}"? Esta acción no se puede deshacer.'},duplicateNameDialog:{title:"El nombre ya existe",description:"Ya existe una instancia con ese nombre. Elige otro nombre para tu instancia."},systemName:"Instancia de WhatsApp"},BB={auto:"Automático (detectar por el texto)",pt:"Portugués",en:"Inglés",es:"Español",ar:"Ãrabe",bg:"Búlgaro",zh:"Chino",ko:"Coreano",hr:"Croata",da:"Danés",sk:"Eslovaco",fi:"Finlandés",fr:"Francés",de:"Alemán",el:"Griego",hi:"Hindi",nl:"Neerlandés",id:"Indonesio",it:"Italiano",ja:"Japonés",ms:"Malayo",pl:"Polaco",ro:"Rumano",ru:"Ruso",sv:"Sueco",ta:"Tamil",cs:"Checo",tr:"Turco",uk:"Ucraniano",fil:"Filipino"},zB={"whisper-1":"Whisper-1 (estándar)","gpt-4o-mini-transcribe":"GPT-4o Mini Transcribe (más rápido)","gpt-4o-transcribe":"GPT-4o Transcribe (más preciso)"},VB={audioGenerator:xB,audioTranscriber:wB,extensaoAdsWhatsApp:CB,geradorPalavrasChaves:PB,hashCleaner:AB,numberOrganizer:EB,messageBlaster:SB,disparaZapOficial:NB,productAnalysis:kB,productMetrics:TB,siteCloner:IB,smsBot:RB,smmPanel:DB,trackOfertas:MB,videoDownloader:FB,whatsappOficial:LB,zapdataConverter:jB,notifyAdmin:_B,notifyAdminAddNumber:OB,elevenLabsLanguages:BB,open
517aiTranscriptionModels:zB},qB="Mi Perfil",UB="Visualiza tu información y configuración",WB={changeHint:"Hacé clic en el Ãcono para cambiar tu foto",invalidFile:{title:"Archivo inválido",description:"Por favor, seleccioná una imagen"},tooLarge:{title:"Archivo muy grande",description:"La imagen debe tener como máximo 2MB"},updateSuccess:{title:"¡Foto actualizada!",description:"Tu foto de perfil se guardó correctamente"},uploadError:{title:"Error al subir la foto"}},$B={label:"Nombre de Usuario",placeholder:"Ingresá tu nombre de usuario",invalid:{title:"Nombre inválido",description:"Por favor, ingresá un nombre de usuario"},alreadyExists:{title:"Ese nombre ya existe",description:"Este nombre de usuario ya está en uso. Elegà otro."},updateSuccess:{title:"¡Nombre actualizado!",description:"Tu nombre de usuario se guardó correctamente"},updateError:{title:"Error al guardar",description:"No se pudo guardar el nombre de usuario"}},GB="Ãrea de Afiliados",HB={title:"Tema",dark:"Oscuro",light:"Claro"},KB={title:"Cambiar Contraseña",newPassword:"Nueva contraseña",newPasswordPlaceholder:"Ingresá la nueva contraseña",confirmNewPassword:"Confirmar nueva contraseña",confirmNewPasswordPlaceholder:"Confirmá la nueva contraseña",changing:"Cambiando...",requiredFields:{title:"Campos obligatorios",description:"Completá todos los campos de contraseña"},mismatch:{title:"Las contraseñas no coinciden",description:"La nueva contraseña y la confirmación deben ser iguales"},tooShort:{title:"Contraseña muy corta",description:"La contraseña debe tener al menos 6 caracteres"},changeError:{title:"Error al cambiar la contraseña"},changeSuccess:{title:"¡Contraseña cambiada con éxito!",description:"Tu nueva contraseña ya está activa"}},XB="Usuario",YB={title:qB,description:UB,avatar:WB,username:$B,affiliateArea:GB,theme:HB,password:KB,defaultDisplayName:XB},QB={save:"Save",cancel:"Cancel",delete:"Delete",edit:"Edit",add:"Add",create:"Create",confirm:"Confirm",close:"Close",back:"Back",next:"Next",previous:"Previous",search:"Search",filter:"Filter",send:"Send",copy:"Copy",copied:"Copied!",duplicate:"Duplicate",download:"Download",upload:"Upload file",connect:"Connect",disconnect:"Disconnect",activate:"Activate",deactivate:"Deactivate",enable:"Enable",disable:"Disable",refresh:"Refresh",clear:"Clear",select:"Select",selectAll:"Select all",apply:"Apply",continue:"Continue",finish:"Finish",retry:"Try again",view:"View",preview:"Preview",share:"Share",export:"Export",import:"Import",rename:"Rename",reset:"Reset",submit:"Submit",viewMore:"View more",viewLess:"View less",viewAll:"View all",tryAgain:"Try again"},ZB={loading:"Loading...",saving:"Saving...",sending:"Sending...",processing:"Processing...",deleting:"Deleting...",connecting:"Connecting...",success:"Success",error:"Error",warning:"Warning",empty:"No results found",noData:"No data",noResults:"No results found",somethingWentWrong:"Something went wrong. Please try again.",changesSaved:"Changes saved successfully",requiredField:"Required field"},JB={name:"Name",email:"Email",phone:"Phone",password:"Password",confirmPassword:"Confirm password",date:"Date",status:"Status",actions:"Actions",details:"Details",description:"Description",price:"Price",plan:"Plan",account:"Account",type:"Type",value:"Value",quantity:"Quantity",total:"Total"},ez={areYouSure:"Are you sure?",actionCannotBeUndone:"This action cannot be undone.",yes:"Yes",no:"No",confirmDelete:"Are you sure you want to delete this?"},tz={today:"Today",yesterday:"Yesterday",now:"Now"},az={actions:QB,states:ZB,fields:JB,confirm:ez,time:tz},oz="Open menu",nz="Notifications",rz="Profile",iz="Admin panel",sz="Log out",lz="Toggle theme",cz="Change language",dz={openMenu:oz,notifications:nz,profile:rz,adminPanel:iz,logout:sz,toggleTheme:lz,changeLanguage:cz},uz="Menu",mz="Account",pz="Meta",hz={dashboard:"Dashboard",inbox:"Inbox",flows:"Flows",campaigns:"Broadcasts",contacts:"Contacts",crm:"CRM",quickReplies:"Quick Replies",marketplace:"Marketplace",ads:"ADS",tools:"Tools"},fz={whatsappOfficial:"WhatsApp Official API"},gz={settings:"Settings",integrations:"Integrations",subscription:"My Plan",affiliate:"Affiliate Program"},vz="System Status",bz="Tutorials",yz="Updates Channel",xz={sectionMenu:uz,sectionAccount:mz,sectionMeta:pz,nav:hz,metaNav:fz,accountNav:gz,systemStatus:vz,tutorials:bz,whatsappChannel:yz},wz="Welcome back",Cz="Welcome",Pz="Log in to continue",Az="Create your account",Ez={login:"Log in",signup:"Sign up"},Sz={email:"Enter your email",password:"Enter your password",createPassword:"Create a password",confirmPassword:"Confirm your password"},Nz={link:"Forgot my password",dialogTitle:"Forgot my password",dialogDescription:"Enter your email and we'll send you a new password.",sendButton:"Send new password",sending:"Sending..."},kz={agreement:"I have read and agree to the",termsOfService:"Terms of Service",and:"and",privacyPolicy:"Privacy Policy"},Tz={joinCommunity:"Join our community of users",prefix:"Over",suffix:"registered users"},Iz={title:"Two-Factor Authentication",description:"Enter the 6-digit code from your authenticator app to continue.",rememberDevice:"Remember this device for 30 days",verify:"Verify",verifying:"Verifying..."},Rz={login:"Login",twoFactorCheck:"2FA check",accountCreation:"Account creation"},Dz={timeoutGeneric:"{{label}} took too long. Check your connection and try again.",requiredFields:{title:"Required fields",description:"Please fill in all fields"},verificationRequired:{title:"Verification required",description:"Please complete the security verification"},loginError:{title:"Login error",fallback:"Could not log in. Please try again."},invalidCode:{title:"Invalid code",description:"The 2FA code is incorrect. Please try again."},invalidEmail:{title:"Invalid email",description:"Please enter a valid email"},passwordMismatch:{title:"Passwords don't match",description:"The passwords entered are not the same"},passwordTooShort:{title:"Password too short",description:"Password must be at least 6 characters"},termsNotAccepted:{title:"Terms not accepted",description:"You need to accept the Terms of Service and Privacy Policy to create your account"},signupError:{title:"Error creating account",fallback:"Could not complete sign up. Please try again."},emailRequired:{title:"Email required",description:"Please enter your email"},generic:"Error",sendEmailFailed:"Could not send the email. Please try again.",userNotFound:{title:"User not found"},turnstileNotConfigured:"Security verification not configured",turnstileLoadFailed:"Failed to load security verification"},Mz={title:"Success",loginSuccess:"Login successful!",accountCreated:{title:"Account created!",description:"You can now log in",confirmEmailDescription:"Confirm your email before logging in. Check your inbox and also your spam folder."},emailSent:{title:"Email sent!",fallback:"Check your inbox and also your spam folder."}}
517,Fz={welcomeBack:wz,welcome:Cz,loginSubtitle:Pz,signupSubtitle:Az,tabs:Ez,placeholders:Sz,forgotPassword:Nz,terms:kz,userCount:Tz,mfaDialog:Iz,timeouts:Rz,errors:Dz,success:Mz},Lz={welcomeTitle:"ð¯ Welcome!",welcomeSubtitle:"Choose the system you want to access",comingSoonBadge:"Coming soon",betaBadge:"Beta",contentSectionTitle:"Content",systems:{metricas:{title:"Metrics System",shortTitle:"Metrics",description:"Manage your product metrics and track results"},organizadorNumeros:{title:"Number Organizer",shortTitle:"Organizer",description:"Organize and manage your work numbers"},trackOfertas:{title:"Offer Tracker",description:"Track your competitors' ad performance"},geradorAudio:{title:"Audio Generator",shortTitle:"Audio",description:"Turn text into audio with realistic voices"},transcricaoAudio:{title:"Audio Transcription",shortTitle:"Transcription",description:"Automatically convert audio into text"},tagWhats:{title:"Tag Whats",description:"Automatically tag WhatsApp sales"},extensaoAds:{title:"WhatsApp Ads Extension",shortTitle:"Ads Extension",description:"Extension to analyze ads in Chrome"},videoDownloader:{title:"TikTok Video Downloader",shortTitle:"TikTok",description:"Download TikTok videos without watermark"},automatizap:{title:"Automati-Zap",description:"System to automate WhatsApp conversations"},disparador:{title:"DisparaZap",description:"Send bulk messages to multiple contacts"}}},jz={feedTitle:"Community Feed",feedSubtitle:"Share your experiences and interact with other members"},_z={connectingFacebook:"Connecting to Facebook...",processingAuth:"Please wait while we process your authentication",title:"Oops! Page not found",backHome:"Back to Home"},Oz={backToPanel:"Back to dashboard",title:"ZapData Status",subtitle:"Check service availability and the latest updates",servicesTitle:"Services",noServices:"No services registered yet.",updatesTitle:"Updates",noUpdates:"No updates published yet.",footer:"ZapData â status updated automatically"},Bz={loading:"Loading...",notFoundTitle:"Site not found",iframeTitle:"Published Site"},zz={pageTitle:"Tools",pageSubtitle:"The entire ZapData arsenal in one place",maintenanceBadge:"Maintenance",groups:{organizacao:{title:"Organization",metricas:{title:"Metrics",desc:"Track your product results"},organizadorNumeros:{title:"Number Organizer",desc:"Organize and manage your numbers"}},criacaoOferta:{title:"Offer Creation",geradorAudio:{title:"Audio Generator",desc:"AI voice and narration"},transcricao:{title:"Transcription",desc:"Convert audio into text"},iaStudio:{title:"AI Studio",desc:"AI creative canvas"},limpaHash:{title:"Hash Cleaner",desc:"Clean video hashes"}},extensoes:{title:"Extensions",zapConverter:{title:"Zap Converter",desc:"Currency/value converter"},extensaoAds:{title:"Ads Extension",desc:"Analyze ads in Chrome"}}}},Vz={shortPasswordTitle:"Password too short",shortPasswordDesc:"Use at least 6 characters.",mismatchTitle:"Passwords don't match",mismatchDesc:"The two passwords don't match.",errorTitle:"Error",leakedPassword:"This password was found in data breaches. Choose a different password.",genericError:"Couldn't reset your password.",successTitle:"Password reset!",successDesc:"Log in with your new password.",title:"Reset password",subtitle:"Choose a new password for your account.",invalidLink:"Invalid or expired link. Request a new password reset.",backToLogin:"Back to login",newPasswordLabel:"New password",newPasswordPlaceholder:"Minimum 6 characters",hidePassword:"Hide password",showPassword:"Show password",confirmPasswordLabel:"Confirm new password",confirmPasswordPlaceholder:"Repeat the new password",submitButton:"Reset password",doneMessage:"Password reset! Redirecting to loginâ¦"},qz={title:"Unsubscribe",checking:"Checkingâ¦",confirmMessage:"Confirm to stop receiving emails from ZapData.",confirmButton:"Confirm unsubscribe",submitting:"Processingâ¦",success:"Successfully unsubscribed.",alreadyUnsubscribed:"You had already unsubscribed.",invalidLink:"Invalid or expired link.",error:"Something went wrong. Please try again."},Uz={errors:{missingClientId:"Missing app identifier (client_id).",missingRedirectUri:"Missing return address (redirect_uri).",missingPkce:"This app didn't send the required PKCE protection.",unsupportedPkceMethod:"Unsupported PKCE method: {{method}}. Only S256 is accepted.",missingScopes:"The app didn't specify which permissions it wants.",unknownScope:"Unknown permission: {{scope}}",consentFailed:"Couldn't record your authorization for conversation analysis.",requiresPaidPlan:"Connecting Claude requires an active ZapData plan.",redirectUriNotAllowed:"This app's return address isn't allowed.",unrecognizedScope:"The assistant requested a permission ZapData doesn't recognize.",missingPkceProtection:"The assistant didn't send the required security protection (PKCE).",sessionExpired:"Your session expired. Reload the page to sign in again.",authorizeFailed:"Couldn't authorize: {{message}}",unknownError:"unknown error"},title:"Connect to ZapData",description:"An AI assistant is requesting access to your account{{emailSuffix}}.",invalidRequestTitle:"Invalid request",whatItCanDo:"What it will be able to do",conversationsInfo:{heading:"About conversation analysis",paragraph1:"Excerpts from real conversations (up to 7 days) will be sent to the AI provider you connected, under your own subscription. Phone, email, and CPF are masked by automatic patterns that <strong>
517don't catch every format</strong> â the text <strong>isn't anonymous</strong>.",paragraph2:"It may include <strong>sensitive data</strong>, such as health information, if your customers write about it.",paragraph3:"By authorizing, you declare that you are the <strong>controller</strong> of that data and have <strong>legal basis</strong> for this sharing (LGPD). You can revoke it anytime in Settings."},revokeNotice:"Access can be revoked anytime in Settings â Integrations. No password is shared with the assistant.",declineButton:"Decline",authorizeButton:"Authorize",appLabel:"App:"},Wz={home:Lz,homePage:jz,notFound:_z,statusPage:Oz,publishedSite:Bz,tools:zz,resetPassword:Vz,unsubscribe:qz,mcpAuthorize:Uz},$z={count_one:"{{count}} active flow",count_other:"{{count}} active flows",title:"Active Flows",subtitle:"Leads receiving flows right now",loading:"Loading flowsâ¦",openConversation:"Open conversation",timeAgo:"{{time}} ago",moreNotListed:"+{{count}} active flows not listed"},Gz={title:"Generate audio with AI",registerTitle:"Register new voice",textLabel:"Audio text",textPlaceholder:"Type what will be said in the audio...",voiceLabel:"Voice",voicePlaceholder:"Choose a voice",addVoiceGroup:"Add",registerNewVoice:"Register new voice",previewLabel:"Preview of generated audio",modelLabel:"Voice model",languageLabel:"Language",autoDetectLanguageNote:"This model detects the language automatically from the text.",v3TagsHint:"With Eleven v3 you can use tags like [whispers], [laughs] and [sighs] in the text.",charCount:"{{count}}/{{max}}",sendAsLabel:"Send as",sendAsRecorded:"Recorded voice note",sendAsRecordedHint:"Shows up as a WhatsApp voice note.",sendAsViewOnce:"View once",sendAsViewOnceHint:"The recipient can listen only once.",sendAsForwarded:"Forwarded audio",sendAsForwardedHint:'Shows the "Forwarded" label on WhatsApp.',generating:"Generating...",generate:"Generate audio",generateAnother:"Generate another",sending:"Sending...",newVoiceNameLabel:"Voice name",newVoiceNamePlaceholder:"e.g. My voice",newVoiceFileLabel:"Audio file (mp3, wav, m4a, ogg)",newVoiceFileHint:"Use a clear recording of at least 30 seconds (max 10MB).",registering:"Registering...",registerVoice:"Register voice",registerSuccess:"Voice registered successfully!",errors:{textRequired:"Type the audio text",voiceRequired:"Choose a voice",audioNotReturned:"Audio not returned",generateFailed:"Error generating audio",sendFailed:"Error sending audio",nameAndFileRequired:"Enter a name and select an audio file",registerFailed:"Failed to register voice"}},Hz={dragOverlay:"Drop images here to send",replyPreview:{label:"Replying to",audio:"ðµ Audio",image:"ð· Image",video:"ð¬ Video",document:"ð Document",media:"Media"},emoji:{loading:"Loading emojisâ¦",opening:"Opening emojisâ¦"},attachMenu:{image:"Image",video:"Video",document:"Document",location:"Location"},insertVariable:"Insert variable",variableHint:"Inserted in the text and replaced with the lead's real value when sent.",globalVariablesTitle:"Global Variables",triggerFlowDialog:{title:"Trigger Flow Manually",activeCount_one:"{{count}} active flow",activeCount_other:"{{count}} active flows",searchPlaceholder:"Search flow...",noneFound:"No flow found",triggering:'Triggering {{type}} "{{name}}"...',triggered:'{{type}} "{{name}}" triggered!',typeAiAgent:"AI agent",typeFlow:"flow",typeAiAgentCap:"AI Agent",typeFlowCap:"Flow",aiBadge:"AI"},pastedImagesHint:{single:"Typed text will be sent as caption",multiple:"Multiple images: text will be sent separately"},messagePlaceholder:"Type your message... (use / for quick replies)",quickRepliesLabel:"Quick Replies",contentBlocksLabel:"Content Blocks",mic:{sendAudio:"Send audio",recordNow:"Record now",generateWithAI:"Generate audio with AI"},mediaDialog:{titleImage:"Send Image",titleVideo:"Send Video (MP4 only)",titleDocument:"Send Document",titleAudio:"Send Audio",selectFile:"Select File",selected:"Selected: {{name}}",captionLabel:"Caption (optional)",captionPlaceholder:"File description..."},locationDialog:{title:"Send Location",useMyLocation:"Use my current location",locating:"Getting location...",latitude:"Latitude",longitude:"Longitude",nameLabel:"Name (optional)",namePlaceholder:"e.g. Main Store",addressLabel:"Address (optional)",addressPlaceholder:"123 Main St"},success:{mediaSent:"Media sent!",audioSent:"Audio sent!",locationSent:"Location sent!",quickReplySent:"Quick reply sent!",locationCaptured:"Location captured",callPlaced:"Call placed"},errors:{emojiLoadFailed:"Could not load emojis",uploadImageFailed:"Error uploading image",sendImageFailed:"Error sending image: {{error}}",uploadOneImageFailed:"Error uploading one image",sendMessageFailed:"Error sending message: {{error}}",sendFailed:"Error sending: {{error}}",selectFileRequired:"Please select a file",uploadFileFailed:"Error uploading file",sendMediaFailed:"Error sending media",onlyImagesCanBeDragged:"Only images can be dragged. Use the attachment for other files.",invalidVideoFormat:"Invalid video format. Only MP4 files are accepted.",recordingStartFailed:"Error starting recording. Check microphone permissions.",uploadAudioFailed:"Error uploading audio",sendAudioFailed:"Error sending audio",uploadGeneratedAudioFailed:"Error uploading generated audio",geolocationUnavailable:"Geolocation not available in this browser",locationFailed:"Could not get your location",invali
517dCoordinates:"Invalid latitude/longitude",sendLocationFailed:"Error sending location: {{error}}",unknown:"unknown",triggerFlowFailed:"Error triggering flow",callFailed:"Could not place the call: {{error}}"},callDialog:{title:"Place a call",body:"This will ring {{name}}'s WhatsApp. Their phone really rings and they can answer or decline.",silentWarning:"The call is SILENT: if they answer, neither side hears anything. It only serves to grab attention â use it sparingly to avoid blocks.",cancel:"Cancel",confirm:"Call now",placing:"Calling...",contactFallback:"this contact"},callButton:"Call"},Kz={emptyMessage:"[Empty message]",deletedMessage:"ð« Message deleted",deleting:"Deleting...",contactFallback:"Contact",errors:{deleteNotAllowedTitle:"Cannot delete",deleteNotAllowedDescription:"WhatsApp only allows deleting messages for everyone within 1 hour of sending.",deleteFailedTitle:"Error deleting",deleteFailedDescription:"Could not delete the message"},success:{deletedForEveryone:"Message deleted for everyone"},media:{recovering:"Recovering media...",pleaseWait:"Please wait a moment",imageUnrecoverable:"Image not recoverable",imageUnavailable:"Image unavailable",audioUnrecoverable:"Audio not recoverable",audioUnavailable:"Audio unavailable",videoUnrecoverable:"Video not recoverable",videoUnavailable:"Video unavailable",notRecovered:"The media could not be recovered",tapToRetry:"Tap to try to recover"},pix:{defaultName:"PIX Key",copiedToast:"PIX key copied!",copyKey:"Copy Pix key",typePhone:"Phone",typeEmail:"Email",typeRandom:"Random Key"},audio:{playbackSpeed:"Playback speed"},document:{defaultName:"Document",clickToDownload:"Click to download"},location:{fallback:"ð Location",live:"Live",defaultName:"Location"},interactive:{linkTitle:"Opens a link â there's no way to know if the lead clicked it",leadSelected:"Lead selected:",emptyReply:"[Button reply]"},carousel:{label:"Carousel"},unsupported:{title:"Unrecognized message type â payload saved for analysis",label:"Unsupported message"},undecryptable:{title:"WhatsApp could not deliver the real content of this message",label:"Message not synced by WhatsApp.",hint:"This usually resolves itself when the contact reopens WhatsApp on their phone â the real content will appear here automatically when that happens."},replyPreview:{image:"ð· Image",audio:"ðµ Audio",video:"ð¬ Video",document:"ð Document",location:"ð Location",generic:"[Message]",customer:"Customer",you:"You"},actions:{reply:"Reply",translate:"Translate",transcribeAndTranslate:"Transcribe & Translate",deleteForEveryone:"Delete for everyone",deleteExpired:"Delete (expired)"},translation:{errorTitle:"Couldn't translate",errorGeneric:"Please try again in a moment."},failedStatus:{dateConnector:"at",timelockTitle:"Restriction applied by WhatsApp itself to protect the number from bans. Usually happens when the lead never replied or is outside the 24h window. As soon as they reply, sending works normally again.",timelockHeading:"Sending failed due to a temporary restriction",timelockBody:"WhatsApp blocked new conversations with this contact.",releaseExpected:"Expected to be released on {{when}}.",tryAgainLater:"Wait a few hours or ask the contact to reply before trying again.",generic:"Sending failed"},deleteDialog:{title:"Delete message for everyone?",description:"This action will delete the message for you and the recipient. It cannot be undone."},call:{title:"Call",subtitle:"Silent call â the contact can answer or decline",subtitleWithDuration:"{{duration}}s silent call â the contact can answer or decline"}},Xz={unknown:"Unknown",leadViaAd:"Lead via ad ⢠ID {{id}}",selectConversation:"Select a conversation",selectConversationHint:"Choose a conversation from the list to get started",loadingOlderMessages:"Loading older messages...",noMessagesYet:"No messages yet",sendMessageToStart:"Send a message to start the conversation",newLabelPlaceholder:"New label...",badges:{paused:"Paused",pausedFlow:"Paused: {{name}}",aiFlow:"AI: {{name}}",waitingForResponse:"Waiting for response",clickToCancel:"Click the X to cancel",clickToRemove:"Click to remove",endFlow:"End flow"},followUp:{scheduledAria:"Follow-up scheduled",endFlowWithFollowUp:"End flow (a follow-up is scheduled)",confirmTitle:"End the flow for {{name}}?",confirmBody:"There is an automatic follow-up scheduled for {{when}}. Ending the flow will cancel it too.",confirmQuote:'The lead said: "{{quote}}"',confirmKeep:"Keep flow",confirmEnd:"End flow and follow-up"},activity:{recordingWithIcon:"ðï¸ recording audio...",typingWithIcon:"âï¸ typing...",recording:"recording audio...",typing:"typing..."},menu:{resumeFlow:"Resume Flow",pauseFlow:"Pause Flow",advanceFlow:"Advance Flow",advanceToNextComponent:"Advance to next component",markAsRead:"Mark as read",markAsUnread:"Mark as unread",restoreContact:"Restore Contact",ignoreContact:"Ignore Contact",contactDetails:"Contact Details",clearConversation:"Clear Conversation",deleteContact:"Delete Contact",moreActions:"More actions"},deleteContactDialog:{title:"Delete contact?",description:"This will permanently delete the contact, all messages, and associated flow sessions. The contact will be able to trigger the flow again by sending a new message."},clearConversationDialog:{title:"Clear this conversation?",description:"The conversation will become empty, but will remain in your conversation list."},connectionError:{title:"Instance Disconnected",descriptionNamed:'Instance "{{name}}" lost connection.',descriptionGeneric:"The instance lost connection with WhatsApp.",reconnect:"Reconnect"},jumpToNode:{trigger:"Jump to a specific block",dialogHint:"Choose a flow block to jump the conversation to.",searchPlaceholder:"Search block by n
517ame or number...",empty:"No block found.",autoAdvance:"Advance automatically (default next)",blockLabel:"Block #{{number}} â {{label}}",confirmTitle:"Jump to Block #{{number}} â {{label}}?",confirmDescription:"The conversation will continue from this block. Steps between the current point and the chosen one won't be sent."},toasts:{flowPaused:"Funnel paused",pauseFlowError:"Error pausing funnel",flowResumed:"Funnel resumed",resumeFlowError:"Error resuming funnel",aiAgentEnded:"AI agent ended",flowEnded:"Flow ended successfully",flowEndedWithFollowUp:"Flow ended â the scheduled follow-up was cancelled too",endFlowError:"Error ending flow",noActiveFlowToAdvance:"No active flow to advance",advanceFlowError:"Error advancing flow",flowProcessing:"Flow processing⦠try again in a few seconds",stillWaitingForInput:"Still waiting for a response at this step",flowAdvanced:"Flow advanced!",markedAsRead:"Marked as read",markAsReadError:"Error marking as read",markedAsUnread:"Marked as unread",markAsUnreadError:"Error marking as unread",contactIgnored:"Contact ignored",contactRestored:"Contact restored",updateContactError:"Error updating contact",deleteContactError:"Error deleting contact{{code}}",contactDeleted:"Contact deleted successfully",clearConversationError:"Error clearing conversation{{detail}}",conversationCleared:"Conversation cleared successfully",cancelScheduleError:"Error cancelling schedule",scheduledMessageCancelled:"Scheduled message cancelled",jumpedToNode:"Flow jumped to the chosen block!",jumpToNodeError:"Error jumping to block"}},Yz={noName:"No name",notesSaved:"Notes saved successfully",saveNotesError:"Error saving notes: {{error}}",currencies:{BRL:"Brazilian Real (BRL)",USD:"US Dollar (USD)",EUR:"Euro (EUR)",GBP:"British Pound (GBP)",ARS:"Argentine Peso (ARS)",MXN:"Mexican Peso (MXN)",COP:"Colombian Peso (COP)",CLP:"Chilean Peso (CLP)",PEN:"Peruvian Sol (PEN)",JPY:"Japanese Yen (JPY)",CAD:"Canadian Dollar (CAD)",AUD:"Australian Dollar (AUD)",CHF:"Swiss Franc (CHF)"},info:{unreadMessages:"Unread messages:",lastMessage:"Last message:",never:"Never",createdAt:"Created on:"},tags:{title:"Tags",removeTag:"Remove tag",empty:"No tags added"},customFields:{title:"Contact Fields"},facebookEvent:{title:"Send Facebook Event",noCtwaWarning:"This contact has no CTWA CLID. The event will be sent but may not be attributed to the ad.",eventTypes:{purchase:"Purchase",lead:"Lead",initiateCheckout:"InitiateCheckout",addToCart:"AddToCart"},valuePlaceholder:"Value (e.g. 97.00)",currencyTitle:"Event currency",quantityPlaceholder:"Qty",quantityTitle:"Number of events (max 100)",selectPixelPlaceholder:"Select pixel...",allPixels:"All pixels",sendButton:"Trigger Event",sendError:"Error sending events. Check the pixel configuration.",sendErrorShort:"Error sending events",sendErrorGeneric:"Error sending event",sentToast_one:"{{count}}x {{event}} event sent for processing{{valueLabel}}",sentToast_other:"{{count}}x {{event}} events sent for processing{{valueLabel}}"},eventHistory:{title:"Event History",empty:"No events sent yet."},notes:{title:"Notes",placeholder:"Add notes about this contact...",empty:"No notes added"},adOrigin:{title:"Ad Origin",viewAd:"View Ad",titleLabel:"Title",adTextLabel:"Ad Text",viewLess:"View less",viewMore:"View more"},actions:{archiveConversation:"Archive Conversation"}},Qz={filterTitle:"Filter content blocks",typeLabel:"Type",favoritesOnly:"Favorites only",noBlocksForFilter:"No blocks match this filter",types:{text:"Text",audio:"Audio",image:"Image",video:"Video",document:"Document"}},Zz={searchPlaceholder:"Search...",markAllAsRead:"Mark all as read",flowPausedTitle:"Funnel paused",scheduledBadge:"Scheduled",loadingOlderConversations:"Loading older conversations...",searchOlderConversations:"Search older conversations",loadOlderConversations:"Load older conversations",searchTruncatedNotice:"Showing the first 200 results â refine your search to see fewer.",viewMode:{conversations:"Conversations",groups:"Groups"},labelFilter:{label:"Label",all:"All"},filters:{all:"All",paid:"Paid",ignored:"Ignored",unread:"Unread"},conversationStatusFilter:{all:"All conversations",allDescription:"",open:"Open conversations",openDescription:"Requires human attention",closed:"Closed conversations",closedDescription:"Closed by the agent or when the flow session ends",inProgress:"In progress",inProgressDescription:"Not opened or closed yet"},tagFilter:{pago:"Paid",notPago:"Without the Paid tag",notPagoDescription:"Doesn't have the payment tag",noTag:"No tag",noTagDescription:"Contacts with no tags at all"},filterPopover:{customize:"Customize filter",back:"Back",statusLabel:"Conversation status",apply:"Apply filter"},empty:{searching:"Searching...",searchUnavailable:"Could not search",noConversations:"No conversation found",searchFailedHint:"The search failed. Check your connection and try again.",noMatchingContact:"No contact with that name or number",noPaidContact:'No contact with the "Paid" label',noIgnoredContact:"No ignored contact",conversationsWillAppear:"Conversations will appear here when you receive messages"},toasts:{allMarkedAsRead:"All conversations were marked as read",markAsReadError:"Error marking as read"}},Jz={title:"Create new community",description:"You'll create the community with a main announcement group. Add groups afterward.",instanceLabel:"Instance",selectPlaceholder:"Selectâ¦",nameLabel:"Community name",createdSuccess:"Community created successfully.",linkGroupsHint:"To link groups, use the community's group manager in the menu.",success:"Community created",errors:{selectInstance:"Select an instance",nameRequired:"Enter the community name",createFailed:"Error creating community"}},eV={title:"Create new group",description:"The group will be created from the selected instance with the participants provided.",nameLabel:"Group name",namePlaceholder:"e.g. Sales Team",participantsLabel:"Participants (phone numbers)",participantsPlaceholderHint:"One per line â digits only with country+area code",validCount_one:"{{count}} valid · minimum 1 besides you.",validCount_other:"{{count}} valid · minimum 1 besides you.",createButton:"Create group",success:"Group created",errors:{selectInstance:"Select an instance",nameRequired:"Enter the group name",participantsRequired:"Enter at least 1 participant (digits only)",createFailed:"Error creating group"}},tV={titles:{name:"Bulk edit name",description:"Bulk edit description",image:"Bulk edit photo",announce:"Send permission",locked:"Edit permission",flow:"Trigger group flow",leave:"Leave groups",resetInvite:"Reset invite links",hide:"Remove from chat"},descriptions:{name:"The name will be applied to all selected groups.",description:"The description will be applied to all selected groups.",image:"The image will be applied as the photo of all selected groups.",announce:"When enabled, only admins will be able to send messages.",locked:"When enabled, only admins will be able to edit group information.",flow:"The selected flow will be triggered in each group. Use with caution.",leave:"You will leave each of the selected groups. This action cannot be undone.",resetInvite:"The current invite link will be invalidated and a new one generated.",hide:"The groups will be removed from your visible list. They will continue to exist on WhatsApp."},selectedCount_one:"{{count}} group selected.",selectedCount_other:"{{count}} groups selected.",newNameLabel:"New name",newDescriptionLabel:"New description",imageLabel:"Image",previewAlt:"preview",announceSwitchLabel:"Only admins can send messages",lockedSwitchLabel:"Only admins can edit information",groupFlowLabel:"Group flow",selectFlowPlaceholder:"Select a flow",noActiveGroupFlow:"No active group flow.",leaveWarning_one:"You will leave {{count}} group on WhatsApp. This action cannot be undone.",leaveWarning_other:"You will leave {{count}} groups on WhatsApp. This action cannot be undone.",resetInviteWarning_one:"The current link for {{count}} group will be invalidated.",resetInviteWarning_other:"The current links for {{count}} groups will be invalidated.",hideWarning_one:"{{count}} group will be removed only from your list. You'll remain in the group on WhatsApp.",hideWarning_other:"{{count}} groups will be removed only from your list. You'll remain in the groups on WhatsApp.",pleaseWait:"Please waitâ¦",applyButton:"Apply",errors:{nameRequired:"Enter the name",descriptionRequired:"Enter the description",imageRequired:"Select an image",flowRequired:"Select a flow"},toasts:{hidden_one:"{{count}} group hidden from chat",hidden_other:"{{count}} groups hidden from chat",flowTriggered_one:"Flow triggered in {{count}} group",flowTriggered_other:"Flow triggered in {{count}} groups",partialResult:"{{ok}} succeeded · {{fail}} failed",left_one:"Left {{count}} group",left_other:"Left {{count}} groups",invitesReset_one:"{{count}} link reset",invitesReset_other:"{{count}} links reset",updated_one:"{{count}} group updated",updated_other:"{{count}} groups updated"}},aV={selectedCount_one:"{{count}} group",selectedCount_other:"{{count}} groups",editName:"Edit name",editDescription:"Edit description",editPhoto:"Edit photo",sendPermission:"Send permission",editPermission:"Edit permission",triggerFlow:"Trigger flow",resetInvite:"Reset invite",leaveGroups:"Leave groups",hideFromChat:"Remove from chat",clearSelection:"Clear selection"},oV={pix:{label:"PIX key",copiedToast:"PIX key copied!",copyFailedToast:"Failed to copy key",copyKey:"Copy Pix key"},contactFallback:"Contact",stickerAlt:"Sticker",defaultFileName:"File",selectGroup:"Select a group",selectGroupHint:"Choose a group from the list to get started",errors:{sendFailed:"Failed to send message",uploadFailed:"Failed to upload file",micBlocked:"Failed to access microphone: {{detail}}",allowAccess:"check the microphone permissions in your browser",cancelFailed:"Failed to cancel flow"},mediaTypes:{image:"image",video:"video",audio:"audio",document:"document"},uploading:"Sending {{type}}...",sent:"Sent!",flowRunCancelled:"Flow cancelled"},nV={title:"Group info",syncTooltip:"Sync with WhatsApp",removePhoto:"Remove photo",descriptionLabel:"Description",noDescription:"No description",permissionsLabel:"Permissions",sendMessagesLabel:"Send messages",onlyAdmins:"Admins only",allParticipants:"All participants",editInfoLabel:"Edit group info",
517notAdminHint:"You're not an admin â changes are disabled.",inviteLinkLabel:"Invite link",loadingShort:"Loadingâ¦",unavailable:"Unavailable",generateNewLink:"Generate new link",membersHeading:"Members ({{count}})",memberCount_one:"{{count}} member",memberCount_other:"{{count}} members",youBadge:"You",roleCreator:"creator",roleAdmin:"admin",makeAdmin:"Make admin",removeAdmin:"Remove admin",removeFromGroup:"Remove from group",noMembersLoaded:"No members loaded.",addParticipantsDialog:{title:"Add participants",phonesLabel:"Phone numbers (country + area code + number)",phonesPlaceholder:"5511999998888, 5511988887777...",hint:"Separate with commas, spaces, or new lines. Only digits will be used."},removeParticipantDialog:{title:"Remove this participant?",description:"This will remove the participant from the group immediately.",confirm:"Remove"},participantActionLabels:{add:"added",remove:"removed",promote:"promoted",demote:"demoted"},errors:{phoneRequired:"Enter at least 1 valid phone number",leaveFailed:"Failed to leave the group",syncFailed:"Failed to sync",nameRequired:"Name is required",nameTooLong:"Name must be at most 25 characters",updateNameFailed:"Failed to update name",updateDescriptionFailed:"Failed to update description",imageMustBeJpeg:"Image must be in JPEG format",updatePhotoFailed:"Failed to update photo",generic:"Error",updatePermissionFailed:"Failed to update permission",resetLinkFailed:"Failed to reset link",updateParticipantsFailed:"Failed to update participants"},toasts:{leftGroup:"You left the group",nameUpdated:"Name updated",descriptionUpdated:"Description updated",photoUpdated:"Photo updated",photoRemoved:"Photo removed",announceOnlyAdmins:"Only admins can send messages",announceEveryone:"Everyone can send messages",lockedOnlyAdmins:"Only admins can edit info",lockedEveryone:"Everyone can edit info",linkReset:"Link reset",linkCopied:"Link copied",participantsUpdated:"Participants {{action}}"}},rV={buttonTitle:"Group flows",title:"Group flows",descriptionPrefix:"Trigger manually or schedule flows for",tabs:{run:"Trigger",schedule:"Schedule",list:"Scheduled"},flowLabel:"Flow",selectFlowPlaceholder:"Select a flow",selectPlaceholderShort:"Select",noActiveFlows:"No active group flows. Create one in the Flows tab.",runNowButton:"Trigger now",activeRunHint:"A flow is already running in this group. End it at the top of the chat before starting another.",dateLabel:"Date",timeLabel:"Time",recurrenceLabel:"Recurrence",recurrence:{once:"Once only",daily:"Daily",weekly:"Weekly"},scheduleButton:"Schedule",noSchedules:"No schedules yet.",dateConnector:"at",recurrenceShort:{once:"Once",daily:"Daily",weekly:"Weekly"},inactiveSuffix:"Inactive",errors:{selectFlow:"Select a flow",activeRunExists:"A flow is already running in this group. End it before starting another.",dateRequired:"Set the date",invalidDateTime:"Invalid date/time",dateMustBeFuture:"The date/time must be in the future"},toasts:{flowStarted:"Flow started in this group",flowScheduled:"Flow scheduled"}},iV={searchPlaceholder:"Search groupsâ¦",manageVisibleGroupsTitle:"Manage visible groups",refreshSelected:"Refresh selected groups",refreshAll:"Refresh groups",selectedCount_one:"{{count}} selected",selectedCount_other:"{{count}} selected",selectAllWithCount:"Select all ({{count}})",emptySelectionTitle:"No groups selected yet.",manageGroupsButton:"Manage groups",noGroupsFound:"No groups found.",adminBadge:"admin",memberCount_one:"{{count}} member",memberCount_other:"{{count}} members"},sV={toasts:{contactNotFound:"Contact not found. It may have been removed."},errors:{noContactSelected:"No contact selected",flowAlreadyTriggering:"Please wait, the flow is already being triggered...",triggerAiFailed:"Failed to trigger AI agent",triggerFlowFailed:"Failed to trigger flow",activeFlowExists:"Can't trigger another flow. A flow is already being sent to this contact right now."},groupsGate:{title:"Groups is a premium feature",description:"WhatsApp group management is available starting from the Access Mode plan (R$99/month).",upgradeButton:"Upgrade plan",upgradeHint:"Includes more instances, monthly credits, and all advanced features.",backButton:"Back to Conversations"}},lV={title:"Inbox menu",tabs:{numbers:"Numbers",labels:"Labels",tagged:"Tagged"},noInstances:"No number connected",connectInstance:"Connect number",status:{connected:"Connected",disconnected:"Disconnected"},assignedFlowsLabel:"Assigned flows:",noAssignedFlows:"No flow assigned",systemLabelsTitle:"Default labels",customLabelsTitle:"Custom labels",noCustomLabels:"No custom labels",newLabelPlaceholder:"New label...",noTaggedContacts:"No tagged contacts",reprocessing:"Reprocessing...",reprocessButton:"Reprocess contacts",manageFlowsButton:"Manage flows",errors:{removeLabelFailed:"Failed to remove label",reprocessFailed:"Failed to reprocess contacts"},toasts:{labelRemoved:"Label removed",reprocessed:"Reprocessed: {{phones}} phone numbers normalized, {{names}} names fixed"}},cV={flowsTooltip:"Flows",notificationsTooltip:"Notifications",enableNotificationSound:"Enable notification sound",notifyEveryMessage:"On every new message received",notifyEveryLead:"On every new lead",showContent:"Show content",hideContent:"Hide content",filterByNumberTooltip:"Filter by number",allNumbers:"All numbers",errors:{noInstancesConnected:"No instance connected. Connect a number in Maturador first.",syncFailed:"Failed to sync contacts"},toasts:{contactsImported:"{{count}} contacts imported successfully!",noNewContacts:"No new contacts found"}},dV={title:"Join a group",description:"Paste the full invite URL or just the code.",instanceLabel:"Instance",selectPlaceholder:"Selectâ¦",inviteLabel:"Invite URL or code",joinButton:"Join group",errors:{selectInstance:"Select an instance",inviteRequired:"Enter the invite URL or code",joinFailed:"Failed to join group"},toasts:{joined:"Joined the group"}},uV={instanceFallback:"Instance",title:"Manage visible groups",selectedOfTotal:"{{selected}} of {{total}} selected",searchPlaceholder:"Search groupsâ¦",onlyAdminActive:"Showing only where I'm admin",onlyAdminInactive:"Filter: only where I'm admin",syncAllTooltip:"Sync all",addMenuTooltip:"Add group / community",createGroupItem:"Create new group",joinWithInviteItem:"Join with invite",createCommunityItem:"Create community",clearFilter:"clear",deselectVisible:"Deselect visible",selectAllVisible:"Select all visible ({{count}})",clearSelection:"Clear selection",noGroupsFound:"No groups foun
517d.",adminBadge:"admin",memberCount_one:"{{count}} member",memberCount_other:"{{count}} members",saveSelectionButton:"Save selection"},mV={title:"New conversation",phoneLabel:"Phone number",phonePlaceholder:"e.g. 11999998888",phoneHint:"Select the country next to it and enter the number with the area code. You can also paste the full number with +.",countrySearchPlaceholder:"Search country or dial code...",countryNotFound:"No country found.",instanceLabel:"Send from number",selectInstancePlaceholder:"Select a number",noInstances:"No number connected",creating:"Creating...",startButton:"Start conversation",errors:{notLoggedIn:"You need to be logged in",phoneRequired:"Enter the phone number",instanceRequired:"Select a number to send from",createContactFailed:"Failed to create contact",createConversationFailed:"Failed to create conversation"},toasts:{created:"Conversation created!"}},pV={heading:"Scheduled Message",flowLabel:"Flow",selectFlowPlaceholder:"Select the flow...",dateLabel:"Date",timeLabel:"Time",scheduleButton:"Schedule send",historyLabel:"History",noScheduledMessages:"No scheduled messages.",dateConnector:"at",status:{scheduled:"Scheduled",processing:"Processing",sent:"Sent",cancelled:"Cancelled",failed:"Failed"},errors:{selectFlow:"Select a flow",selectDateTime:"Select the date and time",dateMustBeFuture:"The date must be in the future",scheduleFailed:"Failed to schedule: {{error}}",cancelFailed:"Failed to cancel: {{error}}",cancelFailedFallback:"Failed to cancel the scheduled message.",notCancellable:"The message could not be cancelled because it is already being processed or is no longer available.",notAuthenticated:"Your session has expired. Sign in again to continue."},toasts:{scheduled:"Message scheduled successfully!",cancelled:"Scheduled message cancelled"}},hV={title:"Scheduled Messages",empty:"No scheduled messages",emptyHint:"Schedule flows from the contact details",flowLabel:"Flow: {{name}}",dateConnector:"at",unknownContact:"Unknown",status:{scheduled:"Scheduled",processing:"Processing",sent:"Sent",failed:"Failed",cancelled:"Cancelled"},errors:{cancelFailed:"Failed to cancel: {{error}}",cancelFailedFallback:"Failed to cancel the scheduled message.",notCancellable:"The message could not be cancelled because it is already being processed or is no longer available.",notAuthenticated:"Your session has expired. Sign in again to continue."},toasts:{cancelled:"Scheduled message cancelled"}},fV={heading:"Scheduled Messages",subheading:"Messages scheduled to send",flowFallback:"Flow",dateConnector:"at",count_one:"{{count}} scheduled message",count_other:"{{count}} scheduled messages",errors:{cancelFailed:"Failed to cancel"},toasts:{cancelled:"Schedule cancelled"}},gV={title:"Send confirmation",recipientLabel:"Recipient:",errors:{sendFailed:"Failed to send: {{error}}"}},vV={greetingWithName:"Hi, {{name}}!",greetingPlain:"Hi there!",operationOverview:"â overview of your operation",unknown:"Unknown",status:{connected:"Connected",connecting:"Connecting",disconnected:"Disconnected"},stats:{totalContacts:"Total Contacts",savedContacts:"Saved contacts",conversationsToday:"Conversations Today",totalAllNumbers:"Total across all numbers",activeFlows:"Active Flows",connectedNumbers:"Connected Numbers",ofTotal:"Of {{count}} total"},chart:{title:"Conversations by Number",instances:"Instances",filterByInstance:"Filter by Instance",all:"All",clear:"Clear",selectedOfTotal:"{{selected}} of {{total}} selected",custom:"Custom",loadError:'Could not load data for this period (too much volume). Try a shorter range, like "7 days".',dateFilters:{today:"Today",yesterday:"Yesterday",last7days:"7 days",last30days:"30 days",thisWeek:"This week",thisMonth:"This month"}},connectedNumbers:{heading:"Connected Numbers",newNumber:"New Number",emptyTitle:"No numbers connected",emptyDescription:"Add your first WhatsApp number",createNumber:"Create Number",searchPlaceholder:"Search by name or number...",clearSearch:"Clear search",filters:{all:"All",connected:"Connected",disconnected:"Disconnected"},selectAllConnected:"Select all connected",numbersSelected:"number(s) selected",clear:"Clear",bulkEdit:"Bulk Edit",noSearchResults:"No number found for that search."},instanceCard:{validateProxyLabel:"Validate proxy (IP and location)",connectionDetail
517sLabel:"Connection details",clickToValidateProxy:"Click to validate proxy",clickToViewDetails:"Click to view details",connection:"Connection",numberLabel:"Number: {{number}}",lastSeen:"Last seen: {{date}}",createdAt:"Created: {{date}}",ipAndLocation:"IP and location",viaProxy:"Via proxy",noProxy:"No proxy (default IP)",checkingIpLocation:"Checking IP and location...",ipLabel:"IP: {{ip}}",clickIconToCheck:"Click the icon to check IP and location.",notConnectedYet:"Number not connected yet",flowsAssigned:"{{count}} flow(s) assigned",noFlowsAssigned:"No flows assigned",active:"Active",inactive:"Inactive",connect:"Connect",disconnect:"Disconnect",reset:"Reset",delete:"Delete",edit:"Edit"},createModal:{title:"New Number",description:"Create a new record to connect a WhatsApp number",nameLabel:"Display name",namePlaceholder:"e.g. TIM 001",nameHint:"Any name works. Example: TIM 001, My Instance",configureProxy:"Configure Proxy (optional)",socks5Label:"Marketplace SOCKS5 string",socks5Placeholder:"socks5://user:password@host:port",socks5Hint:"Paste the proxy string generated by the Marketplace in SOCKS5 format",validateIp:"Validate IP",proxyValid:"Valid Proxy",proxyInvalid:"Invalid Proxy",ipLabel:"IP:",latencyLabel:"Latency:"},deleteDialog:{title:"Confirm deletion",description:'Are you sure you want to delete the number "{{name}}"? This action cannot be undone.'},resetDialog:{title:"Confirm reset",description:`Are you sure you want to reset "{{name}}"? The connection will be reset in the API. You'll need to scan the QR code again. Your contacts, messages, and flows will be preserved.`},confirmPurchaseModal:{title:"New WhatsApp Instance",description:"Create a new instance to connect your WhatsApp. This action will consume credits.",period:"Period:",periodValue:"30 days",cost:"Cost:",credits:"{{count}} credits",currentBalance:"Current balance",insufficient:"Insufficient",rechargeCredits:"Recharge Credits",processing:"Processing...",confirmAndCreate:"Confirm and Create ({{count}} credits)",systemName:"WhatsApp Instance"},duplicateNameModal:{title:"Name already in use",description:"An instance with the name",descriptionSuffix:"already exists on the platform.",chooseAnother:"Please choose a different name for your new instance.",tipLabel:"Tip:",tipText:"Use a unique name, like your phone number or a combination of letters and numbers.",understood:"Got it, I'll choose another name"},menuCards:{conversations:{title:"Conversations",description:"Manage all conversations in real time"},flows:{title:"Flows",description:"Create and manage automation flows"},kanban:{title:"Kanban",description:"View and organize leads in a pipeline"},contacts:{title:"Contacts",description:"Manage your contacts and leads"},quickReplies:{title:"Quick Replies",description:"Shortcuts for ready-made messages"}},toasts:{loadError:"Error loading data",waitBeforeRefresh:"Wait a few seconds before refreshing again",statusUpdated:"Status updated",numbersSynced:"{{count}} number(s) synced!",syncNumbersError:"Error syncing numbers",loadingSlots:"Loading slot information, please try again in a few seconds.",nameRequired:"Number name is required",invalidProxyFormat:"Invalid proxy format. Use: socks5://user:password@host:port",operationInProgress:"Operation in progress. Please wait and try again.",creditsDeducted:"{{count}} credits deducted successfully!",numberCreated:"Number created successfully!",createNumberError:"Error creating number",managedProxyApplyError:"Number created, but the selected proxy could not be applied. Try again from Edit Instance.",proxyConflict:"Use either the managed (location-based) proxy OR a manual SOCKS5 proxy, not both.",enterProxyFirst:"Enter the proxy string first",whatsappAlreadyConnected:"WhatsApp is already connected!",serverLimitReached:"Instance limit reached on this server. Please delete your instance and create another to try again.",qrNotAvailable:"QR code not available. Please try again.",qrNotAvailableShort:"QR code not available",getQrError:"Error getting QR code",updateQrError:"Error updating QR code",whatsappConnected:"WhatsApp connected successfully!",connectingWaitSync:"Connecting... waiting for sync",waitingQrScan:"Waiting for QR code scan...",numberDisconnected:"Number disconnected",disconnectError:"Error disconnecting",numberRestarted:"Number restarted",restartError:"Error restarting",invalidSession:"Invalid session â reload the page and try again.",deletingInstance:"Deleting instance... this may take a few seconds",deleteHadNoEffect:"The deletion had no effect â the instance may belong to another owner or was already removed.",numbersRemoved:"{{count}} numbers removed",numberRemoved:"Number removed",removeNumberError:"Error removing number",resettingInstance:"Resetting instance...",instanceReset:"Instance reset successfully!",resetInstanceError:"Error resetting instance",unknownError:"Unknown error",proxyInfoError:"Could not get proxy information",instanceIpError:"Could not get the instance's IP",validateProxyError:"Error validating proxy"}},bV={orderSection:{title:"Order / Address",filled:"Filled in",fields:{street:"Street",number:"Number",neighborhood:"Neighborhood",city:"City",state:"State",complement:"Complement",reference:"Reference",scheduleDate:"Scheduled Date",deliveryDate:"Delivery Date"}},card:{noNumber:"No number",contactAlt:"Contact"},column:{changeColorTitle:"Change tag color",renameTitle:"Click to rename",deleteTagTitle:"Delete tag",noResultsHere:"No results here",noLeadsHere:"No leads here yet",showingOf:"{{visible}} of {{total}} leads",noTagLabel:"No tag",collaboratorOrderLockedTitle:"Column order is set by the account owner"},csv:{name:"Name",phone:"Phone",tags:"Tags"},detailModal:{noName:"No name",sourceNumber:"Source number:",createdAt:"Created on:",notes:"Notes:",
517notesPlaceholder:"Add notes about this contact...",save:"Save",cancel:"Cancel",noNotes:"No notes added",adSource:"Ad source:",tags:"Tags",deleteLead:"Delete Lead",openConversation:"Open Conversation",deleteConfirmTitle:"Delete lead?",deleteConfirmDescription:"Are you sure you want to delete <strong>{{name}}</strong>? This action cannot be undone and all messages will be lost.",deleteConfirmCancel:"Cancel",deleteConfirmAction:"Delete"},header:{title:"Lead Pipeline",filtered:"Filtered",clearFilterTitle:"Click to clear the filter",subtitle:"Organize your leads in a Kanban.",leadsInFunnel:"{{count}} leads in the funnel",searchPlaceholder:"Search leads...",dateFilterPlaceholder:"Filter by date",dateFilters:{none:"No filter",today:"Today",yesterday:"Yesterday",last7days:"Last 7 days",last30days:"Last 30 days"},instanceFilterPlaceholder:"Filter by number",allNumbers:"All numbers",syncTagsTitle:"Sync tags",visibleColumnsTitle:"Visible columns",exportCsvTitle:"Export contacts to CSV",deleteAllTitle:"Delete all contacts",deleteAllButton:"Delete All",newTag:"New Tag"},createTagModal:{title:"New Tag",nameLabel:"Tag name",namePlaceholder:"e.g. Interested",colorLabel:"Color",preview:"Preview",cancel:"Cancel",create:"Create Tag"},deleteAllDialog:{title:"Delete all contacts?",description:"This action will permanently delete all {{count}} contacts and the entire conversation history. Contacts will only reappear once they receive or send new messages.",cancel:"Cancel",confirm:"Delete All"},deleteTagDialog:{title:'Delete tag "{{tag}}"?',description:"This action will remove the tag from all contacts, flows (triggers, conditions, and actions), and the Kanban. This action cannot be undone.",cancel:"Cancel",confirm:"Delete Tag"},toasts:{loadError:"Error loading data",columnsReordered:"Columns reordered",saveColumnOrderError:"Could not save the column order",leadMoved:"Lead moved successfully",moveLeadError:"Error moving lead",triggerTagFlowError:"Lead moved, but the tag flow could not be started",notesSaved:"Notes saved successfully",saveNotesError:"Error saving notes",saveFieldError:"Error saving field",deletingContacts:"Deleting contacts and history... This may take a few seconds.",deletingProgress:"Deleting... {{deleted}} removed so far, {{remaining}} remaining.",deleteAllDone:"Done. {{count}} contacts deleted.",deleteAllError:"Error deleting contacts: {{error}}",tagAlreadyExists:"That tag already exists",syncSuccess:"Tags synced successfully",syncError:"Error syncing",leadDeleted:"Lead deleted successfully",deleteLeadError:"Error deleting lead",unknownError:"Unknown error",contactsExported:"{{count}} contacts exported"},truncated:{title:"Board truncated: showing only the {{shown}} contacts with the most recent conversation.",withCount:"This account has about {{total}} active contacts â {{hidden}} are not shown on the board. Use search or the number filter to reach the ones left out.",withoutCount:"Contacts with older conversations are not shown on the board. Use search or the number filter to reach the ones left out."}},yV={header:{title:"Quick Replies",subtitle:"Create shortcuts for frequent messages",newReply:"New Reply"},empty:{title:"No quick replies",description:"Create quick replies to speed up your support.",hint:'Type "/" in the chat to access them.',createFirst:"Create First Reply"},card:{noContent:"No content",allInstances:"All instances"},dialog:{editTitle:"Edit Quick Reply",newTitle:"New Quick Reply",description:'Set up the shortcut and content of the reply. Use "/" in the chat to access it.',shortcutLabel:"Shortcut",shortcutPlaceholder:"greeting",contentLabel:"Content",insertVariable:"Insert variable",variableHint:"Replaced with the lead's real value when the quick reply is sent.",globalVariablesTitle:"Global Variables",contentPlaceholder:"Hi! How can I help?",instancesLabel:"Instances",allInstances:"All instances",cancel:"Cancel",save:"Save",create:"Create"},deleteDialog:{title:"Delete Quick Reply",description:"Are you sure you want to delete this quick reply? This action cannot be undone.",cancel:"Cancel",confirm:"Delete"},toasts:{loadError:"Error loading data",shortcutRequired:"Shortcut is required",contentRequired:"Content is required",updated:"Quick reply updated!",created:"Quick reply created!",saveError:"Error saving quick reply",deleted:"Quick reply deleted!",deleteError:"Error deleting quick reply"}},xV={header:{title:"Quick Replies",subtitle:"Shortcuts for ready-made messages"},section:{title:"Quick Replies",hint:"Create shortcuts by typing <code>/shortcut</code> in the chat",newReply:"New reply"},empty:"No quick replies registered",allInstances:"All instances",instanceCount_one:"{{count}} instance",instanceCount_other:"{{count}} instances",dialog:{editTitle:"Edit quick reply",newTitle:"New quick reply",description:'Shortcut available for use by typing "/" in the message field',shortcutLabel:"Shortcut",shortcutPlaceholder:"hi",contentLabel:"Content",contentPlaceholder:"Hi! How can I help you?",instancesLabel:"Instances",allInstances:"All instances",cancel:"Cancel",save:"Save"},deleteDialog:{title:"Delete quick reply?",description:"This action cannot be undone.",cancel:"Cancel",confirm:"Delete"},toasts:{loadError:"Error loading quick replies",shortcutRequired:"Enter a shortcut",contentRequired:"Enter the reply content",updated:"Quick reply updated",created:"Quick reply created",saveError:"Error saving",deleted:"Quick reply deleted",deleteError:"Error deleting"}}
517,wV={telefone:"Lead phone number",telefone_br:"BR phone (no country code, with 9th digit)",contactName:"Lead full name",primeiro_nome:"Lead first name"},CV={activeFlows:$z,aiVoiceDialog:Gz,chatInput:Hz,chatMessage:Kz,chatPanel:Xz,contactDetails:Yz,contentBlocksFooterBar:Qz,conversationList:Zz,createCommunityDialog:Jz,createGroupDialog:eV,groupBulkActionDialog:tV,groupBulkActionsBar:aV,groupChatPanel:oV,groupDetails:nV,groupFlowActionsButton:rV,groupList:iV,inboxLayout:sV,inboxMenu:lV,inboxSidebar:cV,joinGroupDialog:dV,manageVisibleGroupsDialog:uV,newConversationDialog:mV,scheduledMessageSection:pV,scheduledMessagesDialog:hV,scheduledMessagesIndicator:fV,sendBlockConfirmDialog:gV,dashboard:vV,kanban:bV,quickReplies:yV,quickRepliesSettings:xV,inboxVariables:wV},PV={title:"Contacts",subtitle:"Manage your contacts and leads"},AV={totalContacts:"Total Contacts"},EV={title:"Contact List"},SV={byInstance:"Filter by instance",instances:"Instances",noInstances:"No instances available",byTag:"Filter by tag",tagsLabel:"Tags",noTags:"No tags available",searchPlaceholder:"Search contactsâ¦"},NV={newContact:"New Contact",exportSelection:"Export selection",exportFiltered:"Export filtered",exportAll:"Export all",loadMore:"Load more",openConversation:"Open conversation",editTags:"Edit tags",tagsAction:"Tags"},kV={selectedCount_one:"{{count}} selected",selectedCount_other:"{{count}} selected",matchingFilterHint:"(all matching the current filter)",selectAllMatching:"Select all {{count}} matching the filter",selecting:"Selectingâ¦",matchingSelected:"{{count}} contacts selected",selectAllError:"Error selecting contacts"},TV={id:"ID",contact:"Contact",phone:"Phone",tags:"Tags",createdAt:"Created at",empty:"No contacts found"},IV={load:"Error loading contacts",delete:"Error deleting",save:"Error saving contact",phoneRequired:"Enter a phone number"},RV={contactUpdated:"Contact already existed and was updated",contactCreated:"Contact created",contactDeleted:"Contact deleted",deletedCount:"{{count}} contacts deleted"},DV={title:"Delete {{count}} contacts?",description:"This action cannot be undone. The contacts and their conversations will be removed."},MV={title:"New contact",description:"Enter a phone number (required) and an optional name. If the phone number already exists, the name is updated.",phoneLabel:"Phone",nameLabel:"Name (optional)",namePlaceholder:"Contact name"},FV={title:"Bulk tags",description_one:"{{count}} contact selected.",description_other:"{{count}} contacts selected.",addTab:"Add tags",removeTab:"Remove tags",newTagPlaceholder:"New tagâ¦",removeHint:"Select the tags that should be removed from the contacts.",noTags:"No tags created yet.",applying:"Applyingâ¦",add:"Add",remove:"Remove",error:"Error updating tags",successAdded:"Tags added to {{count}} contacts",successRemoved:"Tags removed from {{count}} contacts"},LV={page:PV,kpi:AV,list:EV,filters:SV,buttons:NV,export:{titleFiltered:"Exports all contacts matching the current filter (tag/instance/search), not just the ones loaded on screen",titleAll:"Exports all contacts, not just the ones loaded on screen",nothingToExport:"Nothing to export",loading:"Exporting contactsâ¦",loadingProgress:"Exporting contacts⦠{{pct}}% ({{loaded}}/{{total}})",error:"Error exporting contacts",exportedCount:"{{count}} contacts exported"},selection:kV,table:TV,errors:IV,toast:RV,confirmDelete:DV,newContactDialog:MV,bulkTag:FV,import:{title:"Import contacts",descIntro:"Upload a .csv file with the columns",descRequired:"(required),",descAnd:"and",descSeparatedBy:"(separated by",phonesUpdated:"Existing phone numbers are updated.",templateHint:"Not sure about the format? Download our template and fill in the contacts.",downloadTemplate:"Download template",fileLabel:"CSV file",missingPhoneColumn:'The spreadsheet needs a "phone" (or "telefone") column.',noValidContacts:"No valid contacts found in the file.",readError:"Error reading file",previewHeader:"Preview â {{count}} contacts detected (showing the first 10)",previewPhone:"Phone",previewName:"Name",previewTags:"Tags",importing:"Importingâ¦",importButton:"Import {{count}}",error:"Error importing contacts",createdCount_one:"{{count}} new contact created",createdCount_other:"{{count}} new contacts created",updatedCount_one:"{{count}} already existed and was updated",updatedCount_other:"{{count}} already existed and were updated",failedCount_one:"{{count}} failed",failedCount_other:"{{count}} failed",completed:"Import completed: {{details}}.",nothingProcessed:"No contacts processed."}}
517,jV={official:"official",unofficial:"unofficial",toast:'This flow is on the {{flowChannel}} channel; the instance "{{instanceName}}" is on the {{instanceChannel}} channel. Remove it before saving.',hidden:"{{otherChannel}} channel instances don't show up here â this flow is on the {{flowChannel}} channel."},_V={title:"AI Reply"},OV={title:"AI Responder",tone:"Tone: {{tone}}",toneFormal:"Formal",toneInformal:"Informal",expiresIn:"Expires in {{minutes}} min",miniFlowCount_one:"{{count}} mini-flow",miniFlowCount_other:"{{count}} mini-flows",expiration:"Expiration",error:"Error",followUpBadge:"Smart follow-up",followUpNoMiniFlow:"Follow-up without mini-flow",followUpPausesExpiration:"(paused by follow-up)"},BV={title:"AI Text",placeholder:"Set the base text...",autoVariations:"⨠Automatic variations by AI"},zV={title:"AI Audio",viewOnceTitle:"View once",forwardedTitle:"Will be sent as forwarded",voiceNotSelected:"Voice not selected",configurePlaceholder:"Click to set the text...",success:"â Success",error:"â Error"},VV={title:"Audio",viewOnceTitle:"View once",forwardedTitle:"Will be sent as forwarded",playbackSpeedTitle:"Playback speed",downloadAudioTitle:"Download audio",usingVariable:"ð Use variable:",configurePlaceholder:"Click to configure..."},qV={title:"Calculator",defaultResultVariable:"result"},UV={title:"Call",description:"Places a silent call"},WV={title:"Carousel",aiBadge:"AI",bodyTextRequired:"Body text required",cardCount_one:"{{count}} card",cardCount_other:"{{count}} cards",configureCards:"Set up the cards...",cardsWithEmptyText_one:"{{count}} card without text",cardsWithEmptyText_other:"{{count}} cards without text",timeoutLabel:"Timeout: {{time}}",timeoutHandle:"â± Timeout"},$V={title:"Condition",operators:{equals:"Equals",notEquals:"Not equal to",contains:"Contains",notContains:"Does not contain",startsWith:"Starts with",endsWith:"Ends with",greater:"Greater than",less:"Less than",exists:"Exists",notExists:"Does not exist"},configurePlaceholder:"Set up the conditions...",tagHas:"Has",tagNotHas:"Does not have",tagSummary:'Tag: {{state}} "{{name}}"',countrySummary:"Country {{state}} {{name}}",countryIs:"is",countryIsNot:"is not",iaSummaryWithPrompt:"ð¤ {{prompt}}...",iaSummaryConfigured:"ð¤ AI condition set",conditionsSummary:"{{count}} conditions ({{op}})",and:"AND",or:"OR",badgeVariable:"Var",badgeTag:"Tag",badgeCountry:"Country",badgeIa:"ð¤ AI",undefinedVariablesTitle:"Undefined variables:",undefinedVariablesHint:'Add a "Set Variable", "Wait for Response", or "Wait for AI Response" node before this condition â or pick a variable already saved on the account (from another flow).',yes:"â Yes",no:"â No",iaError:"â AI Error"},GV={title:"Contact",placeholder:"Set up the contact..."},HV={title:"Delay",variableBadge:"Variable",waitingFixed:"Wait {{delay}}{{unit}}",waitingRange:"Wait {{min}} to {{max}}{{unit}}"},KV={title:"Document",genericFileType:"File",placeholder:"Click to configure..."},XV={title:"End"},YV={title:"Connect Flow",placeholder:"Set up the flow..."},QV={title:"AI Generator",typeMusic:"Music",typeVideo:"Video",typeImage:"Image",modelFreepikNotSelected:"Freepik model not selected",modelNotSelected:"Model not selected",successVariableTitle:"Saves media to: {{variable}}",success:"â Success",error:"â Error"},ZV={title:"Image",viewOnceTitle:"View once",previewAlt:"Preview",downloadImageTitle:"Download image",usingVariable:"ð Use variable:",configurePlaceholder:"Click to configure..."},JV={typeButtons:"Buttons",typeImageButtons:"Image + Buttons",typeListMenu:"List Menu",typeDefault:"Interactive Message",optionFallback:"Option {{number}}",aiBadge:"AI",optionsCount_one:"{{count}} option",optionsCount_other:"{{count}} options",configureOptions:"Set up the options...",configureMessage:"Set up the message...",timeoutLabel:"Timeout: {{time}}",overLimit:"Exceeds the limit of {{max}} options",textExceeds:"Text exceeds 1024 characters",buttonExceeds:"Button exceeds 20 characters",fallbackLabel:"â© Invalid reply",timeoutHandle:"â± Timeout"},eq={title:"Menu",optionsCount_one:"{{count}} option",optionsCount_other:"{{count}} options",placeholder:"Set up the options..."},tq={title:"Notify Admin",whatsappPrefix:"WhatsApp: {{phone}}",whatsappPlaceholder:"Set up WhatsApp...",groupPrefix:"Group: {{name}}",groupPlaceholder:"Set up the group...",pushPrefix:"Push: {{title}}",pushPlaceholder:"Set up push...",defaultPlaceholder:"Set up the notification..."},aq={title:"Lead Count",noNameSet:"No name set"}
517,oq={title:"Payment API",gatewayNotChosen:"Gateway not chosen",imageModeQr:"QR Code",imageModeCustom:"Custom image",imageModeNone:"No image",sendsInstant:"Sends and continues instantly · {{imageLabel}}",defaultCredential:"Account's default credential",missing:"Missing: {{message}}",missingMore:"(+{{count}})",outputSuccess:"â Continued",outputError:"â Error",titleXpag:"XPag",imageModeVoucher:"barcode"},nq={chooseGateway:"choose the gateway",gatewayNoMexico:"this gateway doesn't charge in Mexico",enterAmount:"enter the amount",invalidAmount:'invalid amount ("{{amount}}")',belowMinimum:"amount below the minimum ({{symbol}} {{min}})",aboveMaximum:"amount above the maximum ({{symbol}} {{max}})",writeMessage:"write the message",enterButtonText:"enter the button text",chooseCustomImage:"choose the custom image",enterPayerName:"enter the payer's name",enterPayerCpf:"enter the payer's CPF",invalidPayerCpf:"invalid CPF",enterPayerEmail:"enter the payer's email",enterPayerRfcCurp:"enter the payer's RFC/CURP",invalidRfcCurp:"invalid RFC/CURP (10 to 18 characters)",gatewayNoColombia:"this gateway doesn't charge in Colombia",gatewayNoArgentina:"this gateway doesn't charge in Argentina",invalidArDocument:"invalid CUIT (11 digits)",invalidCoDocument:"invalid document (5 to 15 digits)",invalidNequiPhone:"invalid Nequi phone (10 digits, starting with 3)",enterNequiPhone:"enter the Nequi phone (the phone is the payment destination)",gatewayNoPeru:"this gateway doesn't charge in Peru",gatewayNoPhilippines:"this gateway doesn't charge in the Philippines",revalidateZenithCredential:"revalidate the Zenith credential to enable Peru methods",methodUnavailableForCredential:"this Peru method is not available for the selected credential",methodUnavailableForCredentialPh:"this Philippines method is not available for the selected credential",enterPhPhone:"enter the Filipino mobile number (10 digits starting with 9)",invalidPhPhone:"invalid Filipino mobile (10 national digits starting with 9; 0 or +63 optional)",bankButtonsCount:"configure 1 to 3 transfer buttons",bankButtonLabel:"button {{number}} label must be 1 to 20 characters",bankButtonAction:"choose Copy or URL for button {{number}}",bankButtonValue:"enter the value for button {{number}}",bankButtonUrl:"button {{number}} literal URL must start with http:// or https://"},rq={title:"Pixel",all:"All",configurePixelEvent:"Configure pixel and event...",eventAllPixels:"{{event}} â All Pixels",eventTarget:"{{event}} â {{target}}",value:"Value: {{currency}} {{value}}",autoValue:"ð° Automatic PIX value ({{currency}})",eventsConfigured_one:"{{count}} event configured",eventsConfigured_other:"{{count}} events configured"},iq={title:"Randomizer",split:"Split {{name}}"},sq={title:"Send Charge",configureCharge:"Configure the charge..."},lq={title:"Send PIX Key",configurePixKey:"Configure the PIX key...",types:{CPF:"CPF",CNPJ:"CNPJ",PHONE:"Phone",EMAIL:"Email",EVP:"Random Key"}},cq={title:"Variable",configureVariable:"Configure the variable..."},dq={title:"Start",trigger:"Trigger",matchContains:"Contains",matchExact:"Exact",matchNotContains:"Does not contain",triggeredManualOrSchedule:"â¡ Triggered manually or by schedule",triggeredByAI:"â¡ Triggered by AI",groupFlowNoTrigger:"Group flows don't have an automatic trigger.",nextStep:"Next step",pixConflictTitle:"PIX trigger conflict",pixConflictDescription:"Another PIX flow already exists on the same instances:",unnamedFlow:"Unnamed",extraFlows:"+{{count}} flow(s)",pixConflictEmptyInstances:"Empty instance list = applies to ALL instances. Select specific instances in Settings.",pixConflictSelectDifferent:"Select different instances in Settings or disable the conflicting flow.",automatic:"Automatic",customizationsActive_one:"{{count}} customization active",customizationsActive_other:"{{count}} customizations active",warningsOpenSettings_one:"{{count}} warning â open settings",warningsOpenSettings_other:"{{count}} warnings â open settings",doubleClickToConfigure:"Double-click the block to configure",aiLabel:"AI:",matchType:"Match type",keywords:"Keywords",addPlaceholder:"Add...",tags:"Tags",webhookUrl:"Webhook URL",urlC
517opied:"URL copied!",webhookUrlHint:"Paste this URL into the platform where you want to receive the events.",generatingUrl:"Generating URL...",pauseOtherFlows:"Pause other flows",webhookPauseNote:"â¡ Automatically pauses other active flows for the contact.",pauseBySchedule:"Pause by schedule",valueMismatch:"Different amount",fakeReceipt:"Fake receipt",duplicateReceipt:"Duplicate receipt"},uq={title:"Sticker",loaded:"Sticker loaded",clickToConfigure:"Click to configure..."},mq={title:"Actions",configureTag:"Configure the tag...",clearField:"Clear: {{field}}",configureField:"Configure the field...",emptyValue:"(empty)",deleteContact:"Permanently deletes the contact",markRead:"Marks the conversation as read",markUnread:"Marks the conversation as unread",markOpen:"Reopens the conversation in the Pipeline Kanban",markClosed:"Archives the conversation in the Pipeline Kanban",markConversationOpen:"Marks the conversation as open in the Inbox",markConversationClosed:"Marks the conversation as closed in the Inbox",editMessage:"Edits an already sent message",selectMessage:"Select the message...",deleteMessage:"Deletes an already sent message",configureAction:"Configure the action...",actionsCount_one:"{{count}} action",actionsCount_other:"{{count}} actions"},pq={title:"Text",configureMessage:"Configure the message..."},hq={title:"Transfer",humanAgent:"Agent",department:"Department"},fq={title:"Video",viewOnce:"View once",ptvBadge:"Round video (PTV)",videoplayBadge:"Autoplay",clickToPreview:"Click to preview",previewVideo:"Preview video",downloadVideo:"Download video",clickToConfigure:"Click to configure (MP4)",previewDialogTitle:"Video preview",usingVariable:"Use variable:"},gq={title:"Wait for AI Response",ai:"AI",variablesCount:"{{count}} variables",configureVariable:"Configure the variable...",missingApiKey:"Missing API Key",concatenates:"Concatenates {{seconds}}s",listensAudio:"Listens to audio",noResponseTime:"No response: {{time}}",maxAttempts:"Max. attempts: {{count}}",outputs:{validResponse:"Valid response",noResponse:"No response",maxAttemptsExhausted:"Attempts exhausted",aiError:"AI Error"}},vq={title:"Wait for Response",configureVariable:"Configure the variable...",noResponseTime:"No response: {{time}}",savesImage:"Saves image/PDF",imageOnly:"Image/PDF only",response:"Response",noResponse:"No response"},bq={title:"Webhook",configureUrl:"Configure the URL..."},yq={title:"WhatsApp Label",configureLabel:"Configure the label..."},xq={seconds:"sec",minutes:"min",hours:"h",days:"d"},wq={title:"Clone Conversation Funnel",searchPlaceholder:"Search conversation...",noConversationsFound:"No conversations found",selectConversation:"Select a conversation to clone",messagesToClone:"{{count}} received message(s) will be cloned",noMessagesFound:"No messages found",willBeCloned:"will be cloned",cloneButton:"Clone ({{count}} messages)",cloning:"Cloning...",startNodeLabel:"Start",flowNamePrefix:"Cloned from {{name}}",messagePreview:{audio:"ðµ Audio",image:"ð· Image",video:"ð¥ Video",document:"ð Document"},toasts:{loadMessagesError:"Error loading messages",noMessagesToClone:"No received messages to clone",createFlowError:"Error creating flow",cloneSuccess:"Flow cloned successfully!",cloneError:"Error cloning funnel"}},Cq={typeLabels:{text:"Text",audio:"Audio",image:"Image",video:"Video",document:"Document"},titleEdit:"Edit {{type}} block",titleNew:"New {{type}} block",fields:{title:"Title",titlePlaceholder:"Ex: Price objection audio",content:"Content",contentPlaceholder:"Type the text to be sent...",caption:"Caption (optional)",captionPlaceholder:"Text sent along with the file",folder:"Folder",noFolder:"No folder",markFavorite:"Mark as favorite"},uploadedFileFallback:"File uploaded",uploading:"Uploading...",uploadButton:"Upload {{type}}",fileLimit:"50MB limit per file.",createBlock:"Create block",toasts:{fileTooLarge:"File over 50MB.",mustBeLoggedIn:"You need to be logged in.",fileUploaded:"File uploaded!",uploadError:"Error uploading: {{message}}",tryAgainFallback:"try again",titleRequired:"Give the block a title.",contentRequired:"Write the text content.",fileRequired:"Upload a {{type}} file.",saveError:"Error saving: {{error}}",blockUpdated:"Block updated!",blockCreated:"Block created!"}}
517,Pq={title:"Create group flow",description:"Only sends messages in WhatsApp groups. No response capture.",fields:{name:"Name",namePlaceholder:"Ex: Weekly promotion",description:"Description (optional)"},toasts:{nameRequired:"Give the flow a name",created:"Group flow created"}},Aq={label:"Fake receipt detection",descriptionEnabled:"A receipt for a recipient outside the list is flagged as fake. Global setting â register every recipient/gateway you use.",descriptionDisabled:"Disabled â every recognized receipt is accepted. Global setting.",recipientNamePlaceholder:"Recipient name (e.g. MY COMPANY LLC)",cpfCnpjPlaceholder:"Tax ID (CPF/CNPJ)",noRecipients:"No recipients registered â validation only runs with at least one.",toasts:{enabled:"Fake receipt detection enabled",disabled:"Fake receipt detection disabled",toggleError:"Error changing the setting",fillNameAndDoc:"Fill in the name and the tax ID",recipientAdded:"Recipient added!",addError:"Error adding recipient",recipientRemoved:"Recipient removed!",removeError:"Error removing recipient"}},Eq={title:"Flow Settings",noNameFallback:"unnamed",fields:{flowName:"Flow Name",flowNamePlaceholder:"Ex: Initial Support",description:"Description (optional)",descriptionPlaceholder:"Describe the goal of this flow...",triggerType:"Trigger Type"},triggerOptions:{keyword:"Keyword",all:"All messages",tag:"Tag",webhook:"Webhook"},tagTriggerHint:"The flow will trigger automatically when one of the tags is added to the contact.",conflictBanner:{intro:"â Conflict: another PIX flow is already linked to one of these numbers:",limitPrefix:"Each number accepts only",limitStrong:"1 PIX flow",limitSuffix:"(active or inactive). Remove or change the conflicting flow's trigger before saving."},checkingConflicts:"â³ Checking PIX conflictsâ¦",pauseOtherFlows:{label:"Pause other flows",hint:"When enabled, pauses every other active flow for the contact to prioritize this flow"},autoPauseHint:"â¡ This trigger automatically pauses other active flows for the contact.",pixAi:{label:"AI to read the receipt",visionHint:"PIX detection needs to read an image/PDF of the receipt â only models with vision support show up here.",requiredHelpText:"Required â without the key, the PIX receipt won't be read (ZapData no longer offers native AI for this trigger).",keyDoesNotSupportVision:`Your connected key ({{provider}}) can't read image/PDF â the PIX receipt won't be read. Connect a vision-capable provider in Settings, or use "My key" with a different provider.`,keyStorageNotice:"Your key is stored only in this flow. {{hint}}.",keyHintOpenai:"Get it at platform.openai.com/api-keys",keyHintAnthropic:"Get it at console.anthropic.com/settings/keys",keyHintGemini:"Get it at aistudio.google.com/app/apikey",modelLabel:"Model",modelAuto:"Automatic (recommended)",modelSavedOutOfCatalog:"{{model}} (saved model, not in catalog)",modelLegacySuffix:" (legacy)",modelAutoHint:"Automatic uses the provider's economy model and scales up if the receipt is hard to read."},nonPix:{label:"Accept other receipts",hint:"Also detects paid bank slips, card/terminal payments, invoices, and receipts in other languages â not just PIX.",customPromptLabel:"Custom prompt (optional) â {{count}}/{{max}}",customPromptPlaceholder:"E.g.: also accept a Cielo bank slip receipt with the text 'Paid via registered bank slip'...",customPromptHint:"Adds to the default rules â never replaces them."},valueFilter:{label:"Filter by amount",min:"Minimum (R$)",minPlaceholder:"No minimum",max:"Maximum (R$)",maxPlaceholder:"No maximum",hint:`A receipt outside the range follows the "Different amount" output on the flow's Start node (canvas). Without a connection, the session simply ends.`},gatewayAutoTrigger:{label:"Trigger on confirmed payment API charge",hint:'Also triggers this flow when a charge generated by the "Payment API" block is confirmed as paid by the gateway (XPag and others) â without the lead needing to send a receipt.'},branches:{fake:"Output for fake receipt",duplicate:"Output for duplicate receipt",hint:"Connect the custom paths on the flow's Start node (canvas)."},tags:{label:"Tags That Trigger the Flow",hint:"Select which tags should trigger this flow. When any of them is added to the contact, the flow will start.",loading:"Loading tags...",empty:"No tags found. Create tags in the Kanban first.",deleteTagTitle:"Delete tag",selected:"Selected:"},keyword:{matchType:"Match Type",exact:"Exact word",contains:"Contains the word",notContains:"Does not contain the word",exactHint:"The flow starts when the message is an exact match for one of the keywords.",containsHint:"The flow starts when the message contains one of the keywords.",notContainsHint:"The flow starts when the message contains NONE of the keywords.",ke
517ywords:"Keywords",keywordsPlaceholder:"hi, hello, want, buy (comma-separated)",keywordsHint:"Separate keywords with commas"},instances:{label:"Assigned Numbers",hintPix:"Select at least 1 number. Each number accepts only 1 PIX flow (active or inactive). Leaving it empty isn't allowed for PIX.",hintDefault:"Select which numbers this flow should run on. If none are selected, it will run on all of them.",empty:"No numbers found.",disconnectedTitle:"Number disconnected",noNumber:"No number",online:"Online",offline:"Disconnected",logzzLinked:"This flow is linked to {{count}} Logzz integration(s)"},conflictWarning:{title:"â PIX trigger conflict detected",intro:"Each number can only be linked to",strong:"1 active flow",suffix:"with a PIX Payment trigger. This flow's numbers are already in use by:",footer:"Adjust this flow's numbers or disable the conflicting one to save."},flowSansName:"Unnamed flow",active:{label:"Active Flow",hint:"Turn this flow on or off"},pauseSchedule:{label:"Pause Sending by Schedule",hint:"Don't send messages during the defined time window",start:"Pause Start",end:"Pause End",timezoneNote:"â° Timezone: São Paulo (UTC-3). Messages that weren't sent during the pause will be sent after the defined window ends."},buttons:{saving:"Saving...",verifying:"Verifyingâ¦",conflictPix:"PIX Conflict",save:"Save Settings"},toasts:{nameRequired:"The flow name is required",checkingConflictsWait:"Checking PIX conflicts, please waitâ¦",selectAtLeastOneInstance:'Select at least 1 number. The PIX trigger is per instance â leaving it empty is treated as "all instances" and conflicts with any existing PIX flow.',conflictWithFlow:'Conflict: another PIX flow already uses this number (e.g. "{{name}}").',conflictActiveFlow:"Conflict: another active flow with a PIX trigger is already linked to one of these numbers. Each number accepts only 1 active PIX flow.",saveError:"Error saving settings: {{error}}",saveSuccess:"Settings saved successfully"}},Sq={title:"Funnel Metrics",period:"Period:",periods:{today:"Today",yesterday:"Yesterday",last7days:"Last 7 days",last30days:"Last 30 days",custom:"Specific date"},noData:"No data found for the selected period.",table:{component:"Component",passages:"Passages",percentOfTotal:"% of Total",percentDrop:"% Drop"},defaultNodeName:"Passage {{index}}",funnelChartTitle:"Passage Funnel",tooltipPeople:"{{count}} people ({{percentage}}%)"},Nq={title:"Trash",description:"Deleted flows and folders stay here for 7 days before being permanently erased.",tabs:{flows:"Flows",folders:"Folders"},loading:"Loading...",emptyFlows:"No flows in the trash",emptyFolders:"No folders in the trash",emptyFooter:"Deleted items stay here for 7 days.",deletedInfo:"Deleted on {{date}} · expires in {{days}} {{dayLabel}}",day:"day",days:"days",restore:"Restore",deletePermanentlyTitle:"Delete permanently",confirmDelete:{title:"Delete permanently?",descriptionPrefix:"This action cannot be undone.",descriptionSuffix:"will be permanently erased.",confirmButton:"Delete forever"},toasts:{loadError:"Error loading trash",restoreFlowError:"Error restoring flow",flowRestored:"Flow restored",restoreFolderError:"Error restoring folder",folderRestored:"Folder restored",purgeError:"Error deleting permanently",purged:"Permanently deleted"}},kq={flowFinishedNoNextNode:"â
Flow finished (no next node)",flowStarted:"ð Flow started",defaultTextMessage:"Text message",defaultImageCaption:"ð· Image",defaultVideoCaption:"ð¬ Video",defaultAudioCaption:"ðµ Audio",defaultDocumentFileName:"document.pdf",contactLabel:"ð¤ Contact: {{name}}",defaultContactName:"Contact",waitingLabel:"â± Waiting {{delay}}{{unit}}...",waitingForResponse:"â¨ï¸ Waiting for the lead's response... (â {{varName}})",waitingForResponseAI:"ð§ Waiting for the lead's response (AI will extract â {{vars}})",defaultMenuTitle:"Choose an option:",defaultOptionLabel:"Option {{index}}",conditionEvaluated:"ð Condition evaluated",tagCondition:`ð·ï¸ Tag "{{tagName}}" ({{status}}) â {{result}} (simulator doesn't track tags)`,tagHas:"has",tagNotHas:"doesn't have",countryCondition:"ð Country {{status}} {{name}} â {{result}}",countryIs:"is",countryIsNot:"is not",variableConditionLine:'⢠{{variable}} {{operator}} "{{value}}" (current: "{{current}}") â {{result}}
517',resultLine:"â Result: {{result}}",resultTrue:"â
True",resultFalse:"â False",iaGeneratorExecuted:"ð¨ AI Generator executed (simulated)",variableSet:'ð Variable set: {{name}} = "{{value}}"',actions:{addTag:"ð·ï¸ Tag added: {{tagName}}",removeTag:"ð·ï¸ Tag removed: {{tagName}}",setField:'ð Field set: {{fieldName}} = "{{fieldValue}}"',clearField:"ð§¹ Field cleared: {{fieldName}}",deleteContact:"ðï¸ Contact deleted (simulated)",markRead:"â
Conversation marked as read",markUnread:"ð© Conversation marked as unread",markOpen:"ð Conversation reopened in the Pipeline Kanban",markClosed:"ðï¸ Conversation archived in the Pipeline Kanban",markConversationOpen:"ð¬ Conversation marked as open in the Inbox",markConversationClosed:"â
Conversation marked as closed in the Inbox",editMessage:"âï¸ Message edited (simulated)",deleteMessage:"ðï¸ Message deleted (simulated)",defaultField:"field",genericExecuted:"â¡ Action executed: {{actionType}}"},aiResponseSimulated:"ð¤ [Simulated AI response] â In production, the AI would reply here.",randomizerChosen:'ð² Randomizer: path "{{path}}" chosen',randomPathFallback:"random",redirectedTo:"âï¸ Redirected to: {{flowName}}",otherFlowFallback:"another flow",pixKeyLabel:"ð PIX Key: {{key}}",pixKeyFallback:"sample-key",chargeSent:"ðµ Charge sent: R$ {{amount}}",webhookSimulated:"ð Webhook simulated: {{url}}",webhookUrlFallback:"URL not set",transferredTo:"ð¤ Transferred to: {{destination}}",attendantFallback:"agent",pixelFired:"ð Pixel fired: {{eventLabel}}",adminNotificationSent:"ð Admin notification sent (simulated)",callPlaced:"ð Call placed â silent call; the lead can answer or decline (simulated)",passageRegistered:"ð Passage recorded: {{label}}",defaultInteractiveBody:"Interactive block",defaultButtonLabel:"Button {{index}}",chooseLabel:"Choose:",carouselSent:"ð Carousel sent (simulated)",flowFinished:"ð Flow finished",genericNodeExecuted:'âï¸ Node "{{type}}" executed (simulated)',startNodeNotFound:'â "Start" node not found',aiExtracted:"ð§ AI extracted (simulated) â {{vars}}",aiAnalyzing:"ð¤ AI analyzing response...",aiIdentified:'ð¤ AI identified: "{{label}}"',aiNoMatch:"ð¤ AI found no match. Waiting for a button or timeout...",aiError:"â ï¸ AI error. Waiting for a button...",noButtonMatch:"â ï¸ Response doesn't match any button. Waiting...",iaManualTrue:"â
AI: True (manual)",iaManualFalse:"â AI: False (manual)",simulatedPaid:"â
Simulated: Paid",simulatedNotPaid:"â Simulated: Not paid",iaChoiceTrue:"â
True (AI)",iaChoiceFalse:"â False (AI)",iaConditionPrompt:'ð¤ AI Condition #{{index}}: "{{prompt}}" â choose the result:',noPromptFallback:"(no prompt)"},Tq={featureName:"Group Flows",featureDescription:"Group flows (manual or scheduled sending in WhatsApp groups) are available starting from the Access Mode plan (R$99/month).",title:"Group Flows",subtitle:"Manual or scheduled sending in WhatsApp groups. Message sending only.",newFlow:"New Group Flow",createDialog:{title:"Create group flow",description:"Only sending nodes (text, media, delay) are supported. No response capture.",nameLabel:"Name",namePlaceholder:"E.g.: Weekly promotion",descriptionLabel:"Description (optional)"},emptyState:{title:"No group flows yet",description:"Create a flow to send messages to groups manually or on a schedule."},groupBadge:"GROUP",deleteDialog:{title:"Delete flow?"},toasts:{nameRequired:"Give the flow a name",created:"Group flow created",deleted:"Deleted"}},Iq={loadingFlow:"Loading flow...",flowFallbackName:"Flow",importButton:"Import Flow",importingButton:"Importing...",importedButton:"Imported!",errors:{missingFlowId:"Flow ID not provided",flowNotFound:"Flow not found",loadError:"Error loading flow",importUnavailableTrial:"Flow importing isn't available during the free trial period. Subscribe to a plan to import.",importError:"Error importing flow",importErrorWithMessage:"Error importing: {{message}}"},toasts:{imported:"Flow imported successfully!"},authModal:{loginTitle:"Sign in to your account",signupTitle:"Create account",needLoginHint:"You need to be logged in to import this flow.",passwordPlaceholder:"Your password",confirmPasswordPlaceholder:"Confirm your password",loginButton:"Sign in",signupButton:"Sign up",joinUsersPrefix:"Join over",joinUsersSuffix:"registered users",switchToSignup:"Don't have an account? Sign up",switchToLogin:"Already have an account? Sign in",errors:{fillAllFields:"Fill in all fields",confirmPassword:"Confirm your password",passwordsDontMatch:"Passwords don't match",passwordTooShort:"Password must be at least 6 characters",wrongCredentials:"Wrong email or password",invali
517dEmail:"Please use a valid email to sign up",emailAlreadyRegistered:"This email is already registered. Sign in instead."},toasts:{loginSuccess:"Signed in!",signupSuccess:"Signup successful! Check your email to confirm."},emailPlaceholder:"[email protected]"},nodeTypeLabels:{start:"â¶ Start",text:"ð¬ Text",aiText:"ð¤ AI Text",image:"ð¼ Image",audio:"ð Audio",audioAI:"ð AI Audio",video:"ð¬ Video",document:"ð Document",delay:"â± Delay",waitInput:"â³ Wait",waitInputAI:"ð§ Wait AI",condition:"ð Condition",menu:"ð Menu",ai:"ð¤ AI",aiResponder:"ð§ AI Resp.",transfer:"â Transfer",webhook:"ð Webhook",setVariable:"ð Variable",tag:"ð· Tag",end:"ð´ End",randomizer:"ð² Random",sendPixKey:"ð PIX Key",sendCharge:"ð° Charge",interactiveBlock:"ð§© Interactive",pixel:"ð Pixel",notifyAdmin:"ð Notify",goToFlow:"â¡ Go To Flow",carousel:"ð Carousel",sticker:"ð Sticker",contact:"ð¤ Contact",passageTracker:"ð£ Count",iaGenerator:"⨠AI Generator",pixApi:"ð Payment API",speiApi:"ð Payment API",whatsappLabel:"ð· WPP Label"}},Rq={backToAutomatiZap:"Back to AutomatiZap",backToDisparaZap:"Back to DisparaZap",active:"Active",inactive:"Inactive",settingsButton:"Settings",settingsDialogTitle:"Flow Settings",flowNameLabel:"Flow Name",triggerTypeLabel:"Trigger Type",defaultFlowName:"New Flow",flowFallbackName:"Flow",triggerTypes:{keyword:"Keyword",all:"All messages",schedule:"Scheduled",webhook:"Webhook"},pixConflictWarning:{title:"â PIX trigger conflict",emptySelection:'Select at least 1 number. An empty list is treated as "all instances" and conflicts with any other PIX flow.',alreadyInUse:"The selected numbers are already in use by:",unnamedFlow:"Unnamed flow",chooseDifferent:"Choose different numbers or deactivate the conflicting flow."},pauseOtherFlows:{label:"Pause other flows",description:"When enabled, pauses all other active flows for the contact to prioritize this flow"},pixAi:{sectionLabel:"AI to read the receipt",visionOnlyHint:"Only providers with vision support show up here (reads image/PDF of the receipt).",requiredHelpText:"Required â without the key, the PIX receipt won't be read (ZapData no longer offers native AI for this trigger).",wrongProviderWarning:`Your connected key ({{provider}}) can't read image/PDF â the PIX receipt won't be read. Connect a provider with vision support in Settings, or use "My key" with a different provider.`,storedInFlowOnly:"Your key is stored only in this flow.",getKeyOpenAI:"Get it at platform.openai.com/api-keys",getKeyAnthropic:"Get it at console.anthropic.com/settings/keys",getKeyGoogle:"Get it at aistudio.google.com/app/apikey",modelLabel:"Model",modelAuto:"Automatic (recommended)",modelSavedNotInCatalog:"{{model}} (saved model, not in catalog)",modelLegacySuffix:" (legacy)",modelAutoHint:"Automatic uses the provider's economical model and scales up if the receipt is hard to read."},acceptNonPix:{label:"Accept other receipts",description:"Also detects paid boleto, card/terminal, invoice, and receipts in other languages â not just PIX."},customPrompt:{label:"Custom prompt (optional) â {{count}}/{{max}}",placeholder:"E.g.: also accept Cielo boleto receipts with the text 'Paid via registered boleto'...",hint:"Adds to the default rules â never replaces them."},gatewayAutoTrigger:{label:"Trigger on confirmed payment API",description:'Also fires this trigger when a charge generated by the "Payment API" block is confirmed as paid by the gateway (XPag and others) â without the lead having to send a receipt.'},valueFilter:{label:"Filter by amount",minLabel:"Minimum (R$)",minPlaceholder:"No minimum",maxLabel:"Maximum (R$)",maxPlaceholder:"No maximum",hint:`A receipt outside the range follows the "Different amount" output on the flow's Start node (canvas). Without a connection, the session simply ends.`},fakeDuplicateBranch:{fakeLabel:"Output for fake receipt",duplicateLabel:"Output for duplicate receipt",hint:"Connect the custom paths on the flow's Start node (canvas)."},keywordMatch:{label:"Match Type",exact:"Exact word",contains:"Contains the word",notContains:"Doesn't contain the word",exactHint:"The flow starts when the message exactly matches one of the keywords.",containsHint:"The flow starts when the message contains one of the keywords.",notContainsHint:"The flow starts when the message does NOT contain any of the keywords."},keywordsLabel:"Keywords (comma-separated)",keywordsPlaceholder:"hi, hello, good morning, want to buy",instancesLabel:"Instances (Numbers)",instancesHint:"Select which numbers will receive this flow. If none is selected, the flow will apply to all of them.",noInstancesFound:"No instances found",instanceOnline:"Online",instanceOffline:"Offline",pauseOnMedia:{label:"Pause when receiving image/PDF",description:"Automatically pauses the flow when the contact sends an image or document"},pauseSchedule:{label:"Pause Sending by Schedule",description:"Don't send messages during the defined time window",
517startLabel:"Pause Start",endLabel:"Pause End",timezoneHint:"â° Time zone: São Paulo (UTC-3). Messages that weren't sent during the pause will be sent once the defined window ends."},flowActiveLabel:"Flow Active",funnelMetricsButton:"Funnel Metrics",triggerSettingsSaveFailed:"Failed to save trigger settings â see the warning",triggerSettingsSaving:"Saving trigger settingsâ¦",noLeadCountDialog:{title:"No Lead Count",description:`You haven't added a "Lead Count" component to your flow yet. Drag the component from the components menu to start tracking contact passage.`,gotIt:"Got it"},toasts:{createFlowError:"Error creating flow",loadFlowError:"Error loading flow",verifyingPixConflicts:"Checking PIX conflicts, please waitâ¦",selectAtLeastOneInstance:'Select at least 1 number for the PIX trigger. An empty list is treated as "all instances" and conflicts with any other PIX flow.',pixConflictWithFlow:'PIX trigger conflict: the number is already in use by flow "{{name}}". Each number accepts only 1 PIX flow.',unnamedFlow:"unnamed",moreBlocksSameSituation_one:" There's {{count}} more payment block in the same situation.",moreBlocksSameSituation_other:" There are {{count}} more payment blocks in the same situation.",incompleteBlockTitle:'Block {{numPrefix}}"Payment API" incomplete: {{issues}}.',incompleteBlockDescription:"Nothing was saved on this screen. With the flow on, every charge from this block goes through the Error output without reaching the gateway â fix it, or turn off the flow to save anyway.{{extra}}",flowSavedSuccess:"Flow saved successfully",pixConflictTitle:"PIX trigger conflict",saveFlowErrorTitle:"Error saving flow",pixConflictDescription:'Another flow with a PIX Payment trigger already exists on the same instances. Note: leaving the instance list empty means "all instances". Select specific instances in Settings, or deactivate/delete the conflicting PIX flow.'}},Dq={duplicateSuffix:" (Copy)",tabs:{flows:"Flows",looseBlocks:"Standalone Blocks"},header:{activeAndTotal:"{{active}} active · {{total}} total",flowCount_one:"{{count}} flow",flowCount_other:"{{count}} flows"},rowActions:{selectFlow:"Select flow",dragToReorder:"Drag to move/reorder",settings:"Settings",selectNumbers:"Select numbers",moveToFolder:"Move to folder",moveFlowTo:"Move flow to",noFolder:"No folder"},triggerLabels:{pix:"PIX",keyword:"Keyword",tag:"Tag",allMessages:"All msgs",allMessagesFull:"All messages",schedule:"Scheduled",webhook:"Webhook",unknown:"â",triggerTooltip:"Trigger: {{label}}"},toolbar:{searchPlaceholder:"Search flows...",filters:"Filters",filtersActive:"Filters · Active",filtersInactive:"Filters · Inactive",statusLabel:"Status",all:"All",active:"Active",inactive:"Inactive",importFlow:"Import Flow",importFolder:"Import Folder",cloneFunnel:"Clone Funnel",trash:"Trash",newFlow:"New Flow",flowType:"Flow type",newFlowDesc:"Standard flow for contacts",newAiFlow:"New AI Flow",newAiFlowDesc:"Conversational agent",newGroupFlow:"New Group Flow",newGroupFlowDesc:"Sending to WhatsApp groups",newFolder:"New folder"},bulkBar:{selectAllVisible:"Select all visible",selected_one:"{{count}} flow selected",selected_other:"{{count}} flows selected",clear:"Clear"},emptyStates:{loadingFlows:"Loading flows...",emptyFolder:"This folder is empty",emptyFolderHint:"Drag flows from the home page here or create a new one inside",newFlowInFolder:"New flow in this folder",noFlowsFound:"No flows found",startCreating:"Start by creating your first automation flow",noFlowsAvailable:"No flows available",createFirstFlow:"Create first flow",createFolder:"Create folder"},folders:{label:"Folders",labelWithCount:"Folders · {{count}}"},aiFlows:{sectionTitle:"AI Agents · {{count}}"},groupFlows:{sectionTitle:"Group Flows · {{count}}"},flowsSection:{results:"Results · {{count}}",flows:"Flows · {{count}}"},instancesDialog:{title:"Select Numbers",description:"Select which numbers this flow should run on. If none is selected, it will run on all of them.",pixWarningPrefix:"This flow uses the",pixWarningMiddle:"trigger. Each number can only be linked to",oneFlow:"1 flow",pixWarningSuffix:"with this trigger â even if the other flow is deactivated. Numbers already in use appear blocked.",checkingConflicts:"Checking conflictsâ¦",infoTriggerPrefix:"This flow uses the",infoTriggerMiddle1:"trigger. The rule of",oneFlowPerNumber:"1 flow per number",infoTriggerMiddle2:"only applies to flows with the",infoTriggerMiddle3:"trigger. To apply it here, open",infoTriggerSuffix:"and change the trigger.",noInstancesFound:"No numbers found.",noNumber:"No number",alreadyLinked:'Already linked to flow "{{name}}" (PIX trigger)',disconnected:"Disconnected number",alreadyInUseBy:"Already in use by: {{name}}",otherFlow:"another flow",online:"Online",disconnectedBadge:"Disconnected",checking:"Checkingâ¦"},createFlowDialog:{title:"Create New Flow",nameLabel:"Flow Name",namePlaceholder:"E.g.: Initial Support",create:"Create Flow"},createFolderDialog:{title:"Create New Folder",nameLabel:"Folder Name",namePlaceholder:"E.g.: Sales",create:"Create Folder"},editFolderDialog:{title:"Rename Folder",nameLabel:"Folder Name"}
517,deleteFlowDialog:{title:"Delete flow",description:"Are you sure you want to delete this flow? This action cannot be undone."},deleteFolderDialog:{title:"Delete folder",description:"Are you sure you want to delete this folder? The flows inside it will be moved out of the folder."},bulkDeleteDialog:{title_one:"Delete {{count}} flow?",title_other:"Delete {{count}} flows?",description:"The selected flows will be moved to trash and stay there for 7 days. You can restore them at any point before that deadline."},exportFlowDialog:{title:"Export Flow",description:"Use the code below to share or import this flow into another account.",shareLinkLabel:"Or share via a preview link:"},importFlowDialog:{title:"Import Flow",description:"Paste the code of the flow you want to import. The flow will be copied to your account as inactive.",codeLabel:"Flow Code",codePlaceholder:"Paste the flow code here...",importing:"Importing...",import:"Import"},exportFolderDialog:{title:"Export Folder: {{name}}",description:"Use the code below to share this folder with all its flows. Whoever imports it will receive the folder and every flow inside it."},importFolderDialog:{title:"Import Folder",description:"Paste the code of the folder you want to import. The folder and all its flows will be copied to your account as inactive.",codeLabel:"Folder Code",codePlaceholder:"Paste the folder code here...",importing:"Importing...",import:"Import Folder"},toasts:{moveFlowsError:"Error moving flows",flowsMoved_one:"{{count}} flow moved",flowsMoved_other:"{{count}} flows moved",deleteFlowsError:"Error deleting flows",flowsMovedToTrash_one:"{{count}} flow moved to trash",flowsMovedToTrash_other:"{{count}} flows moved to trash",typeAFlowName:"Enter a name for the flow",createFlowError:"Error creating flow: {{error}}",flowCreated:"Flow created successfully",deleteFlowError:"Error deleting flow: {{error}}",flowDeleted:"Flow deleted successfully",updateFlowError:"Error updating flow: {{error}}",duplicateFlowError:"Error duplicating flow: {{error}}",configureDuplicateError:"Error configuring duplicated flow: {{error}}",pixDuplicatedNoNumbers:"PIX flow duplicated without numbers. Assign different numbers from the original (rule: 1 PIX flow per number).",flowDuplicated:"Flow duplicated successfully",checkingPixConflicts:"Checking PIX conflicts, please waitâ¦",selectAtLeastOneNumber:'Select at least 1 number. The PIX trigger is per instance â leaving it empty is treated as "all instances" and conflicts with any existing PIX flow.',pixConflictWithFlow:'Conflict: the PIX trigger is already in use by flow "{{name}}". Each number can only have 1 flow (active or inactive) with that trigger.',unnamedFlow:"unnamed",numberAlreadyLinked:"This number is already linked to another flow with a PIX trigger. Deactivate the conflicting flow first.",updateInstancesError:"Error updating numbers: {{error}}",instancesUpdated:"Numbers updated successfully",numberLinkedToFlow:'Number already linked to flow "{{name}}" (PIX trigger). Only 1 active flow per number.',typeAFolderName:"Enter a name for the folder",createFolderError:"Error creating folder",folderCreated:"Folder created!",moveFlowsToTrashError:"Error moving flows to trash",deleteFolderError:"Error deleting folder",folderMovedToTrash:"Folder moved to trash (7 days)",renameFolderError:"Error renaming folder",folderRenamed:"Folder renamed!",reorderError:"Error saving new order",moveFlowError:"Error moving flow",flowMovedToFolder:"Flow moved to folder!",flowRemovedFromFolder:"Flow removed from folder!",movedToFolder:'Moved to "{{name}}"',movedToNoFolder:'Moved to "No folder"',exportUnavailableTrial:"Flow exporting isn't available during the free trial period.",trialGoToPlan:"View plans",pasteFlowCode:"Paste the flow code",userNotAuthenticated:"User not authenticated",importUnavailableTrial:"Flow importing isn't available during the free trial period. Subscribe to a plan to import.",importFlowError:"Error importing flow",flowNotFoundCheckCode:"Flow not found. Check the code.",flowImported:"Flow imported successfully!",importFlowErrorWithMessage:"Error importing flow: {{message}}
517",codeCopied:"Code copied!",folderCodeCopied:"Folder code copied!",pasteFolderCode:"Paste the folder code",sessionExpired:"Your session expired. Reload the page and try again.",folderNotFoundCheckCode:"Folder not found. Check the code.",importFolderError:"Error importing folder",importFolderErrorWithMessage:"Error importing folder: {{error}}",folderImported:"Folder imported with {{count}} flow(s)!",importFolderErrorCatch:"Error importing folder: {{message}}",linkCopied:"Link copied!"}},Mq={actionLabel:"Action {{number}}",actionType:"Action Type",tagName:"Tag Name",fieldName:"Field Name",fieldNamePlaceholder:"e.g. city, plan, points",value:"Value",valuePlaceholder:"Value or {{syntax}}",fieldNote:{before:"Field saved permanently on the contact â stays available in other flows, isn't lost when the session ends, and can be used as",after:"in any text block, condition, or webhook of this or another flow."},deleteContactWarning:"Permanently deletes the contact and the entire conversation history. The flow ends right after â there's no way to continue to the next blocks.",markRead:"Marks the conversation's messages as read and resets the unread counter.",markUnread:"Marks the conversation as unread.",markOpen:"Reopens the conversation in the Pipeline Kanban (shows up again in the columns).",markClosed:"Archives the conversation in the Pipeline Kanban (disappears from the columns, indicating the interaction is done).",markConversationOpen:"Marks the conversation as open in the Inbox list. Doesn't affect the flow or the Pipeline Kanban.",markConversationClosed:"Marks the conversation as closed in the Inbox list. Doesn't stop the flow or affect the Pipeline Kanban.",targetMessage:"Target message",targetMessagePlaceholder:"Select a previous message block...",noMessageBlockAvailable:"No message block is available in this flow yet.",noTextMessageBlockAvailable:"No text message block is available in this flow yet.",targetMessageNote:"Points to the message sent by that block in this conversation. Only works within the window WhatsApp allows (~1h) and if the block has already sent a message to this contact.",newText:"New text",newTextPlaceholder:"New message text or {{syntax}}",addAction:"Add Action",emptyState:"Add one or more actions to run in sequence when the flow passes through this block."},Fq={voiceCategories:{premade:"Standard voices",cloned:"Cloned voices",professional:"Professional voices",generated:"Generated voices",famous:"Famous voices",highQuality:"High quality"},errors:{noVoicesLoaded:"Couldn't load the voices.",loadVoices:"Error loading voices from ElevenLabs.",noAudioReturned:"No audio returned.",generatePreview:"Couldn't generate the audio preview."},charLimitToast:"Limit of {{max}} characters for this model.",noKeyWarning:{before:"No ElevenLabs key registered. Without it, this block will go through the",error:"error",after:"output instead of sending the audio."},manageKeys:"Manage keys",voice:"Voice",reloadVoices:"Reload voices",loadingVoices:"Loading voices...",selectVoice:"Select the voice...",noVoicesFound:"No voice found in your ElevenLabs account.",listenVoicePreview:"Listen to voice preview",previewUnavailable:"Preview unavailable",voiceModel:"Voice model",language:"Language",multilingualAutoDetectWarning:"Multilingual v2 detects the language automatically from the text â it's not possible to force a language on this model.",autoLanguageNote:'"Automatic" lets the model detect the language. Forcing it helps with short/ambiguous sentences.',textToConvert:"Text to convert",textPlaceholder:"Type the text that will be turned into audio...",textExample:"Example: Hi {{varName}}, your order has been approved and will be delivered soon.",audioPreviewLabel:"Audio preview (current text)",generatePreview:"Generate preview",listenPreview:"Listen to preview",downloadMp3:"Download MP3",previewVariableNote:"The preview uses the text as-is, without replacing variables (that only happens on the real send to the lead).",availableVariables:"Available variables",flowVariables:"Flow variables",clickToInsert:"Click to insert into the text",replyToLastMessage:"Reply to the last message",sendAsForwarded:"Send as forwarded",viewOnce:"View once"},Lq={notSupported:"Your browser doesn't support audio recording.",emptyRecording:"Empty recording. Try again.",tooLarge:"Recording over 50MB.",micDenied:"Microphone permission denied.",micNotFound:"No microphone found.",startFailed:"Couldn't start the recording.",uploadingToast:"Uploading recording...",mustBeLoggedIn:"You need to be logged in",uploadError:"Error uploading: {{message}}",uploaded:"Recording imported!",unexpectedError:"Unexpected error: {{message}}",tryAgainFallback:"try again",sending:"Sending",recordAudio:"Record audio",record:"Record"},jq={types:{text:"Text",audio:"Audio",image:"Image",video:"Video",document:"Document"},errors:{updateFavorite:"Error updating favorite: {{error}}",moveBlock:"Error moving block: {{error}}",deleteBlock:"Error deleting: {{error}}",generic:"Error: {{error}}",deleteFolder:"Error deleting folder: {{error}}"},blockDeleted:"Block deleted.",folderRenamed:"Folder renamed!",folderCreated:"Folder created!",folderDeleted:'Folder deleted. The blocks were moved to "No folder".',title:"Standalone Blocks",searchPlaceholder:"Search blocks...",filters:"Filters",type:"Type",favoritesOnly:"Favorites only",newFolder:"New folder",newBlock:"New Block",blockType:"Block type",loadingBlocks:"Loading blocks...",blockCount_one:"{{count}} block",blockCount_other:"{{count}} blocks",noBlocksFound:"No block found.",noBlocksInFolder:"No block
517in this folder yet.",noBlocksYet:'No standalone block registered yet. Click "New Block" to create the first one.',favorite:"Favorite",moveToFolder:"Move to folder",noFolder:"No folder",renameFolder:"Rename folder",folderNamePlaceholder:"Ex: Sales objections",deleteBlockTitle:"Delete block?",deleteBlockDescription:'"{{title}}" will be permanently deleted and will stop appearing in the chat footer.',deleteFolderTitle:"Delete folder?",deleteFolderDescription:`The folder "{{name}}" will be deleted. The blocks inside it will NOT be erased â they'll just be left without a folder.`},_q={translatingFlow:"Translating flow...",noTextToTranslate:"No text to translate in this flow.",flowTranslatedPartial:"Flow partially translated ({{reason}}). Try again to complete the rest.",somePartFailed:"one part failed",flowTranslated:"Flow translated! Save to keep the changes.",translateFlowError:"Error translating flow",translatingAudioProgress:"Translating audio {{current}}/{{total}}...",translateAudioFailed:"Failed to translate audio",unknownError:"unknown error",audiosTranslated_one:"{{count}} audio translated! Save to keep the changes.",audiosTranslated_other:"{{count}} audios translated! Save to keep the changes.",audiosTranslatedPartial:"{{succeeded}} of {{total}} audios translated. {{failed}} failed ({{reason}}).",audiosTranslateFailed:"No audio could be translated: {{reason}}",translatingMediaProgress:"Translating image/document {{current}}/{{total}}...",mediaTranslated_one:"{{count}} image/document translated! Save to keep the changes.",mediaTranslated_other:"{{count}} images/documents translated! Save to keep the changes.",mediaTranslatedPartial:"{{succeeded}} of {{total}} translated. {{failed}} failed ({{reason}}).",mediaTranslateFailed:"No image/document could be translated: {{reason}}",documentTranslateTimeout:"The document translation is taking longer than expected. It's still in progress â reopen this dialog in a few minutes to try again.",mediaCardRemoved:"The carousel card was removed while the translation was in progress â translation discarded.",nothingToUndo:"Nothing to undo",undone:"Undone!",cannotDeleteStartNode:"The Start node can't be deleted",blocksDeleted_one:"{{count}} block deleted",blocksDeleted_other:"{{count}} blocks deleted",cannotDuplicateStartNode:"The Start node can't be duplicated",blocksDuplicated_one:"{{count}} block duplicated",blocksDuplicated_other:"{{count}} blocks duplicated",startNodeAlreadyExists:"A start block already exists in the flow.",allOutputsConnected:"All of this block's outputs are already connected. The new block was created without a connection.",selectedCount_one:"{{count}} selected",selectedCount_other:"{{count}} selected",centerOnStart:"Center on Start",undoTitle:"Undo (Ctrl+Z)",testFlow:"Test Flow",translateFlow:"Translate Flow",translateExtrasDialog:{title:"Translate Flow",description:"The flow's text is always translated. See below what else you can translate along with it.",audioCheckbox:"Translate {{count}} audio block(s) too (slower â transcription, translation, and speech recreation, one at a time)",audioNotConnected:"I found {{count}} Audio block(s) in this flow. To translate them, connect your ElevenLabs key.",connectElevenLabs:"Connect ElevenLabs",mediaCheckbox:"Translate {{count}} image(s)/document(s) too (documents can take a few minutes)",mediaNotConnected:"I found {{count}} image(s)/document(s) (PDF) in this flow â includes images in Interactive Message, Sticker, Carousel, and Payments. To translate them, connect your Lara Translate key.",connectLara:"Connect Lara Translate",confirm:"Translate"},showContent:"Show content",hideContent:"Hide content",nodeLabels:{start:"Start",text:"Text Message",image:"Send Image",audio:"Send Audio",audioAI:"AI Audio",video:"Send Video",document:"Send Document",delay:"Delay",waitInput:"Wait for Response",condition:"Condition",menu:"Options Menu",ai:"AI Reply",transfer:"Transfer",webhook:"Webhook",setVariable:"Set Variable",calculator:"Calculator",tag:"Actions",end:"End",randomizer:"Randomizer",sendPixKey:"Send PIX Key",sendCharge:"Send Charge",pixel:"Facebook Pixel",goToFlow:"Connect Flow",pixApi:"Payment API",speiApi:"Payment API",call:"Call"}},Oq={dragToReorder:"Drag to reorder",mediaVariablePicker:{upload:"Upload",variable:"Variable",selectVariable:"Select the variable...",inThisFlow:"in this flow",fromOtherFlowGenerated:"from another flow (already generated)",fromOtherFlowNamedNotGenerated:'from another flow "{{flowName}}" (not generated yet)',fromOtherFlowNotGenerated:"from another flow (not generated yet)",resolvedAtRuntimeNote:'The media will be resolved at runtime from the variable (generated by an "AI Generator" block for the same contact).'},tagSelector:{newTagName:"New tag name",selectTag:"Select tag...",newTag:"New tag"},variablePickerPopover:{defaultPlaceholder:"Click to insert variable..."},optimizePrompt:{writeDescriptionFirst:"Write a description first",emptyAiResponse:"Empty AI response",optimizedSuccess:"Prompt optimized with AI",tooManyRequests:"Too many requests, tr
517y again shortly",creditsExhausted:"AI credits exhausted",genericFailure:"Couldn't optimize right now"},modelLabel:"Model",start:{configuredOnCanvas:'This trigger is configured directly on the "Start" block on the canvas.',receiptAiLabel:"Receipt AI",visionProvidersOnly:"Only vision-capable providers show up here (reads image/PDF of the receipt).",receiptKeyRequired:"Required â without the key, the receipt won't be read (no native AI).",connectedKeyCannotRead:"Your connected key ({{provider}}) can't read image/PDF â the receipt won't be read.",automaticRecommended:"Automatic (recommended)",modelOutsideCatalog:"{{model}} (saved model, not in catalog)",legacySuffix:"(legacy)",automaticModelNote:"Automatic uses the provider's economy model and scales up if the receipt is hard to read.",acceptOtherReceipts:"Accept other receipts",acceptOtherReceiptsNote:"Also detects paid bank slips, card/terminal payments, invoices, and receipts in other languages â not just PIX.",customPromptLabel:"Custom prompt (optional) â {{current}}/{{max}}",customPromptPlaceholder:"E.g.: also accept a Cielo bank slip receipt with the text 'Paid via registered bank slip'...",customPromptNote:"Adds to the default rules â never replaces them.",filterByValue:"Filter by amount",minimumValue:"Minimum (R$)",noMinimum:"No minimum",maximumValue:"Maximum (R$)",noMaximum:"No maximum",outOfRangeConnected:'A receipt outside the range follows the "Different amount" output on the Start block.',outOfRangeNotConnected:"Output enabled but not connected â a receipt outside the range just ends the session, with no custom path.",firstBlockWaitInputWarning:'The first block on that path is "Wait for response" â the session gets stuck silently. Use a message block before it.',firstBlockWaitInputWarningShort:'The first block on that path is "Wait for response" â the session gets stuck silently.',triggerOnGatewayConfirmed:"Trigger on confirmed payment API charge",triggerOnGatewayConfirmedNote:'Also triggers this flow when a charge generated by the "Payment API" block is confirmed as paid by the gateway (XPag and others) â without the lead needing to send a receipt.',fakeReceiptOutput:"Output for fake receipt",fakeReceiptNotConnected:"Output enabled but not connected â a fake receipt just ends the session.",duplicateReceiptOutput:"Output for duplicate receipt",duplicateReceiptNotConnected:"Output enabled but not connected â a duplicate receipt just ends the session."},availableVariables:"Available variables",variableGroups:{system:"System",flow:"Flow Variables",global:"Global Variables",logzz:"Logzz (Webhook)"},webhookVarsAutoNote:"If the user uses a webhook, the `webhook_*` variables will show up here automatically after the first payload is received.",replyToLastMessage:"Reply to the lead's last message",reactToLastMessage:"React to the lead's last message",reactionEmoji:"Reaction emoji",clickToInsertInText:"Click to insert into the text",text:{message:"Message",messagePlaceholder:"Type the message...",enableLinkPreview:"Enable link preview"},aiText:{intro:"The AI will generate automatic variations of the base text for each user, keeping the same meaning but with different words.",aiProvider:"AI Provider",apiKeyLabel:"API Key (AI variation)",requiredHelpText:"Without a configured key, the AI variation is skipped and the original message is sent as-is.",disconnectedHelpText:"No key connected to the Platform AI Integration. Without it, the AI variation is skipped and the original message is sent as-is.",baseText:"Base Text",baseTextPlaceholder:"Type the base text the AI will vary...",baseTextNote:"The AI will keep the meaning of the text, but will change words and, if there are emojis, will also vary them."},mustBeLoggedIn:"You need to be logged in",tryAgain:"Try again",media:{image:"Image",audio:"Audio",video:"Video",document:"Document",file:"File",sendLabel:"Send {{media}}",otherSendMethods:"Other ways to send",upload:"Upload",linkUrl:"Link / URL",fileTooLarge:"File too large (maximum 50MB). Your file: {{size}}",unsupportedFormat:"Unsupported format. Use: {{formats}}",uploadingWithSize:"Uploading {{media}} ({{size}}
517)...",storageLimitExceeded:"Storage limit exceeded",connectionError:"Connection error. Check your internet and try again.",uploadErrorGeneric:"Error uploading: {{message}}",fileSent:"File sent!",unexpectedErrorGeneric:"Unexpected error: {{message}}",selectOrRecord:"Select a file or record directly from the microphone (max 50MB)",clickToSelectFile:"Click to select a file (max 50MB)",mp4Only:"Only MP4 files are accepted",remove:"Remove",urlPlaceholder:"https://... or {{syntax}}",urlNote:{before:"Accepts a public URL or variables (e.g.:",after:")."},resolvedAtRuntime:"Will be resolved at runtime.",avifNotSupported:"The AVIF format isn't accepted by WhatsApp. Use PNG, JPG, or WEBP.",previewAlt:"Preview",base64Placeholder:"Paste here: data:image/png;base64,iVBORw0... or {{syntax}}",clipboardEmpty:"Clipboard empty",pasted:"Pasted!",clipboardReadError:"Couldn't read the clipboard",paste:"Paste",sendAsForwarded:"Send as forwarded",forwardedNote:'The audio will appear as "Forwarded" in WhatsApp (orange style)',captionOptional:"Caption (optional)",captionPlaceholder:"Caption...",sendAsViewOnce:"Send as view once",viewOnceNote:"The media can only be viewed once by the recipient",videoFormat:{label:"Send format",video:"Normal",videoplay:"Autoplay",ptv:"Round video",videoNote:"Standard video send, with optional caption.",videoplayNote:"Same file, but with automatic loop playback in WhatsApp.",ptvNote:'Round "video note" (like a voice note). Caption is not supported.'}},timeUnits:{seconds:"Seconds",minutes:"Minutes",hours:"Hours",days:"Days"},delay:{delayType:"Delay Type",fixedTime:"Fixed Time",variableTime:"Variable Time",waitTime:"Wait Time",minTime:"Minimum Time",maxTime:"Maximum Time",randomBetween:"The delay will be random between the minimum and maximum time",showPresence:"Show presence while waiting",none:"None",typing:"Typing",recordingAudio:"Recording audio",typingQuoted:'"typing"',recordingAudioQuoted:'"recording audio"',presenceNote:"WhatsApp shows {{state}} while waiting. Place the text/audio block right after this delay. Limit of 5 min (300s)."},waitInput:{saveResponseIn:"Save response in",variableNamePlaceholder:"Variable name",saveImageSentByLead:"Save image or document sent by the lead",saveImageSentByLeadNote:{before:"When the lead sends an image or document, the file is saved in a separate variable. Use this variable",only:"in Notify Admin",after:"to forward the file on WhatsApp. Images can also be used in the AI Generator."},saveImageInVariable:"Save file in variable",imageVariablePlaceholder:"e.g.: lead_photo",imageVariableNote:{before:"Variable",separate:"separate",after:"from the text variable. You can have several image/PDF variables in different flows."},imageOnlyLabel:"Accept ONLY image or PDF",imageOnlyNote:"Text messages will be ignored â the flow only moves forward when an image or document (PDF) is received (or the timeout expires).",timeoutOptional:"Time limit (optional)",timeoutNote:'When enabled, after this time the flow will follow the "No response" output. If disabled, the block waits indefinitely until the lead replies (orphan sessions are cleaned up after 7 days).',maxWaitTime:"Maximum wait time",componentOutputs:"Component outputs:",responseReceived:"Response received",noResponseAfter:"No response (after {{value}} {{unit}})"},waitInputAI:{intro:"The AI will analyze the lead's response and try to extract the variables configured below. If a required variable isn't found, the block asks again automatically.",modelOutsideCatalog:"{{model}} (saved model, not in catalog)",apiKeyWithProvider:"{{provider}} API Key",apiKeyRequired:"Required. Without your API key, this block can't analyze the lead's response.",keyStoredOnlyHere:"The key is stored only in this block.",getKeyOpenAI:"Get it at platform.openai.com/api-keys",getKeyAnthropic:"Get it at console.anthropic.com/settings/keys",getKeyDeepSeek:"Get it at platform.deepseek.com/api_keys",getKeyGemini:"Get it at aistudio.google.com/app/apikey",noAudioTranscription:"{{provider}} doesn't transcribe audio â if the lead replies with audio, the message will be ignored.",variablesToExtract:"Variables to extract",addVariable:"Add variable",extractNote:"The AI will read the lead's response and try to extract each variable configured below.",noVariableConfigured:"No variable configured yet.",variableIndex:"Variable {{number}}",variableNameExample:"e.g.: full_name",variableDescriptionExample:"Describe what the AI should look for in the lead's response...",optimizeWithAi:"Optimize with AI",requiredReaskIfMissing:"Required â asks again if not found",globalInstru
517ctionOptional:"General instruction (optional)",globalInstructionPlaceholder:"Additional instructions for the AI on how to interpret the lead's response...",globalInstructionNote:"Adds to each variable's description â useful for giving general context about the conversation.",reaskTone:"Tone of the follow-up question",informalFriendly:"Informal (friendly)",formal:"Formal (professional)",useEmojisInReask:"Use emojis when asking again",listenToLeadAudio:"Listen to the lead's audio",autoEnabledByConcat:"Automatically enabled by the audio concatenation below.",audioCreditsNote:"Consumes audio transcription credits.",concatenateInWindow:"Concatenate messages within a time window",concatWindowSeconds:"Wait window (seconds)",concatWindowNote:"Joins messages (text and audio) sent in sequence within that window before sending them to the AI for analysis.",maxAttempts:"Maximum attempts",maxAttemptsNote:{before:"After that number of attempts without a valid response, the flow follows the",exhaustedLabel:"Attempts exhausted",after:"output."},timeoutNote:'When enabled, after this time the flow will follow the "No response" output. If disabled, the block waits indefinitely until the lead replies.',validResponseOutput:"Valid response",attemptsExhaustedOutput:"Attempts exhausted (max. {{count}})",aiErrorOutput:"AI Error"},menuForm:{menuMessage:"Menu Message",menuMessagePlaceholder:"Choose an option...",optionsOnePerLine:"Options (one per line)",optionsPlaceholder:`1. Option 1 5182. Option 2 5193. Option 3`},aiForm:{systemPrompt:"System Prompt",systemPromptPlaceholder:"You are a friendly sales assistant...",usesGpt4oMini:"The AI will use GPT-4o-mini to reply to the customer's messages based on this prompt."},aiResponder:{apiKeyLabel:"API Key *",apiKeyRequiredHelp:"Required. Without your API key, this block doesn't reply â there's no native ZapData AI on this block.",identifyModelsIntro:"How to identify which models your API key has access to:",modelOutsideCatalog:"{{model}} (saved model, not in the current catalog)",modelUnavailableWarning:"If the selected model isn't available on your API key, the run will fail.",responseFieldLabel:"Field to save the AI's response",responseAlsoSavedNote:{before:"The response will always also be saved in",after:"."},autoSendResponse:"Send response automatically",autoSendResponseNote:"Sends the AI's response as a message to the lead automatically",promptBehaviorLabel:"AI Prompt / Behavior *",promptBehaviorPlaceholder:`You are a helpful assistant. 520Always reply in English. 521Be clear and to the point.`,promptVariablesNote:{before:"Accepts variables like",after:"or any variable â they're resolved to the real value before going to the AI."},conversationTone:"Conversation tone",toneInformal:"Informal (friendly)",toneFormal:"Formal (professional)",useEmojisInResponses:"Use emojis in responses",useEmojisNote:"The AI will be able to use emojis to make responses more expressive",mediaCapabilities:"Media capabilities",understandAudio:"Understand audio",audioUnsupportedTooltip:"{{provider}} doesn't transcribe audio. Select GPT (OpenAI) or Gemini to use this feature.",unavailableWithProvider:"Unavailable with the {{provider}} provider",understandAudioNote:"Allows processing audio messages (transcription)",understandImage:"Understand image",imageUnsupportedTooltip:"{{provider}} doesn't support image (no vision). Select another provider to use this feature.",understandImageNote:"Allows processing images (vision)",understandPdf:"Understand PDF",pdfUnsupportedTooltip:"{{provider}} doesn't support PDF. Select another provider to use this feature.",understandPdfNote:"Allows processing PDF documents (text extraction)",mayConsumeMoreTokens:"These options may consume more tokens.",deepseekTextOnly:"DeepSeek doesn't support audio, image, or PDF â text-only model.",keepConversationContext:"Keep conversation context",keepConversationContextNote:"Keeps the history of the last interactions for better context (maximum 20)",contextMessageCount:"Number of messages in context",audioResponseTitle:"Audio Response",answerWithAudioRandomly:"Reply with audio randomly",answerWithAudioRandomlyNote:"The AI sends some replies as audio",alwaysAudioOnAudioInput:"Always reply audio with audio",alwaysAudioOnAudioInputNote:"If the lead sends audio, the reply will always be in audio",audioResponseChance:"Chance of audio reply (%)",audioResponseChanceNote:"Probability of each reply being sent as audio (when not forced by lead audio)",chooseYourVoice:"Choose your Voice",selectAVoice:"Select a voice",noVoiceRegisteredShort:"No voice registered â clone one in the Audio Generator",customVoices:"Custom",noVoiceRegistered:"No voice registered.",cloneVoiceHint:"Clone a voice in the Audio Generator to use it here.",expirationTime:"Expiration Time",enableExpiration:"Enable expiration",enableExpirationNote:"After the defined time, the AI stops and follows the expiration output",timeInMinutes:"Time in minutes",maxMinutes:"Maximum: 1440 minutes (24 hours)",notifyOnError:"Notify by push on error",notifyOnErrorNote:"Notifies you by push when the AI fails due to invali
521d credentials or exhausted credits (at most 1 notice every 30 min per integration).",debounceLabel:"Wait for silence before responding",debounceUnitOff:"seconds (0 = off)",debounceNote:"Joins messages sent in sequence: only responds after this much time without new messages from the contact.",splitMessages:"Split response into multiple messages",splitMessagesNote:"Instead of a single text, sends it in short parts (more human).",splitMaxChars:"Max. size per message (characters)",splitMaxCharsDefault:"Default: 350 (max 6 parts)",knowledgeBase:"Knowledge Base",knowledgeBaseNote:"Create mini-flows that the AI will trigger automatically upon identifying the customer's intent.",noNameFallback:"No name",nodeCount:"{{count}} nodes",active:"Active",inactive:"Inactive",addMiniFlow:"Add Mini-Flow"},transfer:{transferTo:"Transfer to",humanAgent:"Human Agent",department:"Department",transferMessage:"Transfer Message",transferMessagePlaceholder:"Transferring to an agent..."},webhookForm:{webhookUrl:"Webhook URL",willBeFiredNote:"Will be fired with the lead's data. The flow continues to the next block right after sending.",method:"Method",payloadFormat:"Body format (payload)",payloadDefault:"Default",payloadCustom:"Custom",payloadRawJson:"Raw JSON",payloadWrappedNote:`The JSON automatically includes the lead's data and their variables inside "variables".`,payloadCustomRootNote:"You define each JSON field at the root. Use a dot to nest (e.g.: client.name) and [0] for lists.",payloadRawJsonNote:"Write the exact JSON to be sent, using {{variaveis}} wherever you want.",jsonBody:"JSON Body",jsonBodyTip:{before:"Tip:",after:"delivers the BR phone without the 55 and with the 9 guaranteed."},jsonFields:"JSON Fields",payloadVariables:"Variables in the payload",dotNotationNote:{before:"Field in dot-notation (e.g.:",middle:"). Use",after:"or any variable."},extraFieldsNote:{before:"Extra fields sent in the JSON. Use",after:"or any variable."},noExtraVariables:"No extra variables. The payload already automatically includes the lead's data (phone, name, tags, instance).",fieldPlaceholder:"field (e.g.: client.name)",keyPlaceholder:"key (e.g.: product)",valuePlaceholder:"value or {{variavel}}",typeText:"text",typeNumber:"number",typeBool:"bool",customHeaders:"Custom headers (optional)",headerPlaceholder:"Header (e.g.: Authorization)",valuePlaceholderShort:"value",testAndDetectVariables:"Test and detect variables from the response",responseFlattenedNote:{before:'The response becomes available "flattened" as',after:"in the next blocks."},responseExtractors:{title:"Extract additional variables (optional)",helpNote:"Pulls a piece out of a text variable (e.g.: one specific line from a multi-line field) and turns it into a new variable.",empty:"No extractors configured.",sourcePlaceholder:"source variable (e.g.: webhook_response.deposit_instructions.qr_payload)",saveAsPlaceholder:"new variable name (e.g.: reference)",mode:"Mode",modeLinePrefix:"Line with prefix",modeRegex:"Advanced regex",prefixPlaceholder:"line prefix (e.g.: Reference:)",patternPlaceholder:"regex pattern (e.g.: Reference:\\s*(.+))",flagsPlaceholder:"flags (optional)",groupPlaceholder:"group",sourceHint:`Use the name shown in "Test and detect variables" above, WITHOUT the {{ }} braces (if you paste it with braces, they're removed automatically when you leave the field).`,prefixHint:`Not case-sensitive, and it doesn't matter if the line ends with ":" â "reference" already matches a line like "Reference: ...".`},insertVariable:"Insert variableâ¦"},setVariableForm:{variableName:"Variable Name",value:"Value",valuePlaceholder:"Value or {{outra_variavel}}"},calculator:{operandA:"Operand A",operandPlaceholder:"Number or {{variavel}}",operandANote:"Accepts a fixed number (e.g.: 10) or a variable (e.g.: {{valor_compra}}).",operation:"Operation",opAdd:"Add (+)",opSubtract:"Subtract (â)",opMultiply:"Multiply (Ã)",opDivide:"Divide (÷)",operandB:"Operand B",decimalPlaces:"Decimal places",saveResultIn:"Save result in",resultAvailableAs:{before:"The result becomes available as",after:"in the next blocks."}},whatsappLabelForm:{labelName:"Label Name",labelNamePlaceholder:"Ex: Paid, VIP, Handled...",action:"Action",remove:"Remove",mustExistWarning:"The label must already exist on WhatsApp. If it doesn't, the action will be silently ignored."},endForm:{marksFlowEnd:"This node marks the end of the flow."},randomizer:{minTwoSplits:"Minimum of 2 splits",description:"Randomly splits the flow between the paths based on percentages.",namePlaceholder:"Name",addSplit:"Add Split",distribute:"Distribute",total:"Total",mustBe100:"(must be 100%)"},pixApiForm:{intro:{before:"Generates a PIX charge on your gateway, sends the message with the copy-code button, and",followsNow:"continues the flow instantly",middle:"â it doesn't wait for the payment. Exits through",or:"or"},outputFollowed:"Followed",outputError:"Error",gateway:"Gateway",country:"Country",countryBrazil:"Brazil â PIX",countryMexico:"Mexico â SPEI",countryPeru:"Peru â PEN",countryIndia:"India â INR",countryPhilippines:"Philippines â PHP",countryArgentina:"Argentina â Bank transfer",argentinaChargeNote:"Charge in Argentine pesos (ARS) via bank transfer: the lead gets a 22-digit CBU and transfers from their home banking. Same credential as PIX.",amountNoteArgentina:"The amount is in Argentine PESOS. The lead must transfer the exact amount â different amounts are not confirmed automatically.",argentinaTextNote:"in the text â with no QR Code to scan, the text is what carries the payment data. The account holder is the name the lead checks in their home banking before transferring.",imageModeCustomNoteArgentina:"Your image accompanies the message. The lead pays by copying the CBU via the button.",argentinaAutoNote:'In Argentina ZapData sends only a generic "Consumidor Final" name â the CUIT is optional at XPag and is NOT auto-filled, because there is no official CUIT for an unidentified consumer and making one up would use someone elseâs document.',cuitOptional:"CUIT (optional)",variableWithCuit:"Variable with the CUIT",fixedCuit:"Fixed CUIT (11 digits)",mexicoChargeNote:"Charge in pesos via SPEI transfer: the lead gets an 18-digit CLABE and transfers from the bank app. Same credential as PIX.",brazilChargeNote:"Charge in reais via PIX: the lead gets the copy-and-paste code.",peruChargeNote:"Charge in Peruvian soles (PEN). Only methods enabled for the selected Zenith credential are shown.",credential:"Credential",noAccountConnected:"No {{provider}} account connected. Without a credential, the block exits through the Error output without charging anything.",connectProvider:"Connect {{provider}}",chooseAccount:"Choose the account",noNickname:"(no nickname)",defaultSuffix:"default",credentialMissingWarning:"The credential that was selected no longer exists on this account. Choose another one â as it stands, the block will exit through the Error output.",capabilitiesMissing:"This credential has not had its Peru methods verified yet. No PE method is available until it is revalidated.",revalidateCredential:"Revalidate credential",revalidateSucceeded:"Credential revalidated. The Peru method list was updated.",revalidateFailed:"Could not revalidate the Zenith credential.",emptyUsesDefault:{before:"Left blank, it uses the credential marked as default for this account in",after:"."},amountLabel:"Amount ({{currency}}) *",amountNote:"Accepts a variable. An invalid or zero amount sends the lead through the Error output.",amountNoteMexico:"The amount is in Mexican PESOS, and the gateway doesn't accept less than MX$ 20.00.",amountNoteKairos:"Kairos charges from R$ 0.01.",amountNotePeru:"The amount is in Peruvian soles (PEN).",amountNotePhilippines:"The amount is in Philippine pesos (PHP). The gateway accepts â± 300.00 to â± 50,000.00.",requiredToSave:"Required to save the flow",messageLabel:"Message *",useInText:"Use",and:"and",mexicoTextNote:"in the text â with no QR Code to scan, the text is what carries the payment data.",brazilTextNote:"to insert the code into the text.",sendCopyButtonLabel:"Send copy button",sendCopyButtonHint:"Turn off to build the message with text and variables only.",sendPayButtonLabel:"Send pay button",sendPayButtonHint:"The button opens checkout. If disabled, include the payment link variable in the text.",buttonTextLabel:"Button text *",buttonMaxChars:"Maximum 20 characters (WhatsApp limit).",bankButtonsTitle:"Transfer buttons",bankButtonsHint:"Add 1 to 3 copy or URL buttons.",addBankButton:"Add",bankButtonNumber:"Button {{number}}",bankButtonLabel:"Label (1 to 20 characters)",bankButtonCopy:"Copy",bankButtonUrl:"Open link",bankButtonPlaceholders:"The value can use",bankPlaceholders:"Free text. Available placeholders:",cashDynamicNote:"The code, service name, and payment outlets come dynamically from Zenith; the editor has no fixed list.",peruQrOnlyNote:"Yape and Plin send only the QR image. There is no code or copy button.",peruCheckoutTextNote:"in the text â it is the checkout link. The button already opens that page; the variable is for using the link elsewhere.",indiaTextNote:"in the text â it is the UPI checkout link. The button already opens that page; the variable is for using the link elsewhere.",indiaChargeNote:"Charge in rupees (INR) via UPI: the lead gets a button that opens Zenith's secure checkout.",philippinesTextNote:"in the text â it is the GCash/Maya checkout link. The button already opens that page; the variable is for using the link elsewhere.",philippinesChargeNote:"Charge in Philippine pesos (PHP) via GCash or Maya: the lead gets a button that opens Zenith's secure checkout.",phPhoneLabel:"Filipino mobile *",phPhoneNote:{before:"It already comes with",after:", the lead's number. If it is not a Filipino mobile (10 digits starting with 9), the engine generates a stable PH number just to create checkout â the payer enters their real number in GCash/Maya."},messageImage:"Message image",imageModeQrColombia:"Bre-B QR Code (generated automatically)",imageModeQrNoteColombia:"The QR Code is generated from this charge's Bre-B code, with the amount already embedded.",imageModeCustomNoteColombia:"Your image replaces the QR Code. Without the QR, the lead pays via the copy button or the llave â and with the llave they type the amount by hand.",colombiaAutoNote:"In Colombia XPag fills the payer data itself, in the format the local provider validates. ZapData sends no name, document or e-mail â only the amount and the phone.",varLlave:"the charge llave (Bre-B address)",varPayLink:"the payment link",varMethodName:"method n
521ame (Bre-B / Nequi)",imageModeQr:"PIX QR Code (generated automatically)",imageModeCustom:"Custom image",imageModeNone:"No image (text and button only)",imageModeQrNote:"The QR Code is generated from this charge's PIX code. The copy button goes along with it.",imageModeCustomNoteMexico:"Your image accompanies the message. The lead pays by copying the CLABE via the button.",imageModeCustomNoteBrazil:"Your image goes in place of the QR Code. The lead pays via the copy button â the PIX code doesn't become a QR here.",imageModeNoneNote:"Just the message and the copy button.",imageModeQrOnlyPeru:"Required QR Code. This method sends no code or copy button.",imageModeVoucherOnlyPeru:"Required voucher image with the code returned by Zenith.",imageModeCustomNotePeru:"Your image goes with the message. The lead pays with the button that opens checkout.",imageModeCustomNoteIndia:"Your image goes with the message. The lead pays with the button that opens UPI checkout.",imageModeCustomNotePhilippines:"Your image goes with the message. The lead pays with the button that opens GCash or Maya checkout.",imageModeNoneNoteCheckout:"Just the message and the button that opens checkout.",customImageLabel:"Custom image *",customImageNote:"Accepts upload, public URL, or variable. Without an image, the block sends only the text and button â the charge isn't lost.",payerData:"Payer data",kairosPayerIntro:{before:"Kairos requires name, email, phone, and document on every charge. Name and email already come suggested from the lead; the",cpfYouInform:"CPF is something you enter",after:"â ZapData doesn't make one up, because a valid CPF belongs to a real person."},nameRequired:"Name *",kairosNameNote:'Accepts a variable. A name under 3 characters becomes "Cliente" (Kairos rejects it).',cpfRequired:"CPF *",kairosCpfNote:"Goes exactly as you type it. Kairos accepts the same CPF across multiple charges.",emailRequired:"Email *",emailOptional:"Email (optional)",kairosEmailNote:"Accepts a variable. The suggestion uses the lead's phone number, which always exists.",kairosPayerErrorNote:{before:"As it stands,",every:"every",after:"charge exits through the Error output without even reaching the gateway."},autoFillPayerData:"Fill in payer data automatically",autoFillPayerDataNote:"When on, you only need to enter the amount.",xpagAutoNote:{before:"XPag requires name and document on every charge. ZapData sends the contact's name and",theA:"the",theCpfOf:"the CPF of"},genericSatRfc:"Generic SAT RFC",publicoEnGeneral:'"público en general"',unidentifiedConsumer:"unidentified consumer",noOtherPersonData:"No other person's data is used.",varFallbackNote:"The field on top takes the variable with the lead's data; the one below, the fixed value used when it's empty.",nameLabel:"Name",variableOptional:"Variable (optional)",defaultName:"Default name",rfcCurpRequired:"RFC/CURP *",variableWithRfcCurp:"Variable with the RFC/CURP",fixedRfcCurp:"Fixed RFC/CURP (10 to 18 characters)",variableWithCpf:"Variable with the CPF",fixedCpf:"Fixed CPF (11 digits)",xpagNoEmailPhoneNote:"XPag doesn't ask for the payer's email or phone â that's why those fields don't appear here.",zuckAutoNote:{before:"ZuckPay requires name, document, email, and phone on every charge. ZapData sends the contact's name, the lead's phone number, an email derived from the phone",and:"and",theA:"the",officialDocMexico:"the official document for unidentified persons in Mexico",theCpfOf:"the CPF of"},zuckManualNote:{before:"The field on top takes the variable with the lead's data; the one below, the fixed value used when it's empty. Note: a WhatsApp lead",doesNotBring:"doesn't bring {{doc}} or email",after:"â turning off the automatic filling means you need to collect both beforehand, in the flow."},variableWithEmail:"Variable with the email",zuckPayerErrorNote:{before:"As it stands,",every:"every",after:"charge will exit through the Error output without even reaching the gateway â turn on the automatic filling above, or fill in both."},rfcAlphanumericNote:"RFC and CURP are ALPHANUMERIC (e.g.: PEPJ800101HDFRRL09) â they go exactly as you type them, with no digit filtering.",zuckCpfOnlyNote:"ZuckPay only accepts an 11-digit CPF; CNPJ is rejected.",generatedVariables:"Generated variables",varClabe:"the 18-digit CLABE",varCbu:"the 22-digit CBU to transfer to",varAccountHolder:"the destination account holder",varBankName:"the recipient's bank",varValuePesos:"amount charged, in pesos",varReference:"the acquirer's internal reference",varNetValue:"net amount",varTransactionId:"the charge id on the gateway",varErrorReason:"the reason, when it exits through Error",varPixCode:"the PIX code",varCheckoutUrl:"the secure checkout link",varValueRupees:"amount charged, in rupees",varValuePhp:"amount charged, in Philippine pesos",varValueSoles:"amount charged, in soles",varValueCharged:"amount charged",varStatus:"pending / paid / expired",chargeAgainNote:{before:"To charge again further down the funnel, use a",newBlock:"new",after:"Payment API block â don't connect the arrow back to this same block."},openValueToggle:{label:"Open-amount CLABE",description:"The lead transfers whatever amount they want via SPEI, instead of a fixed value set here."},openValueInfo:{before:"No fixed amount: the lead pays whatever they want to the CLABE. After payment, use",after:"to find out how much came in.",warning:"â ï¸ Confirms payment from XPag's notification, without re-checking their API afterward â lower security than the rest of the block."},countryColombia:"Colombia",colombiaChargeNote:"The charge is created in Colombian pesos (COP).",copMethod:"Payment method",copMethodBreb:"Bre-B (QR Code)",copMethodPse:"PSE (online debit)",copMethodNequi:"Nequi (digital wallet)",copBrebNote:"The lead gets the QR image and pays by scanning it in their banking app. No button â Colombian banks have no copy-and-paste.",copPseNote:"The lead gets a button that opens the payment page in the browser.",amountNoteColombia:"Minimum COP$ 10,000. The lead must pay the exact amount.",colombiaTextNote:"in the text. The llave is the charge address (the payer can type it in their bank app), but then they enter the amount by hand â only the QR carries the locked amount.",imageModeQrOnly:"Bre-B QR Code (required) â it is the only way to pay in Colombia.",payMethod:{pix:"PIX (QR code and copy-paste)",spei:"SPEI (bank transfer)",mx_oxxo:"OXXO (pay cash in store)",mx_codi:"CoDi (bank QR code)",cop_breb:"Bre-B (QR code)",cop_breb_llave:"Bre-B (payment link)",cop_pse:"PSE (bank debit)",cop_nequi:"Nequi (digital wallet)",pe_yape:"Yape (checkout)",pe_plin:"Plin (checkout)",pe_cash:"Cash payment (checkout)",pe_bank_transfer:"Bank transfer",in_upi:"UPI (checkout)",ph_gcash:"GCash (checkout)",ph_maya:"Maya (checkout)"},payMethodNote:{pix:"The lead pays from their banking app, scanning the QR or pasting the code.",spei:"The lead gets an 18-digit CLABE and transfers from their banking app.",mx_oxxo:"The lead gets a reference and pays IN CASH at the counter of any OXXO store. The voucher lasts days, so confirmation is not immediate.",mx_codi:"The lead scans the QR with their banking app. It is instant, which is why the default validity is short (1 hour).",cop_breb:"The lead gets the QR image and pays by scanning it in their banking app.",cop_breb_llave:"The lead receives a link and completes payment on the Zenith page.",cop_pse:"The lead gets a button that opens the payment page in the browser.",cop_nequi:"The lead receives a link and completes payment on the Zenith page.",cop_nequi_push:"The charge reaches the lead's Nequi app (push) and is paid right there. Zenith returns no link at all, so this block sends no button â the lead never leaves WhatsApp.",pe_yape:"The lead gets a button that opens Zenith's secure checkout to pay with Yape.",pe_plin:"The lead gets a button that opens Zenith's secure checkout to pay with Plin.",pe_cash:"The lead gets a button that opens Zenith's secure checkout to pay in cash.",pe_bank_transfer:"The lead gets a button that opens Zenith's secure checkout for the bank transfer.",in_upi:"The lead gets a button that opens Zenith's secure checkout to pay with UPI.",ph_gcash:"The lead gets a button that opens Zenith's secure checkout to pay with GCash.",ph_maya:"The lead gets a button that opens Zenith's secure checkout to pay with Maya."},imageModeVoucher:"Voucher barcode (generated automatically)",imageModeVoucherNote:"We generate the barcode from this chargeâs reference. The number is printed below it â if the registerâs scanner fails, the cashier types it in.",varOxxoReference:"the reference the lead shows at the register",varDueDate:"how long we keep tracking the payment",varVoucherUrl:"voucher image link (for LATER blocks, not for this blockâs text)",varCodiCode:"the copyable CoDi code",varQrUrl:"QR image link (for LATER blocks, not for this blockâs text)",zenithAutoNote:"We fill the payer in with the contact's WhatsApp name and a consumer e-mail (gmail/hotmail) carrying a unique token â the format Zenith itself asked for. Zenith only accepts letters, space
521s, apostrophes and hyphens in the name (emoji, digits and punctuation are stripped) and requires a first AND last name: when the contact has neither (just a number, emoji, a nickname or a lone first name), we draw a real, stable name for that lead, and the e-mail comes from that same name. In these countries Zenith asks for no document at all.",zenithManualNameNote:"Zenith requires a first AND last name, letters, spaces, apostrophes or hyphens only â it rejects the charge otherwise. If what lands here does not qualify, we send a drawn name, real and stable for that lead, so the charge is still created.",zenithNoDocumentNote:"In these countries Zenith does not ask for CPF, RFC or CURP â only name and e-mail.",zenithPixPayerIntro:{before:"Zenith PIX is only created with the customer's real name and CPF. The block does not fill anything in on its own and",neverInvent:"does not invent a CPF",after:"â a valid number belongs to a real person. Collect this data in the flow (variables) before this charge."},zenithPixNameNote:"Accepts a variable. Zenith requires a first AND last name, letters only. If the resolved value does not qualify, the charge exits through Error â we do not draw a name.",zenithPixCpfNote:"Accepts a variable with the customer's CPF. Without a valid CPF the charge never reaches the gateway. Zenith does not accept the same CPF on two open charges: if the customer comes back with the same amount, we resend the PIX that already exists â we do not invent another CPF.",zenithPixEmailNote:"Optional. Leave it empty and we build the address from the customer's name ([email protected]) â the same format Zenith's Mexico, Colombia and Peru already use. The code at the end keeps the payment receipt out of the inbox of someone else with the same name. If you fill it in, we send yours unchanged.",oxxoTextNote:"in the text â the lead needs both at the OXXO register.",codiTextNote:"in the text. The QR always goes as an image.",colombiaLinkTextNote:"in the text â it is the charge link. The button already goes there too; the variable is for anyone who wants to offer the link another way.",leavesWhatsappWarning:"This method takes the lead out of WhatsApp: on PSE, always (it opens the bank's page); on Nequi, only when the backup button gets used (the charge already reaches the app via push).",nequiPhoneLabel:"Nequi phone *",nequiPhoneNote:{before:"Comes pre-filled with",after:", the lead's WhatsApp number â that's where the Nequi charge lands. Swap it for another variable or a fixed number if the lead's Nequi is on a different one. It cannot be left blank: without a Colombian mobile (10 digits starting with 3) the charge is never even created."},colombiaNoLinkTextNote:"in the text. This method has no link and no button: the charge reaches the lead's app by push, and what the message does is tell them to open it."},sendPixKeyForm:{intro:"Sends a native WhatsApp button with your PIX key for payment.",pixKeyType:"PIX Key Type",phone:"Phone",email:"Email",randomKey:"Random Key (EVP)",pixKey:"PIX Key",pixKeyPlaceholder:"Your PIX key...",recipientName:"Recipient Name",recipientNamePlaceholder:"Name shown to the customer",recipientNameNote:"Name that will be shown to the customer at the time of payment"},sendChargeForm:{intro:'Sends a native WhatsApp charge with a "Review and pay" button.',amountLabel:"Amount (R$) *",amountPlaceholder:"Ex: 25.00 or {{valor}}",amountNote:{before:"Accepts a number (e.g.:",middle:"/",after:") or variable (e.g.: {{valor}}). The system extracts the number automatically."},insertVariablePlaceholder:"+ Insert variable into the amount...",itemNameLabel:"Item/Product Name *",itemNamePlaceholder:"Ex: Crochet Baby Shoe",descriptionLabel:"Description (optional)",descriptionPlaceholder:"Charge description...",pixReceivingData:"PIX Receiving Data *",pixKeyRequired:"PIX Key *",recipientNameRequired:"Recipient Name *"},call:{intro:"Places a call to the lead's WhatsApp. Their phone really rings and they can answer or decline â but the call is SILENT: neither side hears anything. It only serves to grab attention.",durationLabel:"Call duration (seconds)",durationNote:"Between 3 and 60 seconds. This value is sent to the API, but not every version honors it â if it is ignored, the call rings until the lead answers or declines.",noteLabel:"Note:",uazapiOnlyNote:"Only works with UazAPI instances. Use it sparingly to avoid blocks."},interactiveBlockForm:{typeButtonDescription:"Creates clickable buttons for quick actions.",typeImageButtonDescription:"Sends an image with interactive buttons.",typeListDescription:"Creates a list menu with organized sections.",buttonTextPlaceholder:"Button Text",menuTextPlaceholder:"Menu Text",optionPlaceholder:"Option",interactionType:"Interaction Type",typeButtonMessage:"Message with Buttons",typeImageWithButtons:"Image with Buttons",typeListMenu:"List Menu",mainTextRequired:"Main Text *",mainTextPlaceholder:"Type the message that goes with the interaction...",charsCount:"{{count}}/{{max}} characters",footerTextOptional:"Footer Text (optional)",footerTextPlaceholder:"Message footer",imageRequired:"Image *",listButtonTextRequired:"List Button Text *",viewOptions:"View options",optionsRequired:"Options *",maxOptionsWarning:"Maximum of {{max}} options for {{type}}.",typeButtons:"Buttons",buttonTypeReply:"Reply",buttonTypeCopy:"Copy",copyValuePlaceholder:"Value to copy (e.g.: PIX code, coupon)",clickAddToCreateOptions:'Click "Add" to create options',aiCapture:"AI Capture",aiCaptureNote:"When active, if the user sends text instead of clicking a button, the AI will try to identify which option matches the message. If it finds no match, it keeps waiting until timeout or a button click.",aiCaptureApiKey:"API Key (AI capture)",aiCaptureKeyRequiredHelp:"Without a configured key, AI capture stays inactive (goes straight to the default response/timeout).",aiCaptureKeyDisconnectedHelp:"No key connected to the Platform AI Integration. Without it, AI capture stays inactive (goes straight to the default response/timeout).",captureDifferentResponse:"Capture a response different from the buttons",captureDifferentResponseNote:"Enables a separate output in case the user replies with something that isn't one of the button options.",timeoutOptional:"Time limit (optional)",timeoutNote:'When enabled, after this time the flow will follow the "Timeout" output. If disabled, the block waits indefinitely until the lead clicks a button.',maxWaitTime:"Maximum wait time",noteLabel:"Note:",mobileOnlyNote:"May not display correctly on WhatsApp Web, only on the mobile device."},notifyAdminForm:{notificationTypeRequired:"Notification Type *",selectTypePlaceholder:"Select the type...",typeWhatsapp:"WhatsApp (Number)",typePush:"Push Notification",targetNumberRequired:"Target Number *",targetNumberNote:"Number with country code + area code (e.g.: 5511999999999)",messageRequired:"Message *",adminMessagePlaceholder:"Write the message for the admin...",availableVariables:"Available variables",webhookVariablesAvailableNote:"This user's webhook variables are already available in this block.",importantLabel:"Important:",instanceMustBeInGroupNote:"The instance running the flow must be inside the group to be able to send messages.",groupInviteLinkRequired:"Group Invite Link *",groupInviteLinkNote:"Paste the WhatsApp group invite link",groupFound:"Group found",noNameFallback:"No name",groupIdAutoResolveNote:"The group ID will be resolved automatically when the flow runs.",groupMessagePlaceholder:"Write the message for the group...",pushTitleRequired:"Notification Title *",pushTitlePlaceholder:"Push notification title...",pushBodyRequired:"Notification Text *",pushBodyPlaceholder:"Push notification text...",noteLabel:"Note:",pushNote:"The push notification will be sent to the current user (instance owner).",selectTypeToConfigure:"Select the notification type to configure"}
521,goToFlowForm:{targetFlowRequired:"Target Flow *",selectFlowPlaceholder:"Select a flow...",noFlowAvailable:"No flow available",targetFlowNote:"When the flow reaches this block, it will end and the target flow will start for the same contact.",transferVariables:"Transfer variables",transferVariablesNote:"Copy the current variables to the new flow",noteLabel:"Note:",noOutputNote:"This block has no output. The contact will keep receiving messages from the target flow automatically."},stickerForm:{sendSticker:"Send Sticker",uploadError:"Error uploading sticker: {{message}}",uploaded:"Sticker sent!",acceptedFormats:"Accepted formats: .webp, .png, .jpg, .gif",previewAlt:"Preview"},contactForm:{fullNameRequired:"Full Name *",fullNamePlaceholder:"John Smith",phoneRequired:"Phone *",insertVariablePlaceholder:"+ Insert variable...",instanceChipLabel:"Instance (Number)",instanceNumberHint:"Number of the instance sending the flow",phoneNote:"Full number with country code (e.g.: 5511999999999). Use the variable above for the instance's own number, or type a fixed number."},carouselForm:{cardsReordered:"Cards reordered â review the button connections on the canvas.",bodyText:"Body Text",bodyTextPlaceholder:"Main carousel text...",cardsCount:"Cards ({{count}}/10)",card:"Card",cardNumber:"Card {{number}}",cardImage:"Card Image",imageUploadError:"Error uploading image: {{message}}",imageUploaded:"Image sent!",cardText:"Card text",cardTextPlaceholder:"Description...",buttonsCount:"Buttons ({{count}}/3)",buttonTextPlaceholder:"Button text",addAtLeastTwoCards:"Add at least 2 cards to the carousel.",aiCaptureNote:"When active, if the user sends text instead of clicking a carousel button, the AI will try to identify which button matches the message. If it can't find one, it keeps waiting for a button click or timeout.",timeoutNote:'When enabled, after this time the flow will follow the "Timeout" output. If disabled, the carousel waits indefinitely until a button is clicked.',componentOutputs:"Component outputs:",cardButtonsOutput:"Card buttons",timeoutOutput:"Timeout (after {{value}} {{unit}})"},passageTrackerForm:{identifierNameRequired:"Identifier Name *",identifierNamePlaceholder:"Ex: Top of Funnel",identifierNameNote:"Give it a descriptive name to identify this checkpoint in the metrics."},iaGeneratorForm:{keyLooksLikeKie:"This key looks like a KIE.AI key (32 hex chars). Confirm that you pasted the Freepik key.",keyLooksLikeFreepik:"This key looks like a Freepik key. Confirm that you pasted the KIE.AI key.",tokenLooksLikeFreepik:"This token looks like a Freepik token. Confirm that you generated the webhook token on the KIE.AI dashboard.",provider:"Provider",mediaType:"Media type",mediaTypeImage:"Image",mediaTypeMusic:"Music",mediaTypeVideo:"Video",saveMediaAsVariable:"Save generated media as a variable",duplicatedVariableWarning:'Another "AI Generator" block already uses this name â choose a different one so each media item ends up in its own variable.',saveMediaAsVariableNote:"This variable can be reused in the Image / Video / Audio blocks (from this flow or others) for the same contact. The media is isolated per user and per lead.",freepikKey:"Freepik Key",kieKey:"KIE.AI Key",keyStoredPerBlock:"The key is stored per block. Get it at",hmacTokenLabel:"Validator Token (HMAC)",pasteFreepikTokenPlaceholder:"Paste the Freepik webhook token here",pasteKieTokenPlaceholder:"Paste the KIE.AI webhook token here",tokenRequiredWarning:"Required â without the token, the provider's callback is rejected.",tokenNote:{before:"Required. Generate the webhook token on the",after:"dashboard and paste it here â we use it to validate that the callback really came from the provider."},imageModelLabel:"Image Model",aspectRatio:"Aspect ratio",resolution:"Resolution",sunoModel:"Suno Model",musicStyle:"Music style",musicStylePlaceholder:"Ex.: Upbeat Pop, Sertanejo, Lo-fi",musicDescription:"Song description",musicDescriptionPlaceholder:"Ex.: A romantic song for my wife Mary, about our first date",musicDescriptionNote:"Theme/basis for the song â the AI will use this as inspiration to write the lyrics. Don't write the lyrics here.",autoLyrics:"Let the AI write the lyrics automatically",lyrics:"Lyrics (will be sung exactly as written)",lyricsPlaceholder:"Write the full song lyrics here...",titleOptional:"Title (optional)",titleNote:"Max. 80 characters. If empty, it will be generated from the description/style.",vocalGender:"Voice gender",vocalGenderNote:'Increases the probability of the chosen gender (not a 100% guarantee). Ignored if "Instrumental" is on.',negativeTags:"Negative tags (optional)",negativeTagsPlaceholder:"Ex.: Heavy Metal, busy drums",negativeTagsNote:"Styles to avoid in the generation.",instrumental:"Instrumental (no voice)",modelLabel:"Model",durationSeconds:"Duration (seconds)",maxSeconds:"Maximum: {{seconds}}s.",generationMode:"Generation mode",standardMode:"Standard (faster / cheaper)",proMode:"Pro (higher resolution)",nativeAudio:"Native audio",nativeAudioNote:"Generates a soundtrack + synced dialogue. Increases the credit cost.",pixverse1080pNote:"1080p only available with a duration of 5s.",styleOptional:"Style (optional)",noneRealistic:"None (realistic)",styleNote:'Applies a visual style to the generated video. Leave as "None" for a standard realistic result.',requiresReferenceImageNote:'This model requires a reference image. Enable "Use reference image" below.',promptRequired:"Prompt *",promptPlaceholder:"Describe what you want to generate...",musicPromptRequired:"Song prompt *",musicTitlePlaceholder:"Ex.: Summer Dawn",musicPromptFreepikPlaceholder:"Ex.: Lo-fi chill with piano and s
521oft drums",mustBeLoggedIn:"You need to be logged in",imageLimitReached:"Limit of {{max}} images reached for this model",unsupportedFormat:"Unsupported format: {{name}}. Use PNG/JPG/WebP.",fileExceeds8mb:'File "{{name}}" exceeds 8MB',uploadingFile:"Uploading {{name}}...",uploadFailed:"Failed to upload {{name}}: {{message}}",fileUploaded:"{{name}} uploaded",noPublicUrl:"No public URL for {{name}}",useReferenceImage:"Use reference image",useReferenceImageNote:"Enables {{mode}} mode. This model accepts up to {{max}} image{{plural}} (from the lead and/or your own).",imagesUsedCount:"{{used}} of {{max}} {{imageWord}} ({{leadCount}} from lead + {{ownCount}} {{ownWord}})",pixverseTransitionNote:"Pixverse Transition requires exactly 2",leadImageVariables:"Lead image variables",noImageVariableAvailable:"No image variable available.",selectVariablePlaceholder:"Select the variable...",removeAction:"Remove",myReferenceImages:"My reference images",leadVariable:"Lead variable",uploadFromComputer:"Upload from my computer",noLeadVariableNote:{before:"To use lead variables, first add a",middle:'block with "Save image sent by the lead" enabled, or another',after:'(Image type) with "Saves media to" filled in.'},waitInputBlock:'"Wait for response"',iaGeneratorBlock:'"AI Generator"',errorVariable:"Error variable",errorVariableNote:"Receives the error message.",sendAsViewOnce:"Send as view once",sendAsViewOnceNote:"The media disappears after the lead views it (image and video only on WhatsApp).",blockOutputs:"Block outputs:",outputSuccess:"Success",outputSuccessNote:"media generated and sent to the lead",outputError:"Error",outputErrorNote:"any failure",image:"image",images:"images",yourSingular:"your",yourPlural:"your"},dialog:{editComponent:"Edit component",mentionAllGroup:"Mention everyone in the group (@all)",mentionAllGroupNote:"When active, this message will mention every group participant.",miniFlowSaved:"Mini-flow saved successfully!"},pixelDialog:{title:"Register Facebook Pixel",nameOptional:"Name (optional)",namePlaceholder:"Ex: Main Pixel",pixelIdRequired:"Pixel ID",pageId:"Page ID",accessTokenRequired:"Access Token",accessTokenPlaceholder:"Facebook access token",savePixel:"Save Pixel",pixelRegistered:"Pixel registered!",registerError:"Error registering pixel: {{message}}"},condition:{outputNote:'The flow will follow the "Yes" output if the conditions are true, or "No" otherwise.'}},Bq={configureUrlFirst:"Configure the webhook URL first",testFailed:"Test failed",variablesSaved:"{{count}} variables saved to use in the next blocks.",testWebhook:"Test webhook",statusLabel:"Status {{status}}",variablesDetected:"Variables detected ({{count}}):",saveDetectedVariables:"Save detected variables",savedVariablesNote:"{{count}} variables saved â use them as",inNextBlocks:"in the next blocks.",extractedVariables:"Extracted variables:",someExtractorsDidNotMatch:"Some configured extractor found no match in the test response.",usingRealSample:'Testing with data from the last event received on "{{source}}".',missingVariables:"{{count}} variable(s) don't exist and will be sent blank:",resolvedByPrefix:"Fixed automatically â the real name carries the webhook_ prefix:",sentBody:"Body sent:",receivedResponse:"Response received:"},zq={eventReceived:"Event received!",listeningCancelled:"Listening cancelled",saveFlowFirst:"Save the flow before testing the webhook",startError:"Couldn't start listening: {{message}}",noEventReceived:"No event received in 1 minute",listenTooltip:"Listen for the next event for 1 minute",startingListen:"Starting to listen...",listenTestEvent:"Listen for test event",listening:"Listening... {{mm}}:{{ss}}",stopListening:"Stop listening",viewReceivedParams:"View received parameters",listenAgain:"Listen again",receivedParamsTitle:"Parameters received on the webhook",receivedAt:"Received at {{date}}",copyJson:"Copy JSON",headers:"Headers",useFieldNamesNote:"Use these field names as variables in the flow:",generatedVariables:"Variables generated ({{count}})",copyAllNames:"Copy names",clickToCopy:"Click to copy"},Vq={loadError:"Couldn't load the emojis",loadingEmojis:"Loading emojis...",insertEmoji:"Insert emoji"},qq={defaultRequiredHelp:"Required. Without your API key, this block doesn't respond.",defaultDisconnectedHelp:"No key connected to the Platform AI Integration. Without it, this block doesn't respond.",myKey:"My key",integrationKey:"Integration Key",loadingIntegrationStatus:"Loading integration statusâ¦",usingKey:"Using {{keyName}} ({{provider}}).",yourKey:"your key",manage:"Manage",noNickname:"(no nickname)",defaultSuffix:"(default)",connectNow:"Connect now"},Uq={currencies:{BRL:"Brazilian Real (BRL)",USD:"US Dollar (USD)",EUR:"Euro (EUR)",GBP:"British Poun
521d (GBP)",ARS:"Argentine Peso (ARS)",MXN:"Mexican Peso (MXN)",COP:"Colombian Peso (COP)",CLP:"Chilean Peso (CLP)",PEN:"Peruvian Sol (PEN)",JPY:"Japanese Yen (JPY)",CAD:"Canadian Dollar (CAD)",AUD:"Australian Dollar (AUD)",CHF:"Swiss Franc (CHF)"},eventLabel:"Event {{number}}",pixelLabel:"Pixel *",allPixels:"All Pixels",selectPixelPlaceholder:"Select a pixel...",pixelFallbackName:"Pixel {{id}}",noPixelConfigured:"No pixel configured.",registerPixel:"Register Pixel",eventTypeLabel:"Event *",eventTypes:{purchase:"Purchase",lead:"Lead",initiateCheckout:"Initiate Checkout",addToCart:"Add to Cart"},currencyLabel:"Currency",currencyDefaultNote:{before:"Default:",brl:"BRL (Brazilian Real)",after:". The event will be sent to Meta with the selected currency."},eventValueLabel:"Event Value ({{symbol}})",eventValuePlaceholder:"Ex: 97.00 or {{syntax}}",eventValueTitle:"Value extracted automatically from the PIX receipt",eventValueButton:"event_value (PIX amount)",eventValueNote:{before:"Leave empty or use",after:"to automatically send the amount extracted from the PIX receipt. Currency:"},addEvent:"Add Event",emptyState:"Add one or more events to fire in sequence when the flow passes through this block."},Wq={categories:{messages:"Messages",control:"Control",actions:"Actions"},nodeLabels:{text:"Text",aiText:"AI Text",image:"Image",audio:"Audio",audioAI:"AI Audio",video:"Video",document:"Document",sticker:"Sticker",contact:"Contact",call:"Call",interactiveBlock:"Interactive Message",carousel:"Carousel",iaGenerator:"AI Generator",delay:"Delay",waitInput:"Wait for Response",waitInputAI:"Wait for AI Response",aiResponder:"AI Responder",condition:"Condition",randomizer:"Randomizer",pixel:"Pixel",passageTracker:"Lead Count",tag:"Actions",sendPixKey:"Send PIX Key",pixApi:"Payment API",sendCharge:"Send Charge",notifyAdmin:"Notify Admin",goToFlow:"Connect Flow",whatsappLabel:"WhatsApp Label",webhook:"Webhook",calculator:"Calculator",xpag:"XPag",zenith:"Zenith"},components:"Components",comingSoon:"Coming soon",removalDate:"Removal on 5/11",deprecatedTooltip:"This block will be removed on 5/11. Use the detected PIX trigger instead of this block."},$q={blockNumberTitle:"Block #{{number}} â use this number when contacting support"},Gq={nodeLabels:{text:"Text",aiText:"AI Text",image:"Image",audio:"Audio",audioAI:"AI Audio",video:"Video",document:"Document",sticker:"Sticker",contact:"Contact",interactiveBlock:"Interactive",carousel:"Carousel",delay:"Delay",waitInput:"Wait",condition:"Condition",randomizer:"Random",pixel:"Pixel",tag:"Actions",sendPixKey:"PIX",zenith:"Zenith",pixApi:"Pay API",xpag:"XPag",notifyAdmin:"Notify",goToFlow:"Go to Flow"},defineNameError:"Set a name for the mini-flow",defineTriggerError:"Set the mini-flow's trigger/intent",flowName:"Flow name",flowNamePlaceholder:"Ex: Price objection",triggersLabel:"Triggers / Intents",triggersPlaceholder:"Describe when the AI should trigger this flow... Ex: When the customer says they don't have money, that it's expensive, or asks for a discount",triggersHint:"Describe in natural language the intents that should trigger this flow.",flowActive:"Flow active",blocks:"Blocks",incompletePaymentBlock:"Incomplete payment block: {{issues}}",saveMiniFlow:"Save Mini-Flow",configureBlock:"Configure Block",dialogTitle:"Knowledge Base - Mini Flow"},Hq={uploadingImage:"Uploading image...",uploadError:"Error uploading: {{message}}",imageUploaded:"Image sent!",unexpectedError:"Unexpected error: {{message}}",tryAgainFallback:"try again",upload:"Upload",base64Variable:"Base64 / Variable",imageLoaded:"Image loaded.",noImageSelected:"No image selected.",urlPlaceholder:"https://example.com/image.jpg",base64Placeholder:"data:image/png;base64,... or {{syntax}}",previewUnavailable:"Preview unavailable: the value contains a variable, it will be resolved at runtime.",previewAlt:"Preview"},Kq={removed:"Group flow removed",groupBadge:"GROUP",editTooltip:"Edit group flow",deleteTitle:"Delete group flow?",deleteDescription:'"{{name}}" will be permanently removed.'},Xq={speed:"Speed",imageNotLoaded:"ð· Image not loaded",defaultDocumentName:"document.pdf",pdfTapToOpen:"PDF ⢠Tap to open",simulator:"Simulator",online:"online",offline:"offline",restart:"Restart",flowSimulatorTitle:"Flow Simulator",testFlowSubtitle:"Test your flow as if you were a real lead",startTest:"Start Test",typing:"Typing... {{seconds}}s",variables:"Variables:",messagePlaceholder:"Message",waitingPlaceholder:"Waiting...",testAgain:"Test again"},Yq={period:"Period:",today:"Today",yesterday:"Yesterday",last7Days:"Last 7 days",sessions_one
521:"{{count}} session",sessions_other:"{{count}} sessions",conversionRate:"{{rate}}% finished"},Qq={messageType:{text:"Text",audio:"Audio",document:"Document",media:"Media (image, video, or sticker)"},deleteVariableError:"Error deleting variable",variableDeleted:'Variable "{{name}}" deleted successfully',tagCreated:'Tag "{{name}}" created successfully',variableCreated:'Variable "{{name}}" created successfully',combineWith:"Combine conditions with",andOperator:"AND (all must be true)",orOperator:"OR (at least one true)",variableBadge:"Variable",tagBadge:"Tag",countryBadge:"Country",aiBadge:"AI",andShort:"AND",orShort:"OR",variableLabel:"Variable",selectPlaceholder:"Select...",systemGroup:"System",systemSuffix:"(system)",customGroup:"Custom",webhookGroup:"Webhook",newVariable:"+ New variable",operatorLabel:"Operator",operators:{equals:"Equals",notEquals:"Not equal to",contains:"Contains",notContains:"Does not contain",startsWith:"Starts with",endsWith:"Ends with",greater:"Greater than",less:"Less than",exists:"Exists (not empty)",notExists:"Does not exist (empty)"},valueLabel:"Value",valuePlaceholder:"Value...",valuePlaceholderTime:"Ex: 13:00",valuePlaceholderHour:"Ex: 13",variableHints:{horario:"clock HH:MM",horaAtual:"hour 0â23",dataAtual:"date YYYY-MM-DD",timeOfDay:"dia | tarde | noite",diaDaSemana:"segunda-feira ⦠domingo"},timeOfDay:{day:"Day (05:00â11:59)",afternoon:"Afternoon (12:00â17:59)",night:"Night (18:00â04:59)"},tagConditionLabel:"Tag Condition",tagHas:"Contact HAS the tag",tagNotHas:"Contact DOES NOT HAVE the tag",tagNameLabel:"Tag Name",selectTagPlaceholder:"Select a tag...",noTagsYet:"No tag created yet",newTag:"+ New tag",countryConditionLabel:"Country Condition",countryIs:"Phone IS from this country",countryIsNot:"Phone IS NOT from this country",countryLabel:"Country",selectCountryPlaceholder:"Select a country...",countryMostUsedGroup:"Most used",countryOthersGroup:"Other countries",countryNote:"Identifies the country from the contact's phone dialing code (DDI). Dialing codes shared by multiple countries (e.g. +1 = US/Canada) show up as a single option.",iaIntro:"The AI will analyze the tags, conversation context, knowledge base, and last message to decide Yes or No.",iaExclusiveNote:{before:"Exclusive type â this node can't be combined with variables or tags. Connect the",errorLabel:"â AI Error",after:"output to handle AI failures (timeout, quota, etc.)."},criteriaYes:"Criteria for YES",criteriaYesPlaceholder:"Ex: The customer showed interest in buying the product",criteriaNo:"Criteria for NO",criteriaNoPlaceholder:"Ex: The customer showed no interest or declined the offer",criteriaNote:"The AI will consider both criteria, the knowledge base, and the conversation context.",aiModelLabel:"AI Model (YES/NO decision)",aiModelNote:"The AI condition uses YOUR key (OpenAI, Gemini, Anthropic, or DeepSeek) or the key already connected in the Platform AI Integration â without a key, the condition doesn't run.",providerLabel:"Provider",providerPlaceholder:"Select the provider (your key)",providerGemini:"Gemini (Google) â your key",providerOpenAI:"GPT (OpenAI) â your key",providerAnthropic:"Claude (Anthropic) â your key",providerDeepSeek:"DeepSeek â your key",apiKeyLabel:"API Key *",apiKeyHelp:"Key required. Also used to transcribe audio (if enabled below, and if the provider supports it).",modelLabel:"Model",understandAudio:"Understand audio",audioUnsupportedNote:"Unavailable for Claude (Anthropic) and DeepSeek â switch to OpenAI or Gemini to use this feature.",audioSupportedNote:"Transcribes audio before the AI analyzes it. Requires an OpenAI or Gemini provider with a key configured above.",audioNoKeyWarning:"Configure a provider (OpenAI or Gemini) with your key, or connect the Platform AI Integration, above, to transcribe audio in this block.",audioScopeLabel:"Audio scope",audioScopeLast:"Last audio only",audioScopeAll:"All audios in the conversation",audioScopeNote:"Defines how many audios will be transcribed for the AI to analyze.",variableNamePlaceholder:"Variable name",newTagPlaceholder:"Tag name",exclusiveIaRemoveForVariable:"The AI condition is exclusive â remove it to add a variable",addVariableButton:"+ Variable",exclusiveIaRemoveForTag:"The AI condition is exclusive â remove it to add a tag",addTagButton:"+ Tag",exclusiveIaRemoveForCountry:"The AI condition is exclusive â remove it to add a country",addCountryButton:"+ Country",iaAlreadyExists:"An AI condition already exists (max 1)",iaExclusiveRemoveOthers:"The AI condition is exclusive â remove variables/tags before adding",addIaCondition:"+ AI Condition",maxOneSuffix:"(max 1)",exclusiveSuffix:"(exclusive)",emptyState:"Add conditions to check contact variables, tags, or country â or an AI condition (exclusive)."},Zq={keyword:"Keyword",all:"Any message",sale:"Payment Detected",tag:"Tag",webhook:"Webhook"},Jq={models:{eleven_v3:"Eleven v3 â most expressive",eleven_multilingual_v2:"Multilingual v2 â most natural",eleven_turbo_v2_5:"Turbo v2.5 â fast",eleven_flash_v2_5:"Flash v2.5 â fastest"},modelHelp:"Eleven v3 is the most expressive (supports tags like [whispers] and [laughs]). Multilingual v2 sounds natural in any language. Turbo and Flash are faster.",languages:{auto:"Automatic (detected from text)",pt:"Portuguese",es:"Spanish",en:"English",fr:"French",de:"German",it:"Italian",nl:"Dutch",pl:"Polish",sv:"Swedish",tr:"Turkish",ru:"Russian",uk:"Ukrainian",ar:"Arabic",hi:"Hindi",zh:"Chinese (Mandarin)",ja:"Japanese",ko:"Korean",id:"Indonesian",ms:"Malay",vi:"Vietnamese",fil:"Filipino"}},e5={descriptions:{kieImage:{"gpt-image-2":"Photorealism, precise editing, sharp text. Accepts up to 16 reference images and 1K/2K/4K resolution choice.",wanV27ImagePro:"High-resolution image generation and editing (up to 4K in text-to-image). Accepts a reference image (image-to-image, max 2K)."},kieVideo:{"gemini-omni-video":"Google multimodal: 4/6/8/10s, up to 4K. Accepts up to 7 reference images.",kling30:"Cinematic video up to 15s with native audio, multi-shot, and STD/PRO modes."},freepikImage:{"nano-banana-pro":"Freepik's flagship model for image generation. Accepts up to 4 reference images.","nano-banana-pro-flash":"Faster, cheaper version of Nano Banana Pro. Accepts up to 4 reference images."}
521,freepikVideo:{"kling-v2-5-pro":"Cinematic image-to-video (Kling 2.5 Turbo Pro). Requires a reference image.","veo-3-1":"Google Veo 3.1 model (quality). Supports text-to-video and image-to-video (up to 2 frames).","veo-3-1-fast":"Fast version of Veo 3.1. Supports text-to-video and image-to-video (up to 2 frames).","pixverse-v5":"Image-to-video Pixverse V5. Requires a starting image.","pixverse-v5-transition":"Transition between two frames (start and end). Requires two images."},freepikMusic:{"music-generation":"Music generation from a prompt. Supports vocal or instrumental."}},vocalGenders:{auto:"Automatic",m:"Male",f:"Female"}},t5={actionTypes:{add_tag:{label:"Add Tag",shortLabel:"Tag"},remove_tag:{label:"Remove Tag",shortLabel:"Tag"},set_field:{label:"Set User Field",shortLabel:"Field"},clear_field:{label:"Clear Custom Field",shortLabel:"Field"},delete_contact:{label:"Delete Contact",shortLabel:"Contact"},mark_read:{label:"Mark Conversation as Read",shortLabel:"Read"},mark_unread:{label:"Mark Conversation as Unread",shortLabel:"Unread"},mark_open:{label:"Reopen in Kanban (Pipeline)",shortLabel:"Reopen Kanban"},mark_closed:{label:"Archive in Kanban (Pipeline)",shortLabel:"Archive Kanban"},mark_conversation_open:{label:"Mark Inbox Conversation as Open",shortLabel:"Open (Inbox)"},mark_conversation_closed:{label:"Mark Inbox Conversation as Closed",shortLabel:"Closed (Inbox)"},edit_message:{label:"Edit Message",shortLabel:"Edit msg"},delete_message:{label:"Delete Message",shortLabel:"Delete msg"}},groups:{contact:"Contact Data",inbox:"Inbox",messages:"Messages"}},a5={channelInstanceMismatch:jV,aiNode:_V,aiResponderNode:OV,aiTextNode:BV,audioAiNode:zV,audioNode:VV,calculatorNode:qV,callNode:UV,carouselNode:WV,conditionNode:$V,contactNode:GV,delayNode:HV,documentNode:KV,endNode:XV,goToFlowNode:YV,iaGeneratorNode:QV,imageNode:ZV,interactiveBlockNode:JV,menuNode:eq,notifyAdminNode:tq,passageTrackerNode:aq,pixApiNode:oq,pixApiValidation:nq,pixelNode:rq,randomizerNode:iq,sendChargeNode:sq,sendPixKeyNode:lq,setVariableNode:cq,startNode:dq,stickerNode:uq,tagNode:mq,textNode:pq,transferNode:hq,videoNode:fq,waitInputAINode:gq,waitInputNode:vq,webhookNode:bq,whatsAppLabelNode:yq,timeUnits:xq,cloneFunnel:wq,contentBlockForm:Cq,createGroupFlow:Pq,fakeReceiptDetection:Aq,flowSettingsDialog:Eq,passageMetricsDialog:Sq,trashDialog:Nq,simulator:kq,groupFlowsPage:Tq,preview:Iq,editor:Rq,flowList:Dq,actionsEditor:Mq,audioAIProperties:Fq,audioRecorderButton:Lq,contentBlocksTab:jq,flowCanvas:_q,propertiesPanel:Oq,webhookNodeTester:Bq,webhookTestListener:zq,textareaWithEmoji:Vq,platformAIKeySourceField:qq,pixelEventsEditor:Uq,nodeSidebar:Wq,nodeAnalyticsWrapper:$q,miniFlowBuilder:Gq,interactiveImageInput:Hq,groupFlowInlineRow:Kq,flowSimulatorPhone:Xq,flowAnalyticsBar:Yq,conditionEditor:Qq,triggerLabels:Zq,audioAIModels:Jq,iaGeneratorModels:e5,actionsBlock:t5},o5={metrics:{spend:"Total spend",cpc:"CPC (cost per link click)",cpa:"CPA (cost per sale)",costPerMessage:"Cost per message"},toasts:{addError:"Error adding rule",updateError:"Error updating",removeError:"Error removing"},accountsLabel:{all:"All active accounts",count:"{{count}} accounts selected"},rulesInfo:{pre:"Rules evaluated every 10 min with a",today:"daily (today) filter",post:"Notifies every time the rule is true."},empty:'No rules created yet. Click "Add rule" to get started.',active:"Active",inactive:"Disabled",metric:"Metric",adAccounts:"Ad accounts",leaveEmptyAllAccounts:"Leave empty = all accounts",noActiveAccounts:"No active accounts.",operator:"Operator",operators:{gt:"> (greater than)",gte:">= (greater than or equal)",lt:"< (less than)",lte:"<= (less than or equal)"},addRule:"Add rule"},n5={systems:{automatiZap:{label:"Automati-Zap",description:"Access to the automation system"},metricas:{label:"Metrics",description:"Access to sales metrics"},organizadorNumeros:{label:"Number Organizer",description:"Access to the organizer"}},automatiZapDetails:{flows:{label:"Access Flows",description:"View and access automation flows"},editFlows:{label:"Edit Flows",description:"Create and edit flows"},deleteContacts:{label:"Delete Contacts",description:"Delete contacts from the inbox"}},toasts:{loadError:"Error loading collaborators",settingSaved:"Setting saved!",settingSaveError:"Error saving the setting",fillAllFields:"Fill in all fields",passwordMinLength:"Password must be at least 6 characters",createSuccess:"Collaborator created successfully!",createError:"Error creating collaborator",updateSuccess:"Collaborator updated!",updateError:"Error updating",removeSuccess:"Collaborator removed!",removeError:"Error removing"}
521,systemsTitle:"Systems",automatiZapDetailsTitle:"Automati-Zap Details",globalSettings:{title:"Collaborator Settings",description:"Global settings that affect all collaborators",hideInstances:{label:"Hide instances",description:"Collaborators will only see conversations, without instance filtering"},messageSigning:{label:"Sign messages",description:"Show the collaborator's name above each message they send"}},title:"Collaborators",subtitle:"Create sub-accounts with limited access for your team",newCollaborator:"New Collaborator",createDialog:{title:"Create Collaborator",namePlaceholder:"Collaborator's name",emailLabel:"Email (login)",emailPlaceholder:"[email protected]",passwordPlaceholder:"Minimum 6 characters"},permissionsTitle:"Permissions",empty:{title:"No collaborators created yet",description:"Create sub-accounts for your team to access your systems"},status:{active:"Active",inactive:"Inactive"},deleteDialog:{title:"Delete collaborator?",description:{pre:"This will permanently remove access for"}},visibleInstances:{title:"Visible Instances",description:"Choose which instances this collaborator can view",noInstancesFound:"No instances found",online:"Online",noneSelectedWarning:"No instance selected - collaborator won't see any instance",allVisible:"All instances are visible (no restriction)"},savePermissions:"Save Permissions"},r5={title:"ElevenLabs Integration",subtitle:"Use your own ElevenLabs account to generate audio and voices. Usage is billed directly to your ElevenLabs account.",toasts:{pasteKey:"Paste your ElevenLabs API key.",validateError:"Could not validate the key.",connected:"ElevenLabs integration connected!",saveError:"Error saving the integration. Please try again.",removed:"Integration removed.",removeError:"Error removing the integration."},apiKey:{title:"API Key",connected:"Connected",notConfigured:"Not configured",descriptionConnected:"Your key is saved. Paste a new key below to replace it.",descriptionNotConnected:"Paste your ElevenLabs API key to enable voice features.",placeholderSaved:"â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢ (saved)",validating:"Validating...",testAndSave:"Test and save",createKeyAt:"Create your key at",keyStoredPre:"The key is stored only in your account. When creating it, leave the",restrictKeyOff:'"Restrict Key" option off',keyStoredPost:"restricted keys are often rejected due to missing access that ElevenLabs doesn't make clear.",connectedOn:"Connected on {{date}}",keyConfigured:"Key configured"},subscription:{plan:"Plan",usage:"Usage",characters:"characters"},legacyVoices:{title:"Old custom voices",description:{pre:"Custom voices you cloned before this change lived in a shared account and",noLongerWork:"no longer work",mid:"To keep using a cloned voice, re-clone it in the",audioGenerator:"Audio Generator",post:"it will now be created in your own ElevenLabs account."},readyVoicesNote:"Ready-made (non-custom) voices keep working normally."},usedIn:{title:"Where the integration is used",audioGenerator:"Audio Generator (text â voice)",voiceCloning:"Custom voice cloning",aiFlowResponse:'Audio response for AI flows and the "AI responder" block',noKeyNote:"Without a configured key, these features become unavailable and AI flows respond in text."}},i5={title:"Lara Translate",subtitle:`Connect your Lara Translate account so "Translate Flow" can also translate images and documents (PDF) from flow blocks â it already translates text and audio today. Translation uses your own Lara quota, not ZapData's.`,connectCard:{title:"Connect Lara Translate",description:"We test the credential against Lara before saving â if it doesn't work, you find out here, not in the middle of a translation."},fields:{label:"Nickname (optional)",labelPlaceholder:"E.g.: Main account...",accessKeyId:"Access Key ID",accessKeyIdPlaceholder:"Paste the Access Key ID",accessKeySecret:"Access Key Secret",accessKeySecretPlaceholder:"Paste the Access Key Secret"},generateCredentialsAt:"Generate credentials on Lara",testing:"Testing...",testAndConnect:"Test and connect",toasts:{validateError:"Could not val
521idate the credential.",connected:"Lara Translate connected!",saveError:"Error saving the credential. Try again.",renameError:"Error renaming.",defaultUpdated:"Default credential updated.",defaultError:"Error setting the default credential.",removed:"Credential removed.",removeError:"Error removing."},connectedAccounts:{title:"Connected accounts",description:`The credential marked "Default" is the one used when the translation block doesn't pick a specific one.`,default:"Default",noLabel:"(no nickname)",connectedOn:"Connected on {{date}}",makeDefault:"Make default"},deleteDialog:{title:"Remove credential",descriptionDefault:"This is the default credential. Removing it automatically promotes another connected credential to default (or, if it was the only one, translating image/document becomes unavailable until you connect another).",descriptionNotDefault:"Removing this credential doesn't affect the default one.",confirm:"Remove"},usedIn:{title:"Where this integration is used",description1:"In the Translate Flow button in the Flow Builder â when the flow has image or document (PDF) blocks, the option to translate them too using this account appears.",description2:'Without any account connected, the option to translate image/document stays disabled; the rest of "Translate Flow" (text and audio) keeps working normally.'}},s5={toasts:{nameRequired:"Integration name is required",created:"Global webhook created!",createError:"Error creating webhook",activated:"Webhook activated",deactivated:"Webhook deactivated",statusChangeError:"Error changing status",updated:"Webhook updated!",updateError:"Error updating webhook",deleted:"Webhook deleted!",deleteError:"Error deleting webhook",urlCopied:"URL copied!"},title:"Global Webhook",newBadge:"New",subtitle:"Receive events from any external system and trigger flows automatically",newIntegration:"New Integration",howItWorks:{title:"How does it work?",description:"Set up a webhook URL and send any JSON payload. The system automatically detects the phone field (phone, telefone, client_phone, whatsapp, celular, mobile) and triggers the configured flow. All payload fields are available as variables with the prefix"},empty:{title:"No webhook configured",description:"Create your first global webhook to start receiving external events"},createWebhook:"Create Webhook",status:{active:"Active",inactive:"Inactive"},webhookUrl:"Webhook URL",flowToTrigger:"Flow to trigger",selectFlow:"Select a flow...",instanceToTrigger:"Instance to Trigger",firstConnected:"First connected (default)",instanceWillTrigger:"This instance will be used to trigger the flow.",history:"History (last 24h)",hide:"Hide",viewPayload:"View payload",noEventsLast24h:"No events in the last 24 hours",createDialog:{title:"New Webhook Integration",description:"Set up a new integration to receive external events",nameLabel:"Integration Name *",namePlaceholder:"E.g.: Hotmart, Kiwify, My API..."},deleteDialog:{title:"Delete Webhook",description:"Are you sure you want to delete this webhook? This action cannot be undone."},eventTriggered:"Flow triggered",eventNotTriggered:"Did not trigger",eventErrors:{noConnectedInstance:"No WhatsApp was connected when the event arrived â the flow did not run.",selectedInstanceOffline:"The WhatsApp chosen for this webhook was disconnected â the flow did not run.",noPhone:"Could not identify the customer phone in this payload.",noFlow:"No flow selected for this webhook.",flowNotFound:"The selected flow was deleted or is in the trash.",groupFlow:"Group flows cannot be triggered by webhook.",contactFailed:"Failed to create the contact from this event."}},l5={title:"Integrations",subtitle:"Manage all platform integrations",tabs:{pixel:"Facebook Pixel",logzz:"Logzz Integration",elevenlabs:"ElevenLabs Integration",platformAi:"Platform AI Integration",mcp:"Connect to Claude (MCP)",pixGateway:"Payment Gateways",xpag:"XPag",zenith:"Zenith",laraTranslate:"Lara Translate"},badgeBeta:"Beta",badgeNew:"New"},c5={loadError:"Error loading instances",invalidValue:"Invalid value",invalidValueDescription:"Use a number greater than or equal to 1, or leave it blank to use the global default.",overrideRemoved:"Customization removed",overrideSaved:"Custom limit saved!",backToGlobalLimit:"This instance is back to using the global limit.",nowUsesLimit:"This instance now uses {{limit}} leads/day as its limit.",customizePerInstance:"Customize per instance",loadingInstances:"Loading instances...",noInstancesFound:"No instances found.",noRowUpdatedError:"No row was updated (permission?)"},d5={eventTypes:{pedido:"Order",abandonoCarrinho:"Cart Abandonment",expedicaoTradicional:"Traditional Shipping"},toasts:{routingOn:"Will always stay on the lead's origin instance",routingOff:"Will use the instance configured on each webhook",routingUpdateError:"Error updating the setting",nameRequired:"Enter a name for the integration",createSuccess:"Integration created successfully!",createError:"Error creating integration",removeSuccess:"Integration removed!",removeError:"Error removing integration",tokenRegenerated:"Token regenerated!",tokenRegenerateError:"Error regenerating token",activated:"Integration activated!",deactivated:"Integration deactivated!",statusChangeError:"Error changing status",flowUp
521dated:"Flow updated!",flowUpdateError:"Error updating flow",instanceUpdated:"Instance updated!",instanceUpdateError:"Error updating instance",orderStatusesUpdated:"Order statuses updated!"},title:"Logzz Integrations",subtitle:"Receive order webhooks and trigger flows automatically",newIntegration:"New Integration",routing:{title:"Avoid duplicate contact between instances",description:"If the same lead lands on webhooks configured for different instances (e.g., Logzz delivers the same order to more than one of your integrations), it always stays on the instance where that lead already has a conversation, instead of opening a new contact on the instance configured for that specific webhook. Leave it off if you intentionally use multiple instances to send the same message from more than one number."},empty:{title:"No integration configured",description:"Create your first integration to start receiving Logzz events"},createIntegration:"Create Integration",unnamedIntegration:"Unnamed integration",status:{active:"Active",inactive:"Inactive",label:"Status"},event:"Event",webhookUrl:"Webhook URL",flowToTrigger:"Flow to trigger",selectFlow:"Select a flow",noFlow:"No flow",instanceToTrigger:"Instance to Trigger",selectInstance:"Select an instance",useFirstConnected:"Use first connected",instanceWillTriggerFallback:"This instance will be used to trigger the flow. If none is selected, the first connected one will be used.",allStatuses:"All statuses",deselectAll:"Deselect All",selectAll:"Select All",filterStatusesNote:"Filter which order statuses should trigger the flow. Empty = all.",history:"History (last 24h)",noRecentRequests:"No recent requests",noIdentification:"No identification",detail:{customer:"Customer",phone:"Phone",product:"Product",order:"Order",type:"Type",checkout:"Checkout"},viewFullPayload:"View full payload",instructions:{title:"How to set up in Logzz",step1Pre:"Go to",step2:"Go to Settings â Integrations â Webhooks",step3:'Add a new "Orders" webhook',step4:"Paste the URL of the desired integration's webhook",step5:"Save and test the integration"},createDialog:{title:"New Logzz Integration",description:"Set up a new integration to receive Logzz events",nameLabel:"Integration Name",namePlaceholder:"E.g.: Order Webhook",eventTypeLabel:"Event Type",eventTypeHelp:"Select the event type you want to receive",orderStatusLabel:"Order Status (optional)",orderStatusHelp:"Select which order statuses should trigger the flow. Empty = all statuses.",flowLabel:"Flow to trigger (optional)",flowHelp:"The flow will be triggered automatically when the event is received",instanceLabel:"Instance to Trigger (optional)",instanceHelp:"This instance will be used to trigger the selected flow"},creating:"Creating..."},u5={never:"never",copied:"Copied",confirmRevoke:'Revoke the credential "{{name}}"? Anyone using it loses access immediately.',toasts:{consentSaveError:"Could not save your choice. Please try again.",consentGranted:"Conversation analysis enabled.",consentRevoked:"Access to conversation text revoked.",nameRequired:"Give the credential a name (e.g., Claude, Cursor).",requiresActivePlan:"MCP credentials require an active ZapData plan.",createError:"Could not create the credential. Please try again.",revokeError:"Could not revoke the credential.",revoked:"Credential revoked."},server:{title:"Connect to Claude (MCP)",description:'Connect Claude, Cursor, or n8n to ZapData and ask about your business in natural language â for example, "which states buy from me the most?".',addressLabel:"Server address",whereItWorksTitle:"Where it works today",whereItWorksDescription:"Claude Code, Cursor, and n8n â which accept a credential via header. Claude in the browser doesn't accept this type of credential yet; we're preparing login-based access for it."},consent:{title:"Let AI analyze your conversations",activeBadge:"Active",description:`Required for the AI to answer things like "what are my customers' main questions?" or "what's holding back my sales?".`,whatLeavesTitle:"What leaves your account when you enable it",bullet1:"Short excerpts from real conversations, up to 7 days old.",bullet2Pre:"The contact's registered name and phone",bullet2Registered:"registered",bullet2Mid:"are not sent. Within the text, phone, email, tax ID, and links are masked by automatic patterns â which",bullet2NotAllFormats:"don't catch every format",bullet2TextIs:"The text",bullet2NotAnonymous:"is not anonymous",bullet2Post:"a customer may have written their own name, phone, or full address.",bullet3Pre:"If your customers write about health or other personal topics, that can also appear in the excerpts â including",bullet3Sensitive:"sensitive data",bullet3Post:"which data protection law handles under its own rule.",bullet4Pre:"The text is sent to the AI provider that",bullet4You:"you",bullet4Post:"connect (e.g., Anthropic/Claude, in the United States), under your own subscription â not ZapData's.",loading:"Loadingâ¦",authorizedDescription:"You authorized conversation analysis. You can undo it anytime â access is cut off immediately.",revoke:"Revoke",authorizedOn:"You authorized it{{when}}",onDate:" on {{date}}",before:" before",textChangedDescription:"but the text of this authorization changed. Confirm again for the analysis to keep working.",confirmAgain:"Confirm again",withoutItDescription:"Without this, the AI can still see your account's volume and summary â but not the conversation text.",legalPre:"By authorizing, you declare you are the",legalController:"controller",legalMid:"of this data and have a",legalBasis:"legal basis",legalShare:"to share it, as per",termsSection:"Section 7 of the Terms",readAndAuthorize:"I've read and authorize"},credentials:{title:"Credentials",newCredential:"New credential",description:"Each credential grants access only to what you choose, and can be revoked at any time. They expire on their own after 90 days.",empty:{title:"No credential",description:"Create one to connect your assistant."},createCredential:"Create credential",tokenKind:"Token",expired:"Expired",lastUsed:"Last used",expiresOn:"Expires on {{date}}"},createDialog:{createdTitle:"Credential created",createdDescription:"Copy it now â for security, it won't be shown again.",keepSafe:"Keep it somewhere safe. Whoever has this credential can see your account's reports. If it leaks, revoke it here and create another one.",yourCredential:"Your credential",connectClaudeCode:"To connect in Claude Code",cursorN8nNote:"In Cursor or n8n, use the address above and the header",finish:"Done",newCredentialTitle:"New credential",chooseAuthType:"Choose the authentication type.",staticToken:"Static token",staticTokenHint:"Cursor, n8n, Claude Code.",oauthHint:"Claude.ai and Claude Desktop.",oauth:{howToConnect:"How to connect",step1Pre:"In Claude, go to",step1Path:"Settings â Connectors â Add custom connector",step2:"Give it a name (e.g., ZapData) and paste the address below.",step3Pre:"Click",connect:"Connect",step3Post:"Claude opens the ZapData login and asks for your authorization.",n
521oIdSecretNote:"No need to fill in an OAuth ID or secret. After you authorize, the credential shows up in this list and can be revoked here."},namePlaceholder:"E.g.: Claude, Cursor",permission:"Permission",comingSoon:"Coming soon",consentWarningPre:"You haven't authorized conversation analysis yet. The credential will still be created, but it will only read",consentWarningVolumeSummary:"volume and summary",consentWarningPost:"until you authorize it above.",authorizeNow:"Authorize now"}},m5={toasts:{loadError:"Error loading pixels",requiredFields:"Required fields",requiredFieldsDescription:"Fill in the Pixel ID and the Access Token",addSuccess:"Pixel added successfully!",addError:"Error adding pixel",fillIdAndToken:"Fill in the ID and Token",updateSuccess:"Pixel updated!",removeSuccess:"Pixel removed!"},addPixel:"Add Pixel",trackingNote:"Tracking is only valid for campaigns that go directly to WhatsApp, without a presell page.",nameOptional:"Name (optional)",namePlaceholder:"E.g.: Main Pixel",idLabel:"ID",pageIdLabel:"Page ID",pixelId:"Pixel ID",pixelIdPlaceholder:"E.g.: 1234567890123456",pageIdPlaceholder:"E.g.: 123456789012345",accessToken:"Access Token",accessTokenPlaceholder:"Facebook access token",configuredPixels:"Configured Pixels",pixelsCount_one:"{{count}} pixel registered",pixelsCount_other:"{{count}} pixels registered",pageIdForMessages:"Page ID (for messages)",unnamedPixel:"Unnamed pixel",active:"Active",inactive:"Inactive",token:"Token",howToConfigure:"How to configure",watchVideo:"Watch video",clickToWatchPre:"Click",clickToWatchPost:"to see the step-by-step guide.",deleteDialog:{title:"Delete Pixel",description:"Are you sure you want to delete this pixel? This action cannot be undone."}},p5={providers:{nexuspag:{docLabel:"Open NexusPag",blurb:"Get the API Key in the NexusPag dashboard (Integrations). A single key, starting with nxp_live_. Minimum charge of R$ 1.00."},skalepay:{docLabel:"Open the SkalePayments docs",blurb:"Get the API Key in the SkalePayments dashboard. A single key, starting with sk_. Mind the gateway limit: each charge must be between R$ 5.00 and R$ 600.00."},kairos:{docLabel:"Open Kairos dashboard",blurb:"Get the Public Key (Client ID) and the Private Key (Client Secret) from the API credentials area of the Kairos dashboard â those are the exact names shown there. Both are required: Kairos authenticates with the two together, in separate headers."},xpag:{docLabel:"Create an XPag account",blurb:"Generate the Client ID and Client Secret in the XPag dashboard, under Dashboard â API. XPag charges in FOUR countries with the same credential: PIX in Brazil, SPEI in Mexico, Bre-B/Nequi in Colombia and bank transfer in Argentina â just choose the country inside the block. Itâs also the acquirer behind SPEI for other gateways, so charging directly here removes a layer."},zenith:{docLabel:"Create a Zenith account",blurb:"PIX in Brazil (copy-and-paste + QR) and, with the same credential, Mexico, Colombia, and Peru. In Peru, Yape, Plin, cash, and bank transfer appear according to the availability verified for your credential."}},toasts:{keyGenError:"Could not generate the key.",keyGenErrorRetry:"Error generating the key. Please try again.",copyError:"Couldn't copy â select and copy manually.",validateError:"Could not validate the credential.",connectedTo:"Connected to {{account}}!",connected:"Gateway connected!",saveError:"Error saving the credential. Please try again.",renameError:"Error renaming.",defaultUpdated:"Default credential updated.",defaultError:"Error setting the default credential.",removed:"Credential removed.",removeError:"Error removing."},title:"Payment Gateways",subtitle:`Connect your gateway account so the "Payment API" block can generate charges inside flows. You can connect as many as you want, including more than one from the same provider â the money goes directly to your gateway account, ZapData doesn't intermediate.`,connectGateway:"Connect gateway",connectGatewayDescription:"We test the credential on the gateway and show any failure here before it affects a customer conversation.",provider:"Provider",nicknameOptional:"Nickname (optional)",nicknamePlaceholder:"E.g.: Main account, Store 2...",clientIdLabel:"Client ID",clientSecretLabel:"Client Secret",pasteClientId:"Paste the Client ID",pasteClientSecret:"Paste the Client Secret",publicKeyLabel:"Public Key (Client ID)",pastePublicKey:"Paste the Public Key",privateKeyLabel:"Private Key (Client Secret)",pastePrivateKey:"Paste the Private Key",kiwify:{step1Title:"1. Generate your key",step1Description:"We create the key pair for you â no terminal needed. You just copy the public key and register it with Kiwify.",generating:"Generating...",generateKey:"Generate key",keyGenerated:"Key generated. Copy the public key below and register it with Kiwify (Sett
521ings â API Credentials), enabling the permission to manage QR Codes.",publicKeyOpenssh:"Public key â OpenSSH format",askedForPem:"Did Kiwify ask for the PEM format?",copyPem:"Copy PEM",privateKeyReadyNote:"The matching private key is already ready here and is never shown on screen. It's only saved when you finish with the Access ID below.",haveOwnKey:"I already have my own key â paste it manually",privateKeyPkcs8:"Private key (PKCS#8)",generateForMe:"Generate it for me",ed25519Pre:"Must be Ed25519 in PKCS#8 format",ed25519Post:"A key from",ed25519Post2:"doesn't work.",step2Label:"2. Access ID (Kiwify shows it when you register the key)"},testing:"Testing...",testAndConnect:"Test and connect",connectedGateways:"Connected gateways",connectedGatewaysDescription:`The credential marked "Default" is used when the flow block doesn't choose a specific one. The default is per provider.`,default:"Default",nickname:"Nickname",noNickname:"(no nickname)",connectedOn:"Connected on {{date}}",makeDefault:"Make default",usedIn:{title:"Where the integration is used",descriptionPre:"In the",paymentApiBlock:"Payment API",descriptionPost:'block of the Flow Builder, which generates the charge, sends the QR Code and the copy-code button to the lead, then waits for payment confirmation to continue via "Paid" or "Expired".',noGatewayNote:"Without any gateway connected, the block exits through the error output without charging anything â the rest of the flow continues normally."},deleteDialog:{title:"Remove credential",descriptionDefault:"This is this provider's default credential. Removing it will automatically promote another credential from the same provider to default (or, if it was the only one, blocks using this provider will start exiting through the error output).",descriptionNotDefault:"Blocks configured to use this specific credential will start exiting through the error output until you point them to another one."},zenithTab:{subtitle:"Connect your Zenith account and manage the methods available in its dedicated block."},connectedAccounts:"Connected accounts",zenith:{apiKeyLabel:"API Key",pasteApiKey:"Paste your Zenith API Key",apiSecretLabel:"API Secret",pasteApiSecret:"Paste your Zenith API Secret",noSandboxNote:"Zenith has no test environment: every charge you create is real. Test with the minimum amount.",webhookRegisterFailed:"Credential connected, but I could not register the webhook with Zenith. Payment is still confirmed automatically (the system polls the gateway), it just takes a bit longer. You can register the webhook URL by hand in their panel.",registerWebhook:"Register webhook",webhookRegistered:"Webhook registered with Zenith. Payment confirmation now arrives instantly.",revalidate:"Revalidate",revalidated:"Credential revalidated and Peru methods updated.",revalidationFailed:"Could not revalidate the Zenith credential.",revalidationFailedAfterCreate:"The credential was saved, but server-side revalidation failed: {{error}}. Revalidate it before using Peru methods.",availableMethods:"Peru: {{methods}}",noPeruMethods:"This credential has no Peru methods enabled.",capabilitiesMissing:"Peru methods have not been verified yet.",cashMethod:"Cash",bankTransferMethod:"Bank transfer"}},h5={startingFrom:"Starting at {{price}}",toasts:{pasteKey:"Paste your API key.",connected:"Key connected!",saveError:"Error saving the key. Please try again.",renameError:"Error renaming the key.",defaultUpdated:"Default key updated.",defaultError:"Error setting the default key.",removed:"Key removed.",removeError:"Error removing the key."},title:"Platform AI Integration",subtitle:"Connect your own AI keys (Gemini, OpenAI, Anthropic, or DeepSeek) for flow blocks that use auxiliary AI. You can connect as many as you want, including more than one from the same provider â usage is billed directly to your account with each provider.",addKey:"Add key",addKeyDescription:"Choose the provider, give it a nickname (optional, useful if you're adding more than one key from the same provider), and paste the API key.",provider:"Provider",noAudioWarning:"This provider doesn't process audio natively â if you also use this key in the Audio Transcription tool, it won't work. Prefer Gemini or OpenAI for transcription.",nicknameOptional:"Nickname (optional)",nicknamePlaceholder:"E.g.: Main account, Client X...",apiKey:"API key",getKeyAt:"Get it at",keyStoredNote:"The key is stored only in your account.",connectedKeys:"Connected keys",connectedKeysDescription:`The key marked "Default" is used by any block/flow that doesn't have a specific key chosen.`,usedIn:{title:"Where the integration is used",buttonMatcher:"Interactive button matcher (identifies the lead's free-text reply)",antiSpamVariation:'Anti-spam text variation ("AI Text" block)',genericAiNode:'Generic "ai" node in the Flow Builder',aiConverterBlock:'"AI Converter" block',audioTranscription:"Audio Transcription (standalone tool)",flowTranslation:"Flow translation: transcription and translation of the original audio's text (voice cloning and translated speech use your ElevenLabs key, separately)",keySelectorBlocks:"Blocks with a key selector (AI Responder, Wait for AI Response, AI Condition, PIX Detected trigger, etc.)",noKeyNote:'Without any key connected, these blocks have no effect (no match, no variation, no generated response, no transcription) â the rest of the flow continues normally. Blocks with a key selector and no explicit selection use the key marked "Default".'},deleteDialog:{title:"Remove key",descriptionDefault:'This is the default key. Removing it will automatically promote another connected key to default (or, if it was the only one, blocks using "Integration Key" will have no effect until you connect another one).',descriptionNotDefault:"Flows configured to use this specific key will automatically switch to using your default key."}},f5={title:"Push Notifications",subtitle:"Get real-time alerts on your device",addDeviceToken:"Add device token",tokenPlaceholder:"Paste the token here",generateTokenHere:"Generate a token here",registeredDevices_one:"{{count}} device registered",registeredDevices_other:"{{count}} devices registered",notificationTypes:"Notification types",checkNow:"Check now",sendingTest:"Sending test...",testNotification:"Send test notification",adIssues:{disabled:{label:"Account disabled",description:"Meta disabled the ad account â usually due to a payment issue."},unsettled:{label:"Unsettled invoice",description:"The account has an outstanding, unpaid invoice."},riskReview:{label:"Under risk review",description:"The account is under risk review by Meta."},pendingSettlement:{label:"Payment pending",description:"The account is paused, waiting for a charge to go through."}
521,gracePeriod:{label:"Grace period",description:"The account is in a grace period â settle the payment before it gets disabled."},pendingClosure:{label:"Closure pending",description:"The account is on its way to permanent closure."},closed:{label:"Account closed",description:"Meta permanently closed the ad account."},balanceDue:{label:"Balance due",description:"The account has an outstanding balance due."}},toasts:{enabled:"Push notifications enabled",disabled:"Push notifications disabled",willReceive:"You'll receive push notifications on this device.",willNotReceive:"You'll no longer receive push notifications.",settingsChangeError:"Error changing the setting",saleOn:"Sale notifications enabled",saleOff:"Sale notifications disabled",disconnectOn:"Disconnect notifications enabled",disconnectOff:"Disconnect notifications disabled",leadRotationOn:"Lead rotation notifications enabled",leadRotationOff:"Lead rotation notifications disabled",logzzOn:"Logzz order notifications enabled",logzzOff:"Logzz order notifications disabled",desktopOn:"Browser notifications enabled",desktopOff:"Browser notifications disabled",adAccountIssueOn:"Ad account issue notifications enabled",adAccountIssueOff:"Ad account issue notifications disabled",adMetricsOn:"Ad metrics notifications enabled",adMetricsOff:"Ad metrics notifications disabled",limitUpdated:"Limit updated!",limitSetTo:"The daily rotation limit is now {{limit}} leads.",notificationsSent:"Notifications sent!",checkComplete:"Check complete",checkError:"Error checking",tokenExists:"This token is already registered",tokenAdded:"Device added!",tokenRemoved:"Device removed",testSent:"Test notification sent!",testSentDescription_one:"Sent to {{count}} device.",testSentDescription_other:"Sent to {{count}} devices.",testFailed:"Failed to send the test notification",testFailedDescription:"Check that the token is correct and try again.",testError:"Error testing the notification"},facebookGate:{pre:"Only available with an",active:"active ad account",mid:"connected. Connect one in",adsTab:"Ads â Settings",post:"."},whatsapp:{title:"WhatsApp",newSales:{label:"New sales",description:"Get an alert every time a sale is detected."},disconnect:{label:"WhatsApp disconnect",description:"Get notified when a number disconnects."},leadRotation:{label:"Lead rotation",description:"Notifies you when a number hits its daily lead limit.",maxLimit:"Maximum daily limit"},logzz:{label:"Logzz orders",description:"Get an alert every time a Logzz order comes in."},desktop:{label:"Browser notification",description:"Also receive notifications in the browser (desktop), in addition to the app."}},facebook:{title:"Facebook Ads",accountIssue:{label:"Ad account issues",description:"Get notified when Meta disables, pauses, or closes an account."},whichAlerts:"Which alerts do you want to receive?",whichAlertsDescription:"Choose the issue types that should trigger a notification.",adMetrics:{label:"Ad metrics",description:"Get notified when a metric (spend, CPC, CPA...) crosses the configured limit."}},facebookTest:{testError:"Error testing",notificationsSent:"Notifications sent!",notificationsQueued:"{{count}} notifications queued for delivery.",noActiveRule:"No active metric rule",missingToken:"{{count}} account(s) without an access token configured â check the Facebook Ads integration.",fbErrorAllAccounts:"Facebook rejected {{count}} account(s) â none could be checked.",rulesEvaluatedNoSpend:"{{rules}} rule(s) evaluated across {{accounts}} account(s); {{noData}} with no data for the period.",rulesEvaluatedBelowThreshold:"{{rules}} rule(s) evaluated â none reached the configured threshold.",rulesAndAccountsChecked:"{{rules}} rule(s) evaluated across {{accounts}} account(s).",noProblematicAccount:"No account with issues found.",checkCompleteNothing:"Check complete",checkingRules:"Checking rules...",testNow:"Test now"}},g5={title:"Settings",menu:{notifications:{label:"Push Notifications",description:"Configure alerts and devices",submenu:{sales:"Customize Sales",logzz:"Customize Logzz"}},collaborators:{description:"Manage your team's sub-accounts"},globalVariables:{label:"Global Variables",description:"Create reusable values for flows and messages"}}},v5={title:"Global Variables",subtitle:"Create reusable values for your account and use {{token}} across all your flows and messages",newButton:"New Variable",createButton:"Create Variable",searchPlaceholder:"Search by name or description",loading:"Loading variables...",emptyTitle:"No variables found",emptyDescription:"Create your first variable to use in flows and live chat",noResults:"No variables match your search.",noValue:"no value",typeText:"Text",typeNumber:"Number",form:{createTitle:"New Global Variable",editTitle:"Edit Global Variable",description:"Create a reusable identifier in flows like {{token}}.",nameLabel:"Name",namePlaceholder:"Ex: name_01 (g_ prefix is added automatically)",nameInvalid:"Use only lowercase letters, numbers and _ (max. 50 characters)",descriptionLabel:"Description",descriptionPlaceholder:"Describe what this variable represents",typeLabel:"Type",typeNote:"If you change the type, adjust the value to be compatible (valid number or text).",valueLabel:"Initial value (optional)",valuePlaceholder:"Ex: free text",valueInvalidNumber:"For the Number type, enter a valid numeric value (e.g.: 7.90)",cancel:"Cancel",create:"Create",save:"Save"},deleteDialog:{title:"Delete global variable?",description:"{{name}} will be removed from your account. Messages using {{token}} will be sent with an empty value.",confirm:"Delete"},toasts:{created:"Variable created!",updated:"Variable updated!",deleted:"Variable deleted",error:"Error saving variable",duplicate:"A variable with this name already exists",limitReached:"Limit of 100 global variables reached",valueTooLong:"Value or description too long (max. 2000 and 200 characters)"}},b5={pageTitle:"Customize Sales Notifications",howItWorks:{title:"How does it work?",pre:"Create several notification templates and, when a sale is detected, one of them will be chosen",random:"at random",post:"to be sent.",availableVariables:"Available variables:"},variables:{valor:"Sale amount",moeda:"Detected currency symbol (R$, US$, MX$...)",telefone:"Customer's phone number",cliente:"Customer name (Pix recipient)"},hideValue:{label:"Hide sale amount",hiddenDescription:"The amount will be hidden in notifications",visibleDescription:"The amount will be shown in notifications"},toasts:{valueHidden:"Amount hidden",valueVisible:"Amount visible",hiddenToastDescription:"The sale amount won't be shown in notifications",visibleToastDescription:"The sale amount will be shown in notifications",templateAdded:"Template added!",templateSaved:"Template saved!",templateRemoved:"Template removed",templateActivated:"Template activated",templateDeactivated:"Template deactivated"},templatesSection:{title:"Notification Templates",emptyDescription:"Add custom templates",activeCount:"{{active}} of {{total}} active",empty:"No templates configured yet",emptyNote:"The system's default template will be used",titleLabel:"Title",titlePlaceholder:"Notification title",messageLabel:"Message",messagePlaceholder:"Use {moeda} {valor} to include the currency and sale amount",active:"Active",inactive:"Inactive"},deleteDialog:{title:"Remove template?",description:"This action cannot be undone. The template will be permanently removed.",confirm:"Remove"}},y5={pageTitle:"Customize Logzz Notifications",howItWorks:{title:"How does it work?",pre:"Create several notification templates and, when a Logzz order is received, one of them will be chosen",random:"at random",post:"to be sent.",availableVariables:"Available variables:"},variables:{valor:"Order amount",status:"Order status",cliente:"Customer name",pedido:"Order number",produto:"Product name"},templatesSection:{title:"Notification Templates",emptyDescription:"Add custom templates",activeCount:"{{active}} of {{total}} active",empty:"No templates configured yet",emptyNote:"The system's default template will be used",titleLabel:"Title",titlePlaceholder:"Notification title",messageLabel:"Message",messagePlaceholder:"Use {valor}, {status}, {cliente}, {pedido}, {produto}",active:"Active",inactive:"Inactive"},toasts:{templateAdded:"Template added!",templateSaved:"Template saved!",templateRemoved:"Template removed",templateActivated:"Template activated",templateDeactivated:"Template deactivated"},deleteDialog:{title:"Remove template?",description:"This action cannot be undone.",confirm:"Remove"}},x5={flows_draft:{label:"Create flow draft",description:"Creates DISABLED flows, with no number assigned, for you to review and activate. Doesn't send messages to anyone."},flows_edit:{label:"Read and edit existing flows",description:"Lets the AI read your flows to learn from them and modify one that already exists. If the flow is ENABLED, the change takes effect immediately. Can be undone. Keys (AI, PIX) are never read or changed."},reports_geography:{label:"Buyer geography",description:"Which countries (country code) and states your sales come from. Aggregated data only â never phone, name, or conversation content."},reports_conversations:{label:"Conversation history",description:"Lets the AI analyze your account's conversations and extract insights (questions, objections, what blocks the sale)."}},w5={adMetricRules:o5,collaborators:n5,elevenLabs:r5,laraTranslate:i5,globalWebhook:s5,integrationsSettings:l5,leadRotationOverrides:c5,logzz:d5,mcp:u5,pixel:m5,pixGateway:p5,platformAI:h5,pushNotifications:f5,settingsPage:g5,globalVariables:v5,saleNotifications:b5,logzzNotifications:y5,mcpScopes:x5},C5={title:"Finance",subtitle:"Track investments, sales, and marketing metrics",productPlaceholder:"Product",allProducts:"All products",newProductTitle:"New product",productLabelAll:"all",productLabelFallback:"product",tabs:{dashboard:"Dashboard",dados:"Data",graficos:"Charts",consolidado:"Summary"}},P5={hoje:"Today",semana:"This week","este-mes":"This month","mes-passado":"Last month","este-ano":"This year",tudo:"All time",personalizado:"Custom"},A5={selectDates:"Select dates",selectEndDate:"Select the end date",selectStartAndEndDate:"Select the start and end date"},E5={0:"January",1:"February",2:"March",3:"April",4:"May",5:"June",6:"July",7:"August",8:"September",9:"October",10:"November",11:"December"},S5={date:"Date",product:"Product",spend:"Spend",revenue:"Revenue",investment:"Investment",sales:"Sales",leads:"Leads",profit:"Profit",roi:"ROI",cpa:"CPA",cpl:"CPL",conversion:"Conv.",actions:"Actions",month:"Month"},N5={investmentTotal:"Total Investment",totalSales:"Total Sales",totalLeads:"Total Leads"},k5={date:"Date",product:"Product",spend:"Spend",revenue:"Revenue",sales:"Sales",leads:"Leads",profit:"Profit",roiPercent:"ROI%",cpa:"CPA",cpl:"CPL",conversionPercent:"Conversion%"},T5={errorNameRequired:"Enter a name for the product",successCreated:"Product created!",errorCreate:"Error creating the product. Please try again.",title:"New product",description:"Create a product to track its financial data.",nameLabel:"Product name",namePlaceholder:"E.g.: WhatsApp Pro Course",creating:"Creating...",create:"Create product"},I5={newProduct:"New Product",newRecord:"New Record",title:"Daily Records",emptyStateBefore:"No records yet. Click",emptyStateAfter:"to get started.",confirmDelete:"Delete this record?",deletedToast:"Record deleted."},R5={exportCsv:"Export CSV",netProfitTotal:"Total Net Profit",roiLabel:"ROI",roasLabel:"ROAS",totalRevenue:"Total Revenue",costPerLead:"Cost per Lead",avgCpa:"Average CPA",conversionRate:"Conversion Rate",emptyStateBefore:"No records in the selected period. Add data in the",emptyStateTabName:"Data tab"}
521,D5={emptyState:"No data in the period. Add records in the Data tab.",chartLucroDiario:"Daily Profit",chartFaturamentoDiario:"Daily Revenue",chartVolumeVendas:"Sales Volume",chartRoas:"ROAS",chartLeadsRecebidos:"Leads Received",chartTaxaConversao:"Conversion Rate",statLucro:"{{value}} in the period",statFaturamento:"{{value}} in the period",statVendas:"{{value}} sales in the period",statRoas:"{{value}}% in the period",statLeads:"{{value}} leads in the period",statConversao:"{{value}}% in the period",suffixVendas:" sales",suffixLeads:" leads"},M5={yearLabel:"Year:",viewAnnual:"Annual View",viewMonthly:"By Month",revenueTotal:"Total Revenue",netProfit:"Net Profit",annualRoi:"Annual ROI",monthlyBreakdownTitle:"Month-by-month summary â {{year}}",totalYear:"Total {{year}}"},F5={errorSelectProduct:"Select a product.",successUpdated:"Record updated!",successAdded:"Record added!",errorSave:"Error saving the record.",titleEdit:"Edit record",titleNew:"New record",description:"Fill in the data; Profit, ROI, CPA, CPL, and Conversion are calculated automatically.",productLabel:"Product",selectPlaceholder:"Select",spendLabel:"Spend (R$)",revenueLabel:"Revenue (R$)",saveChanges:"Save changes",addRecord:"Add record"},L5={credits:"credits"},j5={active:"Auto-renewal active",description:"Your instances will be renewed automatically using your saved card."}
521,_5={yourWallet:"Your Wallet",recharge:"Add Credits",recentTransactions:"Recent transactions"},O5={testModeDeactivated:"Test mode deactivated",partialSimulationTitle:"Simulation: Partial Member",testModeTitle:"Admin Test Mode",partialDescription:"You're seeing exactly what a partial member would see (0 free instances, systems locked)",testDescription:"Credits system active for you only. Try out all the features.",deactivate:"Deactivate"},B5={expiresToday:"Expires today!",oneDay:"1 day",daysCount:"{{count}} days",trialBadge:"Trial {{badge}}",expiringTitle:"Instance expiring!",keepActiveTitle:"Keep your instance active",description:"To keep this instance active after it expires, subscribe to a plan. Renewing with credits is no longer available.",expiresTodayLong:"This instance expires today!",remainingDays_one:"{{count}} day of use left",remainingDays_other:"{{count}} days of use left",viewPlans:"View Plans"},z5={title:"Insufficient Credits",descriptionPrefix:"You don't have enough credits to use",currentBalance:"Your current balance",required:"Required",missingPrefix:"You're missing",recharge:"Add Credits"},V5={premiumFeatureTitle:"{{featureName}} â Premium Feature",notAvailableOnPlan:"isn't available on your",startingModePlan:"Starter Mode plan",upgradeToUnlock:"Upgrade to a higher plan to unlock it.",availableOnPlans:"is available on the",accessModePlan:"Access Mode plan",orHigher:"or higher.",upgradeYourPlan:"Upgrade your plan",plansWithFeature:"Plans that include this feature",migrateHint:"Switch to Access, Expansion, Ascension, Domination, or Titan and use it without limits.",allPlansHint:"Access, Expansion, Ascension, Domination, and Titan â unlimited use.",upgradeButton:"Upgrade",viewPlansButton:"View Plans"},q5={title:"Subscribe to a plan",description:"To create or keep instances active, choose a plan. Pay-per-credit was discontinued.",planLabel:"{{planName}} Plan",perMonth:"/mo",instancesIncluded_one:"{{count}} instance included",instancesIncluded_other:"{{count}} instances included",aiCredits:"{{count}} AI credits",viewPlans:"View Available Plans"},U5={title:"Create New Instance",description:"Choose how you'd like to create this instance",usePlanSlot:"Use a plan slot",instanceAvailable_one:"{{count}} instance available on your plan",instanceAvailable_other:"{{count}} instances available on your plan",noPlanSlot:"No plan slots available",useExtraSlot:"Use an add-on slot",slotAvailable_one:"{{count}} slot",slotAvailable_other:"{{count}} slots",noExtraSlot:"No add-on slots available"},W5={perUse:"per use",free:"Free",costPerEach:"Each {{item}} costs {{cost}} credits"},$5={title:"My Plan",description:"Manage your subscription and plan"},G5={title:"How would you like to add credits?",pixDescription:"Pay via PIX",cardTitle:"Credit Card",cardDescription:"Pay by credit card"},H5={title:"Add Card",description:"Add a card for faster top-ups and auto-renewal.",cardNumber:"Card Number",expiry:"Expiry",cardholderName:"Cardholder Name",cardholderPlaceholder:"CARDHOLDER NAME",saving:"Saving...",saveCard:"Save Card",encryptedNote:"Your data is encrypted and secure.",cardSavedToast:"Card saved successfully!",cardSavedTitle:"Card Saved!",cardSavedDescription:"Your card was added successfully.",errors:{unavailableTitle:"Payment unavailable",unavailableMessage:"The card form hasn't loaded yet. Please try again shortly.",cardFieldUnavailableTitle:"Card field unavailable",cardFieldUnavailableMessage:"We couldn't load the card field right now. Close and reopen this dialog.",cardDeclined:"Card declined",couldNotSaveCard:"Couldn't save the card",invalidCardData:"Invalid card details",invalidExpiry:"Invalid expiry date",invalidCvv:"Invalid CVV",cardholderRequired:"Enter the cardholder name as printed on the card.",saveCardError:"Error saving card",saveCardErrorFallback:"Couldn't save the card right now. Please try again in a few minutes."}},K5={title:"Card Top-up",cardholderRequired:"Enter the cardholder name as printed on the card.",chooseAmount:"Choose the amount to add",customAmount:"Custom amount",orChooseAmount:"Or pick an amount",continueWithAmount:"Continue with R$ {{amount}}",amountLimits:"Minimum: R$ 5.00 ⢠Maximum: R$ 5,000.00",chooseMethod:"Choose the Method",payAmount:"Pay R$ {{amount}}",expiresOn:"Expires {{month}}/{{year}}",useNewCard:"Use a new card",cardholderName:"Cardholder Name",cardholderPlaceholder:"CARDHOLDER NAME",cardNumber:"Card Number",expiry:"Expiry",processing:"Processing...",securePayment:"Secure, encrypted payment.",paymentApproved:"Payment Approved!",paymentApprovedToast:"Payment approved!",amountAddedToBalance:"R$ {{amount}} was added to your balance.",errors:{stripeNotLoaded:"Stripe hasn't loaded",cardElementNotFound:"Card field not found",paymentError:"Error processing payment",confirmError:"Error confirming payment. Please contact support.",unexpectedStatus:"Unexpected payment status. Please try again.",minAmount:"Minimum amount: R$ 5.00",maxAmount:"Maximum amount: R$ 5,000.00",chargeCardError:"Error charging card"}}
521,X5={title:"Choose which numbers to keep",descriptionPrefix:"Your plan changed and now allows",descriptionSuffix:"connected number(s). Select up to {{count}} to keep â the rest will be disconnected. Or go back to a bigger plan.",selectedCount:"{{selected}} / {{max}} selected",keepSelectedButton:"Keep selected and continue",backToLargerPlan:"Go back to a bigger plan",readyTitle:"All set!",readyDescription:"Numbers adjusted to your plan.",errors:{tooManyKept:"You can only keep {{count}} number(s).",couldNotComplete:"Couldn't complete this. Reload and try again.",genericTitle:"Error",tryAgain:"Please try again."}},Y5={genericRequestError:"Error processing the request.",pix:{generateFailedTitle:"Couldn't generate the PIX code",tryAgainShortly:"Please try again shortly.",generateErrorFallback:"Error generating PIX code",paymentConfirmedTitle:"Payment confirmed!",planActivated:"{{planName}} plan activated.",chargeExpired:"Charge expired",confirmedTitle:"Payment Confirmed!",activatedSuccess:"{{planName}} plan activated successfully.",headerAmountPlan:"PIX R$ {{amount}} â {{planName}}",scanQrCode:"Scan the QR Code",scanInstructions:"Open your banking app, scan the code below or copy and paste it. The plan will be activated automatically once payment is confirmed.",qrCodeAlt:"PIX QR Code",copyCode:"Or copy the PIX code:",codeCopied:"Code copied!",waitingPayment:"Waiting for payment...",loadingHeader:"PIX â {{planName}} Plan",generatingQr:"Generating PIX QR Code..."},plans:{subtitles:{iniciante:"Take the first step",acesso:"Tripled the operation",expansao:"No queue, no limit",ascensao:"Sells while you sleep",dominacao:"The machine never stops",titan:"Industrial scale",enterprise:"On-demand scale"},features:{cloud:"100% cloud-based, 24/7",aiAgent:"AI Agent",metaPixel:"Meta Pixel",pixAuto:"Auto-identified PIX",crmKanban:"Kanban CRM",iaStudio:"AI Studio",adsTab:"Ads tab (control your ads)",groupTab:"Group tab (manage your groups)"}},cardForm:{alreadyActivePlanTitle:"You already have an active plan",couldNotStartSubscription:"Couldn't start the subscription",missingClientSecret:"Couldn't get the payment secret. Please try again.",couldNotSaveCard:"Error saving the card",cardDeclined:"Card declined",processError:"Error processing payment",unexpectedStatus:"Unexpected payment status. Please try again.",approvedTitle:"Payment Approved!",planActivatedSuccess:"{{planName}} plan activated successfully.",confirmPayment:"Confirm Payment R$ {{amount}}",cardholderRequired:"Enter the cardholder name as printed on the card.",cardholderName:"Cardholder Name",cardholderPlaceholder:"CARDHOLDER NAME",cardNumber:"Card Number",expiry:"Expiry",freeTrialBanner:{freeDays:"7 days free",youIntro:"â you",notChargedToday:"won't be charged today",cardSavedLeadIn:". Your card is saved and the first charge of",onlyHappens:"only happens",in7Days:"7 days from now",cancelFooter:". You can cancel before then without paying anything."},processing:"Processing...",startFreeTrial:"Start 7-day free trial",freeTrialSecureNote:"No charge today · card saved securely",securePaymentNote:"100% secure, encrypted payment.",timeoutTitle:"Timed out. Please try again.",timeoutDescription:"Processing took longer than expected."},toasts:{planActivatedTitle:"Plan activated!",freePlanActivated:"Recharge Mode plan activated successfully.",genericErrorTitle:"Error",couldNotActivatePlan:"Couldn't activate the plan.",subscriptionCreated:"Your subscription was created successfully.",planUnlockedTitle:"Plan unlocked!",freeTrialReady:"Your free trial account is ready to use.",pixConfirmed:"Payment via PIX confirmed! Your subscription was created."},preparingCheckout:"Preparing your checkoutâ¦",header:{chooseYourPlan:"Choose your plan",chooseYourPlanSubtitle:"Pick the plan that best fits your business",monthly:"Monthly",quarterly:"Quarterly",yearly:"Yearly"},mostPopular:"Most Popular",instancesConnected_one:"{{count}} instance connected",instancesConnected_other:"{{count}} instances connected",priceFrom:"From R$ {{price}}.00/mo",perMonth:"/mo",perDay:"/day",totalLabel:"Total:",everyMonths:"every {{months}} months",viaRecharge:"Pay as You Go",allFeatures:"All features",processingButton:"Processing...",startButton:"Get Started",selectPlanButton:"Select Plan",empire:{customQuote:"Custom-fit",name:"Empire Mode",subtitle:"Built to your size",customInstances:"Custom instances",priceOnRequest:"Price on request",priceOnRequestHint:"we'll put together the ideal plan for your operation",talkToSupport:"Talk to support â"},enterprisePlan:{name:"Enterprise Mode",subtitle:"On-demand scale"}}
521,Q5={panel:C5,periods:P5,periodFilter:A5,months:E5,columns:S5,metrics:N5,csv:k5,createProductModal:T5,dadosTab:I5,dashboardTab:R5,graficosTab:D5,consolidadoTab:M5,recordFormModal:F5,shared:L5,autoRenewal:j5,creditWallet:_5,creditsBanner:O5,instanceRenewalTag:B5,insufficientCreditsModal:z5,planRequiredModal:V5,planUpsellModal:q5,slotChoiceModal:U5,systemCreditBadge:W5,subscriptionPage:$5,paymentMethodModal:G5,addPaymentMethodModal:H5,cardRechargeModal:K5,downgradeOverageModal:X5,planSelectionModal:Y5},Z5="Configure KIE.AI key",J5={dragToCanvas:"Drag to the canvas",image:"Image",video:"Video",audio:"Audio",creation:"Creation",premiumLockedTitle:"Premium feature â click to unlock",zoomOut:"Zoom out",zoomIn:"Zoom in",fitView:"Fit view",projectNamePlaceholder:"Project name"},e3={defaultProjectName:"Untitled project",loadError:"Error loading project",savedToast:"Project saved"},t3={title:"I.A Studio â Premium Feature",descriptionIniciante:"The <0>Creation</0> block isn't available on your <1>Starter Mode</1> plan. Upgrade to a higher plan to unlock it.",descriptionDefault:"The <0>Creation</0>
521 block is available on the <1>Access Mode</1> plan and above.",upgradeHeading:"Upgrade your plan",plansHeading:"Plans that include I.A Studio",upgradeSubtext:"Switch to Access, Expansion, Ascension, Domination, or Titan and use I.A Studio without limits.",plansSubtext:"Access, Expansion, Ascension, Domination, and Titan â unlimited use.",upgradeButton:"Upgrade Plan",viewPlansButton:"View Plans"},a3={codeInactive:"That code is no longer active",invalidCode:"Invalid code",importSuccess:"Imported successfully!",importError:"Error importing",title:"Import project or folder",description:"Paste the share code you received.",verify:"Verify",folder:"Folder",project:"Project",summary_one:"{{count}} project ⢠{{totalNodes}} blocks",summary_other:"{{count}} projects ⢠{{totalNodes}} blocks",expiresAt:"Expires on {{date}}",usesRemaining_one:"{{count}} import remaining",usesRemaining_other:"{{count}} imports remaining",codeInactiveExpired:"Code inactive, expired, or used up",importButton:"Import to my account"},o3={missingApiKey:"Enter your KIE key",missingHmacSecret:"Enter the Webhook HMAC Secret",savedSuccess:"Settings saved successfully",saveError:"Error saving settings",removedSuccess:"Settings removed",removeError:"Error removing settings",title:"Configure KIE.AI",descPrefix:"I.A Studio uses your own key from",descSuffix:"to generate creatives. Credits are deducted directly from your KIE account.",apiKeyLabel:"Your API Key",getKeyPrefix:"Get your key at",getKeySuffix:". The key is stored securely and used only for your generations.",hmacLabel:"Webhook HMAC Secret",hmacPlaceholder:"Min. 8 characters",removeButton:"Remove"},n3={types:{image:"Image",video:"Video",videoPro:"Video Pro",productVideo:"Product Video",textVideo:"Text Video",faceHq:"Face HQ",faceLq:"Face LQ",animate:"Image to Video",imitate:"Imitation",copy:"Copy",logo:"Logo"},emptyTitle:"No creations yet",emptySubtitle:"Your generations will show up here automatically",noText:"No text",imageAlt:"Creation",deletedSuccess:"Creation deleted",deleteError:"Error deleting",creditsUsed_one:"{{count}} credit",creditsUsed_other:"{{count}} credits"},r3={title:"Saved Projects",empty:"No saved projects yet",updatedAt:"Updated: {{date}}"},i3={expiry:{h24:"24 hours",d7:"7 days",d30:"30 days",never:"No expiration"},uses:{one:"1 use",ten:"10 uses",unlimited:"Unlimited"},linkGenerated:"Link generated!",generateError:"Error generating link",folderWord:"folder",projectWord:"project",title:"Share {{type}}",descriptionFolder:"Generate a link so another user can import this folder and all the projects inside it into their account. Uploaded images, credentials, and generations are not shared.",descriptionProject:'Generate a link so another user can import "{{title}}" into their account. Uploaded images, credentials, and generations are not shared.',validityLabel:"Validity",usesLimitLabel:"Import limit",generateButton:"Generate link",codeLabel:"Code",linkLabel:"Link",frozenNoteFolder:"The content is frozen at this moment. If you edit the folder's content later, generate a new link to reflect the changes.",frozenNoteProject:"The content is frozen at this moment. If you edit the project later, generate a new link to reflect the changes."},s3={confirmDeleteTitle:"Delete block?",confirmDeleteDescription:"This action cannot be undone. The block and its connections will be removed."},l3={title:"Preview",complete:"Complete",downloadMusic:"Download Music",downloadCreative:"Download Creative",resultAlt:"Result",waitingResult:"Waiting for result..."},c3={unsupportedFormat:"Unsupported format. Use MP3, WAV, AAC, M4A, or OGG.",tooLarge:"Audio over 10MB. Reduce the file size.",tooLong:"Audio over {{max}}s ({{duration}}s). Lip sync accepts a maximum of {{max}} seconds.",durationValidationError:"Couldn't validate the audio duration. Try another file.",uploadFailed:"Failed to upload audio.",dragHint:"Drag an audio file",formatHint:"MP3, WAV, AAC, OGG ⢠up to 10MB ⢠max 15s"},d3={alt:"Upload",dragHint:"Drag an image",formatHint:"JPG, PNG, WEBP ⢠up to 20MB"},u3={dragHint:"Drag a video",formatHint:"MP4, MOV ⢠up to 500MB"},m3={title:"Creation Block",modelLabel:"Model",llmLabel:"LLM",collapse:"Collapse",expand:"Expand",openBilling:"Open kie.ai/billing â",generating:"Generating...",generatingVideo:"Generating video... (may take 1-3 min)",processing:"Processing...",processingImage:"Processing image...",generatingGptImage:"Generating image with GPT Image 2... (may take up to 5 min)",sendingForGeneration:"Sending for generation...",stepProgress:"Step {{current}}/{{total}} â {{label}}",videoTimeHint:"Videos may take 1-3 minutes",registerKieKeyButton:"Register KIE key",generateButton:"Generate Creative",validation:{connectReferenceImage:"Connect 1 reference image",connectReferenceVideo:"Connect 1 reference video",connectCharacterImage:"Connect 1 character image",connectAudio:"Connect 1 audio file",connectAtLeastOneImage:"Connect at least 1 reference image",maxImages_one:"This model accepts a maximum of {{count}} reference image",maxImages_other:"This model accepts a maximum of {{count}} reference images",maxVideos_one:"Maximum of {{count}} video allowed",maxVideos_other:"Maximum of {{count}} videos allowed",maxAudios_one:"Maximum of {{count}} audio file allowed",maxAudios_other:"Maximum of {{count}} audio files allowed",addPrompt:"Add a prompt",lipsyncPromptRequired:"The prompt is required for lip sync"},errors:{registerKieKey:"Register your KIE key to generate creatives",mustRegisterKieKey:"You need to register your KIE key to continue.",invalidKieKey:"Your KIE key is invali
521d. Update it.",invalidOrExpiredKieKey:"Your KIE key is invalid or expired. Update it in settings.",insufficientCredits:"Your KIE.AI key is out of balance. Top up at kie.ai/billing",insufficientCreditsDetail:"Your KIE.AI key is out of balance. Top up at https://kie.ai/billing to keep generating.",timeoutNoResponseKie:"Timeout â no response from KIE.",timeout20min:"Timeout â KIE didn't respond within 20 minutes.",connectionErrorRetry:"Connection error. Please try again.",generationFailed:"Generation failed",connectionError:"Connection error.",generationError:"Error generating creative",timeoutNoProviderResponse:"Timeout - no response from provider"}},p3={criarImagem:{label:"Create Image",instruction:"Reference images are optional. Without images, it generates directly from text.",llms:{nanoBananaPro:{description:"Google ⢠Multi-character composition with up to 8 reference images (optional)"},seedream45Edit:{description:"Editing with up to 14 images ⢠Without images, generates directly from text"},grokImagineImageToImage:{description:"xAI ⢠Editing with 1 image or text-only generation"},gptImage2:{description:"OpenAI ⢠Up to 16 reference images (optional) with choice of 1K/2K/4K resolution"}}},produtoVideo:{label:"Product to Video",instruction:"Connect 1 product image (required)",llms:{sora2:{description:"OpenAI Sora 2 (Standard / Pro)"}}},textoVideo:{label:"Text to Video",instruction:"No image required - text only",llms:{veo3Fast:{description:"Google ⢠Fast generation"},veo3:{description:"Google ⢠Higher quality, slower"},geminiOmniVideo:{description:"Google ⢠Multimodal 4/6/8/10s with up to 4K"},kling30:{description:"Kling ⢠Standard / Pro with optional sound"},grokImagineTextToVideo:{description:"xAI ⢠Fast 6-30s videos"},wan27TextToVideo:{description:"Alibaba Wan ⢠up to 1080p, 2-15s duration"}}},animarImagem:{label:"Image to Video",instruction:"Connect 1 reference image and use the prompt to describe the video. Veo accepts 2 images (first and last frame).",llms:{veo3Fast:{description:"Google ⢠Accepts 1 or 2 images (first/last frame)"},veo3:{description:"Google ⢠Higher quality"},geminiOmniVideo:{description:"Google ⢠Up to 7 reference images, 4/6/8/10s, up to 4K"},kling30:{description:"Kling ⢠Animation from image with optional sound"},grokImagineImageToVideo:{description:"xAI ⢠Fast 6-30s animation"},wan27ImageToVideo:{description:"Alibaba Wan ⢠first/last frame"}}},sincronizacaoLabial:{label:"Lip Sync",instruction:"Connect 1 character image and 1 audio file (required)",warning:"The image must show the character's face. Audio up to 10MB in MP3, WAV, AAC, M4A, or OGG format.",llms:{klingAiAvatarPro:{description:"Kling ⢠High-fidelity avatar from image + audio"},infinitalkFromAudio:{description:"InfiniteTalk ⢠Lip sync with choice of resolution (480p/720p)"}}},imitarMovimento:{label:"Motion Imitation",instruction:"Connect 1 character image and 1 reference video (required)",warning:"Two modes: 'Character in Video' replaces the person in the video with the character from the image. 'Animate Image' animates the image with the video's movements.",llms:{kling26MotionControl:{description:"Stable version"},kling30MotionControl:{description:"Newer version"}}},criarMusica:{label:"Create Music",instruction:"Text to Music via Suno. Doesn't require an image or audio.",warning:"In Custom mode, set the style and title. In Simple mode, describe the music in the prompt (up to 500 characters).",llms:{v55:{description:"Custom models, superior quality"},v5:{description:"Superior musical expression, fast generation (recommended)"},v45Plus:{description:"Richer sound, new ways to create (up to 8 min)"},v45:{description:"Smarter prompts, fast generation (up to 8 min)"},v45All:{description:"V4.5 ALL, fast generation (up to 8 min)"},v4:{description:"Improved vocal quality (up to 4 min)"}}}},h3={labels:{proporcao:"Aspect Ratio",resolucao:"Resolution",duracaoSegundos:"Duration (s)",duracao:"Duration",qualidade:"Quality",formato:"Format",modo:"Mode",som:"Sound",modoGeracao:"Generation Mode",resolucaoModo:"Resolution / Mode",vozPreferida:"Preferred voice",estiloCustom:"Style (Custom)",tituloCustom:"Title (Custom)",tagsNegativasCustom:"Negative tags (Custom, optional)",instrumental:"Instrumental",prompt:"Prompt"},descriptions:{basic2kHigh4k:"Basic = 2K ⢠High = 4K",gptImageRatio:"With images connected, runs image-to-image (up to 16 refs). Without images, generates directly from text.",gptImageResolution:"Auto and 1:1 only support
5211K. 1:1 can't go up to 4K.",klingAutoAdapt:"When there's an image, the system can adapt automatically",grokSpicyUnavailable:"Spicy isn't available for external images (only for Grok task_id)",infinitalkResolution:"InfiniteTalk accepts 480p or 720p",customModeMusic:"Simple: describe the idea. Custom: full control (style, title, lyrics).",instrumental:"No vocals.",vocalGender:"Vocal gender preference (only valid in Custom mode).",styleCustom:"Required in Custom mode. Defines genre, mood, and artistic direction.",titleCustom:"Required in Custom mode. Max. 80 characters.",negativeTags:"Styles to avoid (Custom mode only).",characterOrientation:"Character in Video: replaces the person in the video with the character from the image | Animate Image: the image is animated with the video's movements"},placeholders:{promptDefault:"Describe what you want to generate...",promptEditDesired:"Describe the desired edit...",promptEditDesiredSingleImage:"Describe the desired edit (1 input image required)...",promptAnimacao:"Describe the animation...",promptAnimacao7Refs:"Describe the animation... (up to 7 reference images)",promptAnimacaoDesejada:"Describe the desired animation...",promptFrameInicialFinal:"Connect 1 image (starting frame) and optionally 2 (ending frame)...",promptLipsyncKling:"Describe desired expressions, setting, or style (required, max. 5000 characters)...",promptLipsyncInfinitalk:"Describe the character and the scene (e.g., 'A young woman with long dark hair talking on a podcast.')...",promptImitarMovimento:"Describe the character or scene (optional)...",promptMusica:"Simple: describe the music (up to 500 chars). Custom + vocals: this text becomes the lyrics (up to 5000 chars).",styleExample:"E.g.: Pop, Rock, Hip-hop, Jazz, Classical...",titleExample:"E.g.: Summer Dawn",negativeTagsExample:"E.g.: Heavy Metal, Upbeat Drums"},options:{auto:"Auto",ratio169Horizontal:"16:9 (Landscape)",ratio916Vertical:"9:16 (Portrait)",ratio219UltraWide:"21:9 (Ultra-wide)",basic2k:"Basic (2K)",high4k:"High (4K)",normal:"Normal",profissional:"Professional",horizontal:"Landscape",vertical:"Portrait",tenSeconds:"10 seconds",fifteenSeconds:"15 seconds",ratio11Quadrado:"1:1 (Square)",standardFast:"Standard (fast)",proQuality:"Pro (quality)",comSom:"With sound",semSom:"No sound",ratio23Vertical:"2:3 (Portrait)",ratio32Horizontal:"3:2 (Landscape)",funCriativo:"Fun (creative)",
521spicyIntenso:"Spicy (intense)",standard:"Standard",pro:"Pro",fun:"Fun",personagemNoVideo:"Character in Video",animarImagemOption:"Animate Image",standard720p:"Standard (720p)",pro1080p:"Pro (1080p)",p480Fast:"480p (fast)",p720Quality:"720p (quality)",simplesRecomendado:"Simple (recommended)",custom:"Custom",comVocais:"With vocals",apenasInstrumental:"Instrumental only",automatico:"Automatic",masculino:"Male",feminino:"Female"}},f3={backToProjects:"Projects"},g3={subtitle:"Manage your AI projects, folders, and creations",tabProjects:"My Projects",tabCreations:"My Creations",newFolder:"New folder",newProject:"New project",allProjects:"All projects",noFolder:"No folder",createProjectError:"Error creating project",createFolderError:"Error creating folder",confirmDeleteFolder:"Delete the folder? The projects inside it will move back to the root.",renameFolderError:"Error renaming folder",folderDeletedSuccess:"Folder deleted",deleteFolderError:"Error deleting folder",projectDeletedSuccess:"Project deleted",deleteError:"Error deleting",nameUpdatedSuccess:"Name updated",renameError:"Error renaming",projectMovedSuccess:"Project moved",moveError:"Error moving",emptyInFolder:'No projects in "{{name}}"',emptyNoProjects:"No projects yet",createProjectLink:"Create project",blocksCount_one:"{{count}} block",blocksCount_other:"{{count}} blocks",updatedAt:"Updated: {{date}}",moveToLabel:"Move toâ¦",moreButton:"More"},v3={preparing:"Preparing importâ¦"},b3={configureKieTitle:Z5,toolbar:J5,flowCanvas:e3,gateModal:t3,importDialog:a3,kieDialog:o3,myCreations:n3,projectsModal:r3,shareDialog:i3,nodeActions:s3,previewNode:l3,uploadAudio:c3,uploadImage:d3,uploadVideo:u3,creationNode:m3,models:p3,fields:h3,page:f3,projectsPage:g3,shareImportPage:v3},y3={tabs:{dashboard:"Dashboard",campaigns:"Campaigns",billing:"Billing",settings:"Settings"}},x3={account:"Accounts",campaign:"Campaigns",adset:"Ad Sets",ad:"Ads"},w3={groups:{identification:"Identification",financial:"Financial",sales:"Sales",messages:"Messages",traffic:"Traffic",meta:"Meta"},columns:{name:"Name",thumbnail:"Preview",daily_budget:"Budget",spend:"Spend",conversion_value:"Revenue",profit:"Profit",roas:"ROAS",roi:"ROI",margin:"Margin",cpa:"CPA",sales:"Sales",messaging_conversations_started:"Conversations Started",cost_per_message:"Cost per Conversation",impressions:"Impressions",reach:"Reach",clicks:"Link Clicks",cpc:"CPC",cpm:"CPM",ctr:"CTR",account_status:"Account Status",account_total_spend:"Total Spent on Account",external_id:"ID",last_synced_at:"Last Updated",created_at:"Creation Date",delivery:"Delivery"},hints:{clicks:"Clicks on the ad's link (inline_link_clicks).",cpc:"Cost per link click.",ctr:"Link click-through rate (link clicks ÷ impressions)."}},C3={title:"Customize columns â {{level}}",subtitle:"Choose how you want to view the columns in the table",searchPlaceholder:"Search by column",noColumnsFound:"No columns found",selected:"Selected",dragToReorder:"Drag to reorder",noColumnsSelected:"No columns selected. Check options on the left.",restoreDefault:"Restore default",reorder:"Reorder",comingSoon:"coming soon",removeColumn:"Remove {{column}}"},P3={title:"Dashboard",subtitle:"Overview of your campaigns",noAccounts:{title:"No account connected",description:"To view your ad data, connect your Facebook account in settings.",button:"Go to Settings"},accountSelector:{allAccounts:"All accounts",oneAccount:"1 account",nAccounts:"{{count}} accounts"},dateFilter:{max:"Maximum",today:"Today",yesterday:"Yesterday",last7Days:"Last 7 days",thisMonth:"This month",lastMonth:"Last month",custom:"Custom",selectPeriod:"Select period"},sync:{sessionExpired:"Session expired. Please log in again.",partialSync:"Partially synced: {{synced}} account(s) OK, {{failed}} failed.",failedSync:"Failed to sync {{failed}} account(s). Please try again.",success:"Data synced successfully!",timeout:"Sync took too long. Showing the latest available update. Please try again shortly.",error:"Error syncing data"},cards:{revenue:"Revenue",spend:"Meta Ads Spend",profit:"Profit",ticketAvg:"Average Ticket",margin:"Profit Margin",roas:"ROAS",leads:"Leads",sales:"Sales",conversionRate:"Conversion Rate",costPerSale:"Cost per Sale",costPerConversation:"Cost per Conversation",expenses:"Fees & Expenses"},viewToggle:{label:"View metrics from:",metaLabel:"Meta Ads",systemLabel:"System (detected)"},salesChart:{salesInPeriod:"{{count}}
521 sales in the period",tooltipSales_one:"{{count}} sale",tooltipSales_other:"{{count}} sales"},periodChart:{heading:"Sales and Revenue by Period",noMetaDailyData:`Meta didn't return daily data for this period. Try syncing or switch to the "System (detected)" view.`},coverage:{none:"No synced data for this period â the Meta figures below are zeroed until a sync brings something in.",syncing:"Syncing this period's data with Metaâ¦",partial:"Partial coverage: {{covered}} of {{total}} day(s) synced for this period. The Meta figures below may be incomplete."},instanceChart:{heading:"Sales by Instance",empty:"No sales with an identified instance in the period",unknownInstance:"No instance"},hourChart:{heading:"Sales by hour",empty:"No sales in the period"},geographyChart:{heading:"Sales by location",byCountry:"Countries",byState:"States (BR)",empty:"No sales with an identifiable phone number in the period"},othersLabel:"Others",systemOnlyCaption:"Based on sales detected by the system â Meta doesn't provide this detail.",salesHistory:{heading:"Sales history",subtitle:"Sales detected by the system in the selected period",unknownInstance:"No instance",unknownClient:"No name",exportCsv:"Export CSV",empty:"No sales recorded in this period's history",openConversation:"Open conversation",conversationUnavailable:"Conversation not found",columns:{instance:"Instance",instanceNumber:"Instance #",leadNumber:"Lead #",client:"Client (Name)",date:"Date",value:"Value",actions:"Actions"}},expensesCard:{breakdownTitle:"Period breakdown",empty:"No active fees or expenses",totalLabel:"Total"},expenseRules:{triggerButton:"Configure fees & expenses",dialogTitle:"Fees & expenses",formHeadingAdd:"New rule",formHeadingEdit:"Edit rule",listHeading:"Registered rules",empty:"No fees or expenses registered",emptyHint:"Register your first fee or expense above",kindFixed:"Fixed (R$)",kindPercentage:"Percentage (%)",appliesToSpend:"Ad Spend",appliesToRevenue:"Revenue",appliesToProfitBeforeFees:"Profit before fees",periodicityDaily:"Daily",periodicityWeekly:"Weekly",periodicityMonthly:"Monthly",validitySince:"since {{date}}",validityUntil:"until {{date}}",active:"Active",inactive:"Inactive",edit:"Edit",delete:"Delete",dialog:{nameLabel:"Name",namePlaceholder:"E.g.: Meta tax",kindLabel:"Type",valueLabelFixed:"Value (R$)",valueLabelPercentage:"Percentage (%)",appliesToLabel:"Applies to",periodicityLabel:"Periodicity",startDateLabel:"Start date",endDateLabel:"End date",endDateHint:"Leave blank for an indefinite validity period",activeLabel:"Active",addButton:"Add",saveButton:"Save changes",cancelEdit:"Cancel edit"},toasts:{created:"Fee/expense created",updated:"Fee/expense updated",deleted:"Fee/expense removed",errorLoading:"Error loading fees and expenses",errorSaving:"Error saving",errorDeleting:"Error removing",confirmDelete:'Remove "{{name}}"?',fillRequiredFields:"Please fill in all required fields",invalidDateRange:"End date can't be before the start date"}}},A3={title:"Campaigns",subtitle:"Manage your ad campaigns",updatedAt:"Updated {{date}}",syncing:"Syncing...",rename:"Rename",onOff:"On/Off",columnsButton:"Columns",campaignCount_one:"{{count}} campaign",campaignCount_other:"{{count}} campaigns",reachFetchError:"Error fetching reach",search:{account:"Search account...",campaign:"Search campaign...",adset:"Search ad set...",ad:"Search ad..."},dateFilter:{periodPlaceholder:"Period",today:"Today",yesterday:"Yesterday",last7Days:"Last 7 days",last30Days:"Last 30 days",thisMonth:"This month",specificDate:"Specific date",select:"Select"},accountFilter:{allAccounts:"All accounts",selectedAccounts_one:"{{count}} account selected",selectedAccounts_other:"{{count}} accounts selected"},bulkActions:{selectedCount_one:"{{count}} selected",selectedCount_other:"{{count}} selected",pause:"Pause",changeBudget:"Change Budget",openInManagerTooltip:"Open in Meta Ads Manager",openInManager:"Open in Manager"},dynamicLabel:{adsetsFromCampaigns_one:"Ad sets from {{count}} campaign",adsetsFromCampaigns_other:"Ad sets from {{count}} campaigns",adsFromAdsets_one:"Ads from {{count}} ad set",adsFromAdsets_other:"Ads from {{count}} ad sets",adsFromCampaigns_one:"Ads from {{count}} campaign",adsFromCampaigns_other:"Ads from {{count}} campaigns"},empty:{accounts:"No ad accounts found",campaigns:"No campaigns found",adsets:"No ad sets found",ads:"No ads found",connectAccountHint:"Connect a Facebook account in Settings to get started.",syncHint:"Click sync to fetch data from Facebook"},status:{active:"Active",paused:"Paused"},delivery:{active:"Delivering",paused:"Paused",inactive:"Inactive"},accountStatus:{active:"Active",disabled:"Disabled",unpaid:"Unpaid",underReview:"Under review",pending:"Pending",closed:"Closed",statusN:"Status {{status}}"},editBudgetDialog:{title:"Edit Daily Budget",newBudgetLabel:"New Budget (R$)"},bulkBudgetDialog:{title:"Bulk Change Budget",updatingCount_one:"Changing budget for {{count}} item",updatingCount_other:"Changing budget for {{count}} items",newBudgetLabel:"New Daily Budget (R$)",applyToAll:"Apply to All"},renameDialog:{titleCampaign:"Rename campaign",titleAdset:"Rename ad set",titleAd:"Rename ad",newNameLabel:"New name",newNamePlaceholder:"Type the new name"},toasts:{sessionExpired:"Session expired. Please log in again.",synced:"Data synced!",syncPartial:"Partial sync: one or more levels failed. Displayed data may be incomplete.",errorSyncing:"Error syncing",campaignActivated:"Campaign activated!",campaignPaused:"Campaign paused!",adsetActivated:"Ad set activated!",adsetPaused:"Ad set paused!",adActivated:"Ad activated!",adPaused:"Ad paused!",errorTogglingStatus:"Error changing status",bulkActivated_one:"{{count}} item activated",bulkActivated_other:"{{count}} items activated",bulkPaused_one:"{{count}} item paused",bulkPaused_other:"{{count}} items paused",errorTogglingItems:"Error changing items",budgetUpdated:"Budget updated!",errorUpdatingBudgets:"Error updating budgets",errorUpdatingBudget:"Error updating budget",managerAccountNotFound:"Could not identify the manager account.",popupBlocked:"The browser blocked the popup. Allow pop-ups for this site.",invalidName:"Enter a valid name",nameUpdated:"Name updated!",errorRenaming:"Error renaming",fillRequiredFields:"Fill in all required fields",campaignCreated:"Campaign(s) created successfully!",errorCreatingCampaign:"Error creating campaign"}},E3={title:"Smart Alerts",subtitle:"Get alerts about your ads and WhatsApp numbers",alertsHeading:"Alerts",empty:"No alerts right now",types:{adRejected:"Ad Rejected",accountRestricted:"Account Restricted",paymentFailed:"Payment Failed",numberDown:"Number Down"},numbersForAlerts:{heading:"Numbers for Alerts",dialogTitle:"Add Number for Alerts",phoneLabel:"WhatsApp Number",nicknameLabel:"Nickname (optional)",nicknamePlaceholder:"My WhatsApp",empty:"Add a number to receive alerts"},monitoredNumbers:{heading:"Monitored Numbers",empty:"Set up numbers in the WhatsApp Tracker",online:"Online",offline:"Offline"},toasts:{numberAdded:"Number added!",numberAlreadyRegistered:"Number already registered",errorAdding:"Error adding",numberRemoved:"Number removed",errorRemoving:"Error removing number"}},S3={title:"Billing",checking:"Checking...",checkNow:"Check now",filterLabel:"Filter:",filterPending:"Pending only",filterAll:"All",status:{active:"Active",disabled:"Disabled",pastDue:"Past due",underReview:"Under review",paused:"Paused",grace:"Grace peri
521od",closed:"Closed"},summary:{totalDebtLabel:"Total outstanding balance:",accountsWithIssue_one:"{{count}} account with an issue",accountsWithIssue_other:"{{count}} accounts with an issue",noPendingAccounts:"No accounts with pending issues detected"},table:{account:"Account",status:"Status",linkedCard:"Linked card",debtBalance:"Outstanding balance",action:"Action",emptyPending:"No accounts with pending issues. All clear here â¨",emptyAll:"No ad account selected.",unavailable:"Unavailable",unavailableTooltip:"Facebook doesn't expose the exact balance for this account via API",spentInCycle:"(spent this cycle: {{value}})",clickToPayTooltip:"Click Pay to see the amount in the Manager.",pay:"Pay",payTooltipLine1:"Opens the Ads Manager to pay with the payment method registered on Facebook.",payTooltipLine2:"It's not possible to charge via ZapData â Facebook doesn't expose an API for that."},toasts:{errorLoading:"Error loading accounts: {{message}}",updated:"Accounts updated successfully",errorChecking:"Error checking: {{message}}",unknownError:"unknown error"}},N3={title:"Settings",subtitle:"Manage your Facebook connections",accountStatus:{active:"Active",disabled:"Disabled",unverified:"Unverified",pending:"Pending",statusN:"Status {{status}}"},facebookAccounts:{heading:"Facebook Accounts",description:"Connect your Facebook account to access ad data",chooseMethod:"Choose how to connect: sign in using the popup here or create a link to open in another browser or computer.",popupButton:"Open Facebook popup",linkButton:"Create link for another device",copyButton:"Copy link",linkHint:"Open this link in another browser or computer. It connects Facebook to this ZapData account, expires in 30 minutes and can only be used once. The list refreshes automatically.",popupBlocked:"Popup blocked. Use the link below or allow popups.",linkCopied:"Link copied!",copyManually:"Select the link and copy it manually.",connectButton:"Connect Facebook",empty:"No account connected",emptyHint:"Connect your Facebook account to get started",defaultAccountName:"Facebook Account",syncing:"Syncing...",syncAccountsButton:"Sync Accounts",adAccountsHeading:"Ad Accounts ({{count}})",idLabel:"ID: {{id}} ⢠{{currency}}",syncHint:'Click "Sync Accounts" to fetch your ad accounts'},instructions:{heading:"Setup Instructions",step1:'1. Click "Connect Facebook" to authorize access to your account.',step2:'2. After connecting, click "Sync Accounts" to fetch your ad accounts.',step3:"3. Activate the accounts you want to monitor using the toggle.",step4:"4. Campaign data will sync automatically."},toasts:{sessionExpired:"Session expired",sessionExpiredDescription:"Please log in again and try connecting Facebook.",loginAgain:"Please log in again.",errorConnectingFacebook:"Error connecting to Facebook",accountDisconnected:"Account disconnected",errorDisconnecting:"Error disconnecting",errorUpdating:"Error updating",adAccountsSynced:"Ad accounts synced!",errorSyncing:"Error syncing"}},k3={layout:y3,viewLevels:x3,columnsCatalog:w3,columnCustomizer:C3,dashboard:P3,campaigns:A3,alerts:E3,billing:S3,settings:N3},T3={title:"Affiliate Dashboard"},I3={requestWithdrawal:"Request Withdrawal"},R3={title:"Become an Affiliate",description:"Generate your referral link and earn commissions on deposits from users who sign up through your link.",generateLink:"Generate My Affiliate Link"},D3={today:"Today",sevenDays:"7 days",thirtyDays:"30 days",custom:"Custom",from:"From",to:"To",until:"to"},M3={salesCompleted:"Sales Completed",salesInPeriod_one:"{{count}} sale in the period",salesInPeriod_other:"{{count}} sales in the period",directCommission:"Direct Commission",commissionRate:"Commission: {{rate}}%",subCommission:"Sub Commission",signups:"Signups",totalOverall:"Overall total: {{count}}",mrrForecast:"Forecasted MRR",activeSubscriptions_one:"{{count}} active subscription",activeSubscriptions_other:"{{count}} active subscriptions",availableBalance:"Available Balance",totalAccumulated:"Total accumulated: {{value}}",negativeBalanceWarning:"Balance to settle: this amount will be automatically deducted from upcoming commissions before new withdrawals are released."},F3={title:"Sales by Day",noData:"No data for the selected period",sales:"Sales",commission:"Commission"},L3={affiliateLink:"Affiliate Link",trialLink:"Free Trial Link (7 days)"}
521,j3={title:"Referred Subscriptions",found_one:"{{count}} subscription found",found_other:"{{count}} subscriptions found",searchPlaceholder:"Search user...",columns:{user:"User",plan:"Plan",status:"Status",since:"Since",dueDate:"Due date"},status:{active:"Active",canceled:"Canceled",expired:"Expired",pastDue:"Past due",incomplete:"Incomplete"},willCancel:" (will cancel)"},_3={title:"History",onlyDepositors:"Subscribers Only",searchPlaceholder:"Search user...",filters:{all:"All",pix:"PIX",card:"Card"},sortByDate:"Sort by Date",sortByRelease:"Sort by Release",columns:{user:"User",type:"Type",amount:"Amount",date:"Date",status:"Status"},empty:"No records found",types:{indirect:"Indirect",referral:"Referral",withdrawal:"Withdrawal"},badges:{freeTrial:"Free Trial",card:"Card",pix:"PIX"},withdrawalStatus:{approved:"Approved",rejected:"Rejected",pending:"Pending"},commissionPending:"Pending",releasesOn:"Releases on {{date}}",released:"Released",withdrawalRequested:"Withdrawal requested - {{name}}",affiliateFallback:"Affiliate"},O3={pageInfo:"Page {{page}} of {{total}} ({{count}} records)",previous:"Previous",next:"Next"},B3={title:"Request Withdrawal",availableBalance:"Available balance",pixKeyLabel:"PIX Key",pixKeyPlaceholder:"CPF, email, phone, or random key",amountLabel:"Withdrawal Amount (R$)",amountPlaceholder:"Minimum R$ 50.00",minAmountLabel:"Minimum withdrawal amount:",paymentDeadlineLabel:"Payment deadline:",paymentDeadlineSuffix:"after the request."},z3={linkGeneratedTitle:"Success",linkGeneratedDescription:"Your affiliate link was generated!",errorTitle:"Error",linkCopiedTitle:"Copied!",linkCopiedDescription:"Link copied to clipboard",trialLinkCopiedTitle:"Copied!",trialLinkCopiedDescription:"Free Trial link copied to clipboard",invalidAmountTitle:"Invalid amount",invalidAmountDescription:"Enter a valid amount",minAmountTitle:"Minimum amount",minAmountDescription:"The minimum withdrawal is R$ 50.00",insufficientBalanceTitle:"Insufficient balance",insufficientBalanceDescription:"You don't have enough balance",withdrawErrorDescription:"Error requesting withdrawal",withdrawRequestedTitle:"Request sent!",withdrawRequestedDescription:"Your withdrawal will be processed shortly"},V3={conversionRate:"Conversion rate: {{rate}}"},q3={panel:"ð Affiliate Panel",cta:"ð¥ Earn 20% commission!"},U3={dashboard:T3,actions:I3,becomeAffiliate:R3,period:D3,metrics:M3,chart:F3,links:L3,subscriptions:j3,history:_3,pagination:O3,withdrawModal:B3,toasts:z3,funnel:V3,widget:q3},W3="Notification",$3={tabs:{notifications:"Notifications",news:"What's new"},empty:{title:"No notifications",description:"Turn on desktop notifications to get real-time alerts.",enableButton:"Enable notifications"},blogEmpty:"Nothing new yet"},G3={dismiss:"Dismiss notification"},H3={novidade:"New",melhoria:"Improvement",correcao:"Fix",manutencao:"Maintenance",aviso:"Notice"},K3={iconAlt:W3,center:$3,banner:G3,blogCategories:H3},X3={previewText:"This is the selected voice, do you like it?",pageTitle:"ðï¸ Audio Generator",pageSubtitle:"Turn text into audio with realistic voices",configTitle:"Audio Settings",configDescription:"Enter the text and choose the voice you want",noKeyWarning:"No ElevenLabs key connected. Connect your own key to create voices and generate audio â generation uses your account, with no credit charges.",connectKeyLink:"Connect ElevenLabs key â",customVoicesLabel:"Custom Voices",addVoiceButton:"Add Voice",createVoiceTitle:"Create Custom Voice",createVoiceDescription:"Upload an audio file to clone the voice. Use recordings between 30 seconds and 5 minutes for best results.",whatsappWarning:"<0>â ï¸ Heads up with WhatsApp audio:</0> voice messages recorded directly in the app (PTT) may come in <1>.opus</1> format and fail. For best results, send the audio as a <2>document</2> on WhatsApp or convert it to standard MP3 (44.1kHz) first.",voiceNameLabel:"Voice Name",voiceNamePlaceholder:"e.g.: My Voice, Narrator, etc...",audioFileLabel:"Audio File",selectedFileLabel:"Selected: {{fileName}}",creatingVoice:"Creating voice...",createVoiceButton:"Create Voice",noCustomVoices:'No custom voice created yet. Click "Add Voice" to create one.',orChooseReady:"or choose a ready-made voice",availableV
521oicesLabel:"Available Voices",choosePlaceholder:"Choose a voice...",customVoiceGroupLabel:"â Custom Voice",reclonarSuffix:" â re-clone",testVoiceTitle:"Test voice",deleteVoiceTitle:"Delete voice",noVoicesRegistered:"No voices registered.",clickAddVoiceToCreate:'Click "Add Voice" to create yours.',categoryWoman:"ð© Woman",categoryMan:"ð¨ Man",categoryChild:"ð¶ Child",categoryBonus:"ð Bonus",clickToTestSelected:"Click the button next to it to test the selected voice",voiceModelLabel:"Voice model",voiceLanguageLabel:"Voice language",autoDetectLanguageNote:"This model automatically detects the language from the text.",textToConvertLabel:"Text to Convert",textPlaceholder:"Type or paste the text you want to turn into audio...",charCount:"{{count}}/{{max}} characters",generatingAudio:"Generating audio...",generateAudioButton:"Generate Audio",generatedAudioTitle:"Generated Audio",fromCacheBadge:"â¡ from cache (24h)",pauseButton:"Pause",playButton:"Play",downloadMp3Button:"Download MP3",deleteVoiceDialogTitle:"Delete custom voice",deleteVoiceDialogDescription:'Are you sure you want to delete the voice "{{voiceName}}"? This action cannot be undone.',toastInvalidFormatTitle:"Invalid format",toastInvalidFormatDescription:"Please select an audio file (MP3, WAV, or M4A).",toastFileTooSmallTitle:"File too small",toastFileTooSmallDescription:"The file appears to be corrupted or empty. Use a recording of at least 30 seconds.",toastFileTooBigTitle:"File too large",toastFileTooBigDescription:"The file must be at most 10MB. Try reducing the quality or trimming the audio.",toastErrorTitle:"Error",toastFillVoiceNameAndFile:"Please fill in the voice name and select an audio file.",toastNeedLoginCreateVoice:"You need to be logged in to create custom voices.",toastDefaultErrorCreatingVoice:"Error creating custom voice.",toastSuccessTitle:"Success!",toastVoiceCreatedSuccess:'Voice "{{voiceName}}" created successfully!',toastNeedLoginGeneric:"You need to be logged in.",toastDefaultErrorDeletingVoice:"Error deleting voice",toastVoiceDeletedSuccess:'Voice "{{voiceName}}" deleted successfully.',toastErrorDeletingVoiceDescription:"Error deleting voice.",toastErrorGeneratingPreview:"Could not generate the voice preview.",toastEnterTextToGenerate:"Please enter text to generate the audio.",toastSelectAVoice:"Please select a voice.",toastKeyRequiredTitle:"ElevenLabs key required",toastKeyRequiredDescription:"Connect your key in Settings â ElevenLabs Integration before generating audio.",toastSuccessTitleShort:"Success",toastAudioFromCacheDescription:"Audio retrieved from cache (generated in the last 24h, same voice/model/language/text).",toastAudioGeneratedSuccess:"Audio generated successfully!",toastErrorGeneratingAudio:"Error generating audio."},Y3={pageTitle:"ð Audio and Video Transcription",pageSubtitle:"Automatically convert audio and video into text",cardTitle:"Upload Audio or Video",cardDescription:"Accepted formats: MP3, OGG, OPUS (audio) and MP4 (video) â max. {{minutes}} minutes / {{sizeMb}}MB",loadingIntegrationStatus:"Loading integration statusâ¦",noKeyConnected:"No key connected to the Platform AI Integration. Without it, this tool cannot transcribe.",connectNowLink:"Connect now â",providerNotSupported:"This key's provider ({{provider}}) does not support audio or video transcription.",chooseAnotherKey:" Choose another key below (OpenAI or Gemini).",connectOpenAiOrGemini:" Connect an OpenAI or Gemini key in Settings â Platform AI Integration.",manageLink:"Manage â",usingKey:"Using {{keyLabel}} ({{provider}}).",yourKey:"your key",connectedKeyLabel:"Connected key",noNickname:"(no nickname)",defaultSuffix:" (default)",transcriptionModelLabel:"Transcription model",selectModelPlaceholder:"Select the model...",transcribing:"Transcribing...",uploadPrompt:"Click to upload an audio or video file (MP4)",orDragAndDrop:"or drag and drop here",transcriptionHeading:"Transcription",newAudioButton:"New Audio",copiedButton:"Copied",copyButton:"Copy",charCount:"{{count}} characters",toastUnsupportedFormatTitle:"Unsupported format",toastUnsupportedFormatDescription:"Please send MP3, OGG, OPUS (audio), or MP4 (video) files.",toastFileTooBigTitle:"File too large",toastFileTooBigDescription:"The file must be at most {{maxSizeMb}}MB.",toastSuccessTitle:"Success",toastTranscribedSuccess:"Audio transcribed successfully!",toastErrorTitle:"Error",toastDefaultTranscribeError:"Error transcribing audio.",toastCopiedTitle:"Copied!",toastCopiedDescription:"Text copied to clipboard.",toastCopyErrorDescription:"Could not copy the text."},Q3={backButton:"Back",chromeWebStoreBadge:"Chrome Web Store",forZapdataCustomersBadge:"For Zapdata customers",pageTitle:"WhatsApp Ads Extension",heroDescription:"Find, filter, and save WhatsApp ads directly in the Facebook Ad Library â the save button appears right on the ad, without leaving the page.",addToChromeButton:"Add to Chrome",oneClickInstall:"Straight from the Chrome Web Store · 1-click install",saveOfferBadge:"Save Offer",mockupCaption:"This button appears automatically on every ad in the Ad Library",featureFilterTitle:"WhatsApp filter",featureFilterDescription:"Turn on the extension's filter to see only WhatsApp-related ads in the Ad Library.",featureBulkSelectTitle:"Bulk selection",featureBulkSelectDescription:"Select several ads at once and save them all together, without repeating the process one by one.",featureSaveTitle:"Save in seconds",featureSaveDescription:"Click the button that appears on each ad, give the offer a name, and it's saved instantly.",featureTrackOfertasTitle:"Straight into Track Ofertas",featureTrackOfertasDescription:"Every saved offer is automatically organized in Track Ofertas â the Zapdata area where you track your saved offers.",installStep1Title:'Click "Add to Chrome"',installStep1Description:"You're taken straight to the Chrome Web Store, where the extension is officially published.",installStep2Title:'Confirm "Add extension"',installStep2Description:"Chrome asks for a quick confirmation. After that, the icon already shows up in the toolbar â no settings to touch.",tabInstall:"How to install",tabUse:"How to use",useStep1:"Once installed, open the <link>Facebook Ad Library <icon/></link> and log in with your Zapdata account when the extension asks.",useStep2:'A <strong>"Save Offer"</strong> button appears on every ad card. Click it, give the offer a name, and it drops right into your Track Ofertas, already organized.',useStep3:"You can also select several ads at once and save them all in one go, straight from the extension â no need to repeat the process ad by ad.",useStep4:"Use the extension's filters to
521show only WhatsApp-related ads and ignore the rest of the library.",faqHeading:"Frequently asked questions",faqFreeQuestion:"Is the extension free?",faqFreeAnswer:"Yes, for anyone with a Zapdata account. The login it asks for is your Zapdata account, to connect your saved offers to your Track Ofertas.",faqWhereSavedQuestion:"Where do the offers I save end up?",faqWhereSavedAnswer:"Straight into your Zapdata account, inside Track Ofertas â they aren't just stored in the browser, so you can access them from any computer.",faqUpdatesQuestion:"Do I need to reinstall it when an update comes out?",faqUpdatesAnswer:"No. Since it comes from the Chrome Web Store, Chrome itself updates the extension automatically whenever a new version is released â you don't need to do anything."},Z3={pageHeading:"Keyword Generator",pageDescription:"Find the best keywords to spot WhatsApp ads in the ads manager",inputPlaceholder:"Ask about keywords for your niche...",generatingKeywords:"Generating keywords...",copiedToast:"Copied! ð¥",copyErrorToast:"Error copying",genericErrorMessage:"Sorry, there was an error processing your message. Please try again.",quickActionReligion:"Religion",quickActionCraft:"Crafts",quickActionRecipes:"Recipes",quickActionEducation:"Education",quickActionReligionPrompt:"Give me keywords for the religious products niche",quickActionCraftPrompt:"I need keywords for crafts and crochet ads",quickActionRecipesPrompt:"Suggest keywords for recipe and baking ads",quickActionEducationPrompt:"I want keywords for course and mentorship ads",featureModalName:"Keyword Generator"},J3={pageTitle:"Hash Cleaner",pageDescription:"Remove metadata and change the hash of images and videos to avoid duplicate detection by Facebook.",loaderText:"Cleaning file hashes...",filesCardTitle:"Files",filesCardDescription:"Drag or select images and videos",clearAllButton:"Clear All",dropZonePrompt:"Click or drag files here",dropZoneFormats:"JPG, PNG, WEBP, MP4, WEBM, MOV",processingLabel:"Processing...",hashLabel:"Hash:",statusPending:"Pending",statusProcessing:"Processing",statusReady:"Ready",statusError:"Error",processedCount:"{{processed}} of {{total}} processed",cleanHashButton:"Clean Hash",downloadAllButton:"Download All ({{count}})",emptyState:"No file added yet",infoMetadataTitle:"Metadata Removal",infoMetadataDescription:"Removes EXIF, XMP, IPTC, and other metadata that could identify the file's origin.",infoHashTitle:"Hash Change",infoHashDescription:"Imperceptibly modifies pixels/bytes to generate a completely new hash.",infoClientSideTitle:"100% Client-Side",infoClientSideDescription:"All processing happens in your browser. Your files are never sent to any server.",toastUnsupportedFormat:"Unsupported format: {{fileName}}",toastFilesAdded:"{{count}} file(s) added",toastAddFilesFirst:"Add files first",toastProcessError:"Error processing: {{fileName}}",toastProcessingComplete:"Processing complete!",toastNoProcessedFiles:"No processed file to download",toastZipDownloaded:"ZIP downloaded successfully!"},e4={pageTitle:"WhatsApp Number Management",pageSubtitle:"Manage your WhatsApp chips and numbers",totalLabel:"Total",statusActivePlural:"Active",statusInactivePlural:"Inactive",statusAnalysisPlural:"In Review",statusLostPlural:"Lost",statusRelogarPlural:"Re-login",tabAll:"All",exportButton:"Export",addChipButton:"Add Chip",searchPlaceholder:"Search by name, app, or number...",clearSearchAriaLabel:"Clear search",noResultsForSearch:"No chip found for this search.",noChipsInFilter:"No chips in this filter.",noChipsRegistered:"No chips registered.",colName:"Name",colStatus:"Status",colApp:"App",colNumber:"Number",colChipId:"Chip ID",colCreatedAt:"Created at",colStatusSince:"Status since",colTimeInStatus:"Time in status",colObservations:"Notes",colActions:"Actions",csvHeaderName:"Name",csvHeaderStatus:"Status",csvHeaderApp:"App",csvHeaderNumber:"Number",csvHeaderChipId:"Chip ID",csvHeaderCreatedAt:"Created at",csvHeaderStatusSince:"Status since",csvHeaderObservations:"Notes",confirmRemoveChip:"Remove this chip?",toastLoadChipsError:"Error loading chips",toastSaveChipError:"Error saving chip",toastChipUpdated:"Chip updated!",toastAddChipError:"Error adding chip",toastChipAdded:"Chip added!",toastRemoveError:"Error removing",toastChipRemoved:"Chip removed!"},t4={delayUnitSeconds:"{{count}} seconds",delayUnitMinute:"{{count}} minute",delayUnitMinutes:"{{count}} minutes",delayUnitMinSec:"{{minutes}}min {{seconds}}s",pageSubtitle:"Blast flows in bulk ⢠Today's quota: {{used}}/{{limit}}",connectedInstancesSuffix:" ({{count}} instance{{plural}} connected)",newCampaignButton:"New Campaign",createCampaignDialogTitle:"Create New Campaign",campaignNameLabel:"Campaign Name",campaignNamePlaceholder:"e.g.: Black Friday 2026",flowToDispatchLabel:"Flow to dispatch",chooseActiveFlowPlaceholder:"Choose an active flow...",noActiveFlow:"No active flow",flowStartNote:"The flow will be started for each number on the list, exactly as with automatic dispatches.",phoneNumbersLabel:"Phone Numbers",downloadTemplateButton:"Download template",manualTab:"Manual",fileTab:"File",ph
521oneNumbersPlaceholder:`Paste the numbers (one per line) 522e.g.: 5511999999999 5235521988888888`,fileUploadNote:'Accepts .csv or .txt (one number per line). A "phone" header is ignored.',validNumbersCount:"{{count}} valid numbers ⢠max {{max}} per campaign",validatingButton:"Validating...",validateNumbersButton:"Validate Numbers",validCount:"{{count}} valid",invalidCount:"{{count}} invalid",keepOnlyValidButton:"Keep only valid ones",instancesToSendLabel:"Instances to send from",noInstanceConnected:"No number connected.",noNumberFallback:"No number",connectedBadge:"Connected",selectedCount:"{{count}} selected",delayBetweenDispatchesLabel:"Delay between dispatches (seconds)",approxDelay:"â {{delay}}",delayRecommendationNote:"Minimum {{min}}s, maximum {{max}}s (30min). Recommended: <strong>8s</strong> for low volume, <strong>60-300s (1-5min)</strong> for 1k+ contacts, <strong>600-1800s (10-30min)</strong> for 5k+ contacts. Spacing more reduces the risk of the number getting blocked.",alternateInstanceLabel:"How many numbers before switching instance",alternateEveryDispatch:"1 (switches every dispatch)",alternateNote:"Distributes dispatches across the selected instances.",createCampaignButton:"Create Campaign",connectedNumbersDialogTitle:"Connected Numbers",noNumberConnectedDialog:"No number connected",connectNumberButton:"Connect Number",manageNumbersButton:"Manage Numbers",statCampaigns:"Campaigns",statSent:"Sent",statFailed:"Failed",statInstances:"Instances",noCampaignsFound:"No campaign found",createFirstCampaign:"Create your first campaign",createdOn:"Created on {{date}}",progressLabel:"Progress",inProgressLabel:"In progress",totalLabel:"Total",flowBadge:"Flow",flowRunningBadge:"Flow running",instanceDisconnectedWarning:`This campaign's instance is disconnected. Pending dispatches will resume on their own once it reconnects, or click "Check connection".`,startButton:"Start",checkConnectionButton:"Check connection",pauseButton:"Pause",stopButton:"Stop",resumeButton:"Resume",completedButton:"Completed",endedButton:"Ended",viewMessagesTitle:"View messages",deleteCampaignDialogTitle:"Delete Campaign",actionCannotBeUndone:"This action cannot be undone.",stopCampaignDialogTitle:"Stop Campaign",stopCampaignDialogDescription:"This will end the campaign and cancel all flow sessions in progress. It cannot be resumed afterward.",stopCampaignButton:"Stop campaign",sentMessagesDialogTitle:"Sent Messages",noLogsFound:"No log found",statusDisconnectedBadge:"Instance disconnected",statusDraft:"Draft",statusSending:"Sending",statusPaused:"Paused",statusCompleted:"Completed",statusCancelled:"Ended",toastLoadCampaignsError:"Error loading campaigns",toastFileLoaded:"File loaded: {{fileName}}",toastSelectInstanceToValidate:"Select an instance to validate",toastAddNumbersToValidate:"Add numbers to validate",toastValidationLimit:"Limit of 100 numbers per validation",toastInstanceTokenNotFound:"Instance token not found.",toastUazapiConfigNotFound:"UAZAPI config not found",toastValidationError:"Validation error",toastValidationResult:"{{valid}} valid, {{invalid}} invalid",toastValidateError:"Error validating: {{message}}",toastOnlyValidKept:"Kept only the valid ones",toastEnterName:"Enter a name",toastSelectFlow:"Select a flow",toastAddValidNumber:"Add at least one valid number",toastMaxContacts:"Maximum of {{max}} contacts per campaign",toastSelectInstance:"Select at least one instance",toastMinDelay:"Minimum delay: {{min}}s",toastMaxDelay:"Maximum delay: {{max}}s",toastQuotaExceeded:"Daily quota exceeded. You used {{used}}/{{limit}} in the last 24h ({{instanceCount}} instance{{plural}} connected à {{perInstance}}). Connect more numbers to raise your quota.",toastCreateCampaignError:"Error creating campaign: {{message}}",toastCampaignCreated:"Campaign created!",toastStartedCampaign:"Campaign started!",toastPausedCampaign:"Campaign paused",toastResumedCampaign:"Campaign resumed",toastEndedCampaign:"Campaign ended",toastActionError:"Error: {{message}}",toastGenericError:"An error occurred.",toastStillDisconnected:"Instance still disconnected. Reconnect the number and try again.",toastReconnected:"Instance reconnected! Resuming pending dispatches.",toastCheckConnectionError:"Error checking connection: {{message}}",toastDeleteError:"Error deleting",toastCampaignDeleted:"Campaign deleted"},a4={campaignStatus:{draft:"Draft",queued:"Queued",running:"Running",paused:"Paused",awaitingDelivery:"Awaiting delivery",completed:"Completed",cancelled:"Cancelled",failed:"Failed"},metaErrorReasons:{0:"Generic Meta error. Try again in a few minutes.",3:"Insufficient API permission â review the WhatsApp Business access token.",10:"Permission denied by Meta for this account.",100:"Invalid parameter in the request sent to Meta.",190:"Access token expired or invalid. Reconnect WhatsApp Business.",200:"Missing Meta permission to send messages.",368:"Account temporarily blocked by Meta for policy violation.",1006:"Connection to Meta lost. Try again.",130429:"Meta's per-second sending limit reached (rate limit). Wait a few minutes.",131e3:"Generic WhatsApp error processing the message.",13100
5235:"Access denied by Meta for this operation.",131008:"Required parameter missing in the message.",131009:"Invalid parameter value in the message.",131016:"Meta service temporarily unavailable.",131021:"Could not send message to yourself (sender = recipient).",131026:"Recipient doesn't have WhatsApp or can't receive messages right now.",131031:"Account blocked by Meta. Check the number's status in Business Manager.",131042:"Meta payment failure. Check that a valid payment method is set up in WhatsApp Business and the invoice is up to date.",131045:"Template not approved or mismatched â check whether the template is still approved by Meta.",131047:"24h window expired â the recipient hasn't interacted in the last 24h, so only templates can be sent.",131048:"Meta's anti-spam limit reached. Slow down the sending pace.",131049:"Message not delivered due to the number's quality restrictions.",131050:"User opted out of receiving messages from this number.",131051:"Unsupported message type.",131052:"Failed to download the message's media.",131053:"Failed to upload media to Meta.",131056:"Conversation pair limit (number pair) reached on Meta. Wait.",131057:"Account in maintenance mode by Meta.",132e3:"Template has the wrong number of parameters.",132001:"Template doesn't exist or was deleted on Meta.",132005:"The template's translated text exceeds the allowed length.",132007:"The template's category was changed by Meta â reapproval required.",132012:"Invalid template parameter format.",132015:"Template paused by Meta due to low quality.",132016:"Template disabled by Meta due to low quality.",132068:"Template in a flow paused by Meta.",132069:"Template in a flow blocked by Meta.",133e3:"Failed to register the number in the Cloud API.",133004:"Meta server temporarily unavailable.",133005:"Incorrect two-step verification PIN.",133006:"Need to re-verify the number on Meta.",133008:"Too many PIN attempts â wait before trying again.",133009:"PIN blocked due to too many attempts.",135e3:"Generic failure processing the message on Meta."},metaErrorFallback:"Meta error {{code}} (no mapped description).",metaErrorNoCode:"Failure flagged by Meta without a code.",metaLanguages:{ptBR:"Portuguese (Brazil)",ptPT:"Portuguese (Portugal)",enUS:"English (US)",enGB:"English (UK)",esES:"Spanish (Spain)",esMX:"Spanish (Mexico)",esAR:"Spanish (Argentina)",frFR:"French",itIT:"Italian",de:"German"},tierNotSynced:"Not synced",tier50:"50 / 24h",tier250:"250 / 24h",tier1k:"1,000 / 24h",tier10k:"10,000 / 24h",tier100k:"100,000 / 24h",tierUnlimited:"Unlimited",toastSyncTemplatesSuccess:"Sync complete â {{count}} template(s) updated.",toastSyncError:"Error syncing",toastSyncNumbersSuccess:"Numbers synced â {{added}} new, {{updated}} updated.",toastSyncNumbersPartial:"{{count}} synced, {{problems}} with issues",toastSyncNumbersPartialDesc:"Main reason: {{reason}}. See details on each card.",toastOrphanNotFound:"number not found on Meta",toastCheckToken:"check the token",toastSyncNumbersError:"Error syncing numbers",toastCampaignDeletedShort:"Campaign deleted",copyOf:"Copy of {{name}}",toastDuplicateError:"Error duplicating",toastLoadCampaignError:"Failed to load campaign",blockReasonNoConnection:"Connect at least 1 official number on WhatsApp Coexistence.",blockReasonNoApprovedTemplate:"Create and wait for approval of at least 1 template.",officialApiSuffix:"(official API)",pageDescription:"Send approved templates via the Meta Cloud API â WhatsApp Coexistence numbers.",createTemplateButton:"Create template",newCampaignButton:"New campaign",officialNumbersTitle:"Available official numbers",officialNumbersDescription:"Numbers connected on WhatsApp Coexistence that can send via the official API.",syncingButton:"Syncing...",syncButton:"Sync",noNumberConnectedYet:"You haven't connected any number yet.",connectNowLink:"Connect now",metaLimitLabel:"Meta limit:",myTemplatesTitle:"My templates",myTemplatesDescription:"All templates in your account with their current status on Meta.",noTemplatesYet:"You don't have any templates yet. Create one from Meta's official library and then click <strong>Sync</strong> to pull in the templates already in your WhatsApp account.",campaignsTitle:"Campaigns",campaignsDescription:"Last 50 campaigns â updates every 5s.",noCampaignsYetShort:"No campaign created yet.",colName:"Name",colStatus:"Status",sendProgressTooltipLabel:"Send progress (Meta)",sendProgressTooltipContent:"Percentage of contacts whose dispatch has already been <strong>sent to Meta</strong> (accepted or rejected by the API). Doesn't reflect actual delivery to the recipient â that shows in the <em>Actual delivery (Meta)</em> column.",sentFailedLabel:"Sent / Failed",sentFailedTooltipContent:"Number of dispatches sent to Meta (accepted by the WhatsApp API). This <strong>doesn't mean</strong> the message has already reached the recipient â actual delivery shows in the <em>Actual delivery (Meta)</em> column.",realDeliveryColumn:"Actual delivery (Meta)",actionsColumn:"Actions",ofTotal:"of {{total}}",successDispatchBadge:"{{count}} successful dispatch{{plural}}",awaitingConfirmationTitle:"Meta accepted it but hasn't confirmed delivery to the recipient yet",awaitingConfirmationBadge:"{{count}} awaiting confirmation",failureBadge:"{{count}} failure{{plural}}",metaReasonLabel:"Reason given by Meta{{codeSuffix}}:",metaReasonCodeSuffix:" (code {{code}})",pauseTitle:"Pause",resumeTitle:"Resume",cancelCampaignTitle:"Cancel",duplicateCampaignTitle:"Duplicate campaign",deleteCampaignTitle:"Delete campaign",deleteCampaignConfirmTitle:"Delete campaign?",deleteCampaignConfirmDescription:"The campaign <strong>{{name}}</strong> and all of its dispatch history will be permanently removed. This action cannot be undone.",apagarButton:"Delete",createTemplateSectionTitle:"Create template",createTemplateSectionDescription:"Create templates from Meta's official library and track review status in real time.",numberPlaceholder:"Number",syncAllButton:"Sync all",createFromMetaButton:"Create from Meta",connectNumberFirstNote:"Connect a number first to manage templates.",noTemplateForNumberNote:'No template created for this number yet. Use "Create from Meta" to get started.',colLanguage:"Language",colCategory:"Category",colLastSync:"Last sync",checkStatusButton:"Check status",toastVerifyFailed:"Failed to check",toastStatusResult:"Status: {{status}}",toastSyncFailed:"Failed to sync",toastSyncedCount:"Synced {{upserted}}/{{total}}",createFromLibraryWizardTitle:"Create a template from Meta's official library",step1NumberTab:"1. Number",step2LibraryTab:"2. Meta Library",step3EditSendTab:"3. Edit and send",selectNumberLabel:"Select the number",publicLibraryTab:"Meta Library (public)",myWabaTab:"From my WhatsApp account",searchPlaceholderGeneric:"Search...",languagePlaceholder:"Language",allLanguages:"All languages",refreshButton:"Refresh",noTemplateInPublicLibrary:"No template found in Meta's public library for this filter.",noTemplateInWaba:"No template found in this WABA. Create one from the public Library.",nameSlugLabel:"Name (unique slug)",slugHintNote:"Lowercase letters, numbers, and _ only.",languageLabel:"Language",selectLanguagePlaceholder:"Select the language",buttonDataLabel:"Template button data",buttonFallback:"Button {{index}}",buttonDataNote:"Meta requires the same number of button entries defined in the library; leave blank to use the default value shown.",buttonUrlRequiredGeneric:"Fill in the button URL to submit this template.",buttonPhoneRequiredGeneric:"Fill in the button phone number to submit this template.",previewLabel:"Preview",templateContentFixedNote:"This template's content is defined by Meta and cannot be changed. Select the desired model and submit it for review.",alreadyInWabaButton:"Already in your WABA",submitForReviewButton:"Submit for review",alreadyInWabaTitle:"This template already exists in your WABA â no need to resubmit it.",errorTokenExpired:"Meta token expired. Reconnect the number on WhatsApp Coexistence.",errorMissingScope:"Token missing whatsapp_business_management permission. Reconnect granting all permissions.",errorForbidden:"This connection doesn't belong to the logged-in user.",errorUnknownMeta:"Unknown Meta error",errorCallingFunction:"Error calling the function.",toastLoadLibraryError:"Error loading library",toastLoadWabaError:"Error loading WABA templates",toastAlreadyExistsInWaba:"This template already exists in your WABA. Use the 'Templates' tab to track its status â no need to resubmit it.",toastTemplateSubmitted:"Template submitted for review (status: {{status}})",toastSubmitTemplateError:"Error submitting template",toastConnectionUnavailable:"The original connection is no longer available. Select another number.",toastTemplateNoLongerApproved:"The original template is no longer approved. Select another template.",newCampaignWizardTitle:"New campaign â DisparaZap (official API)",step2TemplateTab:"2. Template",step3ContactsTab:"3. Contacts & sending",campaignNameLabel:"Campaign name",campaignNamePlaceholder:"e.g.: Black Friday 2026 - cold leads",officialNumberLabel:"Official number",searchNamePlaceholder:"Search by name...",allCategories:"All categories",allLanguagesShort:"All languages",noApprovedTemplateNote:'No APPROVED template found for this number. Create one in the "Create template" section.',contactsListLabel:"Contact list (CSV)",csvInstru
523ctionsNote:"Paste a CSV with a header or upload one. Separator <0>,</0> or <1>;</1>. No header? 1 phone number per line (assumes a <2>phone</2> column).",contactsCsvPlaceholder:`phone,name,product 5245511999999999,John,Course X 5255521988888888,Mary,Course Y`,loadCsvButton:"Load CSV",linesReadCount:"{{count}} line(s) read",columnsSuffix:" · columns: {{columns}}",columnMappingLabel:"Column mapping",phoneColumnLabel:"Phone column *",chooseColumnPlaceholder:"Choose the column",noVariablesNote:"This template has no variables.",urlButtonLabel:"URL button",variableLabel:"Variable",csvColumnOption:"CSV column",fixedValueOption:"Fixed value",chooseColumnPlaceholder2:"Choose column",urlSuffixPlaceholder:"URL suffix (replaces {{token}})",fixedValuePlaceholder:"Fixed value",validContactsCount:"â {{count}} valid contact(s)",invalidContactsSuffix:" · {{count}} skipped (invalid phone)",previewFirstContactLabel:"Preview (1st contact)",delayBetweenSendsLabel:"Delay between sends (s)",jitterLabel:"Random jitter (s)",jitterTooltip:"Random variation added to or subtracted from the base delay to make the sending pace less robotic and more natural. E.g.: with a 5s delay and 2s jitter, each dispatch goes out at a random interval between <strong>3s and 7s</strong> (5 ± 2). This reduces the automatic pattern Meta perceives and helps preserve the number's quality.",summaryLabel:"Summary",summaryText:"{{count}} contacts · delay {{delay}}s ± {{jitter}}s â estimated time: ~{{minutes}}min",tierLimitNote:"â Sending within Meta's tier limits. On a 429, the system reschedules automatically.",nextButton:"Next",createAndStartButton:"Create and start sending",toastCampaignCreatedCount:"Campaign created: {{count}} contacts queued",toastCreateCampaignErrorGeneric:"Error creating campaign",toastMaxButtons:"Meta accepts a maximum of 10 buttons per template.",validateSelectConnection:"Select the connection's number.",validateNameFormat:"Name must contain only lowercase letters, numbers, and _.",validateBodyRequired:"The template body is required.",validateBodyMaxLength:"The body must be at most 1024 characters.",validateFooterMaxLength:"The footer must be at most 60 characters.",validateHeaderMaxLength:"The text header must be at most 60 characters.",validateMediaUrlRequired:"Provide a public example URL for the media header.",validateFillVarExamples:"Fill in the {{count}} example(s) for the body variables.",validateButtonTextRequired:"Button {{index}}: text is required.",validateButtonTextMaxLength:"Button {{index}}: text must be at most 25 characters.",validateButtonUrlRequired:"Button {{index}}: provide the URL.",validateButtonPhoneRequired:"Button {{index}}: provide the phone number (format +55...).",createFromScratchTitle:"Create template from scratch",numberConnectionLabel:"Number (connection)",categoryLabel:"Category",headerLabel:"Header",noHeaderOption:"No header",textOption:"Text",imageOption:"Image",videoOption:"Video",documentOption:"Document",headerTextPlaceholder:"Header text (max. 60 characters)",mediaUrlPlaceholder:"Public example media URL (https://...)",mediaUrlNote:"Meta only uses this URL as an example during review. In the actual send, you attach the media.",bodyLabel:"Message body *",bodyTemplatePlaceholder:"Hi {{token1}}, your purchase of {{token2}} has been confirmed!",variablesHintUse:"Use",variablesHintSuffix:"⦠for variables. {{count}}/1024",variableExamplesRequiredNote:"Variable examples (required for review)",variableExamplePlaceholder:"Example for {{token}}",footerLabel:"Footer (optional)",footerPlaceholder:"Small text at the bottom (max. 60 characters)",buttonsLabel:"Buttons (up to 10)",quickReplyButton:"+ Quick reply",urlButtonAdd:"+ URL",phoneButtonAdd:"+ Phone",buttonTextPlaceholder:"Button text (max. 25)",urlButtonPlaceholder:"https://yoursite.com (use {{token}} for a dynamic variable)",imagePlaceholderTag:"[Image]",videoPlaceholderTag:"[Video]",documentPlaceholderTag:"[Document]",bodyWillAppearHere:"The body will appear hereâ¦",metaReviewNote:"Meta reviews the content before approving it. MARKETING templates tend to be reviewed more strictly â avoid aggressive promotional language and follow WhatsApp's policies."},o4={title:"Performance Analysis",emptyMetrics:"Add metrics to the product to generate the performance analysis.",context:{title:"Campaign Context",description:"Answer a few questions for a more accurate analysis and personalized recommendations",q1:"1. What type of campaign are you using?",campaignType:{conversionMessage:"Conversion - Purchase via Message",maximizeMessages:"Maximize Messages",conversionSales:"Conversion optimized for sales",engagementSales:"Engagement campaign optimized for sales",engagementConversation:"Engagement campaign optimized for conversation",other:"Other type"},q2:"2. What type of creative are you using?",creativeType:{video:"Video",image:"Image"},q3:"3. What's your daily budget per campaign?",budget:{upTo10:"Up to $10/day","10to50":"$10 - $50/day","50to200":"$50 - $200/day",above200:"Over $200/day"}},generateButton:{analyzing:"Analyzing...",generate:"Generate Professional Analysis"},generateDescription:"Detailed analysis with diagnosis and personalized recommendations",newContext:"Enter New Context",viewDetailedMetrics:"View Detailed Metrics",updating:"Updating...",updateMetrics:"Update Metrics",sections:{cpl:"CPL Analysis (Cost per Lead)",conversion:"Conversion Rate Analysis",roas:"ROAS Analysis (Return)",summary:"Executive Summary"},cta:{title:"Accelerate Your Results",description:"Want to apply these strategies with support from specialists? Check out our complete training courses.",button:"TRAINING X1"},toasts:{notEnoughMetrics:"Not enough metrics for analysis",analysisGenerated:"Analysis generated successfully!",analysisError:"Error generating analysis. Try again."}},n4={lastUpdate:"Last updated: {{date}}
525",addNewMetric:"Add New Metric",comparativeCharts:"Comparative Charts"},r4={steps:{fetch:"Fetching page",structure:"Analyzing structure",styles:"Extracting styles",media:"Identifying media",content:"Extracting content",prompt:"Generating prompt"},toasts:{invalidUrlTitle:"Error",invalidUrlDescription:"Enter a valid URL",successTitle:"Success",successDescription:"Site analyzed successfully!",errorTitle:"Error",errorDescription:"Error analyzing the site",copiedDescription:"Prompt copied to clipboard",deleteErrorTitle:"Error",deleteErrorDescription:"Error deleting",deletedTitle:"Deleted",deletedDescription:"Site removed from history"},title:"Deliverable Cloner",subtitle:"Analyze any site and generate a detailed prompt to recreate it with AI",tabs:{analyze:"Analyze",history:"History ({{count}})"},urlCard:{title:"Site URL",description:"Paste the URL of the site you want to clone",placeholder:"https://example.com",analyzeButton:"Analyze"},results:{structureTitle:"Structure",titleLabel:"Title:",notFound:"Not found",descriptionLabel:"Description:",layoutLabel:"Layout:",sectionsLabel:"Sections ({{count}}):",stylesTitle:"Styles",colorsLabel:"Colors ({{count}}):",fontsLabel:"Fonts:",fontsNotDetected:"Not detected",cssFrameworkLabel:"CSS Framework:",promptTitle:"Generated Prompt",promptDescription:"Use this prompt to recreate the site with AI",copyPrompt:"Copy Prompt"},history:{empty:"No sites cloned",emptyDescription:"Analyze a site to save it to history",untitled:"Untitled",view:"View"},planModal:{featureName:"Site Cloner"}},i4={orderCard:{statusReceived:"Received",statusCancelled:"Cancelled",statusExpired:"Expired",clickToCopy:"Click to copy",copyNumber:"Copy Number",smsCode:"SMS code:"},toasts:{loadCountriesError:"Error loading countries",loadServicesError:"Error loading services",limitedAvailability:"Only {{count}} numbers available",reduceQuantity:"Reduce the quantity and try again.",requiredAmount:"Required: {{amount}}",purchaseSuccessMultiple:"{{count}} numbers purchased successfully!",purchaseSuccessSingle:"Number purchased successfully!",purchaseError:"Error purchasing number",smsReceived:"SMS received!",cancelError:"Error cancelling",cancelSuccess:"Cancelled. Refund: {{amount}}"},title:"ð± Virtual Numbers",subtitle:"Buy virtual numbers to receive SMS",balance:{label:"Your balance",recharge:"Recharge"},tabs:{buy:"Buy Number",orders:"My Orders"},country:{chooseTitle:"1. Choose the country",collapse:"Collapse",showMore:"Show more countries ({{count}})"},service:{chooseTitle:"2. Choose the service",searchPlaceholder:"Search service...",noneAvailable:"No service available",available:"{{count}} available",buy:"Buy"},tutorial:{title:"How to receive SMS from the virtual number on WhatsApp",step1:"Copy the purchased number and request the verification SMS directly in the WhatsApp app (on the login/sign-up screen).",step2:{before:"If WhatsApp shows a warning to try again in 1 hour, ",bold:"cancel the number within 20 minutes",after:" (before it expires) to get a refund and buy a new number."}},orders:{title:"Order History",empty:"No orders found"}},s4={errors:{loadServices:"Error loading services",genericTitle:"Error",loadServicesDescription:"Could not load the services",requiredFieldsTitle:"Required fields",requiredFieldsDescription:"Fill in the link and quantity",invalidLinkTitle:"Invalid link",commentsRequiredTitle:"Comments required",commentsRequiredDescription:"Enter at least {{min}} comments, one per line. You sent {{count}}.",tooManyCommentsTitle:"Too many comments",tooManyCommentsDescription:"This service accepts a maximum of {{max}} comments; you sent {{count}}.",invalidQuantityTitle:"Invalid quantity",invalidQuantityDescription:"Quantity must be between {{min}} and {{max}}",notAuthenticated:"Not authenticated",insufficientBalanceTitle:"Insufficient balance",insufficientBalanceDescription:"You need {{required}} but have {{balance}}",createOrder:"Error creating order",checkStatus:"Error checking status",cancelOrder:"Error cancelling order"},toasts:{orderCreatedTitle:"Order created!",orderCreatedDescription:"Order #{{id}} created successfully",statusUpdatedTitle:"Status updated",statusUpdatedDescription:"Status: {{status}}",orderCancelledTitle:"Order cancelled",orderCancelledDescription:"Order cancelled successfully"}
525,title:"ð Marketing Panel",subtitle:"Buy followers, likes, and views for your social networks",balanceLabel:"Available balance",recharge:"Recharge",tabs:{services:"Services",orders:"My Orders"},quickFilters:{instagramFollowers:"ð¸ Instagram Followers",instagramLikes:"â¤ï¸ Instagram Likes",facebookComments:"ð¬ Facebook Comments",facebookPostLikes:"ð Facebook Post Likes"},searchPlaceholder:"Search service...",categoryPlaceholder:"Category",allCategories:"All categories",form:{link:"Link",quantity:"Quantity",quantityDefinedByComments:"(defined by the comments)",quantityMinMax:"(min: {{min}}, max: {{max}})",customComments:"Custom Comments ({{count}} comments)",customCommentsHelp:"Enter the desired comments, one per line. The quantity will be determined automatically.",customCommentsPlaceholder:`Comment 1 526Comment 2 527Comment 3 528...`,pricePer1000:"Price per 1000:",total:"Total:",buyButton:"Buy"},per1000:"per 1000",noOrders:"You haven't placed any orders yet",orderCard:{quantity:"Qty: {{count}}",progress:"Progress",start:"Start: {{count}}",remaining:"Remaining: {{count}}"}},l4={errors:{loadOffers:"Error loading offers",requiredFieldsTitle:"Required fields",requiredFieldsDescription:"Please fill in the name and link of the offer.",invalidLinkTitle:"Invalid link",invalidLinkDescription:"The link must be from the Facebook Ad Library.",genericTitle:"Error",genericDescription:"An error occurred while processing your request.",requiredNameTitle:"Name required",requiredNameDescription:"Please fill in the offer name.",updateOfferTitle:"Error updating offer",deleteOfferTitle:"Error deleting offer",saveMetricTitle:"Error saving metric",saveNotesTitle:"Error saving notes",requiredQuantityTitle:"Required field",requiredQuantityDescription:"Fill in the number of ads."},toasts:{offerCreatedTitle:"Offer created!",offerCreatedDescription:"You can now enter ad data manually.",offerUpdatedTitle:"Offer updated!",offerUpdatedDescription:"The offer name was updated successfully.",offerDeletedTitle:"Offer deleted",offerDeletedDescription:"The offer was removed successfully.",metricSavedTitle:"Metric saved!",metricSavedDescription:"Ads for {{date}} updated successfully.",notesSavedTitle:"Notes saved!",notesSavedDescription:"The notes were updated successfully."},loadingOffers:"Loading offers",loadingOffersEllipsis:"Loading offers...",subtitle:"Track the performance of your offers' active ads",addOffer:"Add Offer",createDialog:{title:"Register New Offer",description:"Fill in the details below to start tracking a new offer."},form:{offerNameLabel:"Offer Name *",offerNamePlaceholder:"e.g.: Product XYZ - Summer Campaign",libraryLinkLabel:"Ad Library Link *",funnelNumberLabel:"Offer's WhatsApp number (optional)",funnelNumberPlaceholder:"e.g.: 5511999999999",submitting:"Registering...",submit:"Register Offer"},empty:{title:"No offers registered",description:"Start by registering your first offer to track the performance of active ads.",cta:"Register First Offer"},confirmDelete:'Are you sure you want to delete the offer "{{name}}"?',viewAds:"View ads",updateAds:"Update Ads ({{date}})",chart:{adsLegend:"Ads",activeAdsLegend:"Active Ads"},variation:{label:"Variation",vsYesterday:"Variation vs. Previous Day",moreAds:"More ads",fewerAds:"Fewer ads",none:"No variation"},lastRecord:"Last Record",editDialog:{title:"Edit Offer",description:"Change the offer name as needed.",save:"Save Changes"},updateDialog:{title:"Update Ads",description:"Enter the number of active ads for today ({{date}}).",quantityLabel:"Number of Ads",quantityPlaceholder:"e.g.: 15"},viewLibrary:"View ad library",editPreviousDays:"Edit Previous Days",offerWhatsapp:"Offer's WhatsApp",notes:{title:"Notes",placeholder:"Add notes about this offer...",save:"Save Notes"}},c4={errors:{urlRequiredTitle:"URL required",urlRequiredDescription:"Paste the link of the TikTok video you want to download",invalidLinkTitle:"Invalid link",invalidLinkDescription:"Only use TikTok links",processDownload:"Error processing download",downloadFile:"Error downloading file",downloadErrorTitle:"Download error",downloadErrorDescription:"Could not download the video"},downloadingTitle:"Downloading...",downloadingDescription:"Wait while we prepare your file",downloadCompleteTitle:"Download complete!",downloadCompleteDescription:"File downloaded successfully",title:"Download TikTok Videos",subtitle:"Download TikTok videos without watermark for free",linkLabel:"Video Link",linkPlaceholder:"Paste the TikTok link here...",tiktokDetected:"TikTok detected â",formatLabel:"Format",formatVideo:"Video (MP4) - No watermark",formatAudio:"Audio Only (MP3)",downloadingButton:"Downloading...",howToUse:{title:"
528ð¡ How to use",step1:"1. Open TikTok and find the video you want to download",step2:'2. Tap "Share" and copy the link',step3:'3. Paste the link here and click "Download"',step4:"4. The video will be downloaded without a watermark!"}},d4={errors:{loadConnections:"Error loading connections",configNotLoadedTitle:"Configuration not loaded",configNotLoadedDescription:"Wait a few seconds and try again.",connectionCancelledTitle:"Connection cancelled",connectionCancelledDescription:"You closed the popup or didn't authorize it.",incompleteDataTitle:"Incomplete data",incompleteDataDescription:"We didn't receive waba_id or phone_number_id from Meta.",connectErrorTitle:"Error connecting",startConnectionErrorTitle:"Error starting connection",unknownFailure:"Unknown failure",disconnectErrorTitle:"Error disconnecting",tryAgain:"Try again.",loadSdkFailed:"Failed to load Facebook SDK"},success:{connectedTitle:"WhatsApp connected!",connectedWithNumber:"Number {{number}} linked.",connectedGeneric:"Connection created successfully.",disconnected:"Number disconnected"},title:"WhatsApp Coexistence",tutorialTitle:"Tutorial â WhatsApp Coexistence",slotBalance_one:"{{count}} slot available",slotBalance_other:"{{count}} slots available",intro:{before:"Connect your official number using Meta's ",bold:"Coexistence",after:" model â the only model compatible with Zap Data."},whatIsTitle:"What is Coexistence?",whatIsDescription:{before:"Meta's official model that makes your WhatsApp work in",highlight:'"two places at once"',after:": on your phone (chats, groups, and status) and in the official API used by Zap Data for automations. Everything synced â without losing chats or switching numbers."},addNumberCard:{title:"Add number in Coexistence mode",descriptionBefore:"Each connected number costs ",descriptionBold:"$97.00 per month",descriptionAfter:", via recurring payment. After payment, you'll be redirected to Meta's secure sign-up."},openingMeta:"Opening Meta...",connectNumber:"Connect number",connectedNumbers:{title:"Connected numbers",none:"No number connected yet.",activeCount_one:"{{count}} active number.",activeCount_other:"{{count}} active numbers."},addNumber:"Add number",emptyState:'Click "Connect WhatsApp" above to link your first number.',table:{number:"Number",verifiedName:"Verified name"},disconnect:"Disconnect",disconnectDialog:{title:"Disconnect number?",before:"The number",after:"will be removed and the token revoked at Meta. You can reconnect it at any time (using a new slot)."}},u4={subtitle:"for Meta Ads",description1:"Convert values between multiple currencies directly in the Meta Ads Manager.",description2:"Intuitive toggle, real-time exchange rate, and automatic conversion.",downloadFree:"Free Download",interactiveDemo:"Interactive Demo",dailyCost:"Daily Cost",totalSpend:"Total Spend",avgCpc:"Average CPC",clickHint:"Click the currencies above to see the real-time conversion",features:{instant:{title:"Instant Conversion",description:"Toggle between multiple currencies with one click, right inside Meta Ads"},liveRate:{title:"Real-Time Rate",description:"Exchange rate automatically updated for accurate values"},native:{title:"Native Integration",description:"Works seamlessly inside the Ads Manager"}}},m4={errors:{loadData:"Error loading data",selectNotifier:"Select a notifier number",selectAdmin:"Select at least one admin number",saveConfig:"Error saving configuration",saveMainConfigFirst:"Save the main configuration first",selectInstance:"Select an instance",addLimit:"Error adding limit",updateLimit:"Error updating limit",removeLimit:"Error removing limit",updateMonitor:"Error updating monitoring"},toasts:{configSaved:"Configuration saved successfully!",limitUpdated:"Lead limit updated!",limitAdded:"Lead limit added!",limitRemoved:"Limit removed"},unknownNumber:"Unknown number",loadingConfig:"Loading settings...",comingSoon:{title:"Coming Soon",description:"The Notify Admin feature is under development and will be released soon.",backToInbox:"Back to Inbox"},title:"Notify Admin",subtitle:"Configure alerts and notifications",newNumber:"New Number",mainConfig:{title:"Main Configuration",description:"Configure the number that sends notifications and the numbers that receive alerts",notifierLabel:"Notifier Number",notifierDescription:"This number will send the alert messages",selectNumberPlaceholder:"Select a number",adminLabel:"Admin Numbers",adminDescription:"These numbers will receive the alerts",selectToAddPlaceholder:"Select a number to add",allAdded:"All numbers have already been added",save:"Save Configuration"},leadLimit:{title:"Lead Limit",description:"Get an alert when a number reaches the daily conversation limit",resetInfo:"The count resets daily at 00:00 (BrasÃlia time -03:00)",limitLine:"Limit: {{count}} conversations/day",noneConfigured:"No limit configured",addNumber:"Add Number"},comingSoonBadge:"Coming soon",instanceDisconnected:{title:"Instance Disconnected",descriptionBefore:"Send",descriptionAfter:"to check the instances",infoText:"When you send #status, you'll receive the status of each monitored number"},noNumberConnected:"No number connected",salesMonitor:{title:"Sales Monitor",descriptionBefore:"Send",descriptionAfter:"to see today's sales",infoText:"Data from Tag Whats Cloud"},limitDialog:{editTitle:"Edit Lead Limit",addTitle:"Add Lead Limit",description:"Configure the daily conversation limit for a number",instanceLabel:"Number to Monitor",dailyLimitLabel:"Daily Conversation Limit",notifyHint:"You'll be notified when this number reaches {{count}} conversations in the day"}},p4={errors:{loadInstances:"Error loading instances",nameRequired:"Enter a name for the instance",nameInvalidChars:"The name must contain only letters, numbers, and underscores",loadingInfo:"Please wait, loading information...",operationInProgress:"Operation in progress. Wait and try again.",createInstance:"Error creating instance",getQrCode:"Error getting QR Code",refreshQrCode:"Error refreshing QR Code",disconnect:"Error disconnecting",restart:"Error restarting",delete:"Error deleting"},toasts:{creditsDeducted:"{{count}} credits deducted successfully!",instanceCreated:"Instance created successfully",alreadyConnected:"WhatsApp is already connected!",connected:"WhatsApp connected!",connectedSuccess:"WhatsApp connected successfully!",waitingConnection:"Waiting for connection...",disconnected:"WhatsApp disconnected",restarted:"Instance restarted",deletingInstance:"Deleting instance... this may take a few seconds",instanceDeleted:"Instance deleted"},status:{connected:"Connected",disconnected:"Disconnected",connecting:"Connecting"},expiration:{today:"Expires today",oneDayLeft:"1 day left",daysLeft:"{{count}} days left"},loadingInstances:"Loading instances...",title:"Manage Numbers",subtitle:"Add or manage your WhatsApp numbers for notifications",countRegistered_one:"{{count}} number registered",countRegistered_other:"{{count}} numbers registered",newNumber:"New Number",empty:{title:"No numbers registered",description:"Click the button above to add your first number"},addNumber:"Add Number",awaitingConnection:"Awaiting connection",createDialog:{title:"Add New Number",description:"Create a new instance to connect your WhatsApp",submit:"Create Instance"},form:{instanceNameLabel:"Instance Name",instanceNamePlaceholder:"e.g.: my_main_number",instanceNameHint:"Use only letters, numbers, and underscores"},purchaseDialog:{title:"New WhatsApp Instance",description:"Create a new instance to connect your WhatsApp. This action will consume credits.",periodLabel:"Period:",period30Days:"30 days",costLabel:"Cost:",creditsAmount:"{{amount}} credits",currentBalance:"Current balance",insufficientBadge:"Insufficient",rechargeCredits:"Recharge Credits",confirmCreateButton:"Confirm and Create ({{amount}} credits)"},qrDialog:{title:"Scan QR Code",description:"Open WhatsApp on your phone and scan the QR Code",notAvailable:"QR Code not available",checkStatus:"Check Status"},deleteDialog:{title:"Confirm Deletion",description:'Are you sure you want to delete the instance "{{name}}"? This action cannot be undone.'},duplicateNameDialog:{title:"Name already exists",description:"An instance with this name already exists. Choose another name for your instance."},systemName:"WhatsApp Instance"},h4={auto:"Automatic (detect from text)",pt:"Portuguese",en:"English",es:"Spanish",ar:"Arabic",bg:"Bulgarian",zh:"Chinese",ko:"Korean",hr:"Croatian",da:"Danish",sk:"Slovak",fi:"Finnish",fr:"French",de:"German",el:"Greek",hi:"Hindi",nl:"Dutch",id:"Indonesian",it:"Italian",ja:"Japanese",ms:"Malay",pl:"Polish",ro:"Romanian",ru:"Russian",sv:"Swedish",ta:"Tamil",cs:"Czech",tr:"Turkish",uk:"Ukrainian",fil:"Filipino"},f4={"whisper-1":"Whisper-1 (default)","gpt-4o-mini-transcribe":"GPT-4o Mini Transcribe (fastest)","gpt-4o-transcribe":"GPT-4o Transcribe (most accurate)"},g4={audioGenerator:X3,audioTranscriber:Y3,extensaoAdsWhatsApp:Q3,geradorPalavrasChaves:Z3,hashCleaner:J3,numberOrganizer:e4,messageBlaster:t4,disparaZapOficial:a4,productAnalysis:o4,productMetrics:n4,siteCloner:r4,smsBot:i4,smmPanel:s4,trackOfertas:l4,videoDownloader:c4,whatsappOficial:d4,zapdataConverter:u4,notifyAdmin:m4,notifyAdminAddNumber:p4,elevenLabsLanguages:h4,openaiTranscriptionModels:f4},v4="My Profile",b4="View your information and settings",y4={changeHint:"Click the icon to change your photo",invali
528dFile:{title:"Invalid file",description:"Please select an image"},tooLarge:{title:"File too large",description:"The image must be at most 2MB"},updateSuccess:{title:"Photo updated!",description:"Your profile photo was saved successfully"},uploadError:{title:"Error uploading photo"}},x4={label:"Username",placeholder:"Enter your username",invalid:{title:"Invalid name",description:"Please enter a username"},alreadyExists:{title:"Name already taken",description:"This username is already in use. Choose another."},updateSuccess:{title:"Name updated!",description:"Your username was saved successfully"},updateError:{title:"Error saving",description:"Could not save the username"}},w4="Affiliate Area",C4={title:"Theme",dark:"Dark",light:"Light"},P4={title:"Change Password",newPassword:"New password",newPasswordPlaceholder:"Enter the new password",confirmNewPassword:"Confirm new password",confirmNewPasswordPlaceholder:"Confirm the new password",changing:"Changing...",requiredFields:{title:"Required fields",description:"Fill in all password fields"},mismatch:{title:"Passwords don't match",description:"The new password and confirmation must match"},tooShort:{title:"Password too short",description:"Password must be at least 6 characters"},changeError:{title:"Error changing password"},changeSuccess:{title:"Password changed successfully!",description:"Your new password is now active"}},A4="User",E4={title:v4,description:b4,avatar:y4,username:x4,affiliateArea:w4,theme:C4,password:P4,defaultDisplayName:A4},Zb="zapdata-language",S4=()=>{if(typeof window>"u")return Ps;const e=window.localStorage.getItem(Zb);return e&&Qb(e)?e:Ps};Ae.use(D1).init({resources:{pt:{common:Z1,header:iI,sidebar:gI,auth:II,dashboard:zI,inbox:bR,contacts:RR,flowBuilder:ZD,settings:vM,billing:HM,creativeCanvas:hF,ads:AF,affiliate:BF,notifications:WF,tools:mL,profile:wL},es:{common:NL,header:LL,sidebar:$L,auth:rj,dashboard:fj,inbox:Hj,contacts:i_,flowBuilder:N2,settings:G2,billing:CO,creativeCanvas:UO,ads:JO,affiliate:hB,notifications:yB,tools:VB,profile:YB},en:{common:az,header:dz,sidebar:xz,auth:Fz,dashboard:Wz,inbox:CV,contacts:LV,flowBuilder:a5,settings:w5,billing:Q5,creativeCanvas:b3,ads:k3,affiliate:U3,notifications:K3,tools:g4,profile:E4}},lng:S4(),fallbackLng:Ps,defaultNS:"common",ns:["common","header","sidebar","auth","dashboard","inbox","contacts","flowBuilder","settings","billing","creativeCanvas","ads","affiliate","notifications","tools","profile"],interpolation:{escapeValue:!1},returnEmptyString:!1});const N4="553192432482";function k4(){const[e]=g.useState(N4);return e}const T4=tl("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function na({className:e,variant:t,...a}){return i.jsx("div",{className:ve(T4({variant:t}),e),...a})}function I4(e){return Object.prototype.toString.call(e)==="[object Object]"}function Lp(e){return I4(e)||Array.isArray(e)}function R4(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function wu(e,t){const a=Object.keys(e),o=Object.keys(t);if(a.length!==o.length)return!1;const n=JSON.stringify(Object.keys(e.breakpoints||{})),r=JSON.stringify(Object.keys(t.breakpoints||{}));return n!==r?!1:a.every(s=>{const l=e[s],c=t[s];return typeof l=="function"?`${l}`==`${c}`:!Lp(l)||!Lp(c)?l===c:wu(l,c)})}function jp(e){return e.concat().sort((t,a)=>t.name>a.name?1:-1).map(t=>t.options)}function D4(e,t){if(e.length!==t.length)return!1;const a=jp(e),o=jp(t);return a.every((n,r)=>{const s=o[r];return wu(n,s)})}function Cu(e){return typeof e=="number"}function Wc(e){return typeof e=="string"}function ol(e){return typeof e=="boolean"}function _p(e){return Object.prototype.toString.call(e)==="[object Object]"}function mt(e){return Math.abs(e)}function Pu(e){return Math.sign(e)}function Ir(e,t){return mt(e-t)}function M4(e,t){if(e===0||t===0||mt(e)<=mt(t))return 0;const a=Ir(mt(e),mt(t));return mt(a/e)}
vendor: 16,190 bytes, line 528
528function F4(e){return Math.round(e*100)/100}function $r(e){return Gr(e).map(Number)}function ga(e){return e[mi(e)]}function mi(e){return Math.max(0,e.length-1)}function Au(e,t){return t===mi(e)}function Op(e,t=0){return Array.from(Array(e),(a,o)=>t+o)}function Gr(e){return Object.keys(e)}function Jb(e,t){return[e,t].reduce((a,o)=>(Gr(o).forEach(n=>{const r=a[n],s=o[n],l=_p(r)&&_p(s);a[n]=l?Jb(r,s):s}),a),{})}function $c(e,t){return typeof t.MouseEvent<"u"&&e instanceof t.MouseEvent}function L4(e,t){const a={start:o,center:n,end:r};function o(){return 0}function n(c){return r(c)/2}function r(c){return t-c}function s(c,d){return Wc(e)?a[e](c):e(t,c,d)}return{measure:s}}function Hr(){let e=[];function t(n,r,s,l={passive:!0}){let c;if("addEventListener"in n)n.addEventListener(r,s,l),c=()=>n.removeEventListener(r,s,l);else{const d=n;d.addListener(s),c=()=>d.removeListener(s)}return e.push(c),o}function a(){e=e.filter(n=>n())}const o={add:t,clear:a};return o}function j4(e,t,a,o){const n=Hr(),r=1e3/60;let s=null,l=0,c=0;function d(){n.add(e,"visibilitychange",()=>{e.hidden&&v()})}function u(){p(),n.clear()}function m(b){if(!c)return;s||(s=b,a(),a());const y=b-s;for(s=b,l+=y;l>=r;)a(),l-=r;const x=l/r;o(x),c&&(c=t.requestAnimationFrame(m))}function h(){c||(c=t.requestAnimationFrame(m))}function p(){t.cancelAnimationFrame(c),s=null,l=0,c=0}function v(){s=null,l=0}return{init:d,destroy:u,start:h,stop:p,update:a,render:o}}function _4(e,t){const a=t==="rtl",o=e==="y",n=o?"y":"x",r=o?"x":"y",s=!o&&a?-1:1,l=u(),c=m();function d(v){const{height:f,width:b}=v;return o?f:b}function u(){return o?"top":a?"right":"left"}function m(){return o?"bottom":a?"left":"right"}function h(v){return v*s}return{scroll:n,cross:r,startEdge:l,endEdge:c,measureSize:d,direction:h}}function on(e=0,t=0){const a=mt(e-t);function o(d){return d<e}function n(d){return d>t}function r(d){return o(d)||n(d)}function s(d){return r(d)?o(d)?e:t:d}function l(d){return a?d-a*Math.ceil((d-t)/a):d}return{length:a,max:t,min:e,constrain:s,reachedAny:r,reachedMax:n,reachedMin:o,removeOffset:l}}function ey(e,t,a){const{constrain:o}=on(0,e),n=e+1;let r=s(t);function s(h){return a?mt((n+h)%n):o(h)}function l(){return r}function c(h){return r=s(h),m}function d(h){return u().set(l()+h)}function u(){return ey(e,l(),a)}const m={get:l,set:c,add:d,clone:u};return m}function O4(e,t,a,o,n,r,s,l,c,d,u,m,h,p,v,f,b,y,x){const{cross:w,direction:P}=e,E=["INPUT","SELECT","TEXTAREA"],k={passive:!1},S=Hr(),R=Hr(),I=on(50,225).constrain(p.measure(20)),M={mouse:300,touch:400},q={mouse:500,touch:600},N=v?43:25;let F=!1,A=0,_=0,K=!1,V=!1,H=!1,B=!1;function te(oe){if(!x)return;function ye(z){(ol(x)||x(oe,z))&&fe(z)}const C=t;S.add(C,"dragstart",z=>z.preventDefault(),k).add(C,"touchmove",()=>{},k).add(C,"touchend",()=>{}).add(C,"touchstart",ye).add(C,"mousedown",ye).add(C,"touchcancel",ie).add(C,"contextmenu",ie).add(C,"click",le,!0)}function j(){S.clear(),R.clear()}function L(){const oe=B?a:t;R.add(oe,"touchmove",J,k).add(oe,"touchend",ie).add(oe,"mousemove",J,k).add(oe,"mouseup",ie)}function Q(oe){const ye=oe.nodeName||"";return E.includes(ye)}function $(){return(v?q:M)[B?"mouse":"touch"]}function X(oe,ye){const C=m.add(Pu(oe)*-1),z=u.byDistance(oe,!v).distance;return v||mt(oe)<I?z:b&&ye?z*.5:u.byIndex(C.get(),0).distance}function fe(oe){const ye=$c(oe,o);B=ye,H=v&&ye&&!oe.buttons&&F,F=Ir(n.get(),s.get())>=2,!(ye&&oe.button!==0)&&(Q(oe.target)||(K=!0,r.pointerDown(oe),d.useFriction(0).useDuration(0),n.set(s),L(),A=r.readPoint(oe),_=r.readPoint(oe,w),h.emit("pointerDown")))}function J(oe){if(!$c(oe,o)&&oe.touches.length>=2)return ie(oe);const C=r.readPoint(oe),z=r.readPoint(oe,w),U=Ir(C,A),T=Ir(z,_);if(!V&&!B&&(!oe.cancelable||(V=U>T,!V)))return ie(oe);const D=r.pointerMove(oe);U>f&&(H=!0),d.useFriction(.3).useDuration(.75),l.start(),n.add(P(D)),oe.preventDefault()}function ie(oe){const C=u.byDistance(0,!1).index!==m.get(),z=r.pointerUp(oe)*$(),U=X(P(z),C),T=M4(z,U),D=N-10*T,O=y+T/50;V=!1,K=!1,R.clear(),d.useDuration(D).useFriction(O),c.distance(U,!v),B=!1,h.emit("pointerUp")}function le(oe){H&&(oe.stopPropagation(),oe.preventDefault(),H=!1)}function pe(){return K}return{init:te,destroy:j,pointerDown:pe}}function B4(e,t){let o,n;function r(m){return m.timeStamp}function s(m,h){const v=`client${(h||e.scroll)==="x"?"X":"Y"}`;return($c(m,t)?m:m.touches[0])[v]}function l(m){return o=m,n=m,s(m)}function c(m){const h=s(m)-s(n),p=r(m)-r(o)>170;return n=m,p&&(o=m),h}function d(m){if(!o||!n)return 0;const h=s(n)-s(o),p=r(m)-r(o),v=r(m)-r(n)>170,f=h/p;return p&&!v&&mt(f)>.1?f:0}return{pointerDown:l,pointerMove:c,pointerUp:d,readPoint:s}}function z4(){function e(a){const{offsetTop:o,offsetLeft:n,offsetWidth:r,offsetHeight:s}=a;return{top:o,right:n+r,bottom:o+s,left:n,width:r,height:s}}return{measure:e}}function V4(e){function t(o){return e*(o/100)}return{measure:t}}function q4(e,t,a,o,n,r,s){const l=[e].concat(o);let c,d,u=[],m=!1;function h(b){return n.measureSize(s.measure(b))}function p(b){if(!r)return;d=h(e),u=o.map(h);function y(x){for(const w of x){if(m)return;const P=w.target===e,E=o.indexOf(w.target),k=P?d:u[E],S=h(P?e:o[E]);if(mt(S-k)>=.5){b.reInit(),t.emit("resize");break}}}c=new ResizeObserver(x=>{(ol(r)||r(b,x))&&y(x)}),a.requestAnimationFrame(()=>{l.forEach(x=>c.observe(x))})}function v(){m=!0,c&&c.disconnect()}return{init:p,destroy:v}}function U4(e,t,a,o,n,r){let s=0,l=0,c=n,d=r,u=e.get(),m=0;function h(){const k=o.get()-e.get(),S=!c;let R=0;return S?(s=0,a.set(o),e.set(o),R=k):(a.set(e),s+=k/c,s*=d,u+=s,e.add(s),R=u-m),l=Pu(R),m=u,E}function p(){const k=o.get()-t.get();return mt(k)<.001}function v(){return c}function f(){return l}function b(){return s}function y(){return w(n)}function x(){return P(r)}function w(k){return c=k,E}function P(k){return d=k,E}const E={direction:f,duration:v,velocity:b,seek:h,settled:p,useBaseFriction:x,useBaseDuration:y,useFriction:P,useDuration:w};return E}function W4(e,t,a,o,n){const r=n.measure(10),s=n.measure(50),l=on(.1,.99);let c=!1;function d(){return!(c||!e.reachedAny(a.get())||!e.reachedAny(t.get()))}function u(p){if(!d())return;const v=e.reachedMin(t.get())?"min":"max",f=mt(e[v]-t.get()),b=a.get()-t.get(),y=l.constrain(f/s);a.subtract(b*y),!p&&mt(b)<r&&(a.set(e.constrain(a.get())),o.useDuration(25).useBaseFriction())}function m(p){c=!p}return{shouldConstrain:d,constrain:u,toggleActive:m}}function $4(e,t,a,o,n){const r=on(-t+e,0),s=m(),l=u(),c=h();function d(v,f){return Ir(v,f)<=1}function u(){const v=s[0],f=ga(s),b=s.lastIndexOf(v),y=s.indexOf(f)+1;return on(b,y)}function m(){return a.map((v,f)=>{const{min:b,max:y}=r,x=r.constrain(v),w=!f,P=Au(a,f);return w?y:P||d(b,x)?b:d(y,x)?y:x}).map(v=>parseFloat(v.toFixed(3)))}function h(){if(t<=e+n)return[r.max];if(o==="keepSnaps")return s;const{min:v,max:f}=l;return s.slice(v,f)}return{snapsContained:c,scrollContainLimit:l}}function G4(e,t,a){const o=t[0],n=a?o-e:ga(t);return{limit:on(n,o)}}function H4(e,t,a,o){const r=t.min+.1,s=t.max+.1,{reachedMin:l,reachedMax:c}=on(r,s);function d(h){return h===1?c(a.get()):h===-1?l(a.get()):!1}function u(h){if(!d(h))return;const p=e*(h*-1);o.forEach(v=>v.add(p))}return{loop:u}}function K4(e){const{max:t,length:a}=e;function o(r){const s=r-t;return a?s/-a:0}return{get:o}}function X4(e,t,a,o,n){const{startEdge:r,endEdge:s}=e,{groupSlides:l}=n,c=m().map(t.measure),d=h(),u=p();function m(){return l(o).map(f=>ga(f)[s]-f[0][r]).map(mt)}function h(){return o.map(f=>a[r]-f[r]).map(f=>-mt(f))}function p(){return l(d).map(f=>f[0]).map((f,b)=>f+c[b])}return{snaps:d,snapsAligned:u}}function Y4(e,t,a,o,n,r){const{groupSlides:s}=n,{min:l,max:c}=o,d=u();function u(){const h=s(r),p=!e||t==="keepSnaps";return a.length===1?[r]:p?h:h.slice(l,c).map((v,f,b)=>{const y=!f,x=Au(b,f);if(y){const w=ga(b[0])+1;return Op(w)}if(x){const w=mi(r)-ga(b)[0]+1;return Op(w,ga(b)[0])}return v})}return{slideRegistry:d}}function Q4(e,t,a,o,n){const{reachedAny:r,removeOffset:s,constrain:l}=o;function c(v){return v.concat().sort((f,b)=>mt(f)-mt(b))[0]}function d(v){const f=e?s(v):l(v),b=t.map((x,w)=>({diff:u(x-f,0),index:w})).sort((x,w)=>mt(x.diff)-mt(w.diff)),{index:y}=b[0];return{index:y,distance:f}}function u(v,f){const b=[v,v+a,v-a];if(!e)return v;if(!f)return c(b);const y=b.filter(x=>Pu(x)===f);return y.length?c(y):ga(b)-a}function m(v,f){const b=t[v]-n.get(),y=u(b,f);return{index:v,distance:y}}function h(v,f){const b=n.get()+v,{index:y,distance:x}=d(b),w=!e&&r(b);if(!f||w)return{index:y,distance:v};const P=t[y]-x,E=v+u(P,0);return{index:y,distance:E}}return{byDistance:h,byIndex:m,shortcut:u}}function Z4(e,t,a,o,n,r,s){function l(m){const h=m.distance,p=m.index!==t.get();r.add(h),h&&(o.duration()?e.start():(e.update(),e.render(1),e.update())),p&&(a.set(t.get()),t.set(m.index),s.emit("select"))}function c(m,h){const p=n.byDistance(m,h);l(p)}function d(m,h){const p=t.clone().set(m),v=n.byIndex(p.get(),h);l(v)}return{distance:c,index:d}}function J4(e,t,a,o,n,r,s,l){const c={passive:!0,capture:!0};let d=0;function u(p){if(!l)return;function v(f){if(new Date().getTime()-d>10)return;s.emit("slideFocusStart"),e.scrollLeft=0;const x=a.findIndex(w=>w.includes(f));Cu(x)&&(n.useDuration(0),o.index(x,0),s.emit("slideFocus"))}r.add(document,"keydown",m,!1),t.forEach((f,b)=>{r.add(f,"focus",y=>{(ol(l)||l(p,y))&&v(b)},c)})}function m(p){p.code==="Tab"&&(d=new Date().getTime())}return{init:u}}function Ar(e){let t=e;function a(){return t}function o(c){t=s(c)}function n(c){t+=s(c)}function r(c){t-=s(c)}function s(c){return Cu(c)?c:c.get()}return{get:a,set:o,add:n,subtract:r}}function ty(e,t){const a=e.scroll==="x"?s:l,o=t.style;let n=null,r=!1;function s(h){return`translate3d(${h}px,0px,0px)`}function l(h){return`translate3d(0px,${h}px,0px)`}function c(h){if(r)return;const p=F4(e.direction(h));p!==n&&(o.transform=a(p),n=p)}function d(h){r=!h}function u(){r||(o.transform="",t.getAttribute("style")||t.removeAttribute("style"))}return{clear:u,to:c,toggleActive:d}}function eU(e,t,a,o,n,r,s,l,c){const u=$r(n),m=$r(n).reverse(),h=y().concat(x());function p(S,R){return S.reduce((I,M)=>I-n[M],R)}function v(S,R){return S.reduce((I,M)=>p(I,R)>0?I.concat([M]):I,[])}function f(S){return r.map((R,I)=>({start:R-o[I]+.5+S,end:R+t-.5+S}))}function b(S,R,I){const M=f(R);return S.map(q=>{const N=I?0:-a,F=I?a:0,A=I?"end":"start",_=M[q][A];return{index:q,loopPoint:_,slideLocation:Ar(-1),translate:ty(e,c[q]),target:()=>l.get()>_?N:F}})}function y(){const S=s[0],R=v(m,S);return b(R,a,!1)}function x(){const S=t-s[0]-1,R=v(u,S);return b(R,-a,!0)}function w(){return h.every(({index:S})=>{const R=u.filter(I=>I!==S);return p(R,t)<=.1})}function P(){h.forEach(S=>{const{target:R,translate:I,slideLocation:M}=S,q=R();q!==M.get()&&(I.to(q),M.set(q))})}function E(){h.forEach(S=>S.translate.clear())}return{canLoop:w,clear:E,loop:P,loopPoints:h}}function tU(e,t,a){let o,n=!1;function r(c){if(!a)return;function d(u){for(const m of u)if(m.type==="childList"){c.reInit(),t.emit("slidesChanged");break}}o=new MutationObserver(u=>{n||(ol(a)||a(c,u))&&d(u)}),o.observe(e,{childList:!0})}function s(){o&&o.disconnect(),n=!0}return{init:r,destroy:s}}function aU(e,t,a,o){const n={};let r=null,s=null,l,c=!1;function d(){l=new IntersectionObserver(v=>{c||(v.forEach(f=>{const b=t.indexOf(f.target);n[b]=f}),r=null,s=null,a.emit("slidesInView"))},{root:e.parentElement,threshold:o}),t.forEach(v=>l.observe(v))}function u(){l&&l.disconnect(),c=!0}function m(v){return Gr(n).reduce((f,b)=>{const y=parseInt(b),{isIntersecting:x}=n[y];return(v&&x||!v&&!x)&&f.push(y),f},[])}function h(v=!0){if(v&&r)return r;if(!v&&s)return s;const f=m(v);return v&&(r=f),v||(s=f),f}return{init:d,destroy:u,get:h}}function oU(e,t,a,o,n,r){const{measureSize:s,startEdge:l,endEdge:c}=e,d=a[0]&&n,u=v(),m=f(),h=a.map(s),p=b();function v(){if(!d)return 0;const x=a[0];return mt(t[l]-x[l])}function f(){if(!d)return 0;const x=r.getComputedStyle(ga(o));return parseFloat(x.getPropertyValue(`margin-${c}`))}function b(){return a.map((x,w,P)=>{const E=!w,k=Au(P,w);return E?h[w]+u:k?h[w]+m:P[w+1][l]-x[l]}).map(mt)}return{slideSizes:h,slideSizesWithGaps:p,startGap:u,endGap:m}}function nU(e,t,a,o,n,r,s,l,c){const{startEdge:d,endEdge:u,direction:m}=e,h=Cu(a);function p(y,x){return $r(y).filter(w=>w%x===0).map(w=>y.slice(w,w+x))}function v(y){return y.length?$r(y).reduce((x,w,P)=>{const E=ga(x)||0,k=E===0,S=w===mi(y),R=n[d]-r[E][d],I=n[d]-r[w][u],M=!o&&k?m(s):0,q=!o&&S?m(l):0,N=mt(I-q-(R+M));return P&&N>t+c&&x.push(w),S&&x.push(y.length),x},[]).map((x,w,P)=>{const E=Math.max(P[w-1]||0);return y.slice(E,x)}):[]}function f(y){return h?p(y,a):v(y)}return{groupSlides:f}}function rU(e,t,a,o,n,r,s){const{align:l,axis:c,direction:d,startIndex:u,loop:m,duration:h,dragFree:p,dragThreshold:v,inViewThreshold:f,slidesToScroll:b,skipSnaps:y,containScroll:x,watchResize:w,watchSlides:P,watchDrag:E,watchFocus:k}=r,S=2,R=z4(),I=R.measure(t),M=a.map(R.measure),q=_4(c,d),N=q.measureSize(I),F=V4(N),A=L4(l,N),_=!m&&!!x,K=m||!!x,{slideSizes:V,slideSizesWithGaps:H,startGap:B,endGap:te}=oU(q,I,M,a,K,n),j=nU(q,N,b,m,I,M,B,te,S),{snaps:L,snapsAligned:Q}=X4(q,A,I,M,j),$=-ga(L)+ga(H),{snapsContained:X,scrollContainLimit:fe}=$4(N,$,Q,x,S),J=_?X:Q,{limit:ie}=G4($,J,m),le=ey(mi(J),u,m),pe=le.clone(),ce=$r(a),oe=({dragHandler:at,scrollBody:he,scrollBounds:Ie,options:{loop:be}})=>{be||Ie.constrain(at.pointerDown()),he.seek()},ye=({scrollBody:at,translate:he,location:Ie,offsetLocation:be,previousLocation:je,scrollLooper:$e,slideLooper:Le,dragHandler:ot,animation:At,eventHandler:Nt,scrollBounds:st,options:{loop:zt}},kt)=>{const wt=at.settled(),sr=!st.shouldConstrain(),Se=zt?wt:wt&&sr,Me=Se&&!ot.pointerDown();Me&&At.stop();const Xe=Ie.get()*kt+je.get()*(1-kt);be.set(Xe),zt&&($e.loop(at.direction()),Le.loop()),he.to(be.get()),Me&&Nt.emit("settle"),Se||Nt.emit("scroll")},C=j4(o,n,()=>oe(Ke),at=>ye(Ke,at)),z=.68,U=J[le.get()],T=Ar(U),D=Ar(U),O=Ar(U),Y=Ar(U),ae=U4(T,O,D,Y,h,z),G=Q4(m,J,$,ie,Y),re=Z4(C,le,pe,ae,G,Y,s),de=K4(ie),se=Hr(),ue=aU(t,a,s,f),{slideRegistry:Ee}=Y4(_,x,J,fe,j,ce),Te=J4(e,a,Ee,re,ae,se,s,k),Ke={ownerDocument:o,ownerWindow:n,eventHandler:s,containerRect:I,slideRects:M,animation:C,axis:q,dragHandler:O4(q,e,o,n,Y,B4(q,n),T,C,re,ae,G,le,s,F,p,v,y,z,E),eventStore:se,percentOfView:F,index:le,indexPrevious:pe,limit:ie,location:T,offsetLocation:O,previousLocation:D,options:r,resizeHandler:q4(t,s,n,a,q,w,R),scrollBody:ae,scrollBounds:W4(ie,O,Y,ae,F),scrollLooper:H4($,ie,O,[T,O,D,Y]),scrollProgress:de,scrollSnapList:J.map(de.get),scrollSnaps:J,scrollTarget:G,scrollTo:re,slideLooper:eU(q,N,$,V,H,L,J,O,a),slideFocus:Te,slidesHandler:tU(t,s,P),slidesInView:ue,slideIndexes:ce,slideRegistry:Ee,slidesToScroll:j,target:Y,translate:ty(q,t)};return Ke}function iU(){let e={},t;function a(d){t=d}function o(d){return e[d]||[]}function n(d){return o(d).forEach(u=>u(t,d)),c}function r(d,u){return e[d]=o(d).concat([u]),c}function s(d,u){return e[d]=o(d).filter(m=>m!==u),c}function l(){e={}}const c={init:a,emit:n,off:s,on:r,clear:l};return c}const sU={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function lU(e){function t(r,s){return Jb(r,s||{})}function a(r){const s=r.breakpoints||{},l=Gr(s).filter(c=>e.matchMedia(c).matches).map(c=>s[c]).reduce((c,d)=>t(c,d),{});return t(r,l)}function o(r){return r.map(s=>Gr(s.breakpoints||{})).reduce((s,l)=>s.concat(l),[]).map(e.matchMedia)}return{mergeOptions:t,optionsAtMedia:a,optionsMediaQueries:o}}function cU(e){let t=[];function a(r,s){return t=s.filter(({options:l})=>e.optionsAtMedia(l).active!==!1),t.forEach(l=>l.init(r,e)),s.reduce((l,c)=>Object.assign(l,{[c.name]:c}),{})}function o(){t=t.filter(r=>r.destroy())}return{init:a,destroy:o}}function As(e,t,a){const o=e.ownerDocument,n=o.defaultView,r=lU(n),s=cU(r),l=Hr(),c=iU(),{mergeOptions:d,optionsAtMedia:u,optionsMediaQueries:m}=r,{on:h,off:p,emit:v}=c,f=q;let b=!1,y,x=d(sU,As.globalOptions),w=d(x),P=[],E,k,S;function R(){const{container:ce,slides:oe}=w;k=(Wc(ce)?e.querySelector(ce):ce)||e.children[0];
528const C=Wc(oe)?k.querySelectorAll(oe):oe;S=[].slice.call(C||k.children)}function I(ce){const oe=rU(e,k,S,o,n,ce,c);if(ce.loop&&!oe.slideLooper.canLoop()){const ye=Object.assign({},ce,{loop:!1});return I(ye)}return oe}function M(ce,oe){b||(x=d(x,ce),w=u(x),P=oe||P,R(),y=I(w),m([x,...P.map(({options:ye})=>ye)]).forEach(ye=>l.add(ye,"change",q)),w.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(pe),y.eventHandler.init(pe),y.resizeHandler.init(pe),y.slidesHandler.init(pe),y.options.loop&&y.slideLooper.loop(),k.offsetParent&&S.length&&y.dragHandler.init(pe),E=s.init(pe,P)))}function q(ce,oe){const ye=j();N(),M(d({startIndex:ye},ce),oe),c.emit("reInit")}function N(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),s.destroy(),l.clear()}function F(){b||(b=!0,l.clear(),N(),c.emit("destroy"),c.clear())}function A(ce,oe,ye){!w.active||b||(y.scrollBody.useBaseFriction().useDuration(oe===!0?0:w.duration),y.scrollTo.index(ce,ye||0))}function _(ce){const oe=y.index.add(1).get();A(oe,ce,-1)}function K(ce){const oe=y.index.add(-1).get();A(oe,ce,1)}function V(){return y.index.add(1).get()!==j()}function H(){return y.index.add(-1).get()!==j()}function B(){return y.scrollSnapList}function te(){return y.scrollProgress.get(y.offsetLocation.get())}function j(){return y.index.get()}function L(){return y.indexPrevious.get()}function Q(){return y.slidesInView.get()}function $(){return y.slidesInView.get(!1)}function X(){return E}function fe(){return y}function J(){return e}function ie(){return k}function le(){return S}const pe={canScrollNext:V,canScrollPrev:H,containerNode:ie,internalEngine:fe,destroy:F,off:p,on:h,emit:v,plugins:X,previousScrollSnap:L,reInit:f,rootNode:J,scrollNext:_,scrollPrev:K,scrollProgress:te,scrollSnapList:B,scrollTo:A,selectedScrollSnap:j,slideNodes:le,slidesInView:Q,slidesNotInView:$};return M(t,a),setTimeout(()=>c.emit("init"),0),pe}As.globalOptions=void 0;function Eu(e={},t=[]){const a=g.useRef(e),o=g.useRef(t),[n,r]=g.useState(),[s,l]=g.useState(),c=g.useCallback(()=>{n&&n.reInit(a.current,o.current)},[n]);return g.useEffect(()=>{wu(a.current,e)||(a.current=e,c())},[e,c]),g.useEffect(()=>{D4(o.current,t)||(o.current=t,c())},[t,c]),g.useEffect(()=>{if(R4()&&s){As.globalOptions=Eu.globalOptions;const d=As(s,a.current,o.current);return r(d),()=>d.destroy()}else r(void 0)},[s,r]),[l,n]}Eu.globalOptions=void 0;const ay=g.createContext(null);function nl(){const e=g.useContext(ay);if(!e)throw new Error("useCarousel must be used within a <Carousel />");return e}const oy=g.forwardRef(({orientation:e="horizontal",opts:t,setApi:a,plugins:o,className:n,children:r,...s},l)=>{const[c,d]=Eu({...t,axis:e==="horizontal"?"x":"y"},o),[u,m]=g.useState(!1),[h,p]=g.useState(!1),v=g.useCallback(x=>{x&&(m(x.canScrollPrev()),p(x.canScrollNext()))},[]),f=g.useCallback(()=>{d==null||d.scrollPrev()},[d]),b=g.useCallback(()=>{d==null||d.scrollNext()},[d]),y=g.useCallback(x=>{x.key==="ArrowLeft"?(x.preventDefault(),f()):x.key==="ArrowRight"&&(x.preventDefault(),b())},[f,b]);return g.useEffect(()=>{!d||!a||a(d)},[d,a]),g.useEffect(()=>{if(d)return v(d),d.on("reInit",v),d.on("select",v),()=>{d==null||d.off("select",v)}},[d,v]),i.jsx(ay.Provider,{value:{carouselRef:c,api:d,opts:t,orientation:e||((t==null?void 0:t.axis)==="y"?"vertical":"horizontal"),scrollPrev:f,scrollNext:b,canScrollPrev:u,canScrollNext:h},children:i.jsx("div",{ref:l,onKeyDownCapture:y,className:ve("relative",n),role:"region","aria-roledescription":"carousel",...s,children:r})})});oy.displayName="Carousel";const ny=g.forwardRef(({className:e,...t},a)=>{const{carouselRef:o,orientation:n}=nl();return i.jsx("div",{ref:o,className:"overflow-hidden",children:i.jsx("div",{ref:a,className:ve("flex",n==="horizontal"?"-ml-4":"-mt-4 flex-col",e),...t})})});ny.displayName="CarouselContent";const Ji=g.forwardRef(({className:e,...t},a)=>{const{orientation:o}=nl();return i.jsx("div",{ref:a,role:"group","aria-roledescription":"slide",className:ve("min-w-0 shrink-0 grow-0 basis-full",o==="horizontal"?"pl-4":"pt-4",e),...t})});
528Ji.displayName="CarouselItem";const ry=g.forwardRef(({className:e,variant:t="outline",size:a="icon",...o},n)=>{const{orientation:r,scrollPrev:s,canScrollPrev:l}=nl();return i.jsxs(we,{ref:n,variant:t,size:a,className:ve("absolute h-8 w-8 rounded-full",r==="horizontal"?"-left-12 top-1/2 -translate-y-1/2":"-top-12 left-1/2 -translate-x-1/2 rotate-90",e),disabled:!l,onClick:s,...o,children:[i.jsx(_r,{className:"h-4 w-4"}),i.jsx("span",{className:"sr-only",children:"Previous slide"})]})});ry.displayName="CarouselPrevious";const iy=g.forwardRef(({className:e,variant:t="outline",size:a="icon",...o},n)=>{const{orientation:r,scrollNext:s,canScrollNext:l}=nl();return i.jsxs(we,{ref:n,variant:t,size:a,className:ve("absolute h-8 w-8 rounded-full",r==="horizontal"?"-right-12 top-1/2 -translate-y-1/2":"-bottom-12 left-1/2 -translate-x-1/2 rotate-90",e),disabled:!l,onClick:s,...o,children:[i.jsx(Or,{className:"h-4 w-4"}),i.jsx("span",{className:"sr-only",children:"Next slide"})]})});iy.displayName="CarouselNext";function Ro({className:e,...t}){return i.jsx("div",{className:ve("animate-pulse rounded-md bg-muted",e),...t})}const it=g.forwardRef(({className:e,type:t,...a},o)=>i.jsx("input",{type:t,className:ve("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:o,...a}));it.displayName="Input";const Su=g.createContext({});function pi(e){const t=g.useRef(null);return t.current===null&&(t.current=e()),t.current}const Nu=typeof window<"u",ku=Nu?g.useLayoutEffect:g.useEffect,rl=g.createContext(null);function Tu(e,t){e.indexOf(t)===-1&&e.push(t)}function Iu(e,t){const a=e.indexOf(t);a>-1&&e.splice(a,1)}function nJ([...e],t,a){const o=t<0?e.length+t:t;if(o>=0&&o<e.length){const n=a<0?e.length+a:a,[r]=e.splice(t,1);e.splice(n,0,r)}return e}const Ha=(e,t,a)=>a>t?t:a<e?e:a;let Es=()=>{};const Ka={},sy=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e);function ly(e){return typeof e=="object"&&e!==null}const cy=e=>/^0[^.\s]+$/u.test(e);function Ru(e){let t;return()=>(t===void 0&&(t=e()),t)}const ia=e=>e,dU=(e,t)=>a=>t(e(a)),hi=(...e)=>e.reduce(dU),Kr=(e,t,a)=>{const o=t-e;return o===0?1:(a-e)/o};class Du{constructor(){this.subscriptions=[]}add(t){return Tu(this.subscriptions,t),()=>Iu(this.subscriptions,t)}notify(t,a,o){const n=this.subscriptions.length;if(n)if(n===1)this.subscriptions[0](t,a,o);else for(let r=0;r<n;r++){const s=this.subscriptions[r];s&&s(t,a,o)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}const Ra=e=>e*1e3,ra=e=>e/1e3;function dy(e,t){return t?e*(1e3/t):0}const uy=(e,t,a)=>(((1-3*a+3*t)*e+(3*a-6*t))*e+3*t)*e,uU=1e-7,mU=12;function pU(e,t,a,o,n){let r,s,l=0;do s=t+(a-t)/2,r=uy(s,o,n)-e,r>0?a=s:t=s;while(Math.abs(r)>uU&&++l<mU);return s}function fi(e,t,a,o){if(e===t&&a===o)return ia;const n=r=>pU(r,0,1,e,a);return r=>r===0||r===1?r:uy(n(r),t,o)}const my=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,py=e=>t=>1-e(1-t),hy=fi(.33,1.53,.69,.99),Mu=py(hy),fy=my(Mu),gy=e=>(e*=2)<1?.5*Mu(e):.5*(2-Math.pow(2,-10*(e-1))),Fu=e=>1-Math.sin(Math.acos(e)),vy=py(Fu),by=my(Fu),hU=fi(.42,0,1,1),fU=fi(0,0,.58,1),yy=fi(.42,0,.58,1),gU=e=>Array.isArray(e)&&typeof e[0]!="number",xy=e=>Array.isArray(e)&&typeof e[0]=="number",Bp={linear:ia,easeIn:hU,easeInOut:yy,easeOut:fU,circIn:Fu,circInOut:by,circOut:vy,backIn:Mu,backInOut:fy,backOut:hy,anticipate:gy},vU=e=>typeof e=="string",zp=e=>{if(xy(e)){Es(e.length===4);const[t,a,o,n]=e;return fi(t,a,o,n)}else if(vU(e))return Es(Bp[e]!==void 0),Bp[e];return e},ji=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"],Vp={value:null,addProjectionMetrics:null};function bU(e,t){let a=new Set,o=new Set,n=!1,r=!1;const s=new WeakSet;let l={delta:0,timestamp:0,isProcessing:!1},c=0;function d(m){s.has(m)&&(u.schedule(m),e()),c++,m(l)}const u={schedule:(m,h=!1,p=!1)=>{const f=p&&n?a:o;return h&&s.add(m),f.has(m)||f.add(m),m},cancel:m=>{o.delete(m),s.delete(m)},process:m=>{if(l=m,n){r=!0;return}n=!0,[a,o]=[o,a],a.forEach(d),t&&Vp.value&&Vp.value.frameloop[t].push(c),c=0,a.clear(),n=!1,r&&(r=!1,u.process(m))}};return u}const yU=40;function wy(e,t){let a=!1,o=!0;const n={delta:0,timestamp:0,isProcessing:!1},r=()=>a=!0,s=ji.reduce((w,P)=>(w[P]=bU(r,t?P:void 0),w),{}),{setup:l,read:c,resolveKeyframes:d,preUpdate:u,update:m,preRender:h,render:p,postRender:v}=s,f=()=>{const w=Ka.useManualTiming?n.timestamp:performance.now();a=!1,Ka.useManualTiming||(n.delta=o?1e3/60:Math.max(Math.min(w-n.timestamp,yU),1)),n.timestamp=w,n.isProcessing=!0,l.process(n),c.process(n),d.process(n),u.process(n),m.process(n),h.process(n),p.process(n),v.process(n),n.isProcessing=!1,a&&t&&(o=!1,e(f))},b=()=>{a=!0,o=!0,n.isProcessing||e(f)};return{schedule:ji.reduce((w,P)=>{const E=s[P];return w[P]=(k,S=!1,R=!1)=>(a||b(),E.schedule(k,S,R)),w},{}),cancel:w=>{for(let P=0;P<ji.length;P++)s[ji[P]].cancel(w)},state:n,steps:s}}const{schedule:dt,cancel:Xa,state:Tt,steps:Vl}=wy(typeof requestAnimationFrame<"u"?requestAnimationFrame:ia,!0);let es;function xU(){es=void 0}const $t={now:()=>(es===void 0&&$t.set(Tt.isProcessing||Ka.useManualTiming?Tt.timestamp:performance.now()),es),set
vendor: 8,899 bytes, line 528
528:e=>{es=e,queueMicrotask(xU)}},Cy=e=>t=>typeof t=="string"&&t.startsWith(e),Py=Cy("--"),wU=Cy("var(--"),Lu=e=>wU(e)?CU.test(e.split("/*")[0].trim()):!1,CU=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,or={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Xr={...or,transform:e=>Ha(0,1,e)},_i={...or,default:1},Rr=e=>Math.round(e*1e5)/1e5,ju=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function PU(e){return e==null}const AU=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,_u=(e,t)=>a=>!!(typeof a=="string"&&AU.test(a)&&a.startsWith(e)||t&&!PU(a)&&Object.prototype.hasOwnProperty.call(a,t)),Ay=(e,t,a)=>o=>{if(typeof o!="string")return o;const[n,r,s,l]=o.match(ju);return{[e]:parseFloat(n),[t]:parseFloat(r),[a]:parseFloat(s),alpha:l!==void 0?parseFloat(l):1}},EU=e=>Ha(0,255,e),ql={...or,transform:e=>Math.round(EU(e))},jo={test:_u("rgb","red"),parse:Ay("red","green","blue"),transform:({red:e,green:t,blue:a,alpha:o=1})=>"rgba("+ql.transform(e)+", "+ql.transform(t)+", "+ql.transform(a)+", "+Rr(Xr.transform(o))+")"};function SU(e){let t="",a="",o="",n="";return e.length>5?(t=e.substring(1,3),a=e.substring(3,5),o=e.substring(5,7),n=e.substring(7,9)):(t=e.substring(1,2),a=e.substring(2,3),o=e.substring(3,4),n=e.substring(4,5),t+=t,a+=a,o+=o,n+=n),{red:parseInt(t,16),green:parseInt(a,16),blue:parseInt(o,16),alpha:n?parseInt(n,16)/255:1}}const Gc={test:_u("#"),parse:SU,transform:jo.transform},gi=e=>({test:t=>typeof t=="string"&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),no=gi("deg"),Da=gi("%"),ke=gi("px"),NU=gi("vh"),kU=gi("vw"),qp={...Da,parse:e=>Da.parse(e)/100,transform:e=>Da.transform(e*100)},gn={test:_u("hsl","hue"),parse:Ay("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:a,alpha:o=1})=>"hsla("+Math.round(e)+", "+Da.transform(Rr(t))+", "+Da.transform(Rr(a))+", "+Rr(Xr.transform(o))+")"},yt={test:e=>jo.test(e)||Gc.test(e)||gn.test(e),parse:e=>jo.test(e)?jo.parse(e):gn.test(e)?gn.parse(e):Gc.parse(e),transform:e=>typeof e=="string"?e:e.hasOwnProperty("red")?jo.transform(e):gn.transform(e),getAnimatableNone:e=>{const t=yt.parse(e);return t.alpha=0,yt.transform(t)}},TU=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function IU(e){var t,a;return isNaN(e)&&typeof e=="string"&&(((t=e.match(ju))==null?void 0:t.length)||0)+(((a=e.match(TU))==null?void 0:a.length)||0)>0}const Ey="number",Sy="color",RU="var",DU="var(",Up="${}",MU=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Yr(e){const t=e.toString(),a=[],o={color:[],number:[],var:[]},n=[];let r=0;const l=t.replace(MU,c=>(yt.test(c)?(o.color.push(r),n.push(Sy),a.push(yt.parse(c))):c.startsWith(DU)?(o.var.push(r),n.push(RU),a.push(c)):(o.number.push(r),n.push(Ey),a.push(parseFloat(c))),++r,Up)).split(Up);return{values:a,split:l,indexes:o,types:n}}function Ny(e){return Yr(e).values}function ky(e){const{split:t,types:a}=Yr(e),o=t.length;return n=>{let r="";for(let s=0;s<o;s++)if(r+=t[s],n[s]!==void 0){const l=a[s];l===Ey?r+=Rr(n[s]):l===Sy?r+=yt.transform(n[s]):r+=n[s]}return r}}const FU=e=>typeof e=="number"?0:yt.test(e)?yt.getAnimatableNone(e):e;function LU(e){const t=Ny(e);return ky(e)(t.map(FU))}const Co={test:IU,parse:Ny,createTransformer:ky,getAnimatableNone:LU};function Ul(e,t,a){return a<0&&(a+=1),a>1&&(a-=1),a<1/6?e+(t-e)*6*a:a<1/2?t:a<2/3?e+(t-e)*(2/3-a)*6:e}function jU({hue:e,saturation:t,lightness:a,alpha:o}){e/=360,t/=100,a/=100;let n=0,r=0,s=0;if(!t)n=r=s=a;else{const l=a<.5?a*(1+t):a+t-a*t,c=2*a-l;n=Ul(c,l,e+1/3),r=Ul(c,l,e),s=Ul(c,l,e-1/3)}return{red:Math.round(n*255),green:Math.round(r*255),blue:Math.round(s*255),alpha:o}}function Ss(e,t){return a=>a>0?t:e}const pt=(e,t,a)=>e+(t-e)*a,Wl=(e,t,a)=>{const o=e*e,n=a*(t*t-o)+o;return n<0?0:Math.sqrt(n)},_U=[Gc,jo,gn],OU=e=>_U.find(t=>t.test(e));function Wp(e){const t=OU(e);if(!t)return!1;let a=t.parse(e);return t===gn&&(a=jU(a)),a}const $p=(e,t)=>{const a=Wp(e),o=Wp(t);if(!a||!o)return Ss(e,t);const n={...a};return r=>(n.red=Wl(a.red,o.red,r),n.green=Wl(a.green,o.green,r),n.blue=Wl(a.blue,o.blue,r),n.alpha=pt(a.alpha,o.alpha,r),jo.transform(n))},Hc=new Set(["none","hidden"]);function BU(e,t){return Hc.has(e)?a=>a<=0?e:t:a=>a>=1?t:e}function zU(e,t){return a=>pt(e,t,a)}function Ou(e){return typeof e=="number"?zU:typeof e=="string"?Lu(e)?Ss:yt.test(e)?$p:UU:Array.isArray(e)?Ty:typeof e=="object"?yt.test(e)?$p:VU:Ss}function Ty(e,t){const a=[...e],o=a.length,n=e.map((r,s)=>Ou(r)(r,t[s]));return r=>{for(let s=0;s<o;s++)a[s]=n[s](r);return a}}function VU(e,t){const a={...e,...t},o={};for(const n in a)e[n]!==void 0&&t[n]!==void 0&&(o[n]=Ou(e[n])(e[n],t[n]));return n=>{for(const r in o)a[r]=o[r](n);return a}}function qU(e,t){const a=[],o={color:0,var:0,number:0};for(let n=0;n<t.values.length;n++){const r=t.types[n],s=e.indexes[r][o[r]],l=e.values[s]??0;a[n]=l,o[r]++}return a}const UU=(e,t)=>{const a=Co.createTransformer(t),o=Yr(e),n=Yr(t);return o.indexes.var.length===n.indexes.var.length&&o.indexes.color.length===n.indexes.color.length&&o.indexes.number.length>=n.indexes.number.length?Hc.has(e)&&!n.values.length||Hc.has(t)&&!o.values.length?BU(e,t):hi(Ty(qU(o,n),n.values),a):Ss(e,t)};function Iy(e,t,a){return typeof e=="number"&&typeof t=="number"&&typeof a=="number"?pt(e,t,a):Ou(e)(e,t)}const WU=e=>{const t=({timestamp:a})=>e(a);return{start:(a=!0)=>dt.update(t,a),stop:()=>Xa(t),now:()=>Tt.isProcessing?Tt.timestamp:$t.now()}},Ry=(e,t,a=10)=>{let o="";const n=Math.max(Math.round(t/a),2);for(let r=0;r<n;r++)o+=Math.round(e(r/(n-1))*1e4)/1e4+", ";return`linear(${o.substring(0,o.length-2)})`},Ns=2e4;function Bu(e){let t=0;const a=50;let o=e.next(t);for(;!o.done&&t<Ns;)t+=a,o=e.next(t);return t>=Ns?1/0:t}function $U(e,t=100,a){const o=a({...e,keyframes:[0,t]}),n=Math.min(Bu(o),Ns);return{type:"keyframes",ease:r=>o.next(n*r).value/t,duration:ra(n)}}const GU=5;function Dy(e,t,a){const o=Math.max(t-GU,0);return dy(a-e(o),t-o)}const gt={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},$l=.001;function HU({duration:e=gt.duration,bounce:t=gt.bounce,velocity:a=gt.velocity,mass:o=gt.mass}){let n,r,s=1-t;s=Ha(gt.minDamping,gt.maxDamping,s),e=Ha(gt.minDuration,gt.maxDuration,ra(e)),s<1?(n=d=>{const u=d*s,m=u*e,h=u-a,p=Kc(d,s),v=Math.exp(-m);return $l-h/p*v},r=d=>{const m=d*s*e,h=m*a+a,p=Math.pow(s,2)*Math.pow(d,2)*e,v=Math.exp(-m),f=Kc(Math.pow(d,2),s);return(-n(d)+$l>0?-1:1)*((h-p)*v)/f}):(n=d=>{const u=Math.exp(-d*e),m=(d-a)*e+1;return-$l+u*m},r=d=>{const u=Math.exp(-d*e),m=(a-d)*(e*e);return u*m});const l=5/e,c=XU(n,r,l);if(e=Ra(e),isNaN(c))return{stiffness:gt.stiffness,damping:gt.damping,duration:e};{const d=Math.pow(c,2)*o;return{stiffness:d,damping:s*2*Math.sqrt(o*d),duration:e}}}const KU=12;function XU(e,t,a){let o=a;for(let n=1;n<KU;n++)o=o-e(o)/t(o);return o}function Kc(e,t){return e*Math.sqrt(1-t*t)}const YU=["duration","bounce"],QU=["stiffness","damping","mass"];function Gp(e,t){return t.some(a=>e[a]!==void 0)}function ZU(e){let t={velocity:gt.velocity,stiffness:gt.stiffness,damping:gt.damping,mass:gt.mass,isResolvedFromDuration:!1,...e};if(!Gp(e,QU)&&Gp(e,YU))if(e.visualDuration){const a=e.visualDuration,o=2*Math.PI/(a*1.2),n=o*o,r=2*Ha(.05,1,1-(e.bounce||0))*Math.sqrt(n);t={...t,mass:gt.mass,stiffness:n,damping:r}}else{const a=HU(e);t={...t,...a,mass:gt.mass},t.isResolvedFromDuration=!0}return t}function ks(e=gt.visualDuration,t=gt.bounce){const a=typeof e!="object"?{visualDuration:e,keyframes:[0,1],bounce:t}:e;let{restSpeed:o,restDelta:n}=a;const r=a.keyframes[0],s=a.keyframes[a.keyframes.length-1],l={done:!1,value:r},{stiffness:c,damping:d,mass:u,duration:m,velocity:h,isResolvedFromDuration:p}=ZU({...a,velocity:-ra(a.velocity||0)}),v=h||0,f=d/(2*Math.sqrt(c*u)),b=s-r,y=ra(Math.sqrt(c/u)),x=Math.abs(b)<5;o||(o=x?gt.restSpeed.granular:gt.restSpeed.default),n||(n=x?gt.restDelta.granular:gt.restDelta.default);let w;if(f<1){const E=Kc(y,f);w=k=>{const S=Math.exp(-f*y*k);return s-S*((v+f*y*b)/E*Math.sin(E*k)+b*Math.cos(E*k))}}else if(f===1)w=E=>s-Math.exp(-y*E)*(b+(v+y*b)*E);else{const E=y*Math.sqrt(f*f-1);w=k=>{const S=Math.exp(-f*y*k),R=Math.min(E*k,300);return s-S*((v+f*y*b)*Math.sinh(R)+E*b*Math.cosh(R))/E}}const P={calculatedDuration:p&&m||null,next:E=>{const k=w(E);if(p)l.done=E>=m;else{let S=E===0?v:0;f<1&&(S=E===0?Ra(v):Dy(w,E,k));const R=Math.abs(S)<=o,I=Math.abs(s-k)<=n;l.done=R&&I}return l.value=l.done?s:k,l},toString:()=>{const E=Math.min(Bu(P),Ns),k=Ry(S=>
528P.next(E*S).value,E,30);return E+"ms "+k},toTransition:()=>{}};return P}ks.applyToOptions=e=>{const t=$U(e,100,ks);return e.ease=t.ease,e.duration=Ra(t.duration),e.type="keyframes",e};function Xc({keyframes:e,velocity:t=0,power:a=.8,timeConstant:o=325,bounceDamping:n=10,bounceStiffness:r=500,modifyTarget:s,min:l,max:c,restDelta:d=.5,restSpeed:u}){const m=e[0],h={done:!1,value:m},p=R=>l!==void 0&&R<l||c!==void 0&&R>c,v=R=>l===void 0?c:c===void 0||Math.abs(l-R)<Math.abs(c-R)?l:c;let f=a*t;const b=m+f,y=s===void 0?b:s(b);y!==b&&(f=y-m);const x=R=>-f*Math.exp(-R/o),w=R=>y+x(R),P=R=>{const I=x(R),M=w(R);h.done=Math.abs(I)<=d,h.value=h.done?y:M};let E,k;const S=R=>{p(h.value)&&(E=R,k=ks({keyframes:[h.value,v(h.value)],velocity:Dy(w,R,h.value),damping:n,stiffness:r,restDelta:d,restSpeed:u}))};return S(0),{calculatedDuration:null,next:R=>{let I=!1;return!k&&E===void 0&&(I=!0,P(R),S(R)),E!==void 0&&R>=E?k.next(R-E):(!I&&P(R),h)}}}function JU(e,t,a){const o=[],n=a||Ka.mix||Iy,r=e.length-1;for(let s=0;s<r;s++){let l=n(e[s],e[s+1]);if(t){const c=Array.isArray(t)?t[s]||ia:t;l=hi(c,l)}o.push(l)}return o}function My(e,t,{clamp:a=!0,ease:o,mixer:n}={}){const r=e.length;if(Es(r===t.length),r===1)return()=>t[0];if(r===2&&t[0]===t[1])return()=>t[1];const s=e[0]===e[1];e[0]>e[r-1]&&(e=[...e].reverse(),t=[...t].reverse());const l=JU(t,o,n),c=l.length,d=u=>{if(s&&u<e[0])return t[0];let m=0;if(c>1)for(;m<e.length-2&&!(u<e[m+1]);m++);const h=Kr(e[m],e[m+1],u);return l[m](h)};return a?u=>d(Ha(e[0],e[r-1],u)):d}function eW(e,t){const a=e[e.length-1];for(let o=1;o<=t;o++){const n=Kr(0,t,o);e.push(pt(a,1,n))}}function tW(e){const t=[0];return eW(t,e.length-1),t}function aW(e,t){return e.map(a=>a*t)}function oW(e,t){return e.map(()=>t||yy).splice(0,e.length-1)}function Dr({duration:e=300,keyframes:t,times:a,ease:o="easeInOut"}){const n=gU(o)?o.map(zp):zp(o),r={done:!1,value:t[0]},s=aW(a&&a.length===t.length?a:tW(t),e),l=My(s,t,{ease:Array.isArray(n)?n:oW(t,n)});return{calculatedDuration:e,next:c=>(r.value=l(c),r.done=c>=e,r)}}const nW=e=>e!==null;function zu(e,{repeat:t,repeatType:a="loop"},o,n=1){const r=e.filter(nW),l=n<0||t&&a!=="loop"&&t%2===1?0:r.length-1;return!l||o===void 0?r[l]:o}const rW={decay:Xc,inertia:Xc,tween:Dr,keyframes:Dr,spring:ks};function Fy(e){typeof e.type=="string"&&(e.type=rW[e.type])}class Vu{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(t=>{this.resolve=t})}notifyFinished(){this.resolve()}then(t,a){return this.finished.then(t,a)}}const iW=e=>e/100;class qu extends Vu{constructor(t){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{var o,n;const{motionValue:a}=this.options;a&&a.updatedAt!==$t.now()&&this.tick($t.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),(n=(o=this.options).onStop)==null||n.call(o))},this.options=t,this.initAnimation(),this.play(),t.autoplay===!1&&this.pause()}initAnimation(){const{options:t}=this;Fy(t);const{type:a=Dr,repeat:o=0,repeatDelay:n=0,repeatType:r,velocity:s=0}=t;let{keyframes:l}=t;const c=a||Dr;c!==Dr&&typeof l[0]!="number"&&(this.mixKeyframes=hi(iW,Iy(l[0],l[1])),l=[0,100]);const d=c({...t,keyframes:l});r==="mirror"&&(this.mirroredGenerator=c({...t,keyframes:[...l].reverse(),velocity:-s})),d.calculatedDuration===null&&(d.calculatedDuration=Bu(d));const{calculatedDuration:u}=d;this.calculatedDuration=u,this.resolvedDuration=u+n,this.totalDuration=this.resolvedDuration*(o+1)-n,this.generator=d}updateTime(t){const a=Math.round(t-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=a}tick(t,a=!1){const{generator:o,totalDuration:n,mixKeyframes:r,mirroredGenerator:s,resolvedDuration:l,calculatedDuration:c}=this;if(this.startTime===null)return o.next(0);const{delay:d=0,keyframes:u,repeat:m,repeatType:h,repeatDelay:p,type:v,onUpdate:f,finalKeyframe:b}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,t):this.speed<0&&(this.startTime=Math.min(t-n/this.speed,this.startTime)),a?this.currentTime=t:this.updateTime(t);const y=this.currentTime-d*(this.playbackSpeed>=0?1:-1),x=this.playbackSpeed>=0?y<0:y>n;this.currentTime=Math.max(y,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=n);let w=this.currentTime,P=o;if(m){const R=Math.min(this.currentTime,n)/l;let I=Math.floor(R),M=R%1;!M&&R>=1&&(M=1),M===1&&I--,I=Math.min(I,m+1),!!(I%2)&&(h==="reverse"?(M=1-M,p&&(M-=p/l)):h==="mirror"&&(P=s)),w=Ha(0,1,M)*l}const E=x?{done:!1,value:u[0]}:P.next(w);r&&(E.value=r(E.value));let{done:k}=E;!x&&c!==null&&(k=this.playbackSpeed>=0?this.currentTime>=n:this.currentTime<=0);const S=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&k);return S&&v!==Xc&&(E.value=zu(u,this.options,b,this.speed)),f&&f(E.value),S&&this.finish(),E}then(t,a){return this.finished.then(t,a)}get duration(){return ra(this.calculatedDuration)}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+ra(t)}get time(){return ra(this.currentTime)}set time(t){var a;t=Ra(t),this.currentTime=t,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=t:this.driver&&(this.startTime=this.driver.now()-t/this.playbackSpeed),(a=this.driver)==null||a.start(!1)}get speed(){return this.playbackSpeed}set speed(t){this.updateTime($t.now());const a=this.playbackSpeed!==t;this.playbackSpeed=t,a&&(this.time=ra(this.currentTime))}play(){var n,r;if(this.isStopped)return;const{driver:t=WU,startTime:a}=this.options;this.driver||(this.driver=t(s=>this.tick(s))),(r=(n=this.options).onPlay)==null||r.call(n);const o=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=o):this.holdTime!==null?this.startTime=o-this.holdTime:this.startTime||(this.startTime=a??o),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime($t.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){var t,a;this.notifyFinished(),this.teardown(),this.state="finished",(a=(t=this.options).onComplete)==null||a.call(t)}cancel(){var t,a;this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),(a=(t=this.options).onCancel)==null||a.call(t)}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(t){return this.startTime=0,this.tick(t,!0)}attachTimeline(t){var a;return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),(a=this.driver)==null||a.stop(),t.observe(this)}}function sW(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}const _o=e=>e*180/Math.PI,Yc=e=>{const t=_o(Math.atan2(e[1],e[0]));return Qc(t)},lW={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:Yc,rotateZ:Yc,skewX:e=>_o(Math.atan(e[1])),skewY:e=>_o(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},Qc=e=>(e=e%360,e<0&&(e+=360),e),Hp=Yc,Kp=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),Xp=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),cW={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:Kp,scaleY:Xp,scale:e=>(Kp(e)+Xp(e))/2,rotateX:e=>Qc(_o(Math.atan2(e[6],e[5]))),rotateY:e=>Qc(_o(Math.atan2(-e[2],e[0]))),rotateZ:Hp,rotate:Hp,skewX:e=>_o(Math.atan(e[4])),skewY:e=>_o(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function Zc(e){return e.includes("scale")?1:0}
528function Jc(e,t){if(!e||e==="none")return Zc(t);const a=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let o,n;if(a)o=cW,n=a;else{const l=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);o=lW,n=l}if(!n)return Zc(t);const r=o[t],s=n[1].split(",").map(uW);return typeof r=="function"?r(s):s[r]}const dW=(e,t)=>{const{transform:a="none"}=getComputedStyle(e);return Jc(a,t)};function uW(e){return parseFloat(e.trim())}const nr=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],rr=new Set(nr),Yp=e=>e===or||e===ke,mW=new Set(["x","y","z"]),pW=nr.filter(e=>!mW.has(e));function hW(e){const t=[];return pW.forEach(a=>{const o=e.getValue(a);o!==void 0&&(t.push([a,o.get()]),o.set(a.startsWith("scale")?1:0))}),t}const Qo={width:({x:e},{paddingLeft:t="0",paddingRight:a="0"})=>e.max-e.min-parseFloat(t)-parseFloat(a),height:({y:e},{paddingTop:t="0",paddingBottom:a="0"})=>e.max-e.min-parseFloat(t)-parseFloat(a),top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:(e,{transform:t})=>Jc(t,"x"),y:(e,{transform:t})=>Jc(t,"y")};Qo.translateX=Qo.x;Qo.translateY=Qo.y;const Zo=new Set;let ed=!1,td=!1,ad=!1;function Ly(){if(td){const e=Array.from(Zo).filter(o=>o.needsMeasurement),t=new Set(e.map(o=>o.element)),a=new Map;t.forEach(o=>{const n=hW(o);n.length&&(a.set(o,n),o.render())}),e.forEach(o=>o.measureInitialState()),t.forEach(o=>{o.render();const n=a.get(o);n&&n.forEach(([r,s])=>{var l;(l=o.getValue(r))==null||l.set(s)})}),e.forEach(o=>o.measureEndState()),e.forEach(o=>{o.suspendedScrollY!==void 0&&window.scrollTo(0,o.suspendedScrollY)})}td=!1,ed=!1,Zo.forEach(e=>e.complete(ad)),Zo.clear()}function jy(){Zo.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(td=!0)})}function fW(){ad=!0,jy(),Ly(),ad=!1}class Uu{constructor(t,a,o,n,r,s=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...t],this.onComplete=a,this.name=o,this.motionValue=n,this.element=r,this.isAsync=s}scheduleResolve(){this.state="scheduled",this.isAsync?(Zo.add(this),ed||(ed=!0,dt.read(jy),dt.resolveKeyframes(Ly))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:t,name:a,element:o,motionValue:n}=this;if(t[0]===null){const r=n==null?void 0:n.get(),s=t[t.length-1];if(r!==void 0)t[0]=r;else if(o&&a){const l=o.readValue(a,s);l!=null&&(t[0]=l)}t[0]===void 0&&(t[0]=s),n&&r===void 0&&n.set(t[0])}sW(t)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(t=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,t),Zo.delete(this)}cancel(){this.state==="scheduled"&&(Zo.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const gW=e=>e.startsWith("--");function vW(e,t,a){gW(t)?e.style.setProperty(t,a):e.style[t]=a}const bW=Ru(()=>window.ScrollTimeline!==void 0),yW={};function xW(e,t){const a=Ru(e);return()=>yW[t]??a()}const _y=xW(()=>{try{document.createElement("div").animate({opacity:0}
528,{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),Er=([e,t,a,o])=>`cubic-bezier(${e}, ${t}, ${a}, ${o})`,Qp={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:Er([0,.65,.55,1]),circOut:Er([.55,0,1,.45]),backIn:Er([.31,.01,.66,-.59]),backOut:Er([.33,1.53,.69,.99])};function Oy(e,t){if(e)return typeof e=="function"?_y()?Ry(e,t):"ease-out":xy(e)?Er(e):Array.isArray(e)?e.map(a=>Oy(a,t)||Qp.easeOut):Qp[e]}function wW(e,t,a,{delay:o=0,duration:n=300,repeat:r=0,repeatType:s="loop",ease:l="easeOut",times:c}={},d=void 0){const u={[t]:a};c&&(u.offset=c);const m=Oy(l,n);Array.isArray(m)&&(u.easing=m);const h={delay:o,duration:n,easing:Array.isArray(m)?"linear":m,fill:"both",iterations:r+1,direction:s==="reverse"?"alternate":"normal"};return d&&(h.pseudoElement=d),e.animate(u,h)}function By(e){return typeof e=="function"&&"applyToOptions"in e}function CW({type:e,...t}){return By(e)&&_y()?e.applyToOptions(t):(t.duration??(t.duration=300),t.ease??(t.ease="easeOut"),t)}class PW extends Vu{constructor(t){if(super(),this.finishedTime=null,this.isStopped=!1,!t)return;const{element:a,name:o,keyframes:n,pseudoElement:r,allowFlatten:s=!1,finalKeyframe:l,onComplete:c}=t;this.isPseudoElement=!!r,this.allowFlatten=s,this.options=t,Es(typeof t.type!="string");const d=CW(t);this.animation=wW(a,o,n,d,r),d.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!r){const u=zu(n,this.options,l,this.speed);this.updateMotionValue?this.updateMotionValue(u):vW(a,o,u),this.animation.cancel()}c==null||c(),this.notifyFinished()}}play(){this.isStopped||(this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){var t,a;(a=(t=this.animation).finish)==null||a.call(t)}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:t}=this;t==="idle"||t==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){var t,a;this.isPseudoElement||(a=(t=this.animation).commitStyles)==null||a.call(t)}get duration(){var a,o;const t=((o=(a=this.animation.effect)==null?void 0:a.getComputedTiming)==null?void 0:o.call(a).duration)||0;return ra(Number(t))}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+ra(t)}get time(){return ra(Number(this.animation.currentTime)||0)}set time(t){this.finishedTime=null,this.animation.currentTime=Ra(t)}get speed(){return this.animation.playbackRate}set speed(t){t<0&&(this.finishedTime=null),this.animation.playbackRate=t}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return Number(this.animation.startTime)}set startTime(t){this.animation.startTime=t}attachTimeline({timeline:t,observe:a}){var o;return this.allowFlatten&&((o=this.animation.effect)==null||o.updateTiming({easing:"linear"})),this.animation.onfinish=null,t&&bW()?(this.animation.timeline=t,ia):a(this)}}const zy={anticipate:gy,backInOut:fy,circInOut:by};function AW(e){return e in zy}function EW(e){typeof e.ease=="string"&&AW(e.ease)&&(e.ease=zy[e.ease])}const Zp=10;class SW extends PW{constructor(t){EW(t),Fy(t),super(t),t.startTime&&(this.startTime=t.startTime),this.options=t}updateMotionValue(t){const{motionValue:a,onUpdate:o,onComplete:n,element:r,...s}=this.options;if(!a)return;if(t!==void 0){a.set(t);return}const l=new qu({...s,autoplay:!1}),c=Ra(this.finishedTime??this.time);a.setWithVelocity(l.sample(c-Zp).value,l.sample(c).value,Zp),l.stop()}}const Jp=(e,t)=>t==="zIndex"?!1:!!(typeof e=="number"||Array.isArray(e)||typeof e=="string"&&(Co.test(e)||e==="0")&&!e.startsWith("url("));function NW(e){const t=e[0];if(e.length===1)return!0;for(let a=0;a<e.length;a++)if(e[a]!==t)return!0}function kW(e,t,a,o){const n=e[0];if(n===null)return!1;if(t==="display"||t==="visibility")return!0;const r=e[e.length-1],s=Jp(n,t),l=Jp(r,t);return!s||!l?!1:NW(e)||(a==="spring"||By(a))&&o}function od(e){e.duration=0,e.type="keyframes"}const TW=new Set(["opacity","clipPath","filter","transform"]),IW=Ru(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function RW(e){var u;const{motionValue:t,name:a,repeatDelay:o,repeatType:n,damping:r,type:s}=e;if(!(((u=t==null?void 0:t.owner)==null?void 0:u.current)instanceof HTMLElement))return!1;const{onUpdate:c,transformTemplate:d}=t.owner.getProps();return IW()&&a&&TW.has(a)&&(a!=="transform"||!d)&&!c&&!o&&n!=="mirror"&&r!==0&&s!=="inertia"}const DW=40;class MW extends Vu{constructor({autoplay:t=!0,delay:a=0,type:o="keyframes",repeat:n=0,repeatDelay:r=0,repeatType:s="loop",keyframes:l,name:c,motionValue:d,element:u,...m}){var v;super(),this.stop=()=>{var f,b;this._animation&&(this._animation.stop(),(f=this.stopTimeline)==null||f.call(this)),(b=this.keyframeResolver)==null||b.cancel()},this.createdAt=$t.now();const h={autoplay:t,delay:a,type:o,repeat:n,repeatDelay:r,repeatType:s,name:c,motionValue:d,element:u,...m},p=(u==null?void 0:u.KeyframeResolver)||Uu;this.keyframeResolver=new p(l,(f,b,y)=>this.onKeyframesResolved(f,b,h,!y),c,d,u),(v=this.keyframeResolver)==null||v.scheduleResolve()}onKeyframesResolved(t,a,o,n){this.keyframeResolver=void 0;const{name:r,type:s,velocity:l,delay:c,isHandoff:d,onUpdate:u}=o;this.resolvedAt=$t.now(),kW(t,r,s,l)||((Ka.instantAnimations||!c)&&(u==null||u(zu(t,o,a))),t[0]=t[t.length-1],od(o),o.repeat=0);const h={startTime:n?this.resolvedAt?this.resolvedAt-this.createdAt>DW?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:a,...o,keyframes:t},p=!d&&RW(h)?new SW({...h,element:h.motionValue.owner.current}):new qu(h);p.finished.then(()=>this.notifyFinished()).catch(ia),this.pendingTimeline&&(this.stopTimeline=p.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=p}get finished(){return this._animation?this.animation.finished:this._finished}then(t,a){return this.finished.finally(t).then(()=>{})}get animation(){var t;return this._animation||((t=this.keyframeResolver)==null||t.resume(),fW()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(t){this.animation.time=t}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(t){this.animation.speed=t}get startTime(){return this.animation.startTime}attachTimeline(t){return this._animation?this.stopTimeline=this.animation.attachTimeline(t):this.pendingTimeline=t,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){var t;this._animation&&this.animation.cancel(),(t=this.keyframeResolver)==null||t.cancel()}}const FW=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function LW(e){const t=FW.exec(e);if(!t)return[,];const[,a,o,n]=t;return[`--${a??o}`,n]}function Vy(e,t,a=1){const[o,n]=LW(e);if(!o)return;const r=window.getComputedStyle(t).getPropertyValue(o);if(r){const s=r.trim();return sy(s)?parseFloat(s):s}return Lu(n)?Vy(n,t,a+1):n}function Wu(e,t){return(e==null?void 0:e[t])??(e==null?void 0:e.default)??e}const qy=new Set(["width","height","top","left","right","bottom",...nr]),jW={test:e=>e==="auto",parse:e=>e},Uy=e=>t=>t.test(e),Wy=[or,ke,Da,no,kU,NU,jW],eh=e=>Wy.find(Uy(e));function _W(e){return typeof e=="number"?e===0:e!==null?e==="none"||e==="0"||cy(e):!0}const OW=new Set(["brightness","contrast","saturate","opacity"]);function BW(e){const[t,a]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[o]=a.match(ju)||[];if(!o)return e;const n=a.replace(o,"");let r=OW.has(t)?1:0;return o!==a&&(r*=100),t+"("+r+n+")"}const zW=/\b([a-z-]*)\(.*?\)/gu,nd={...Co,getAnimatableNone:e=>{const t=e.match(zW);return t?t.map(BW).join(" "):e}},th={...or,transform:Math.round},VW={rotate:no,rotateX:no,rotateY:no,rotateZ:no,scale:_i,scaleX:_i,scaleY:_i,scaleZ:_i,skew:no,skewX:no,skewY:no,distance:ke,translateX:ke,translateY:ke,translateZ:ke,x:ke,y:ke,z:ke,perspective:ke,transformPerspective:ke,opacity:Xr,originX:qp,originY:qp,originZ:ke},$u={borderWidth:ke,borderTopWidth:ke,borderRightWidth:ke,borderBottomWidth:ke,borderLeftWidth:ke,borderRadius:ke,radiu
vendor: 2,390 bytes, line 528
528s:ke,borderTopLeftRadius:ke,borderTopRightRadius:ke,borderBottomRightRadius:ke,borderBottomLeftRadius:ke,width:ke,maxWidth:ke,height:ke,maxHeight:ke,top:ke,right:ke,bottom:ke,left:ke,padding:ke,paddingTop:ke,paddingRight:ke,paddingBottom:ke,paddingLeft:ke,margin:ke,marginTop:ke,marginRight:ke,marginBottom:ke,marginLeft:ke,backgroundPositionX:ke,backgroundPositionY:ke,...VW,zIndex:th,fillOpacity:Xr,strokeOpacity:Xr,numOctaves:th},qW={...$u,color:yt,backgroundColor:yt,outlineColor:yt,fill:yt,stroke:yt,borderColor:yt,borderTopColor:yt,borderRightColor:yt,borderBottomColor:yt,borderLeftColor:yt,filter:nd,WebkitFilter:nd},$y=e=>qW[e];function Gy(e,t){let a=$y(e);return a!==nd&&(a=Co),a.getAnimatableNone?a.getAnimatableNone(t):void 0}const UW=new Set(["auto","none","0"]);function WW(e,t,a){let o=0,n;for(;o<e.length&&!n;){const r=e[o];typeof r=="string"&&!UW.has(r)&&Yr(r).values.length&&(n=e[o]),o++}if(n&&a)for(const r of t)e[r]=Gy(a,n)}class $W extends Uu{constructor(t,a,o,n,r){super(t,a,o,n,r,!0)}readKeyframes(){const{unresolvedKeyframes:t,element:a,name:o}=this;if(!a||!a.current)return;super.readKeyframes();for(let c=0;c<t.length;c++){let d=t[c];if(typeof d=="string"&&(d=d.trim(),Lu(d))){const u=Vy(d,a.current);u!==void 0&&(t[c]=u),c===t.length-1&&(this.finalKeyframe=d)}}if(this.resolveNoneKeyframes(),!qy.has(o)||t.length!==2)return;const[n,r]=t,s=eh(n),l=eh(r);if(s!==l)if(Yp(s)&&Yp(l))for(let c=0;c<t.length;c++){const d=t[c];typeof d=="string"&&(t[c]=parseFloat(d))}else Qo[o]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:t,name:a}=this,o=[];for(let n=0;n<t.length;n++)(t[n]===null||_W(t[n]))&&o.push(n);o.length&&WW(t,o,a)}measureInitialState(){const{element:t,unresolvedKeyframes:a,name:o}=this;if(!t||!t.current)return;o==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=Qo[o](t.measureViewportBox(),window.getComputedStyle(t.current)),a[0]=this.measuredOrigin;const n=a[a.length-1];n!==void 0&&t.getValue(o,n).jump(n,!1)}measureEndState(){var l;const{element:t,name:a,unresolvedKeyframes:o}=this;if(!t||!t.current)return;const n=t.getValue(a);n&&n.jump(this.measuredOrigin,!1);const r=o.length-1,s=o[r];o[r]=Qo[a](t.measureViewportBox(),window.getComputedStyle(t.current)),s!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=s),(l=this.removedTransforms)!=null&&l.length&&this.removedTransforms.forEac
528h(([c,d])=>{t.getValue(c).set(d)}),this.resolveNoneKeyframes()}}function GW(e,t,a){if(e instanceof EventTarget)return[e];if(typeof e=="string"){const n=document.querySelectorAll(e);return n?Array.from(n):[]}return Array.from(e)}const Hy=(e,t)=>t&&typeof e=="number"?t.transform(e):e;function Ky(e){return ly(e)&&"offsetHeight"in e}const ah=30,HW=e=>!isNaN(parseFloat(e)),Mr={current:void 0};class KW{constructor(t,a={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=o=>{var r;const n=$t.now();if(this.updatedAt!==n&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(o),this.current!==this.prev&&((r=this.events.change)==null||r.notify(this.current),this.dependents))for(const s of this.dependents)s.dirty()},this.hasAnimated=!1,this.setCurrent(t),this.owner=a.owner}setCurrent(t){this.current=t,this.updatedAt=$t.now(),this.canTrackVelocity===null&&t!==void 0&&(this.canTrackVelocity=HW(this.current))}setPrevFrameValue(t=this.current){this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt}onChange(t){return this.on("change",t)}on(t,a){this.events[t]||(this.events[t]=new Du);const o=this.events[t].add(a);return t==="change"?()=>{o(),dt.read(()=>{this.events.change.getSize()||this.stop()})}:o}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,a){this.passiveEffect=t,this.stopPassiveEffect=a}set(t){this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t)}setWithVelocity(t,a,o){this.set(a),this.prev=void 0,this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt-o}jump(t,a=!0){this.updateAndNotify(t),this.prev=t,this.prevUpdatedAt=this.prevFrameValue=void 0,a&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){var t;(t=this.events.change)==null||t.notify(this.current)}addDependent(t){this.dependents||(this.dependents=new Set),this.dependents.add(t)}removeDependent(t){this.dependents&&this.dependents.delete(t)}get(){return Mr.current&&Mr.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const t=$t.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||t-this.updatedAt>ah)return 0;const a=Math.min(this.updatedAt-this.prevUpdatedAt,ah);return dy(parseFloat(this.current)-parseFloat(this.prevFrameValue),a)}start(t){return this.stop(),new Promise(a=>{this.hasAnimated=!0,this.animation=t(a),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){var t,a;(t=this.dependents)==null||t.clear(),(a=this.events.destroy)==null||a.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function nn(e,t){return new KW(e,t)}const{schedule:Gu,cancel:rJ}=wy(queueMicrotask,!1),ma={x:!1,y:!1};function Xy(){return ma.x||ma.y}function XW(e){return e==="x"||e==="y"?ma[e]?null:(ma[e]=!0,()=>{ma[e]=!1}):ma.x||ma.y?null:(ma.x=ma.y=!0,()=>{ma.x=ma.y=!1})}function Yy(e,t){const a=GW(e),o=new AbortController,n={passive:!0,...t,signal:o.signal};return[a,n,()=>o.abort()]}function oh(e){return!(e.pointerType==="touch"||Xy())}function YW(e,t,a={}){const[o,n,r]=Yy(e,a),s=l=>{if(!oh(l))return;const{target:c}=l,d=t(c,l);if(typeof d!="function"||!c)return;const u=m=>{oh(m)&&(d(m),c.removeEventListener("pointerleave",u))};c.addEventListener("pointerleave",u,n)};return o.forEach(l=>{l.addEventListener("pointerenter",s,n)}),r}const Qy=(e,t)=>t?e===t?!0:Qy(e,t.parentElement):!1,Hu=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1,QW=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function ZW(e){return QW.has(e.tagName)||e.tabIndex!==-1}const ts=new WeakSet;function nh(e){return t=>{t.key==="Enter"&&e(t)}}function Gl(e,t){e.dispatchEvent(new PointerEvent("pointer"+t,{isPrimary:!0,bubbles:!0}))}const JW=(e,t)=>{const a=e.currentTarget;if(!a)return;const o=nh(()=>
528{if(ts.has(a))return;Gl(a,"down");const n=nh(()=>{Gl(a,"up")}),r=()=>Gl(a,"cancel");a.addEventListener("keyup",n,t),a.addEventListener("blur",r,t)});a.addEventListener("keydown",o,t),a.addEventListener("blur",()=>a.removeEventListener("keydown",o),t)};function rh(e){return Hu(e)&&!Xy()}function e$(e,t,a={}){const[o,n,r]=Yy(e,a),s=l=>{const c=l.currentTarget;if(!rh(l))return;ts.add(c);const d=t(c,l),u=(p,v)=>{window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",h),ts.has(c)&&ts.delete(c),rh(p)&&typeof d=="function"&&d(p,{success:v})},m=p=>{u(p,c===window||c===document||a.useGlobalTarget||Qy(c,p.target))},h=p=>{u(p,!1)};window.addEventListener("pointerup",m,n),window.addEventListener("pointercancel",h,n)};return o.forEach(l=>{(a.useGlobalTarget?window:l).addEventListener("pointerdown",s,n),Ky(l)&&(l.addEventListener("focus",d=>JW(d,n)),!ZW(l)&&!l.hasAttribute("tabindex")&&(l.tabIndex=0))}),r}function Zy(e){return ly(e)&&"ownerSVGElement"in e}function t$(e){return Zy(e)&&e.tagName==="svg"}function a$(...e){const t=!Array.isArray(e[0]),a=t?0:-1,o=e[0+a],n=e[1+a],r=e[2+a],s=e[3+a],l=My(n,r,s);return t?l(o):l}const Mt=e=>!!(e&&e.getVelocity),o$=[...Wy,yt,Co],n$=e=>o$.find(Uy(e)),il=g.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"});function ih(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function r$(...e){return t=>{let a=!1;const o=e.map(n=>{const r=ih(n,t);return!a&&typeof r=="function"&&(a=!0),r});if(a)return()=>{for(let n=0;n<o.length;n++){const r=o[n];typeof r=="function"?r():ih(e[n],null)}}}}function i$(...e){return g.useCallback(r$(...e),e)}class s$ extends g.Component{getSnapshotBeforeUpdate(t){const a=this.props.childRef.current;if(a&&t.isPresent&&!this.props.isPresent){const o=a.offsetParent,n=Ky(o)&&o.offsetWidth||0,r=this.props.sizeRef.current;r.height=a.offsetHeight||0,r.width=a.offsetWidth||0,r.top=a.offsetTop,r.left=a.offsetLeft,r.right=n-r.width-r.left}return null}componentDidUpdate(){}render(){return this.props.children}}function l$({children:e,isPresent:t,anchorX:a,root:o}){const n=g.useId(),r=g.useRef(null),s=g.useRef({width:0,height:0,top:0,left:0,right:0}),{nonce:l}=g.useContext(il),c=i$(r,e==null?void 0:e.ref);return g.useInsertionEffect(()=>{const{width:d,height:u,top:m,left:h,right:p}=s.current;if(t||!r.current||!d||!u)return;const v=a==="left"?`left: ${h}`:`right: ${p}`;r.current.dataset.motionPopId=n;const f=document.createElement("style");l&&(f.nonce=l);const b=o??document.head;return b.appendChild(f),f.sheet&&f.sheet.insertRule(` 529 [data-motion-pop-id="${n}"] { 530 position: absolute !important; 531 width: ${d}px !important; 532 height: ${u}px !important; 533 ${v}px !important; 534 top: ${m}px !important; 535 } 536 `),()=>{b.contains(f)&&b.removeChild(f)}},[t]),i.jsx(s$,{isPresent:t,childRef:r,sizeRef:s,children:g.cloneElement(e,{ref:c})})}const c$=({children:e,initial:t,isPresent:a,onExitComplete:o,custom:n,presenceAffectsLayout:r,mode:s,anchorX:l,root:c})=>{const d=pi(d$),u=g.useId();let m=!0,h=g.useMemo(()=>(m=!1,{id:u,initial:t,isPresent:a,custom:n,onExitComplete:p=>{d.set(p,!0);for(const v of d.values())if(!v)return;o&&o()},register:p=>(d.set(p,!1),()=>d.delete(p))}),[a,d,o]);return r&&m&&(h={...h}),g.useMemo(()=>{d.forEach((p,v)=>d.set(v,!1))},[a]),g.useEffect(()=>{!a&&!d.size&&o&&o()},[a]),s==="popLayout"&&(e=i.jsx(l$,{isPresent:a,anchorX:l,root:c,children:e})),i.jsx(rl.Provider,{value:h,children:e})};function d$(){return new Map}function Jy(e=!0){const t=g.useContext(rl);if(t===null)return[!0,null];const{isPresent:a,onExitComplete:o,register:n}=t,r=g.useId();g.useEffect(()=>{if(e)return n(r)},[e]);const s=g.useCallback(()=>e&&o&&o(r),[r,o,e]);return!a&&o?[!1,s]:[!0]}const Oi=e=>e.key||"";function sh(e){const t=[];return g.Children.forEach(e,a=>{g.isValidElement(a)&&t.push(a)}),t}const sl=({children:e,custom:t,initial:a=!0,onExitComplete:o,presenceAffectsLayout:n=!0,mode:r="sync",propagate:s=!1,anchorX:l="left",root:c})=>{const[d,u]=Jy(s),m=g.useMemo(()=>sh(e),[e]),h=s&&!d?[]:m.map(Oi),p=g.useRef(!0),v=g.useRef(m),f=pi(()=>new Map),[b,y]=g.useState(m),[x,w]=g.useState(m);ku(()=>{p.current=!1,v.current=m;for(let k=0;k<x.length;k++){const S=Oi(x[k]);h.includes(S)?f.delete(S):f.get(S)!==!0&&f.set(S,!1)}},[x,h.length,h.join("-")]);const P=[];if(m!==b){let k=[...m];for(let S=0;S<x.length;S++){const R=x[S],I=Oi(R);h.includes(I)||(k.splice(S,0,R),P.push(R))}return r==="wait"&&P.length&&(k=P),w(sh(k)),y(m),null}const{forceRender:E}=g.useContext(Su);return i.jsx(i.Fragment,{children:x.map(k=>{const S=Oi(k),R=s&&!d?!1:m===x||h.includes(S),I=()=>
vendor: 18,598 bytes, line 536
536{if(f.has(S))f.set(S,!0);else return;let M=!0;f.forEach(q=>{q||(M=!1)}),M&&(E==null||E(),w(v.current),s&&(u==null||u()),o&&o())};return i.jsx(c$,{isPresent:R,initial:!p.current||a?void 0:!1,custom:t,presenceAffectsLayout:n,mode:r,root:c,onExitComplete:R?void 0:I,anchorX:l,children:k},S)})})},ex=g.createContext({strict:!1}),lh={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},Xn={};for(const e in lh)Xn[e]={isEnabled:t=>lh[e].some(a=>!!t[a])};function u$(e){for(const t in e)Xn[t]={...Xn[t],...e[t]}}const m$=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function Ts(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||e.startsWith("onLayout")||m$.has(e)}let tx=e=>!Ts(e);function p$(e){typeof e=="function"&&(tx=t=>t.startsWith("on")?!Ts(t):e(t))}try{p$(require("@emotion/is-prop-valid").default)}catch{}function h$(e,t,a){const o={};for(const n in e)n==="values"&&typeof e.values=="object"||(tx(n)||a===!0&&Ts(n)||!t&&!Ts(n)||e.draggable&&n.startsWith("onDrag"))&&(o[n]=e[n]);return o}const ll=g.createContext({});function cl(e){return e!==null&&typeof e=="object"&&typeof e.start=="function"}function Qr(e){return typeof e=="string"||Array.isArray(e)}const Ku=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],Xu=["initial",...Ku];function dl(e){return cl(e.animate)||Xu.some(t=>Qr(e[t]))}function ax(e){return!!(dl(e)||e.variants)}function f$(e,t){if(dl(e)){const{initial:a,animate:o}=e;return{initial:a===!1||Qr(a)?a:void 0,animate:Qr(o)?o:void 0}}return e.inherit!==!1?t:{}}function g$(e){const{initial:t,animate:a}=f$(e,g.useContext(ll));return g.useMemo(()=>({initial:t,animate:a}),[ch(t),ch(a)])}function ch(e){return Array.isArray(e)?e.join(" "):e}function dh(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const mr={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(ke.test(e))e=parseFloat(e);else return e;const a=dh(e,t.target.x),o=dh(e,t.target.y);return`${a}% ${o}%`}},v$={correct:(e,{treeScale:t,projectionDelta:a})=>{const o=e,n=Co.parse(e);if(n.length>5)return o;const r=Co.createTransformer(e),s=typeof n[0]!="number"?1:0,l=a.x.scale*t.x,c=a.y.scale*t.y;n[0+s]/=l,n[1+s]/=c;const d=pt(l,c,.5);return typeof n[2+s]=="number"&&(n[2+s]/=d),typeof n[3+s]=="number"&&(n[3+s]/=d),r(n)}},rd={borderRadius:{...mr,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:mr,borderTopRightRadius:mr,borderBottomLeftRadius:mr,borderBottomRightRadius:mr,boxShadow:v$};function ox(e,{layout:t,layoutId:a}){return rr.has(e)||e.startsWith("origin")||(t||a!==void 0)&&(!!rd[e]||e==="opacity")}const b$={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},y$=nr.length;function x$(e,t,a){let o="",n=!0;for(let r=0;r<y$;r++){const s=nr[r],l=e[s];if(l===void 0)continue;let c=!0;if(typeof l=="number"?c=l===(s.startsWith("scale")?1:0):c=parseFloat(l)===0,!c||a){const d=Hy(l,$u[s]);if(!c){n=!1;const u=b$[s]||s;o+=`${u}(${d}) `}a&&(t[s]=d)}}return o=o.trim(),a?o=a(t,n?"":o):n&&(o="none"),o}function Yu(e,t,a){const{style:o,vars:n,transformOrigin:r}=e;let s=!1,l=!1;for(const c in t){const d=t[c];if(rr.has(c)){s=!0;continue}else if(Py(c)){n[c]=d;continue}else{const u=Hy(d,$u[c]);c.startsWith("origin")?(l=!0,r[c]=u):o[c]=u}}if(t.transform||(s||a?o.transform=x$(t,e.transform,a):o.transform&&(o.transform="none")),l){const{originX:c="50%",originY:d="50%",originZ:u=0}=r;o.transformOrigin=`${c} ${d} ${u}`}}const Qu=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function nx(e,t,a){for(const o in t)!Mt(t[o])&&!ox(o,a)&&(e[o]=t[o])}function w$({transformTemplate:e},t){return g.useMemo(()=>{const a=Qu();return Yu(a,t,e),Object.assign({},a.vars,a.style)},[t])}function C$(e,t){const a=e.style||{},o={};return nx(o,a,e),Object.assign(o,w$(e,t)),o}function P$(e,t){const a={},o=C$(e,t);return e.drag&&e.dragListener!==!1&&(a.draggable=!1,o.userSelect=o.WebkitUserSelect=o.WebkitTouchCallout="none",o.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(a.tabIndex=0),a.style=o,a}const A$={offset:"stroke-dashoffset",array:"stroke-dasharray"},E$={offset:"strokeDashoffset",array:"strokeDasharray"};function S$(e,t,a=1,o=0,n=!0){e.pathLength=1;const r=n?A$:E$;e[r.offset]=ke.transform(-o);const s=ke.transform(t),l=ke.transform(a);e[r.array]=`${s} ${l}`}function rx(e,{attrX:t,attrY:a,attrScale:o,pathLength:n,pathSpacing:r=1,pathOffset:s=0,...l},c,d,u){if(Yu(e,l,d),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:m,style:h}=e;m.transform&&(h.transform=m.transform,delete m.transform),(h.transform||m.transformOrigin)&&(h.transformOrigin=m.transformOrigin??"50% 50%",delete m.transformOrigin),h.transform&&(h.transformBox=(u==null?void 0:u.transformBox)??"fill-box",delete m.transformBox),t!==void 0&&(m.x=t),a!==void 0&&(m.y=a),o!==void 0&&(m.scale=o),n!==void 0&&S$(m,n,r,s,!1)}const ix=()=>({...Qu(),attrs:{}}),sx=e=>typeof e=="string"&&e.toLowerCase()==="svg";function N$(e,t,a,o){const n=g.useMemo(()=>{const r=ix();return rx(r,t,sx(o),e.transformTemplate,e.style),{...r.attrs,style:{...r.style}}},[t]);if(e.style){const r={};nx(r,e.style,e),n.style={...r,...n.style}}return n}const k$=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function Zu(e){return typeof e!="string"||e.includes("-")?!1:!!(k$.indexOf(e)>-1||/[A-Z]/u.test(e))}function T$(e,t,a,{latestValues:o},n,r=!1){const l=(Zu(e)?N$:P$)(t,o,n,e),c=h$(t,typeof e=="string",r),d=e!==g.Fragment?{...c,...l,ref:a}:{},{children:u}=t,m=g.useMemo(()=>Mt(u)?u.get():u,[u]);return g.createElement(e,{...d,children:m})}function uh(e){const t=[{},{}];return e==null||e.values.forEach((a,o)=>{t[0][o]=a.get(),t[1][o]=a.getVelocity()}),t}function Ju(e,t,a,o){if(typeof t=="function"){const[n,r]=uh(o);t=t(a!==void 0?a:e.custom,n,r)}if(typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"){const[n,r]=uh(o);t=t(a!==void 0?a:e.custom,n,r)}return t}function as(e){return Mt(e)?e.get():e}function I$({scrapeMotionValuesFromProps:e,createRenderState:t},a,o,n){return{latestValues:R$(a,o,n,e),renderState:t()}}function R$(e,t,a,o){const n={},r=o(e,{});for(const h in r)n[h]=as(r[h]);let{initial:s,animate:l}=e;const c=dl(e),d=ax(e);t&&d&&!c&&e.inherit!==!1&&(s===void 0&&(s=t.initial),l===void 0&&(l=t.animate));let u=a?a.initial===!1:!1;u=u||s===!1;const m=u?l:s;if(m&&typeof m!="boolean"&&!cl(m)){const h=Array.isArray(m)?m:[m];for(let p=0;p<h.length;p++){const v=Ju(e,h[p]);if(v){const{transitionEnd:f,transition:b,...y}=v;for(const x in y){let w=y[x];if(Array.isArray(w)){const P=u?w.length-1:0;w=w[P]}w!==null&&(n[x]=w)}for(const x in f)n[x]=f[x]}}}return n}const lx=e=>(t,a)=>{const o=g.useContext(ll),n=g.useContext(rl),r=()=>I$(e,t,o,n);return a?r():pi(r)};function em(e,t,a){var r;const{style:o}=e,n={};for(const s in o)(Mt(o[s])||t.style&&Mt(t.style[s])||ox(s,e)||((r=a==null?void 0:a.getValue(s))==null?void 0:r.liveStyle)!==void 0)&&(n[s]=o[s]);return n}const D$=lx({scrapeMotionValuesFromProps:em,createRenderState:Qu});function cx(e,t,a){const o=em(e,t,a);for(const n in e)if(Mt(e[n])||Mt(t[n])){const r=nr.indexOf(n)!==-1?"attr"+n.charAt(0).toUpperCase()+n.substring(1):n;o[r]=e[n]}return o}const M$=lx({scrapeMotionValuesFromProps:cx,createRenderState:ix}),F$=Symbol.for("motionComponentSymbol");function vn(e){return e&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function L$(e,t,a){return g.useCallback(o=>{o&&e.onMount&&e.onMount(o),t&&(o?t.mount(o):t.unmount()),a&&(typeof a=="function"?a(o):vn(a)&&(a.current=o))},[t])}const tm=e=>e.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),j$="framerAppearId",dx="data-"+tm(j$),ux=g.createContext({});function _$(e,t,a,o,n){var f,b;const{visualElement:r}=g.useContext(ll),s=g.useContext(ex),l=g.useContext(rl),c=g.useContext(il).reducedMotion,d=g.useRef(null);o=o||s.renderer,!d.current&&o&&(d.current=o(e,{visualState:t,parent:r,props:a,presenceContext:l,blockInitialAnimation:l?l.initial===!1:!1,reducedMotionConfig:c}));const u=d.current,m=g.useContext(ux);u&&!u.projection&&n&&(u.type==="html"||u.type==="svg")&&O$(d.current,a,n,m);const h=g.useRef(!1);g.useInsertionEffect(()=>{u&&h.current&&u.update(a,l)});const p=a[dx],v=g.useRef(!!p&&!((f=window.MotionHandoffIsComplete)!=null&&f.call(window,p))&&((b=window.MotionHasOptimisedAnimation)==null?void 0:b.call(window,p)));return ku(()=>{u&&(h.current=!0,window.MotionIsMounted=!0,u.updateFeatures(),u.scheduleRenderMicrotask(),v.current&&u.animationState&&u.animationState.animateChanges())}),g.useEffect(()=>{u&&(!v.current&&u.animationState&&u.animationState.animateChanges(),v.current&&(queueMicrotask(()=>{var y;(y=window.MotionHandoffMarkAsComplete)==null||y.call(window,p)}),v.current=!1),u.enteringChildren=void 0)}),u}function O$(e,t,a,o){const{layoutId:n,layout:r,drag:s,dragConstraints:l,layoutScroll:c,layoutRoot:d,layoutCrossfade:u}=t;e.projection=new a(e.latestValues,t["data-framer-portal-id"]?void 0:mx(e.parent)),e.projection.setOptions({layoutId:n,layout:r,alwaysMeasureLayout:!!s||l&&vn(l),visualElement:e,animationType:typeof r=="string"?r:"both",initialPromotionConfig:o,crossfade:u,layoutScroll:c,layoutRoot:d})}function mx(e){if(e)return e.options.allowProjection!==!1?e.projection:mx(e.parent)}function Hl(e,{forwardMotionProps:t=!1}={},a,o){a&&u$(a);const n=Zu(e)?M$:D$;function r(l,c){let d;const u={...g.useContext(il),...l,layoutId:B$(l)},{isStatic:m}=u,h=g$(l),p=n(l,m);if(!m&&Nu){z$();const v=V$(u);d=v.MeasureLayout,h.visualElement=_$(e,p,u,o,v.ProjectionNode)}return i.jsxs(ll.Provider,{value:h,children:[d&&h.visualElement?i.jsx(d,{visualElement:h.visualElement,...u}):null,T$(e,l,L$(p,h.visualElement,c),p,m,t)]})}r.displayName=`motion.${typeof e=="string"?e:`create(${e.displayName??e.name??""})`}`;const s=g.forwardRef(r);return s[F$]=e,s}function B$({layoutId:e}){const t=g.useContext(Su).id;return t&&e!==void 0?t+"-"+e:e}function z$(e,t){g.useContext(ex).strict}function V$(e){const{drag:t,layout:a}=Xn;if(!t&&!a)return{};const o={...t,...a};return{MeasureLayout:t!=null&&t.isEnabled(e)||a!=null&&a.isEnabled(e)?o.MeasureLayout:void 0,ProjectionNode:o.ProjectionNode}}function q$(e,t){if(typeof Proxy>"u")return Hl;const a=new Map,o=(r,s)=>Hl(r,s,e,t),n=(r,s)=>o(r,s);return new Proxy(n,{get:(r,s)=>s==="create"?o:(a.has(s)||a.set(s,Hl(s,void 0,e,t)),a.get(s))})}function px({top:e,left:t,right:a,bottom:o}){return{x:{min:t,max:a},y:{min:e,max:o}}}function U$({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function W$(e,t){if(!t)return e;const a=t({x:e.left,y:e.top}),o=t({x:e.right,y:e.bottom});return{top:a.y,left:a.x,bottom:o.y,right:o.x}}function Kl(e){return e===void 0||e===1}function id({scale:e,scaleX:t,scaleY:a}){return!Kl(e)||!Kl(t)||!Kl(a)}function Do(e){return id(e)||hx(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function hx(e){return mh(e.x)||mh(e.y)}function mh(e){return e&&e!=="0%"}function Is(e,t,a){const o=e-a,n=t*o;return a+n}function ph(e,t,a,o,n){return n!==void 0&&(e=Is(e,n,o)),Is(e,a,o)+t}function sd(e,t=0,a=1,o,n){e.min=ph(e.min,t,a,o,n),e.max=ph(e.max,t,a,o,n)}function fx(e,{x:t,y:a}){sd(e.x,t.translate,t.scale,t.originPoint),sd(e.y,a.translate,a.scale,a.originPoint)}const hh=.999999999999,fh=1.0000000000001;function $$(e,t,a,o=!1){const n=a.length;if(!n)return;t.x=t.y=1;let r,s;for(let l=0;l<n;l++){r=a[l],s=r.projectionDelta;const{visualElement:c}=r.options;c&&c.props.style&&c.props.style.display==="contents"||(o&&r.options.layoutScroll&&r.scroll&&r!==r.root&&yn(e,{x:-r.scroll.offset.x,y:-r.scroll.offset.y}),s&&(t.x*=s.x.scale,t.y*=s.y.scale,fx(e,s)),o&&Do(r.latestValues)&&yn(e,r.latestValues))}t.x<fh&&t.x>hh&&(t.x=1),t.y<fh&&t.y>hh&&(t.y=1)}function bn(e,t){e.min=e.min+t,e.max=e.max+t}function gh(e,t,a,o,n=.5){const r=pt(e.min,e.max,n);sd(e,t,a,r,o)}function yn(e,t){gh(e.x,t.x,t.scaleX,t.scale,t.originX),gh(e.y,t.y,t.scaleY,t.scale,t.originY)}function gx(e,t){return px(W$(e.getBoundingClientRect(),t))}function G$(e,t,a){const o=gx(e,a),{scroll:n}=t;return n&&(bn(o.x,n.offset.x),bn(o.y,n.offset.y)),o}const vh=()=>({translate:0,scale:1,origin:0,originPoint:0}),xn=()=>({x:vh(),y:vh()}),bh=()=>({min:0,max:0}),Ct=()=>({x:bh(),y:bh()}),ld={current:null},vx={current:!1};function H$(){if(vx.current=!0,!!Nu)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>ld.current=e.matches;e.addEventListener("change",t),t()}else ld.current=!1}const K$=new WeakMap;function X$(e,t,a){for(const o in t){const n=t[o],r=a[o];if(Mt(n))e.addValue(o,n);else if(Mt(r))e.addValue(o,nn(n,{owner:e}));else if(r!==n)if(e.hasValue(o)){const s=e.getValue(o);s.liveStyle===!0?s.jump(n):s.hasAnimated||s.set(n)}else{const s=e.getStaticValue(o);e.addValue(o,nn(s!==void 0?s:n,{owner:e}))}}for(const o in a)t[o]===void 0&&e.removeValue(o);return t}const yh=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class Y${scrapeMotionValuesFromProps(t,a,o){return{}}constructor({parent:t,props:a,presenceContext:o,reducedMotionConfig:n,blockInitialAnimation:r,visualState:s},l={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=Uu,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const h=$t.now();this.renderScheduledAt<h&&(this.renderScheduledAt=h,dt.render(this.render,!1,!0))};const{latestValues:c,renderState:d}=s;this.latestValues=c,this.baseTarget={...c},this.initialValues=a.initial?{...c}:{},this.renderState=d,this.parent=t,this.props=a,this.presenceContext=o,this.depth=t?t.depth+1:0,this.reducedMotionConfig=n,this.options=l,this.blockInitialAnimation=!!r,this.isControllingVariants=dl(a),this.isVariantNode=ax(a),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:u,...m}=this.scrapeMotionValuesFromProps(a,{},this);for(const h in m){const p=m[h];c[h]!==void 0&&Mt(p)&&p.set(c[h])}}mount(t){var a;this.current=t,K$.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((o,n)=>this.bindToMotionValue(n,o)),vx.current||H$(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:ld.current,(a=this.parent)==null||a.addChild(this),this.update(this.props,this.presenceContext)}unmount(){var t;this.projection&&this.projection.unmount(),Xa(this.notifyUpdate),Xa(this.render),this.valueSubscriptions.forEach(a=>a()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),(t=this.parent)==null||t.removeChild(this);for(const a in this.events)this.events[a].clear();for(const a in this.features){const o=this.features[a];o&&(o.unmount(),o.isMounted=!1)}this.current=null}addChild(t){this.children.add(t),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(t)}removeChild(t){this.children.delete(t),this.enteringChildren&&this.enteringChildren.delete(t)}bindToMotionValue(t,a){this.valueSubscriptions.has(t)&&this.valueSubscriptions.get(t)();const o=rr.has(t);o&&this.onBindTransform&&this.onBindTransform();const n=a.on("change",s=>{this.latestValues[t]=s,this.props.onUpdate&&dt.preRender(this.notifyUpdate),o&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let r;window.MotionCheckAppearSync&&(r=window.MotionCheckAppearSync(this,t,a)),this.valueSubscriptions.set(t,()=>{n(),r&&r(),a.owner&&a.stop()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}updateFeatures(){let t="animation";for(t in Xn){const a=Xn[t];if(!a)continue;const{isEnabled:o,Feature:n}=a;if(!this.features[t]&&n&&o(this.props)&&(this.features[t]=new n(this)),this.features[t]){const r=this.features[t];r.isMounted?r.update():(r.mount(),r.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):Ct()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,a){this.latestValues[t]=a}update(t,a){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=a;for(let o=0;o<yh.length;o++){const n=yh[o];this.propEventSubscriptions[n]&&(this.propEventSubscriptions[n](),delete this.propEventSubscriptions[n]);const r="on"+n,s=t[r];s&&(this.propEventSubscriptions[n]=this.on(n,s))}this.prevMotionValues=X$(this,this.scrapeMotionValuesFromProps(t,this.prevProps,this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(t){return this.props.variants?this.props.variants[t]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}
536addVariantChild(t){const a=this.getClosestVariantNode();if(a)return a.variantChildren&&a.variantChildren.add(t),()=>a.variantChildren.delete(t)}addValue(t,a){const o=this.values.get(t);a!==o&&(o&&this.removeValue(t),this.bindToMotionValue(t,a),this.values.set(t,a),this.latestValues[t]=a.get())}removeValue(t){this.values.delete(t);const a=this.valueSubscriptions.get(t);a&&(a(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,a){if(this.props.values&&this.props.values[t])return this.props.values[t];let o=this.values.get(t);return o===void 0&&a!==void 0&&(o=nn(a===null?void 0:a,{owner:this}),this.addValue(t,o)),o}readValue(t,a){let o=this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:this.getBaseTargetFromProps(this.props,t)??this.readValueFromInstance(this.current,t,this.options);return o!=null&&(typeof o=="string"&&(sy(o)||cy(o))?o=parseFloat(o):!n$(o)&&Co.test(a)&&(o=Gy(t,a)),this.setBaseTarget(t,Mt(o)?o.get():o)),Mt(o)?o.get():o}setBaseTarget(t,a){this.baseTarget[t]=a}getBaseTarget(t){var r;const{initial:a}=this.props;let o;if(typeof a=="string"||typeof a=="object"){const s=Ju(this.props,a,(r=this.presenceContext)==null?void 0:r.custom);s&&(o=s[t])}if(a&&o!==void 0)return o;const n=this.getBaseTargetFromProps(this.props,t);return n!==void 0&&!Mt(n)?n:this.initialValues[t]!==void 0&&o===void 0?void 0:this.baseTarget[t]}on(t,a){return this.events[t]||(this.events[t]=new Du),this.events[t].add(a)}notify(t,...a){this.events[t]&&this.events[t].notify(...a)}scheduleRenderMicrotask(){Gu.render(this.render)}}class bx extends Y${constructor(){super(...arguments),this.KeyframeResolver=$W}sortInstanceNodePosition(t,a){return t.compareDocumentPosition(a)&2?1:-1}getBaseTargetFromProps(t,a){return t.style?t.style[a]:void 0}removeValueFromRenderState(t,{vars:a,style:o}){delete a[t],delete o[t]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;Mt(t)&&(this.childSubscription=t.on("change",a=>{this.current&&(this.current.textContent=`${a}`)}))}}function yx(e,{style:t,vars:a},o,n){const r=e.style;let s;for(s in t)r[s]=t[s];n==null||n.applyProjectionStyles(r,o);for(s in a)r.setProperty(s,a[s])}function Q$(e){return window.getComputedStyle(e)}class Z$ extends bx{constructor(){super(...arguments),this.type="html",this.renderInstance=yx}readValueFromInstance(t,a){var o;if(rr.has(a))return(o=this.projection)!=null&&o.isProjecting?Zc(a):dW(t,a);{const n=Q$(t),r=(Py(a)?n.getPropertyValue(a):n[a])||0;return typeof r=="string"?r.trim():r}}measureInstanceViewportBox(t,{transformPagePoint:a}){return gx(t,a)}build(t,a,o){Yu(t,a,o.transformTemplate)}scrapeMotionValuesFromProps(t,a,o){return em(t,a,o)}}const xx=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function J$(e,t,a,o){yx(e,t,void 0,o);for(const n in t.attrs)e.setAttribute(xx.has(n)?n:tm(n),t.attrs[n])}class eG extends bx{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=Ct}getBaseTargetFromProps(t,a){return t[a]}readValueFromInstance(t,a){if(rr.has(a)){const o=$y(a);return o&&o.default||0}return a=xx.has(a)?a:tm(a),t.getAttribute(a)}scrapeMotionValuesFromProps(t,a,o){return cx(t,a,o)}build(t,a,o){rx(t,a,this.isSVGTag,o.transformTemplate,o.style)}renderInstance(t,a,o,n){J$(t,a,o,n)}mount(t){this.isSVGTag=sx(t.tagName),super.mount(t)}}const tG=(e,t)=>Zu(e)?new eG(t):new Z$(t,{allowProjection:e!==g.Fragment});function kn(e,t,a){const o=e.getProps();return Ju(o,t,a!==void 0?a:o.custom,e)}const cd=e=>Array.isArray(e);function aG(e,t,a){e.hasValue(t)?e.getValue(t).set(a):e.addValue(t,nn(a))}function oG(e){return cd(e)?e[e.length-1]||0:e}function nG(e,t){const a=kn(e,t);let{transitionEnd:o={},transition:n={},...r}=a||{};r={...r,...o};for(const s in r){const l=oG(r[s]);aG(e,s,l)}}function rG(e){return!!(Mt(e)&&e.add)}function dd(e,t){const a=e.getValue("willChange");if(rG(a))return a.add(t);if(!a&&Ka.WillChange){const o=new Ka.WillChange("auto");e.addValue("willChange",o),o.add(t)}}function wx(e){return e.props[dx]}const iG=e=>e!==null;function sG(e,{repeat:t,repeatType:a="loop"},o){const n=e.filter(iG),r=t&&a!=="loop"&&t%2===1?0:n.length-1;return!r||o===void 0?n[r]:o}const lG={type:"spring",stiffness:500,damping:25,restSpeed:10},cG=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),dG={type:"keyframes",duration:.8},uG={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},mG=(e,{keyframes:t})=>t.length>2?dG:rr.has(e)?e.startsWith("scale")?cG(t[1]):lG:uG;function pG({when:e,delay:t,delayChildren:a,staggerChildren:o,staggerDirection:n,repeat:r,repeatType:s,repeatDelay:l,from:c,elapsed:d,...u}){return!!Object.keys(u).length}const am=(e,t,a,o={},n,r)=>s=>{const l=Wu(o,e)||{},c=l.delay||o.delay||0;let{elapsed:d=0}=o;d=d-Ra(c);const u={keyframes:Array.isArray(a)?a:[null,a],ease:"easeOut",velocity:t.getVelocity(),...l,delay:-d,onUpdate:h=>{t.set(h),l.onUpdate&&l.onUpdate(h)},onComplete:()=>{s(),l.onComplete&&l.onComplete()},name:e,motionValue:t,element:r?void 0:n};pG(l)||Object.assign(u,mG(e,u)),u.duration&&(u.duration=Ra(u.duration)),u.repeatDelay&&(u.repeatDelay=Ra(u.repeatDelay)),u.from!==void 0&&(u.keyframes[0]=u.from);let m=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(od(u),u.delay===0&&(m=!0)),(Ka.instantAnimations||Ka.skipAnimations)&&(m=!0,od(u),u.delay=0),u.allowFlatten=!l.type&&!l.ease,m&&!r&&t.get()!==void 0){const h=sG(u.keyframes,l);if(h!==void 0){dt.update(()=>{u.onUpdate(h),u.onComplete()});return}}return l.isSync?new qu(u):new MW(u)};function hG({protectedKeys:e,needsAnimating:t},a){const o=e.hasOwnProperty(a)&&t[a]!==!0;return t[a]=!1,o}function Cx(e,t,{delay:a=0,transitionOverride:o,type:n}={}){let{transition:r=e.getDefaultTransition(),transitionEnd:s,...l}=t;o&&(r=o);const c=[],d=n&&e.animationState&&e.animationState.getState()[n];for(const u in l){const m=e.getValue(u,e.latestValues[u]??null),h=l[u];if(h===void 0||d&&hG(d,u))continue;const p={delay:a,...Wu(r||{},u)},v=m.get();if(v!==void 0&&!m.isAnimating&&!Array.isArray(h)&&h===v&&!p.velocity)continue;let f=!1;if(window.MotionHandoffAnimation){const y=wx(e);if(y){const x=window.MotionHandoffAnimation(y,u,dt);x!==null&&(p.startTime=x,f=!0)}}dd(e,u),m.start(am(u,m,h,e.shouldReduceMotion&&qy.has(u)?{type:!1}:p,e,f));const b=m.animation;b&&c.push(b)}return s&&Promise.all(c).then(()=>{dt.update(()=>{s&&nG(e,s)})}),c}function Px(e,t,a,o=0,n=1){const r=Array.from(e).sort((d,u)=>d.sortNodePosition(u)).indexOf(t),s=e.size,l=(s-1)*o;return typeof a=="function"?a(r,s):n===1?r*o:l-r*o}function ud(e,t,a={}){var c;const o=kn(e,t,a.type==="exit"?(c=e.presenceContext)==null?void 0:c.custom:void 0);let{transition:n=e.getDefaultTransition()||{}}=o||{};a.transitionOverride&&(n=a.transitionOverride);const r=o?()=>Promise.all(Cx(e,o,a)):()=>Promise.resolve(),s=e.variantChildren&&e.variantChildren.size?(d=0)=>{const{delayChildren:u=0,staggerChildren:m,staggerDirection:h}=n;return fG(e,t,d,u,m,h,a)}:()=>Promise.resolve(),{when:l}=n;if(l){const[d,u]=l==="beforeChildren"?[r,s]:[s,r];return d().then(()=>u())}else return Promise.all([r(),s(a.delay)])}function fG(e,t,a=0,o=0,n=0,r=1,s){const l=[];for(const c of e.variantChildren)c.notify("AnimationStart",t),l.push(ud(c,t,{...s,delay:a+(typeof o=="function"?0:o)+Px(e.variantChildren,c,o,n,r)}).then(()=>c.notify("AnimationComplete",t)));return Promise.all(l)}function gG(e,t,a={}){e.notify("AnimationStart",t);let o;if(Array.isArray(t)){const n=t.map(r=>ud(e,r,a));o=Promise.all(n)}else if(typeof t=="string")o=ud(e,t,a);else{const n=typeof t=="function"?kn(e,t,a.custom):t;o=Promise.all(Cx(e,n,a))}return o.then(()=>
vendor: 43,827 bytes, line 536
536{e.notify("AnimationComplete",t)})}function Ax(e,t){if(!Array.isArray(t))return!1;const a=t.length;if(a!==e.length)return!1;for(let o=0;o<a;o++)if(t[o]!==e[o])return!1;return!0}const vG=Xu.length;function Ex(e){if(!e)return;if(!e.isControllingVariants){const a=e.parent?Ex(e.parent)||{}:{};return e.props.initial!==void 0&&(a.initial=e.props.initial),a}const t={};for(let a=0;a<vG;a++){const o=Xu[a],n=e.props[o];(Qr(n)||n===!1)&&(t[o]=n)}return t}const bG=[...Ku].reverse(),yG=Ku.length;function xG(e){return t=>Promise.all(t.map(({animation:a,options:o})=>gG(e,a,o)))}function wG(e){let t=xG(e),a=xh(),o=!0;const n=c=>(d,u)=>{var h;const m=kn(e,u,c==="exit"?(h=e.presenceContext)==null?void 0:h.custom:void 0);if(m){const{transition:p,transitionEnd:v,...f}=m;d={...d,...f,...v}}return d};function r(c){t=c(e)}function s(c){const{props:d}=e,u=Ex(e.parent)||{},m=[],h=new Set;let p={},v=1/0;for(let b=0;b<yG;b++){const y=bG[b],x=a[y],w=d[y]!==void 0?d[y]:u[y],P=Qr(w),E=y===c?x.isActive:null;E===!1&&(v=b);let k=w===u[y]&&w!==d[y]&&P;if(k&&o&&e.manuallyAnimateOnMount&&(k=!1),x.protectedKeys={...p},!x.isActive&&E===null||!w&&!x.prevProp||cl(w)||typeof w=="boolean")continue;const S=CG(x.prevProp,w);let R=S||y===c&&x.isActive&&!k&&P||b>v&&P,I=!1;const M=Array.isArray(w)?w:[w];let q=M.reduce(n(y),{});E===!1&&(q={});const{prevResolvedValues:N={}}=x,F={...N,...q},A=V=>{R=!0,h.has(V)&&(I=!0,h.delete(V)),x.needsAnimating[V]=!0;const H=e.getValue(V);H&&(H.liveStyle=!1)};for(const V in F){const H=q[V],B=N[V];if(p.hasOwnProperty(V))continue;let te=!1;cd(H)&&cd(B)?te=!Ax(H,B):te=H!==B,te?H!=null?A(V):h.add(V):H!==void 0&&h.has(V)?A(V):x.protectedKeys[V]=!0}x.prevProp=w,x.prevResolvedValues=q,x.isActive&&(p={...p,...q}),o&&e.blockInitialAnimation&&(R=!1);const _=k&&S;R&&(!_||I)&&m.push(...M.map(V=>{const H={type:y};if(typeof V=="string"&&o&&!_&&e.manuallyAnimateOnMount&&e.parent){const{parent:B}=e,te=kn(B,V);if(B.enteringChildren&&te){const{delayChildren:j}=te.transition||{};H.delay=Px(B.enteringChildren,e,j)}}return{animation:V,options:H}}))}if(h.size){const b={};if(typeof d.initial!="boolean"){const y=kn(e,Array.isArray(d.initial)?d.initial[0]:d.initial);y&&y.transition&&(b.transition=y.transition)}h.forEach(y=>{const x=e.getBaseTarget(y),w=e.getValue(y);w&&(w.liveStyle=!0),b[y]=x??null}),m.push({animation:b})}let f=!!m.length;return o&&(d.initial===!1||d.initial===d.animate)&&!e.manuallyAnimateOnMount&&(f=!1),o=!1,f?t(m):Promise.resolve()}function l(c,d){var m;if(a[c].isActive===d)return Promise.resolve();(m=e.variantChildren)==null||m.forEach(h=>{var p;return(p=h.animationState)==null?void 0:p.setActive(c,d)}),a[c].isActive=d;const u=s(c);for(const h in a)a[h].protectedKeys={};return u}return{animateChanges:s,setActive:l,setAnimateFunction:r,getState:()=>a,reset:()=>{a=xh()}}}function CG(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!Ax(t,e):!1}function Io(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function xh(){return{animate:Io(!0),whileInView:Io(),whileHover:Io(),whileTap:Io(),whileDrag:Io(),whileFocus:Io(),exit:Io()}}class Eo{constructor(t){this.isMounted=!1,this.node=t}update(){}}class PG extends Eo{constructor(t){super(t),t.animationState||(t.animationState=wG(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();cl(t)&&(this.unmountControls=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:a}=this.node.prevProps||{};t!==a&&this.updateAnimationControlsSubscription()}unmount(){var t;this.node.animationState.reset(),(t=this.unmountControls)==null||t.call(this)}}let AG=0;class EG extends Eo{constructor(){super(...arguments),this.id=AG++}update(){if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:a}=this.node.presenceContext,{isPresent:o}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===o)return;const n=this.node.animationState.setActive("exit",!t);a&&!t&&n.then(()=>{a(this.id)})}mount(){const{register:t,onExitComplete:a}=this.node.presenceContext||{};a&&a(this.id),t&&(this.unmount=t(this.id))}unmount(){}}const SG={animation:{Feature:PG},exit:{Feature:EG}};function Zr(e,t,a,o={passive:!0}){return e.addEventListener(t,a,o),()=>e.removeEventListener(t,a)}function vi(e){return{point:{x:e.pageX,y:e.pageY}}}const NG=e=>t=>Hu(t)&&e(t,vi(t));function Fr(e,t,a,o){return Zr(e,t,NG(a),o)}const Sx=1e-4,kG=1-Sx,TG=1+Sx,Nx=.01,IG=0-Nx,RG=0+Nx;function Bt(e){return e.max-e.min}function DG(e,t,a){return Math.abs(e-t)<=a}function wh(e,t,a,o=.5){e.origin=o,e.originPoint=pt(t.min,t.max,e.origin),e.scale=Bt(a)/Bt(t),e.translate=pt(a.min,a.max,e.origin)-e.originPoint,(e.scale>=kG&&e.scale<=TG||isNaN(e.scale))&&(e.scale=1),(e.translate>=IG&&e.translate<=RG||isNaN(e.translate))&&(e.translate=0)}function Lr(e,t,a,o){wh(e.x,t.x,a.x,o?o.originX:void 0),wh(e.y,t.y,a.y,o?o.originY:void 0)}function Ch(e,t,a){e.min=a.min+t.min,e.max=e.min+Bt(t)}function MG(e,t,a){Ch(e.x,t.x,a.x),Ch(e.y,t.y,a.y)}function Ph(e,t,a){e.min=t.min-a.min,e.max=e.min+Bt(t)}function Rs(e,t,a){Ph(e.x,t.x,a.x),Ph(e.y,t.y,a.y)}function ea(e){return[e("x"),e("y")]}const kx=({current:e})=>e?e.ownerDocument.defaultView:null,Ah=(e,t)=>Math.abs(e-t);function FG(e,t){const a=Ah(e.x,t.x),o=Ah(e.y,t.y);return Math.sqrt(a**2+o**2)}class Tx{constructor(t,a,{transformPagePoint:o,contextWindow:n=window,dragSnapToOrigin:r=!1,distanceThreshold:s=3}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const h=Yl(this.lastMoveEventInfo,this.history),p=this.startEvent!==null,v=FG(h.offset,{x:0,y:0})>=this.distanceThreshold;if(!p&&!v)return;const{point:f}=h,{timestamp:b}=Tt;this.history.push({...f,timestamp:b});const{onStart:y,onMove:x}=this.handlers;p||(y&&y(this.lastMoveEvent,h),this.startEvent=this.lastMoveEvent),x&&x(this.lastMoveEvent,h)},this.handlePointerMove=(h,p)=>{this.lastMoveEvent=h,this.lastMoveEventInfo=Xl(p,this.transformPagePoint),dt.update(this.updatePoint,!0)},this.handlePointerUp=(h,p)=>{this.end();const{onEnd:v,onSessionEnd:f,resumeAnimation:b}=this.handlers;if(this.dragSnapToOrigin&&b&&b(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const y=Yl(h.type==="pointercancel"?this.lastMoveEventInfo:Xl(p,this.transformPagePoint),this.history);this.startEvent&&v&&v(h,y),f&&f(h,y)},!Hu(t))return;this.dragSnapToOrigin=r,this.handlers=a,this.transformPagePoint=o,this.distanceThreshold=s,this.contextWindow=n||window;const l=vi(t),c=Xl(l,this.transformPagePoint),{point:d}=c,{timestamp:u}=Tt;this.history=[{...d,timestamp:u}];const{onSessionStart:m}=a;m&&m(t,Yl(c,this.history)),this.removeListeners=hi(Fr(this.contextWindow,"pointermove",this.handlePointerMove),Fr(this.contextWindow,"pointerup",this.handlePointerUp),Fr(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),Xa(this.updatePoint)}}function Xl(e,t){return t?{point:t(e.point)}:e}function Eh(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Yl({point:e},t){return{point:e,delta:Eh(e,Ix(t)),offset:Eh(e,LG(t)),velocity:jG(t,.1)}}function LG(e){return e[0]}function Ix(e){return e[e.length-1]}function jG(e,t){if(e.length<2)return{x:0,y:0};let a=e.length-1,o=null;const n=Ix(e);for(;a>=0&&(o=e[a],!(n.timestamp-o.timestamp>Ra(t)));)a--;if(!o)return{x:0,y:0};const r=ra(n.timestamp-o.timestamp);if(r===0)return{x:0,y:0};const s={x:(n.x-o.x)/r,y:(n.y-o.y)/r};return s.x===1/0&&(s.x=0),s.y===1/0&&(s.y=0),s}function _G(e,{min:t,max:a},o){return t!==void 0&&e<t?e=o?pt(t,e,o.min):Math.max(e,t):a!==void 0&&e>a&&(e=o?pt(a,e,o.max):Math.min(e,a)),e}function Sh(e,t,a){return{min:t!==void 0?e.min+t:void 0,max:a!==void 0?e.max+a-(e.max-e.min):void 0}}function OG(e,{top:t,left:a,bottom:o,right:n}){return{x:Sh(e.x,a,n),y:Sh(e.y,t,o)}}function Nh(e,t){let a=t.min-e.min,o=t.max-e.max;return t.max-t.min<e.max-e.min&&([a,o]=[o,a]),{min:a,max:o}}function BG(e,t){return{x:Nh(e.x,t.x),y:Nh(e.y,t.y)}}function zG(e,t){let a=.5;const o=Bt(e),n=Bt(t);return n>o?a=Kr(t.min,t.max-o,e.min):o>n&&(a=Kr(e.min,e.max-n,t.min)),Ha(0,1,a)}function VG(e,t){const a={};return t.min!==void 0&&(a.min=t.min-e.min),t.max!==void 0&&(a.max=t.max-e.min),a}const md=.35;function qG(e=md){return e===!1?e=0:e===!0&&(e=md),{x:kh(e,"left","right"),y:kh(e,"top","bottom")}}function kh(e,t,a){return{min:Th(e,t),max:Th(e,a)}}function Th(e,t){return typeof e=="number"?e:e[t]||0}const UG=new WeakMap;class WG{constructor(t){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=Ct(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=t}start(t,{snapToCursor:a=!1,distanceThreshold:o}={}){const{presenceContext:n}=this.visualElement;if(n&&n.isPresent===!1)return;const r=m=>{const{dragSnapToOrigin:h}=this.getProps();h?this.pauseAnimation():this.stopAnimation(),a&&this.snapToCursor(vi(m).point)},s=(m,h)=>{const{drag:p,dragPropagation:v,onDragStart:f}=this.getProps();if(p&&!v&&(this.openDragLock&&this.openDragLock(),this.openDragLock=XW(p),!this.openDragLock))return;this.latestPointerEvent=m,this.latestPanInfo=h,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),ea(y=>{let x=this.getAxisMotionValue(y).get()||0;if(Da.test(x)){const{projection:w}=this.visualElement;if(w&&w.layout){const P=w.layout.layoutBox[y];P&&(x=Bt(P)*(parseFloat(x)/100))}}this.originPoint[y]=x}),f&&dt.postRender(()=>f(m,h)),dd(this.visualElement,"transform");const{animationState:b}=this.visualElement;b&&b.setActive("whileDrag",!0)},l=(m,h)=>{this.latestPointerEvent=m,this.latestPanInfo=h;const{dragPropagation:p,dragDirectionLock:v,onDirectionLock:f,onDrag:b}=this.getProps();if(!p&&!this.openDragLock)return;const{offset:y}=h;if(v&&this.currentDirection===null){this.currentDirection=$G(y),this.currentDirection!==null&&f&&f(this.currentDirection);return}this.updateAxis("x",h.point,y),this.updateAxis("y",h.point,y),this.visualElement.render(),b&&b(m,h)},c=(m,h)=>{this.latestPointerEvent=m,this.latestPanInfo=h,this.stop(m,h),this.latestPointerEvent=null,this.latestPanInfo=null},d=()=>ea(m=>{var h;return this.getAnimationState(m)==="paused"&&((h=this.getAxisMotionValue(m).animation)==null?void 0:h.play())}),{dragSnapToOrigin:u}=this.getProps();this.panSession=new Tx(t,{onSessionStart:r,onStart:s,onMove:l,onSessionEnd:c,resumeAnimation:d},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:u,distanceThreshold:o,contextWindow:kx(this.visualElement)})}stop(t,a){const o=t||this.latestPointerEvent,n=a||this.latestPanInfo,r=this.isDragging;if(this.cancel(),!r||!n||!o)return;const{velocity:s}=n;this.startAnimation(s);const{onDragEnd:l}=this.getProps();l&&dt.postRender(()=>l(o,n))}cancel(){this.isDragging=!1;const{projection:t,animationState:a}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:o}=this.getProps();!o&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),a&&a.setActive("whileDrag",!1)}updateAxis(t,a,o){const{drag:n}=this.getProps();if(!o||!Bi(t,n,this.currentDirection))return;const r=this.getAxisMotionValue(t);let s=this.originPoint[t]+o[t];this.constraints&&this.constraints[t]&&(s=_G(s,this.constraints[t],this.elastic[t])),r.set(s)}resolveConstraints(){var r;const{dragConstraints:t,dragElastic:a}=this.getProps(),o=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(r=this.visualElement.projection)==null?void 0:r.layout,n=this.constraints;t&&vn(t)?this.constraints||(this.constraints=this.resolveRefConstraints()):t&&o?this.constraints=OG(o.layoutBox,t):this.constraints=!1,this.elastic=qG(a),n!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&ea(s=>{this.constraints!==!1&&this.getAxisMotionValue(s)&&(this.constraints[s]=VG(o.layoutBox[s],this.constraints[s]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:a}=this.getProps();if(!t||!vn(t))return!1;const o=t.current,{projection:n}=this.visualElement;if(!n||!n.layout)return!1;const r=G$(o,n.root,this.visualElement.getTransformPagePoint());let s=BG(n.layout.layoutBox,r);if(a){const l=a(U$(s));this.hasMutatedConstraints=!!l,l&&(s=px(l))}return s}startAnimation(t){const{drag:a,dragMomentum:o,dragElastic:n,dragTransition:r,dragSnapToOrigin:s,onDragTransitionEnd:l}=this.getProps(),c=this.constraints||{},d=ea(u=>{if(!Bi(u,a,this.currentDirection))return;let m=c&&c[u]||{};s&&(m={min:0,max:0});const h=n?200:1e6,p=n?40:1e7,v={type:"inertia",velocity:o?t[u]:0,bounceStiffness:h,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10,...r,...m};return this.startAxisValueAnimation(u,v)});return Promise.all(d).then(l)}startAxisValueAnimation(t,a){const o=this.getAxisMotionValue(t);return dd(this.visualElement,t),o.start(am(t,o,0,a,this.visualElement,!1))}stopAnimation(){ea(t=>this.getAxisMotionValue(t).stop())}pauseAnimation(){ea(t=>{var a;return(a=this.getAxisMotionValue(t).animation)==null?void 0:a.pause()})}getAnimationState(t){var a;return(a=this.getAxisMotionValue(t).animation)==null?void 0:a.state}getAxisMotionValue(t){const a=`_drag${t.toUpperCase()}`,o=this.visualElement.getProps(),n=o[a];return n||this.visualElement.getValue(t,(o.initial?o.initial[t]:void 0)||0)}snapToCursor(t){ea(a=>{const{drag:o}=this.getProps();if(!Bi(a,o,this.currentDirection))return;const{projection:n}=this.visualElement,r=this.getAxisMotionValue(a);if(n&&n.layout){const{min:s,max:l}=n.layout.layoutBox[a];r.set(t[a]-pt(s,l,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:a}=this.getProps(),{projection:o}=this.visualElement;if(!vn(a)||!o||!this.constraints)return;this.stopAnimation();const n={x:0,y:0};ea(s=>{const l=this.getAxisMotionValue(s);if(l&&this.constraints!==!1){const c=l.get();n[s]=zG({min:c,max:c},this.constraints[s])}});const{transformTemplate:r}=this.visualElement.getProps();this.visualElement.current.style.transform=r?r({},""):"none",o.root&&o.root.updateScroll(),o.updateLayout(),this.resolveConstraints(),ea(s=>{if(!Bi(s,t,null))return;const l=this.getAxisMotionValue(s),{min:c,max:d}=this.constraints[s];l.set(pt(c,d,n[s]))})}addListeners(){if(!this.visualElement.current)return;UG.set(this.visualElement,this);const t=this.visualElement.current,a=Fr(t,"pointerdown",c=>{const{drag:d,dragListener:u=!0}=this.getProps();d&&u&&this.start(c)}),o=()=>{const{dragConstraints:c}=this.getProps();vn(c)&&c.current&&(this.constraints=this.resolveRefConstraints())},{projection:n}=this.visualElement,r=n.addEventListener("measure",o);n&&!n.layout&&(n.root&&n.root.updateScroll(),n.updateLayout()),dt.read(o);const s=Zr(window,"resize",()=>this.scalePositionWithinConstraints()),l=n.addEventListener("didUpdate",({delta:c,hasLayoutChanged:d})=>{this.isDragging&&d&&(ea(u=>{const m=this.getAxisMotionValue(u);m&&(this.originPoint[u]+=c[u].translate,m.set(m.get()+c[u].translate))}),this.visualElement.render())});return()=>{s(),a(),r(),l&&l()}}getProps(){const t=this.visualElement.getProps(),{drag:a=!1,dragDirectionLock:o=!1,dragPropagation:n=!1,dragConstraints:r=!1,dragElastic:s=md,dragMomentum:l=!0}=t;return{...t,drag:a,dragDirectionLock:o,dragPropagation:n,dragConstraints:r,dragElastic:s,dragMomentum:l}}}function Bi(e,t,a){return(t===!0||t===e)&&(a===null||a===e)}function $G(e,t=10){let a=null;return Math.abs(e.y)>t?a="y":Math.abs(e.x)>t&&(a="x"),a}class GG extends Eo{constructor(t){super(t),this.removeGroupControls=ia,this.removeListeners=ia,this.controls=new WG(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||ia}unmount(){this.removeGroupControls(),this.removeListeners()}}const Ih=e=>(t,a)=>{e&&dt.postRender(()=>e(t,a))};class HG extends Eo{constructor(){super(...arguments),this.removePointerDownListener=ia}onPointerDown(t){this.session=new Tx(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:kx(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:a,onPan:o,onPanEnd:n}=this.node.getProps();return{onSessionStart:Ih(t),onStart:Ih(a),onMove:o,onEnd:(r,s)=>{delete this.session,n&&dt.postRender(()=>n(r,s))}}}mount(){this.removePointerDownListener=Fr(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const os={hasAnimatedSinceResize:!0,hasEverUpdated:!1};let Ql=!1;class KG extends g.Component{componentDidMount(){const{visualElement:t,layoutGroup:a,switchLayoutGroup:o,layoutId:n}=this.props,{projection:r}=t;r&&(a.group&&a.group.add(r),o&&o.register&&n&&o.register(r),Ql&&r.root.didUpdate(),r.addEventListener("animationComplete",()=>{this.safeToRemove()}),r.setOptions({...r.options,onExitComplete:()=>this.safeToRemove()})),os.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:a,visualElement:o,drag:n,isPresent:r}=this.props,{projection:s}=o;return s&&(s.isPresent=r,Ql=!0,n||t.layoutDependency!==a||a===void 0||t.isPresent!==r?s.willUpdate():this.safeToRemove(),t.isPresent!==r&&(r?s.promote():s.relegate()||dt.postRender(()=>{const l=s.getStack();(!l||!l.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:t}=this.props.visualElement;t&&(t.root.didUpdate(),Gu.postRender(()=>{!t.currentAnimation&&t.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:a,switchLayoutGroup:o}=this.props,{projection:n}=t;Ql=!0,n&&(n.scheduleCheckAfterUnmount(),a&&a.group&&a.group.remove(n),o&&o.deregister&&o.deregister(n))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function Rx(e){const[t,a]=Jy(),o=g.useContext(Su);return i.jsx(KG,{...e,layoutGroup:o,switchLayoutGroup:g.useContext(ux),isPresent:t,safeToRemove:a})}function XG(e,t,a){const o=Mt(e)?e:nn(e);return o.start(am("",o,t,a)),o.animation}const YG=(e,t)=>e.depth-t.depth;class QG{constructor(){this.children=[],this.isDirty=!1}add(t){Tu(this.children,t),this.isDirty=!0}remove(t){Iu(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(YG),this.isDirty=!1,this.children.forEach(t)}}function ZG(e,t){const a=$t.now(),o=({timestamp:n})=>{const r=n-a;r>=t&&(Xa(o),e(r-t))};return dt.setup(o,!0),()=>Xa(o)}const Dx=["TopLeft","TopRight","BottomLeft","BottomRight"],JG=Dx.length,Rh=e=>typeof e=="string"?parseFloat(e):e,Dh=e=>typeof e=="number"||ke.test(e);function e6(e,t,a,o,n,r){n?(e.opacity=pt(0,a.opacity??1,t6(o)),e.opacityExit=pt(t.opacity??1,0,a6(o))):r&&(e.opacity=pt(t.opacity??1,a.opacity??1,o));for(let s=0;s<JG;s++){const l=`border${Dx[s]}Radius`;let c=Mh(t,l),d=Mh(a,l);if(c===void 0&&d===void 0)continue;c||(c=0),d||(d=0),c===0||d===0||Dh(c)===Dh(d)?(e[l]=Math.max(pt(Rh(c),Rh(d),o),0),(Da.test(d)||Da.test(c))&&(e[l]+="%")):e[l]=d}(t.rotate||a.rotate)&&(e.rotate=pt(t.rotate||0,a.rotate||0,o))}function Mh(e,t){return e[t]!==void 0?e[t]:e.borderRadius}const t6=Mx(0,.5,vy),a6=Mx(.5,.95,ia);function Mx(e,t,a){return o=>o<e?0:o>t?1:a(Kr(e,t,o))}function Fh(e,t){e.min=t.min,e.max=t.max}function ua(e,t){Fh(e.x,t.x),Fh(e.y,t.y)}function Lh(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}function jh(e,t,a,o,n){return e-=t,e=Is(e,1/a,o),n!==void 0&&(e=Is(e,1/n,o)),e}function o6(e,t=0,a=1,o=.5,n,r=e,s=e){if(Da.test(t)&&(t=parseFloat(t),t=pt(s.min,s.max,t/100)-s.min),typeof t!="number")return;let l=pt(r.min,r.max,o);e===r&&(l-=t),e.min=jh(e.min,t,a,l,n),e.max=jh(e.max,t,a,l,n)}function _h(e,t,[a,o,n],r,s){o6(e,t[a],t[o],t[n],t.scale,r,s)}const n6=["x","scaleX","originX"],r6=["y","scaleY","originY"];function Oh(e,t,a,o){_h(e.x,t,n6,a?a.x:void 0,o?o.x:void 0),_h(e.y,t,r6,a?a.y:void 0,o?o.y:void 0)}function Bh(e){return e.translate===0&&e.scale===1}function Fx(e){return Bh(e.x)&&Bh(e.y)}function zh(e,t){return e.min===t.min&&e.max===t.max}function i6(e,t){return zh(e.x,t.x)&&zh(e.y,t.y)}function Vh(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function Lx(e,t){return Vh(e.x,t.x)&&Vh(e.y,t.y)}function qh(e){return Bt(e.x)/Bt(e.y)}function Uh(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}class s6{constructor(){this.members=[]}add(t){Tu(this.members,t),t.scheduleRender()}remove(t){if(Iu(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const a=this.members[this.members.length-1];a&&this.promote(a)}}relegate(t){const a=this.members.findIndex(n=>t===n);if(a===0)return!1;let o;for(let n=a;n>=0;n--){const r=this.members[n];if(r.isPresent!==!1){o=r;break}}return o?(this.promote(o),!0):!1}promote(t,a){const o=this.lead;if(t!==o&&(this.prevLead=o,this.lead=t,t.show(),o)){o.instance&&o.scheduleRender(),t.scheduleRender(),t.resumeFrom=o,a&&(t.resumeFrom.preserveOpacity=!0),o.snapshot&&(t.snapshot=o.snapshot,t.snapshot.latestValues=o.animationValues||o.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0);const{crossfade:n}=t.options;n===!1&&o.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:a,resumingFrom:o}=t;a.onExitComplete&&a.onExitComplete(),o&&o.options.onExitComplete&&o.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function l6(e,t,a){let o="";const n=e.x.translate/t.x,r=e.y.translate/t.y,s=(a==null?void 0:a.z)||0;if((n||r||s)&&(o=`translate3d(${n}px, ${r}px, ${s}px) `),(t.x!==1||t.y!==1)&&(o+=`scale(${1/t.x}, ${1/t.y}) `),a){const{transformPerspective:d,rotate:u,rotateX:m,rotateY:h,skewX:p,skewY:v}=a;d&&(o=`perspective(${d}px) ${o}`),u&&(o+=`rotate(${u}deg) `),m&&(o+=`rotateX(${m}deg) `),h&&(o+=`rotateY(${h}deg) `),p&&(o+=`skewX(${p}deg) `),v&&(o+=`skewY(${v}deg) `)}const l=e.x.scale*t.x,c=e.y.scale*t.y;return(l!==1||c!==1)&&(o+=`scale(${l}, ${c})`),o||"none"}const Zl=["","X","Y","Z"],c6=1e3;let d6=0;function Jl(e,t,a,o){const{latestValues:n}=t;n[e]&&(a[e]=n[e],t.setStaticValue(e,0),o&&(o[e]=0))}function jx(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;const{visualElement:t}=e.options;if(!t)return;const a=wx(t);if(window.MotionHasOptimisedAnimation(a,"transform")){const{layout:n,layoutId:r}=e.options;window.MotionCancelOptimisedAnimation(a,"transform",dt,!(n||r))}const{parent:o}=e;o&&!o.hasCheckedOptimisedAppear&&jx(o)}function _x({attachResizeListener:e,defaultParent:t,measureScroll:a,checkIsScrollRoot:o,resetTransform:n}){return class{constructor(s={},l=t==null?void 0:t()){this.id=d6++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(p6),this.nodes.forEach(v6),this.nodes.forEach(b6),this.nodes.forEach(h6)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=s,this.root=l?l.root||l:this,this.path=l?[...l.path,l]:[],this.parent=l,this.depth=l?l.depth+1:0;for(let c=0;c<this.path.length;c++)this.path[c].shouldResetTransform=!0;this.root===this&&(this.nodes=new QG)}addEventListener(s,l){return this.eventHandlers.has(s)||this.eventHandlers.set(s,new Du),this.eventHandlers.get(s).add(l)}notifyListeners(s,...l){const c=this.eventHandlers.get(s);c&&c.notify(...l)}hasListeners(s){return this.eventHandlers.has(s)}mount(s){if(this.instance)return;this.isSVG=Zy(s)&&!t$(s),this.instance=s;const{layoutId:l,layout:c,visualElement:d}=this.options;if(d&&!d.current&&d.mount(s),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(c||l)&&(this.isLayoutDirty=!0),e){let u,m=0;const h=()=>this.root.updateBlockedByResize=!1;dt.read(()=>{m=window.innerWidth}),e(s,()=>{const p=window.innerWidth;p!==m&&(m=p,this.root.updateBlockedByResize=!0,u&&u(),u=ZG(h,250),os.hasAnimatedSinceResize&&(os.hasAnimatedSinceResize=!1,this.nodes.forEach(Gh)))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&d&&(l||c)&&this.addEventListener("didUpdate",({delta:u,hasLayoutChanged:m,hasRelativeLayoutChanged:h,layout:p})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const v=this.options.transition||d.getDefaultTransition()||P6,{onLayoutAnimationStart:f,onLayoutAnimationComplete:b}=d.getProps(),y=!this.targetLayout||!Lx(this.targetLayout,p),x=!m&&h;if(this.options.layoutRoot||this.resumeFrom||x||m&&(y||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const w={...Wu(v,"layout"),onPlay:f,onComplete:b};(d.shouldReduceMotion||this.options.layoutRoot)&&(w.delay=0,w.type=!1),this.startAnimation(w),this.setAnimationOrigin(u,x)}else m||Gh(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=p})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const s=this.getStack();s&&s.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),Xa(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(y6),this.animationId++)}getTransformTemplate(){const{visualElement:s}=this.options;return s&&s.getProps().transformTemplate}willUpdate(s=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&jx(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let u=0;u<this.path.length;u++){const m=this.path[u];m.shouldResetTransform=!0,m.updateScroll("snapshot"),m.options.layoutRoot&&m.willUpdate(!1)}const{layoutId:l,layout:c}=this.options;if(l===void 0&&!c)return;const d=this.getTransformTemplate();this.prevTransformTemplateValue=d?d(this.latestValues,""):void 0,this.updateSnapshot(),s&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){this.unblockUpdate(),this.clearAllSnapshots(),this.nodes.forEach(Wh);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach($h);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach(g6),this.nodes.forEach(u6),this.nodes.forEach(m6)):this.nodes.forEach($h),this.clearAllSnapshots();const l=$t.now();Tt.delta=Ha(0,1e3/60,l-Tt.timestamp),Tt.timestamp=l,Tt.isProcessing=!0,Vl.update.process(Tt),Vl.preRender.process(Tt),Vl.render.process(Tt),Tt.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,Gu.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(f6),this.sharedNodes.forEach(x6)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,dt.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){dt.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!Bt(this.snapshot.measuredBox.x)&&!Bt(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let c=0;c<this.path.length;c++)this.path[c].updateScroll();const s=this.layout;this.layout=this.measure(!1),this.layoutVersion++,this.layoutCorrected=Ct(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:l}=this.options;l&&l.notify("LayoutMeasure",this.layout.layoutBox,s?s.layoutBox:void 0)}updateScroll(s="measure"){let l=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===s&&(l=!1),l&&this.instance){const c=o(this.instance);this.scroll={animationId:this.root.animationId,phase:s,isRoot:c,offset:a(this.instance),wasRoot:this.scroll?this.scroll.isRoot:c}}}resetTransform(){if(!n)return;const s=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,l=this.projectionDelta&&!Fx(this.projectionDelta),c=this.getTransformTemplate(),d=c?c(this.latestValues,""):void 0,u=d!==this.prevTransformTemplateValue;s&&this.instance&&(l||Do(this.latestValues)||u)&&(n(this.instance,d),this.shouldResetTransform=!1,this.scheduleRender())}measure(s=!0){const l=this.measurePageBox();let c=this.removeElementScroll(l);return s&&(c=this.removeTransform(c)),A6(c),{animationId:this.root.animationId,measuredBox:l,layoutBox:c,latestValues:{},source:this.id}}measurePageBox(){var d;const{visualElement:s}=this.options;if(!s)return Ct();const l=s.measureViewportBox();if(!(((d=this.scroll)==null?void 0:d.wasRoot)||this.path.some(E6))){const{scroll:u}=this.root;u&&(bn(l.x,u.offset.x),bn(l.y,u.offset.y))}return l}removeElementScroll(s){var c;const l=Ct();if(ua(l,s),(c=this.scroll)!=null&&c.wasRoot)return l;for(let d=0;d<this.path.length;d++){const u=this.path[d],{scroll:m,options:h}=u;u!==this.root&&m&&h.layoutScroll&&(m.wasRoot&&ua(l,s),bn(l.x,m.offset.x),bn(l.y,m.offset.y))}return l}applyTransform(s,l=!1){const c=Ct();ua(c,s);for(let d=0;d<this.path.length;d++){const u=this.path[d];!l&&u.options.layoutScroll&&u.scroll&&u!==u.root&&yn(c,{x:-u.scroll.offset.x,y:-u.scroll.offset.y}),Do(u.latestValues)&&yn(c,u.latestValues)}return Do(this.latestValues)&&yn(c,this.latestValues),c}removeTransform(s){const l=Ct();ua(l,s);for(let c=0;c<this.path.length;c++){const d=this.path[c];if(!d.instance||!Do(d.latestValues))continue;id(d.latestValues)&&d.updateSnapshot();const u=Ct(),m=d.measurePageBox();ua(u,m),Oh(l,d.latestValues,d.snapshot?d.snapshot.layoutBox:void 0,u)}return Do(this.latestValues)&&Oh(l,this.latestValues),l}setTargetDelta(s){this.targetDelta=s,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(s){this.options={...this.options,...s,crossfade:s.crossfade!==void 0?s.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==Tt.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(s=!1){var p;const l=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=l.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=l.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=l.isSharedProjectionDirty);const c=!!this.resumingFrom||this!==l;if(!(s||c&&this.isSharedProjectionDirty||this.isProjectionDirty||(p=this.parent)!=null&&p.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:u,layoutId:m}=this.options;if(!this.layout||!(u||m))return;this.resolvedRelativeTargetAt=Tt.timestamp;const h=this.getClosestProjectingParent();h&&this.linkedParentVersion!==h.layoutVersion&&!h.options.layoutRoot&&this.removeRelativeTarget(),!this.targetDelta&&!this.relativeTarget&&(h&&h.layout?this.createRelativeTarget(h,this.layout.layoutBox,h.layout.layoutBox):this.removeRelativeTarget()),!(!this.relativeTarget&&!this.targetDelta)&&(this.target||(this.target=Ct(),this.targetWithTransforms=Ct()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),MG(this.target,this.relativeTarget,this.relativeParent.target)):this.targetDelta?(this.resumingFrom?this.target=this.applyTransform(this.layout.layoutBox):ua(this.target,this.layout.layoutBox),fx(this.target,this.targetDelta)):ua(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,h&&!!h.resumingFrom==!!this.resumingFrom&&!h.options.layoutScroll&&h.target&&this.animationProgress!==1?this.createRelativeTarget(h,this.target,h.target):this.relativeParent=this.relativeTarget=void 0))}getClosestProjectingParent(){if(!(!this.parent||id(this.parent.latestValues)||hx(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(s,l,c){this.relativeParent=s,this.linkedParentVersion=s.layoutVersion,this.forceRelativeParentToResolveTarget(),this.relativeTarget=Ct(),this.relativeTargetOrigin=Ct(),Rs(this.relativeTargetOrigin,l,c),ua(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){var v;const s=this.getLead(),l=!!this.resumingFrom||this!==s;let c=!0;if((this.isProjectionDirty||(v=this.parent)!=null&&v.isProjectionDirty)&&(c=!1),l&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(c=!1),this.resolvedRelativeTargetAt===Tt.timestamp&&(c=!1),c)return;const{layout:d,layoutId:u}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(d||u))return;ua(this.layoutCorrected,this.layout.layoutBox);const m=this.treeScale.x,h=this.treeScale.y;$$(this.layoutCorrected,this.treeScale,this.path,l),s.layout&&!s.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(s.target=s.layout.layoutBox,s.targetWithTransforms=Ct());const{target:p}=s;if(!p){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(Lh(this.prevProjectionDelta.x,this.projectionDelta.x),Lh(this.prevProjectionDelta.y,this.projectionDelta.y)),Lr(this.projectionDelta,this.layoutCorrected,p,this.latestValues),(this.treeScale.x!==m||this.treeScale.y!==h||!Uh(this.projectionDelta.x,this.prevProjectionDelta.x)||!Uh(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",p))}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(s=!0){var l;if((l=this.options.visualElement)==null||l.scheduleRender(),s){const c=this.getStack();c&&c.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=xn(),this.projectionDelta=xn(),this.projectionDeltaWithTransform=xn()}setAnimationOrigin(s,l=!1){const c=this.snapshot,d=c?c.latestValues:{},u={...this.latestValues},m=xn();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!l;const h=Ct(),p=c?c.source:void 0,v=this.layout?this.layout.source:void 0,f=p!==v,b=this.getStack(),y=!b||b.members.length<=1,x=!!(f&&!y&&this.options.crossfade===!0&&!this.path.some(C6));this.animationProgress=0;let w;this.mixTargetDelta=P=>{const E=P/1e3;Hh(m.x,s.x,E),Hh(m.y,s.y,E),this.setTargetDelta(m),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(Rs(h,this.layout.layoutBox,this.relativeParent.layout.layoutBox),w6(this.relativeTarget,this.relativeTargetOrigin,h,E),w&&i6(this.relativeTarget,w)&&(this.isProjectionDirty=!1),w||(w=Ct()),ua(w,this.relativeTarget)),f&&(this.animationValues=u,e6(u,d,this.latestValues,E,x,y)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=E},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(s){var l,c,d;this.notifyListeners("animationStart"),(l=this.currentAnimation)==null||l.stop(),(d=(c=this.resumingFrom)==null?void 0:c.currentAnimation)==null||d.stop(),this.pendingAnimation&&(Xa(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=dt.update(()=>{os.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=nn(0)),this.currentAnimation=XG(this.motionValue,[0,1e3],{...s,velocity:0,isSync:!0,onUpdate:u=>{this.mixTargetDelta(u),s.onUpdate&&s.onUpdate(u)},onStop:()=>{},onComplete:()=>{s.onComplete&&s.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const s=this.getStack();s&&s.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(c6),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const s=this.getLead();let{targetWithTransforms:l,target:c,layout:d,latestValues:u}=s;if(!(!l||!c||!d)){if(this!==s&&this.layout&&d&&Ox(this.options.animationType,this.layout.layoutBox,d.layoutBox)){c=this.target||Ct();const m=Bt(this.layout.layoutBox.x);c.x.min=s.target.x.min,c.x.max=c.x.min+m;const h=Bt(this.layout.layoutBox.y);c.y.min=s.target.y.min,c.y.max=c.y.min+h}ua(l,c),yn(l,u),Lr(this.projectionDeltaWithTransform,this.layoutCorrected,l,u)}}registerSharedNode(s,l){this.sharedNodes.has(s)||this.sharedNodes.set(s,new s6),this.sharedNodes.get(s).add(l);const d=l.options.initialPromotionConfig;l.promote({transition:d?d.transition:void 0,preserveFollowOpacity:d&&d.shouldPreserveFollowOpacity?d.shouldPreserveFollowOpacity(l):void 0})}isLead(){const s=this.getStack();return s?s.lead===this:!0}getLead(){var l;const{layoutId:s}=this.options;return s?((l=this.getStack())==null?void 0:l.lead)||this:this}getPrevLead(){var l;const{layoutId:s}=this.options;return s?(l=this.getStack())==null?void 0:l.prevLead:void 0}getStack(){const{layoutId:s}=this.options;if(s)return this.root.sharedNodes.get(s)}promote({needsReset:s,transition:l,preserveFollowOpacity:c}={}){const d=this.getStack();d&&d.promote(this,c),s&&(this.projectionDelta=void 0,this.needsReset=!0),l&&this.setOptions({transition:l})}relegate(){const s=this.getStack();return s?s.relegate(this):!1}resetSkewAndRotation(){const{visualElement:s}=this.options;if(!s)return;let l=!1;const{latestValues:c}=s;if((c.z||c.rotate||c.rotateX||c.rotateY||c.rotateZ||c.skewX||c.skewY)&&(l=!0),!l)return;const d={};c.z&&Jl("z",s,d,this.animationValues);for(let u=0;u<Zl.length;u++)Jl(`rotate${Zl[u]}`,s,d,this.animationValues),Jl(`skew${Zl[u]}`,s,d,this.animationValues);s.render();for(const u in d)s.setStaticValue(u,d[u]),this.animationValues&&(this.animationValues[u]=d[u]);s.scheduleRender()}applyProjectionStyles(s,l){if(!this.instance||this.isSVG)return;if(!this.isVisible){s.visibility="hidden";return}const c=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,s.visibility="",s.opacity="",s.pointerEvents=as(l==null?void 0:l.pointerEvents)||"",s.transform=c?c(this.latestValues,""):"none";return}const d=this.getLead();if(!this.projectionDelta||!this.layout||!d.target){this.options.layoutId&&(s.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,s.pointerEvents=as(l==null?void 0:l.pointerEvents)||""),this.hasProjected&&!Do(this.latestValues)&&(s.transform=c?c({},""):"none",this.hasProjected=!1);return}s.visibility="";const u=d.animationValues||d.latestValues;this.applyTransformsToTarget();let m=l6(this.projectionDeltaWithTransform,this.treeScale,u);c&&(m=c(u,m)),s.transform=m;const{x:h,y:p}=this.projectionDelta;s.transformOrigin=`${h.origin*100}% ${p.origin*100}% 0`,d.animationValues?s.opacity=d===this?u.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:u.opacityExit:s.opacity=d===this?u.opacity!==void 0?u.opacity:"":u.opacityExit!==void 0?u.opacityExit:0;for(const v in rd){if(u[v]===void 0)continue;const{correct:f,applyTo:b,isCSSVariable:y}=rd[v],x=m==="none"?u[v]:f(u[v],d);if(b){const w=b.length;for(let P=0;P<w;P++)s[b[P]]=x}else y?this.options.visualElement.renderState.vars[v]=x:s[v]=x}this.options.layoutId&&(s.pointerEvents=d===this?as(l==null?void 0:l.pointerEvents)||"":"none")}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(s=>{var l;return(l=s.currentAnimation)==null?void 0:l.stop()}),this.root.nodes.forEach(Wh),this.root.sharedNodes.clear()}}}function u6(e){e.updateLayout()}function m6(e){var a;const t=((a=e.resumeFrom)==null?void 0:a.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&t&&e.hasListeners("didUpdate")){const{layoutBox:o,measuredBox:n}=e.layout,{animationType:r}=e.options,s=t.source!==e.layout.source;r==="size"?ea(m=>{const h=s?t.measuredBox[m]:t.layoutBox[m],p=Bt(h);h.min=o[m].min,h.max=h.min+p}):Ox(r,t.layoutBox,o)&&ea(m=>{const h=s?t.measuredBox[m]:t.layoutBox[m],p=Bt(o[m]);h.max=h.min+p,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[m].max=e.relativeTarget[m].min+p)});const l=xn();Lr(l,o,t.layoutBox);const c=xn();s?Lr(c,e.applyTransform(n,!0),t.measuredBox):Lr(c,o,t.layoutBox);const d=!Fx(l);let u=!1;if(!e.resumeFrom){const m=e.getClosestProjectingParent();if(m&&!m.resumeFrom){const{snapshot:h,layout:p}=m;if(h&&p){const v=Ct();Rs(v,t.layoutBox,h.layoutBox);const f=Ct();Rs(f,o,p.layoutBox),Lx(v,f)||(u=!0),m.options.layoutRoot&&(e.relativeTarget=f,e.relativeTargetOrigin=v,e.relativeParent=m)}}}e.notifyListeners("didUpdate",{layout:o,snapshot:t,delta:c,layoutDelta:l,hasLayoutChanged:d,hasRelativeLayoutChanged:u})}else if(e.isLead()){const{onExitComplete:o}=e.options;o&&o()}e.options.transition=void 0}function p6(e){e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function h6(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function f6(e){e.clearSnapshot()}function Wh(e){e.clearMeasurements()}function $h(e){e.isLayoutDirty=!1}function g6(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Gh(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function v6(e){e.resolveTargetDelta()}function b6(e){e.calcProjection()}
536function y6(e){e.resetSkewAndRotation()}function x6(e){e.removeLeadSnapshot()}function Hh(e,t,a){e.translate=pt(t.translate,0,a),e.scale=pt(t.scale,1,a),e.origin=t.origin,e.originPoint=t.originPoint}function Kh(e,t,a,o){e.min=pt(t.min,a.min,o),e.max=pt(t.max,a.max,o)}function w6(e,t,a,o){Kh(e.x,t.x,a.x,o),Kh(e.y,t.y,a.y,o)}function C6(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const P6={duration:.45,ease:[.4,0,.1,1]},Xh=e=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),Yh=Xh("applewebkit/")&&!Xh("chrome/")?Math.round:ia;function Qh(e){e.min=Yh(e.min),e.max=Yh(e.max)}function A6(e){Qh(e.x),Qh(e.y)}function Ox(e,t,a){return e==="position"||e==="preserve-aspect"&&!DG(qh(t),qh(a),.2)}function E6(e){var t;return e!==e.root&&((t=e.scroll)==null?void 0:t.wasRoot)}const S6=_x({attachResizeListener:(e,t)=>Zr(e,"resize",t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),ec={current:void 0},Bx=_x({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!ec.current){const e=new S6({});e.mount(window),e.setOptions({layoutScroll:!0}),ec.current=e}return ec.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),N6={pan:{Feature:HG},drag:{Feature:GG,ProjectionNode:Bx,MeasureLayout:Rx}};function Zh(e,t,a){const{props:o}=e;e.animationState&&o.whileHover&&e.animationState.setActive("whileHover",a==="Start");const n="onHover"+a,r=o[n];r&&dt.postRender(()=>r(t,vi(t)))}class k6 extends Eo{mount(){const{current:t}=this.node;t&&(this.unmount=YW(t,(a,o)=>(Zh(this.node,o,"Start"),n=>Zh(this.node,n,"End"))))}unmount(){}}class T6 extends Eo{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=hi(Zr(this.node.current,"focus",()=>this.onFocus()),Zr(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Jh(e,t,a){const{props:o}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&o.whileTap&&e.animationState.setActive("whileTap",a==="Start");const n="onTap"+(a==="End"?"":a),r=o[n];r&&dt.postRender(()=>r(t,vi(t)))}class I6 extends Eo{mount(){const{current:t}=this.node;t&&(this.unmount=e$(t,(a,o)=>(Jh(this.node,o,"Start"),(n,{success:r})=>Jh(this.node,n,r?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const pd=new WeakMap,tc=new WeakMap,R6=e=>{const t=pd.get(e.target);t&&t(e)},D6=e=>{e.forEach(R6)};function M6({root:e,...t}){const a=e||document;tc.has(a)||tc.set(a,{});const o=tc.get(a),n=JSON.stringify(t);return o[n]||(o[n]=new IntersectionObserver(D6,{root:e,...t})),o[n]}function F6(e,t,a){const o=M6(t);return pd.set(e,a),o.observe(e),()=>{pd.delete(e),o.unobserve(e)}}const L6={some:0,all:1};class j6 extends Eo{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:t={}}=this.node.getProps(),{root:a,margin:o,amount:n="some",once:r}=t,s={root:a?a.current:void 0,rootMargin:o,threshold:typeof n=="number"?n:L6[n]},l=c=>{const{isIntersecting:d}=c;if(this.isInView===d||(this.isInView=d,r&&!d&&this.hasEnteredView))return;d&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",d);const{onViewportEnter:u,onViewportLeave:m}=this.node.getProps(),h=d?u:m;h&&h(c)};return F6(this.node.current,s,l)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:a}=this.node;["amount","margin","root"].some(_6(t,a))&&this.startObserver()}unmount(){}}function _6({viewport:e={}},{viewport:t={}}={}){return a=>e[a]!==t[a]}const O6={inView:{Feature:j6},tap:{Feature:I6},focus:{Feature:T6},hover:{Feature:k6}},B6={layout:{ProjectionNode:Bx,MeasureLayout:Rx}},z6={...SG,...O6,...N6,...B6},Ze=q$(z6,tG);function hd(e){const t=pi(()=>nn(e)),{isStatic:a}=g.useContext(il);if(a){const[,o]=g.useState(e);g.useEffect(()=>t.on("change",o),[])}return t}function zx(e,t){const a=hd(t()),o=()=>a.set(t());return o(),ku(()=>{const n=()=>dt.preRender(o,!1,!0),r=e.map(s=>s.on("change",n));return()=>{r.forEach(s=>s()),Xa(o)}}),a}function V6(e){Mr.current=[],e();const t=zx(Mr.current,e);return Mr.current=void 0,t}function ef(e,t,a,o){if(typeof e=="function")return V6(e);const n=typeof t=="function"?t:a$(t,a,o);return Array.isArray(e)?tf(e,n):tf([e],([r])=>n(r))}function tf(e,t){const a=pi(()=>[]);return zx(e,()=>{a.length=0;const o=e.length;for(let n=0;n<o;n++)a[n]=e[n].get();return t(a)})}function q6({open:e,onOpenChange:t,onSelectPix:a,onSelectCard:o}){const{t:n}=tt("billing");return i.jsx(ya,{open:e,onOpenChange:t,children:i.jsxs(sa,{className:"sm:max-w-md border-2 border-accent",children:[i.jsx(xa,{
536children:i.jsxs(wa,{className:"text-center",children:["ð° ",n("paymentMethodModal.title")]})}),i.jsxs("div",{className:"space-y-4 py-4",children:[i.jsx(Ze.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.1},children:i.jsxs(we,{variant:"outline",className:"w-full h-auto p-4 flex items-start gap-4 hover:border-green-500 hover:bg-green-500/10 transition-all",onClick:a,children:[i.jsx("div",{className:"p-3 rounded-lg bg-green-500/20",children:i.jsx(z0,{className:"h-6 w-6 text-green-500"})}),i.jsxs("div",{className:"text-left flex-1",children:[i.jsx("p",{className:"font-semibold text-lg",children:"PIX"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:n("paymentMethodModal.pixDescription")})]})]})}),i.jsx(Ze.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{delay:.2},children:i.jsxs(we,{variant:"outline",className:"w-full h-auto p-4 flex items-start gap-4 hover:border-accent hover:bg-accent/10 transition-all",onClick:o,children:[i.jsx("div",{className:"p-3 rounded-lg bg-accent/20",children:i.jsx(ii,{className:"h-6 w-6 text-accent"})}),i.jsxs("div",{className:"text-left flex-1",children:[i.jsx("p",{className:"font-semibold text-lg",children:n("paymentMethodModal.cardTitle")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:n("paymentMethodModal.cardDescription")})]})]})})]})]})})}function ns(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ns=function(t){return typeof t}:ns=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ns(e)}var Vx="clover",U6=function(t){return t===3?"v3":t},qx="https://js.stripe.com",W6="".concat(qx,"/").concat(Vx,"/stripe.js"),$6=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,G6=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,af="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",H6=function(t){return $6.test(t)||G6.test(t)},K6=function(){for(var t=document.querySelectorAll('script[src^="'.concat(qx,'"]')),a=0;a<t.length;a++){var o=t[a];if(H6(o.src))return o}return null},of=function(t){var a="",o=document.createElement("script");o.src="".concat(W6).concat(a);var n=document.head||document.body;if(!n)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return n.appendChild(o),o},X6=function(t,a){!t||!t._registerWrapper||t._registerWrapper({name:"stripe-js",version:"8.7.0",startTime:a})},pr=null,zi=null,Vi=null,Y6=function(t){return function(a){t(new Error("Failed to load Stripe.js",{cause:a}))}},Q6=function(t,a){return function(){window.Stripe?t(window.Stripe):a(new Error("Stripe.js not available"))}},Z6=function(t){return pr!==null?pr:(pr=new Promise(function(a,o){if(typeof window>"u"||typeof document>"u"){a(null);return}if(window.Stripe&&t&&console.warn(af),window.Stripe){a(window.Stripe);return}try{var n=K6();if(n&&t)console.warn(af);else if(!n)n=of(t);else if(n&&Vi!==null&&zi!==null){var r;n.removeEventListener("load",Vi),n.removeEventListener("error",zi),(r=n.parentNode)===null||r===void 0||r.removeChild(n),n=of(t)}Vi=Q6(a,o),zi=Y6(o),n.addEventListener("load",Vi),n.addEventListener("error",zi)}catch(s){o(s);return}}),pr.catch(function(a){return pr=null,Promise.reject(a)}))},J6=function(t,a,o){if(t===null)return null;var n=a[0];if(typeof n!="string")throw new Error("Expected publishable key to be of type string, got type ".concat(ns(n)," instead."));var r=n.match(/^pk_test/),s=U6(t.version),l=Vx;r&&s!==l&&console.warn("Stripe.js@".concat(s," was loaded on the page, but @stripe/stripe-js@").concat("8.7.0"," expected Stripe.js@").concat(l,". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var c=t.apply(void 0,a);return X6(c,o),c},hr,Ux=!1,Wx=function(){return hr||(hr=Z6(null).catch(function(t){return hr=null,Promise.reject(t)}),hr)};Promise.resolve().then(function(){return Wx()}).catch(function(e){Ux||console.warn(e)});var eH=function(){for(var t=arguments.length,a=new Array(t),o=0;o<t;o++)a[o]=arguments[o];Ux=!0;var n=Date.now();return Wx().then(function(r){return J6(r,a,n)})};const tH="pt-BR",nf={insufficient_funds:"O cartão não tem limite disponÃvel para esta cobrança. Use outro cartão ou libere limite com o banco.",expired_card:"O cartão está vencido. Use outro cartão.",incorrect_cvc:"O código de segurança (CVV) está incorreto.",incorrect_number:"O número do cartão está incorreto.",card_not_supported:"Este cartão não aceita esse tipo de cobrança. Tente um cartão de crédito de outra bandeira.",currency_not_supported:"Este cartão não aceita cobranças em reais (BRL). Use um cartão nacional.",do_n
536ot_honor:"O banco recusou a cobrança sem informar o motivo. Ligue para o seu banco ou use outro cartão.",generic_decline:"O banco recusou a cobrança. Ligue para o seu banco ou use outro cartão.",transaction_not_allowed:"O banco não permite este tipo de transação neste cartão. Use outro cartão.",fraudulent:"O banco bloqueou a cobrança por suspeita de fraude. Fale com o seu banco ou use outro cartão.",lost_card:"O banco recusou a cobrança. Use outro cartão.",stolen_card:"O banco recusou a cobrança. Use outro cartão.",processing_error:"Houve um erro no processamento no banco. Tente de novo em alguns minutos.",try_again_later:"O banco pediu para tentar novamente mais tarde. Aguarde alguns minutos.",card_velocity_exceeded:"O cartão excedeu o limite de tentativas permitido pelo banco. Aguarde algumas horas ou use outro cartão.",authentication_required:"O banco exigiu autenticação para esta compra. Tente novamente e aprove a cobrança no app do banco."},rf={card_declined:"O banco recusou a cobrança. Ligue para o seu banco ou use outro cartão.",expired_card:"O cartão está vencido. Use outro cartão.",incorrect_cvc:"O código de segurança (CVV) está incorreto.",invalid_cvc:"O código de segurança (CVV) é inválido.",incorrect_number:"O número do cartão está incorreto.",invalid_number:"O número do cartão é inválido.",invalid_expiry_month:"O mês de validade é inválido.",invalid_expiry_year:"O ano de validade é inválido.",processing_error:"Houve um erro no processamento. Tente de novo em alguns minutos.",authentication_required:"O banco exigiu autenticação para esta compra. Tente novamente e aprove a cobrança no app do banco.",card_decline_rate_limit_exceeded:"Este cartão foi recusado vezes demais. A Stripe bloqueia novas tentativas por algumas horas. Use outro cartão ou tente de novo mais tarde.",rate_limit:"Tentativas demais em pouco tempo. Aguarde alguns minutos antes de tentar de novo."},aH=[[/too many attempts/i,"Tentativas demais em pouco tempo. Aguarde alguns minutos antes de tentar de novo."],[/rate limit/i,"Tentativas demais em pouco tempo. Aguarde alguns minutos antes de tentar de novo."],[/declined/i,"O banco recusou a cobrança. Ligue para o seu banco ou use outro cartão."],[/expired/i,"O cartão está vencido. Use outro cartão."],[/security code|cvc/i,"O código de segurança (CVV) está incorreto."],[/insufficient funds/i,"O cartão não tem limite disponÃvel para esta cobrança."],[/your card number is invalid|invalid card number/i,"O número do cartão é inválido."],[/network error|failed to fetch/i,"Falha de conexão ao falar com o processador de pagamento. Verifique a internet e tente de novo."]],oH="Não foi possÃvel concluir a cobrança agora. Tente novamente em alguns minutos.";function sf(e,t=oH){const a=((e==null?void 0:e.decline_code)??(e==null?void 0:e.declineCode)??"").trim();if(a&&nf[a])return nf[a];const o=((e==null?void 0:e.code)??"").trim();if(o&&rf[o])return rf[o];const n=((e==null?void 0:e.message)??"").trim();if(n){for(const[r,s]of aH)if(r.test(n))return s;if(/[áà âãéêÃóôõúüç]/i.test(n)||/\b(não|cartão|cobrança|plano|assinatura|pagamento|tente)\b/i.test(n))return n}return t}var $x={exports:{}},nH="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",rH=nH,iH=rH;function Gx(){}function Hx(){}Hx.resetWarningCache=Gx;var sH=function(){function e(o,n,r,s,l,c){if(c!==iH){var d=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw d.name="Invariant Violation",d}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Hx,resetWarningCache:Gx};return a.PropTypes=a,a};$x.exports=sH();var lH=$x.exports;const Je=kg(lH);function lf(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),a.push.apply(a,o)}return a}function cf(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};
536t%2?lf(Object(a),!0).forEach(function(o){Kx(e,o,a[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):lf(Object(a)).forEach(function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))})}return e}function rs(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?rs=function(t){return typeof t}:rs=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rs(e)}function Kx(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function cH(e,t){if(e==null)return{};var a={},o=Object.keys(e),n,r;for(r=0;r<o.length;r++)n=o[r],!(t.indexOf(n)>=0)&&(a[n]=e[n]);return a}function dH(e,t){if(e==null)return{};var a=cH(e,t),o,n;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)o=r[n],!(t.indexOf(o)>=0)&&Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}function Xx(e,t){return uH(e)||mH(e,t)||pH(e,t)||hH()}function uH(e){if(Array.isArray(e))return e}function mH(e,t){var a=e&&(typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"]);if(a!=null){var o=[],n=!0,r=!1,s,l;try{for(a=a.call(e);!(n=(s=a.next()).done)&&(o.push(s.value),!(t&&o.length===t));n=!0);}catch(c){r=!0,l=c}finally{try{!n&&a.return!=null&&a.return()}finally{if(r)throw l}}return o}}function pH(e,t){if(e){if(typeof e=="string")return df(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return df(e,t)}}function df(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,o=new Array(t);a<t;a++)o[a]=e[a];return o}function hH(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. 537In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Lt=function(t,a,o){var n=!!o,r=ee.useRef(o);ee.useEffect(function(){r.current=o},[o]),ee.useEffect(function(){if(!n||!t)return function(){};var s=function(){r.current&&r.current.apply(r,arguments)};return t.on(a,s),function(){t.off(a,s)}},[n,a,t,r])},fd=function(t){var a=ee.useRef(t);return ee.useEffect(function(){a.current=t},[t]),a.current},Yn=function(t){return t!==null&&rs(t)==="object"},fH=function(t){return Yn(t)&&typeof t.then=="function"},gH=function(t){return Yn(t)&&typeof t.elements=="function"&&typeof t.createToken=="function"&&typeof t.createPaymentMethod=="function"&&typeof t.confirmCardPayment=="function"},uf="[object Object]",vH=function e(t,a){if(!Yn(t)||!Yn(a))return t===a;var o=Array.isArray(t),n=Array.isArray(a);if(o!==n)return!1;var r=Object.prototype.toString.call(t)===uf,s=Object.prototype.toString.call(a)===uf;if(r!==s)return!1;if(!r&&!o)return t===a;var l=Object.keys(t),c=Object.keys(a);if(l.length!==c.length)return!1;for(var d={},u=0;u<l.length;u+=1)d[l[u]]=!0;for(var m=0;m<c.length;m+=1)d[c[m]]=!0;var h=Object.keys(d);if(h.length!==l.length)return!1;var p=t,v=a,f=function(y){return e(p[y],v[y])};return h.every(f)},Yx=function(t,a,o){return Yn(t)?Object.keys(t).reduce(function(n,r){var s=!Yn(a)||!vH(t[r],a[r]);return o.includes(r)?(s&&console.warn("Unsupported prop change: options.".concat(r," is not a mutable property.")),n):s?cf(cf({},n||{}),{},Kx({},r,t[r])):n},null):null},Qx="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",mf=function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qx;if(t===null||gH(t))return t;throw new Error(a)},bH=function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Qx;if(fH(t))return{tag:"async",stripePromise:Promise.resolve(t).then(function(n){return mf(n,a)})};var o=mf(t,a);return o===null?{tag:"empty"}:{tag:"sync",stripe:o}},yH=function(t){!t||!t._registerWrapper||!t.registerAppInfo||(t._registerWrapper({name:"react-stripe-js",version:"5.6.0"}),t.registerAppInfo({name:"react-stripe-js",version:"5.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},ul=ee.createContext(null);ul.displayName="ElementsContext";var Zx=function(t,a){if(!t)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(a," in an <Elements> provider."));return t},Jx=function(t){var a=t.stripe,o=t.options,n=t.children,r=ee.useMemo(function(){return bH(a)},[a]),s=ee.useState(function(){return{stripe:r.tag==="sync"?r.stripe:null,elements:r.tag==="sync"?r.stripe.elements(o):null}}),l=Xx(s,2),c=l[0],d=l[1];ee.useEffect(function(){var h=!0,p=function(f){d(function(b){return b.stripe?b:{stripe:f,elements:f.elements(o)}})};return r.tag==="async"&&!c.stripe?r.stripePromise.then(function(v){v&&h&&p(v)}):r.tag==="sync"&&!c.stripe&&p(r.stripe),function(){h=!1}},[r,c,o]);var u=fd(a);ee.useEffect(function(){u!==null&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")},[u,a]);var m=fd(o);return ee.useEffect(function(){if(c.elements){var h=Yx(o,m,["clientSecret","fonts"]);h&&c.elements.update(h)}},[o,m,c.elements]),ee.useEffect(function(){yH(c.stripe)},[c.stripe]),ee.createElement(ul.Provider,{value:c},n)};Jx.propTypes={stripe:Je.any,options:Je.object};var xH=function(t){var a=ee.useContext(ul);return Zx(a,t)},wH=function(){var t=xH("calls useElements()"),a=t.elements;return a};Je.func.isRequired;var ew=ee.createContext(null);ew.displayName="CheckoutContext";Je.any,Je.shape({clientSecret:Je.oneOfType([Je.string,Je.instanceOf(Promise)]).isRequired,elementsOptions:Je.object}).isRequired;var gd=function(t){var a=ee.useContext(ew),o=ee.useContext(ul);if(a){if(o)throw new Error("You cannot wrap the part of your app that ".concat(t," in both <CheckoutProvider> and <Elements> providers."));return a}else return Zx(o,t)},CH=["mode"],PH=function(t){return t.charAt(0).toUpperCase()+t.slice(1)},Gt=function(t,a){var o="".concat(PH(t),"Element"),n=function(c){var d=c.id,u=c.className,m=c.options,h=m===void 0?{}:m,p=c.onBlur,v=c.onFocus,f=c.onReady,b=c.onChange,y=c.onEscape,x=c.onClick,w=c.onLoadError,P=c.onLoaderStart,E=c.onNetworksChange,k=c.onConfirm,S=c.onCancel,R=c.onShippingAddressChange,I=c.onShippingRateChange,M=c.onSavedPaymentMethodRemove,q=c.onSavedPaymentMethodUpdate,N=gd("mou
537nts <".concat(o,">")),F="elements"in N?N.elements:null,A="checkoutState"in N?N.checkoutState:null,_=(A==null?void 0:A.type)==="success"||(A==null?void 0:A.type)==="loading"?A.sdk:null,K=ee.useState(null),V=Xx(K,2),H=V[0],B=V[1],te=ee.useRef(null),j=ee.useRef(null);Lt(H,"blur",p),Lt(H,"focus",v),Lt(H,"escape",y),Lt(H,"click",x),Lt(H,"loaderror",w),Lt(H,"loaderstart",P),Lt(H,"networkschange",E),Lt(H,"confirm",k),Lt(H,"cancel",S),Lt(H,"shippingaddresschange",R),Lt(H,"shippingratechange",I),Lt(H,"savedpaymentmethodremove",M),Lt(H,"savedpaymentmethodupdate",q),Lt(H,"change",b);var L;f&&(t==="expressCheckout"?L=f:L=function(){f(H)}),Lt(H,"ready",L),ee.useLayoutEffect(function(){if(te.current===null&&j.current!==null&&(F||_)){var $=null;if(_)switch(t){case"paymentForm":$=_.createPaymentFormElement(h);break;case"payment":$=_.createPaymentElement(h);break;case"address":if("mode"in h){var X=h.mode,fe=dH(h,CH);if(X==="shipping")$=_.createShippingAddressElement(fe);else if(X==="billing")$=_.createBillingAddressElement(fe);else throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.")}else throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");break;case"expressCheckout":$=_.createExpressCheckoutElement(h);break;case"currencySelector":$=_.createCurrencySelectorElement();break;case"taxId":$=_.createTaxIdElement(h);break;default:throw new Error("Invalid Element type ".concat(o,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else F&&($=F.create(t,h));te.current=$,B($),$&&$.mount(j.current)}},[F,_,h]);var Q=fd(h);return ee.useEffect(function(){if(te.current){var $=Yx(h,Q,["paymentRequest"]);$&&"update"in te.current&&te.current.update($)}},[h,Q]),ee.useLayoutEffect(function(){return function(){if(te.current&&typeof te.current.destroy=="function")try{te.current.destroy(),te.current=null}catch{}}},[]),ee.createElement("div",{id:d,className:u,ref:j})},r=function(c){gd("mounts <".concat(o,">"));var d=c.id,u=c.className;return ee.createElement("div",{id:d,className:u})},s=a?r:n;return s.propTypes={id:Je.string,className:Je.string,onChange:Je.func,onBlur:Je.func,onFocus:Je.func,onReady:Je.func,onEscape:Je.func,onClick:Je.func,onLoadError:Je.func,onLoaderStart:Je.func,onNetworksChange:Je.func,onConfirm:Je.func,onCancel:Je.func,onShippingAddressChange:Je.func,onShippingRateChange:Je.func,onSavedPaymentMethodRemove:Je.func,onSavedPaymentMethodUpdate:Je.func,options:Je.object},s.displayName=o,s.__elementType=t,s},Ht=typeof window>"u",AH=ee.createContext(null);AH.displayName="EmbeddedCheckoutProviderContext";var EH=function(){var t=gd("calls useStripe()"),a=t.stripe;return a};Gt("auBankAccount",Ht);Gt("card",Ht);var pf=Gt("cardNumber",Ht),SH=Gt("cardExpiry",Ht),NH=Gt("cardCvc",Ht);Gt("iban",Ht);Gt("payment",Ht);Gt("expressCheckout",Ht);Gt("paymentRequestButton",Ht);Gt("linkAuthentication",Ht);Gt("address",Ht);Gt("shippingAddress",Ht);Gt("paymentMethodMessaging",Ht);Gt("taxId",Ht);const tw=g.forwardRef(({className:e,cardholderName:t,cardNumber:a,expiryDate:o,cvv:n,isFlipped:r=!1,...s},l)=>i.jsx("div",{ref:l,className:ve("group w-full max-w-[320px] h-[200px] perspective-1000",e),...s,children:i.jsxs("div",{className:ve("relative w-full h-full transition-transform duration-700 transform-style-3d",r?"rotate-y-180":""),style:{transformStyle:"preserve-3d",transform:r?"rotateY(180deg)":"rotateY(0deg)"},children:[i.jsx("div",{className:"absolute w-full h-full backface-hidden rounded-2xl overflow-hidden",style:{backfaceVisibility:"hidden"},children:i.jsxs("div",{className:"w-full h-full bg-gradient-to-br from-orange-500 via-orange-600 to-orange-700 p-5 flex flex-col justify-between",children:[i.jsxs("div",{className:"flex justify-between items-start",children:[i.jsxs("svg",{className:"w-10 h-10 text-orange-300/80",viewBox:"0 0 24 24",fill:"currentColor",children:[i.jsx("rect",{x:"1",y:"4",width:"22",height:"16",rx:"3",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}
537),i.jsx("rect",{x:"1",y:"8",width:"22",height:"4",fill:"currentColor",opacity:"0.3"})]}),i.jsx("span",{className:"text-white/90 font-bold text-sm tracking-wider",children:"VISA"})]}),i.jsx("div",{className:"text-white font-mono text-lg tracking-[0.2em] drop-shadow-md",children:a||"â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢"}),i.jsxs("div",{className:"flex justify-between items-end",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-orange-200/70 text-[10px] uppercase tracking-wider",children:"Titular do Cartão"}),i.jsx("p",{className:"text-white font-medium text-sm tracking-wide truncate max-w-[180px]",children:t||"SEU NOME"})]}),i.jsxs("div",{className:"text-right",children:[i.jsx("p",{className:"text-orange-200/70 text-[10px] uppercase tracking-wider",children:"Validade"}),i.jsx("p",{className:"text-white font-medium text-sm",children:o||"MM/AA"})]})]})]})}),i.jsx("div",{className:"absolute w-full h-full backface-hidden rounded-2xl overflow-hidden",style:{backfaceVisibility:"hidden",transform:"rotateY(180deg)"},children:i.jsxs("div",{className:"w-full h-full bg-gradient-to-br from-orange-600 via-orange-700 to-orange-800 flex flex-col justify-between py-5",children:[i.jsx("div",{className:"w-full h-10 bg-black/40"}),i.jsx("div",{className:"px-5",children:i.jsx("div",{className:"bg-white/90 rounded h-8 flex items-center justify-end px-3",children:i.jsx("span",{className:"font-mono text-gray-800 tracking-widest",children:n||"â¢â¢â¢"})})}),i.jsx("p",{className:"text-orange-200/70 text-[10px] uppercase tracking-wider text-center",children:"CVV"}),i.jsx("div",{className:"px-5 flex justify-end",children:i.jsxs("svg",{className:"w-12 h-8 text-white/30",viewBox:"0 0 48 32",children:[i.jsx("circle",{cx:"16",cy:"16",r:"14",fill:"currentColor"}),i.jsx("circle",{cx:"32",cy:"16",r:"14",fill:"currentColor",opacity:"0.7"}),i.jsx("path",{d:"M24 6 Q16 16 24 26 Q32 16 24 6",fill:"white",opacity:"0.3"})]})})]})})]})}));tw.displayName="FlippableCreditCard";const aw="zapdata_utm_params",vd="zapdata_fbclid",bd="zapdata_fbp",ow="zapdata_fbc",nw=()=>{if(typeof window>"u")return{};const e=new URLSearchParams(window.location.search),t={};if(["utm_source","utm_medium","utm_campaign","utm_term","utm_content"].forEach(o=>{const n=e.get(o);n&&(t[o]=n)}),Object.keys(t).length>0)try{const n={...ml(),...t};localStorage.setItem(aw,JSON.stringify(n))}catch(o){console.warn("[Facebook Pixel] Failed to store UTM params:",o)}return t},ml=()=>{if(typeof window>"u")return{};try{const e=localStorage.getItem(aw);return e?JSON.parse(e):{}}catch{return{}}},kH=()=>{if(!(typeof window>"u"))try{if(!localStorage.getItem(bd)){const a=`fb.1.${Date.now()}.${Math.floor(Math.random()*2147483647)}`;localStorage.setItem(bd,a)}const t=new URLSearchParams(window.location.search).get("fbclid")||localStorage.getItem(vd);if(t){const a=`fb.1.${Date.now()}.${t}`;localStorage.setItem(ow,a),localStorage.setItem(vd,t)}}catch(e){console.warn("[Facebook Pixel] Failed to init fb cookies:",e)}},TH=()=>{try{return{fbc:localStorage.getItem(ow)||null,fbp:localStorage.getItem(bd)||null,fbclid:localStorage.getItem(vd)||null}}catch{return{fbc:null,fbp:null,fbclid:null}}},rw=async(e,t,a)=>{try{const o=ml(),n=TH(),{data:{user:r}}=await ne.auth.getUser(),s={user_id:(r==null?void 0:r.id)||null,email:a||(r==null?void 0:r.email)||null,event_name:e,event_value:t||null,utm_source:o.utm_source||null,utm_medium:o.utm_medium||null,utm_campaign:o.utm_campaign||null,utm_term:o.utm_term||null,utm_content:o.utm_content||null,referrer:document.referrer||null,user_agent:navigator.userAgent||null,fbc:n.fbc,fbp:n.fbp,fbclid:n.fbclid,page_url:window.location.href||null},{error:l}=await ne.from("site_pixel_events").insert(s);l?console.error("[Facebook Pixel] Failed to save event to database:",l):console.log(`[Facebook Pixel] ${e} event saved to database`)}catch(o){console.error("[Facebook Pixel] Error saving event to database:",o)}},IH=e=>{if(typeof window<"u"&&window.fbq){const t=ml();window.fbq("track","CompleteRegistration",{content_name:t.utm_campaign||void 0}),console.log("[Facebook Pixel] CompleteRegistration event fired")}rw("CompleteRegistration",void 0,e)},iw=(e,t="BRL")=>{if(typeof window<"u"&&window.fbq){const a=ml();window.fbq("track","Purchase",{value:e,currency:t,content_name:a.utm_campaign||void 0}),console.log(`[Facebook Pixel] Purchase event fired: ${e} ${t}`)}rw("Purchase",e)};let hf=!1;const ff=new Set;function RH(e){var t;if(!(typeof window>"u"||!e)&&(hf||(function(a,o,n,r){var d;if(a.fbq)return;const s=function(...u){s.callMethod?s.callMethod.apply(s,u):s.queue.push(u)};a.fbq=s,a._fbq||(a._fbq=s),s.push=s,s.loaded=!0,s.version="2.0",s.queue=[];const l=o.createElement(n);l.async=!0,l.src=r;const c=o.getElementsByTagName(n)[0];(d=c.parentNode)==null||d.insertBefore(l,c)}(window,document,"script","https://connect.facebook.net/en_US/fbevents.js"),hf=!0),!ff.has(e)&&((t=window.fbq)==null||t.call(window,"init",e),ff.add(e),typeof document<"u"&&!document.getElementById(`fb-noscript-${e}`)))){const a=document.createElement("noscript");a.id=`fb-noscript-${e}`,a.innerHTML=`<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=${e}&ev=PageView&noscript=1" />`,document.body.appendChild(a)}}
537function DH(e=3e3){return new Promise(t=>{const a=Date.now(),o=()=>{if(typeof window<"u"&&typeof window.fbq=="function")return t(!0);if(Date.now()-a>e)return t(!1);setTimeout(o,50)};o()})}let gf=!1;const vf=new Set;function MH(e){var a,o,n;if(typeof window>"u"||!e)return;gf||(function(r,s,l){r.TiktokAnalyticsObject=l;const c=r[l]=r[l]||[];c.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],c.setAndDefer=function(d,u){d[u]=function(...m){d.push([u,...m])}};for(const d of c.methods)c.setAndDefer(c,d);c.instance=function(d){const u=c._i[d]||[];for(const m of c.methods)c.setAndDefer(u,m);return u},c.load=function(d){var p;const u="https://analytics.tiktok.com/i18n/pixel/events.js";c._i=c._i||{},c._i[d]=[],c._i[d]._u=u,c._t=c._t||{},c._t[d]=+new Date,c._o=c._o||{},c._o[d]={};const m=s.createElement("script");m.async=!0,m.src=`${u}?sdkid=${d}&lib=${l}`;const h=s.getElementsByTagName("script")[0];(p=h.parentNode)==null||p.insertBefore(m,h)}}(window,document,"ttq"),gf=!0);const t=window;!vf.has(e)&&((a=t.ttq)!=null&&a.load)&&(t.ttq.load(e),(n=(o=t.ttq).page)==null||n.call(o),vf.add(e))}function FH(e=3e3){return new Promise(t=>{const a=Date.now(),o=()=>{var n;if((n=window==null?void 0:window.ttq)!=null&&n.track)return t(!0);if(Date.now()-a>e)return t(!1);setTimeout(o,50)};o()})}let bf=!1;const qi=new Set;function LH(e,t){var o,n;if(typeof window>"u")return;const a=e||t;if(a){if(!bf){window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},window.gtag("js",new Date);const r=document.createElement("script");r.async=!0,r.src=`https://www.googletagmanager.com/gtag/js?id=${a}`,document.head.appendChild(r),bf=!0}e&&!qi.has(e)&&((o=window.gtag)==null||o.call(window,"config",e,{send_page_view:!0}),qi.add(e)),t&&!qi.has(t)&&((n=window.gtag)==null||n.call(window,"config",t),qi.add(t))}}function ac(e,t={}){typeof window>"u"||!window.gtag||window.gtag("event",e,t)}function jH(e){var o;if(typeof document>"u"||!e)return;const t=document.cookie.split("; ").find(n=>n.startsWith("_ga="));if(!t)return;const a=((o=t.split("=")[1])==null?void 0:o.split("."))||[];if(a.length>=4)return`${a[2]}.${a[3]}`}async function Ui(e){try{if(typeof crypto>"u"||!crypto.subtle)return;const t=new TextEncoder().encode(e),a=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(a)).map(o=>o.toString(16).padStart(2,"0")).join("")}catch{return}}function _H(e){const t=e.replace(/\D/g,"");return t?t.startsWith("55")?`+${t}`:t.length===10||t.length===11?`+55${t}`:`+${t}`:""}async function OH(e){if(typeof window>"u"||!window.gtag)return;const t={};if(e.email){const o=await Ui(e.email.trim().toLowerCase());o&&(t.sha256_email_address=o)}if(e.phone){const o=await Ui(_H(e.phone));o&&(t.sha256_phone_number=o)}const a={};if(e.first_name){const o=await Ui(e.first_name.trim().toLowerCase());o&&(a.sha256_first_name=o)}if(e.last_name){const o=await Ui(e.last_name.trim().toLowerCase());o&&(a.sha256_last_name=o)}Object.keys(a).length&&(t.address=a),Object.keys(t).length&&window.gtag("set","user_data",t)}function oa(e){if(typeof document>"u")return;const t=document.cookie.split("; ").find(a=>a.startsWith(`${e}=`));if(t)try{return decodeURIComponent(t.split("=").slice(1).join("="))}catch{return t.split("=").slice(1).join("=")}}function yd(e,t,a=90){if(typeof document>"u")return;const o=new Date(Date.now()+a*86400*1e3).toUTCString();document.cookie=`${e}=${encodeURIComponent(t)}; expires=${o}; path=/; SameSite=Lax`}const sw=["utm_source","utm_medium","utm_campaign","utm_content","utm_term"],xd={};function BH(){const e=Math.random().toString(36).slice(2,10);return`sck_${Date.now().toString(36)}_${e}`}function zH(){if(typeof window>"u")return"";let e=window.localStorage.getItem("rla_sck")||oa("rla_sck");return e||(e=BH(),window.localStorage.setItem("rla_sck",e)),yd("rla_sck",e,180),e}function VH(){if(typeof window>"u")return{};const e=new URL(window.location.href),t={};let a=!1;for(const o of sw){const n=e.searchParams.get(o),r=oa(o);let s=n||r;!s&&xd[o]&&(s=xd[o]),s&&(yd(o,s,90),t[o]=s,e.searchParams.get(o)!==s&&(e.searchParams.set(o,s),a=!0))}for(const o of["fbclid","ttclid","gclid"]){const n=e.searchParams.get(o);n&&yd(o,n,90)}if(a)try{const o=e.pathname+(e.search?e.search:"")+(e.hash||"");window.history.replaceState(null,"",o)}catch{}return t}function yf(){const e={};for(const t of sw)e[t]=oa(t)||xd[t];return e}function qH(e){const t=(e.utm_source||"").toLowerCase();return t.includes("facebook")||t.includes("meta")||t.includes("instagram")?"meta":t.includes("tiktok")?"tiktok":t.includes("google")?"google":oa("fbclid")?"meta":oa("ttclid")?"tiktok":oa("gclid")?"google":typeof document<"u"&&document.referrer?"referral":"direct"}const wd="zapdata_marketing_opt_out",lw="zapdata_cookie_notice_seen";function Ds(){try{return localStorage.getItem(wd)==="1"}catch{return!1}}function UH(e){try{e?localStorage.setItem(wd,"1"):localStorage.removeItem(wd)}catch{}}function WH(){try{return localStorage.getItem(lw)==="1"}catch{return!1}}function $H(){try{localStorage.setItem(lw,"1")}catch{}}const xf="rla_lp_cfg_v1",GH=5*60*1e3;async function HH(){try{const e=sessionStorage.getItem(xf);if(e){const t=JSON.parse(e);if(Date.now()-t.ts<GH)return t.cfg}}catch{}try{const{data:e}=await ne.functions.invoke("lp-tracking-config-public",{method:"GET"}),t=e||null;return t&&sessionStorage.setItem(xf,JSON.stringify({ts:Date.now(),cfg:t})),t}catch(e){return console.warn("[useLpTracking] load config failed",e),null}}async function KH(){if(Ds())return null;try{const e=sessionStorage.getItem("rla_lp_geo");if(e)return JSON.parse(e);const t=await fetch("https://ipapi.co/json/");if(!t.ok)return null;const a=await t.json(),o={country:a==null?void 0:a.country_code,state:a==null?void 0:a.region_code,city:a==null?void 0:a.city,ip:a==null?void 0:a.ip};return sessionStorage.setItem("rla_lp_geo",JSON.stringify(o)),o}catch{return null}}function oc(e){return`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}function om(){const[e,t]=g.useState(null),a=g.useRef(""),o=g.useRef(!1);g.useEffect(()=>{let d=!0;return(async()=>{a.current=zH(),VH();const u=await HH();d&&t(u)})(),()=>{d=!1}},[]);const n=g.useCallback(async(d,u,m={})=>
537{if(!(e!=null&&e.enabled)||Ds())return;const h=yf(),p=a.current,v=window.location.href,f=navigator.userAgent,b={session_sck:p,event_id:u,event_name:d,event_source_url:v,user_agent:f,...h,...m},y=[];if(e.meta_enabled&&y.push(ne.functions.invoke("lp-meta-capi",{body:{...b}})),e.tiktok_enabled){const x={PageView:"Pageview",InitiateCheckout:"InitiateCheckout",Purchase:"CompletePayment"};y.push(ne.functions.invoke("lp-tiktok-events",{body:{...b,event_name:x[d]||d}}))}if(e.google_enabled){const x={PageView:"page_view",InitiateCheckout:"begin_checkout",Purchase:"purchase"};y.push(ne.functions.invoke("lp-google-events",{body:{...b,event_name:x[d]||d.toLowerCase(),client_id:jH(e.ga4_measurement_id)||p}}))}await Promise.allSettled(y)},[e]),r=g.useCallback(async()=>{var m;if(!(e!=null&&e.enabled)||o.current)return;o.current=!0;const d=!Ds(),u=oc("pv");d&&e.meta_enabled&&e.meta_pixel_id&&(RH(e.meta_pixel_id),await DH(2e3),(m=window.fbq)==null||m.call(window,"track","PageView",{},{eventID:u})),d&&e.tiktok_enabled&&e.tiktok_pixel_id&&(MH(e.tiktok_pixel_id),await FH(2e3)),d&&e.google_enabled&&LH(e.ga4_measurement_id,e.google_ads_conversion_id);try{const h=yf(),p=await KH();await ne.functions.invoke("lp-track-session",{body:{sck:a.current,fbc:oa("_fbc"),fbp:oa("_fbp"),fbclid:oa("fbclid"),ttclid:oa("ttclid"),gclid:oa("gclid"),ttp:oa("_ttp"),user_agent:navigator.userAgent,country:p==null?void 0:p.country,state:p==null?void 0:p.state,city:p==null?void 0:p.city,src:qH(h),...h}})}catch{}await n("PageView",u)},[e,n]),s=g.useCallback(async(d={})=>{var m,h,p;if(!(e!=null&&e.enabled))return;const u=oc("ic");e.meta_enabled&&((m=window.fbq)==null||m.call(window,"track","InitiateCheckout",{value:d.value,currency:d.currency||"BRL"},{eventID:u})),e.tiktok_enabled&&((p=(h=window.ttq)==null?void 0:h.track)==null||p.call(h,"InitiateCheckout",{value:d.value,currency:d.currency||"BRL"},{event_id:u})),e.google_enabled&&ac("begin_checkout",{value:d.value,currency:d.currency||"BRL"}),await n("InitiateCheckout",u,{value:d.value,currency:d.currency||"BRL",content_name:d.content_name})},[e,n]),l=g.useCallback(async d=>{if(!(e!=null&&e.enabled))return;const[u,...m]=(d.name||"").trim().split(/\s+/),h=m.join(" ")||void 0;try{sessionStorage.setItem("rla_lp_lead",JSON.stringify({email:d.email,phone:d.phone,first_name:u||void 0,last_name:h}))}catch{}try{await ne.functions.invoke("lp-track-session",{body:{sck:a.current,email:d.email,phone:d.phone,first_name:u||void 0,last_name:h,external_id:d.cpf||void 0}})}catch{}},[e]),c=g.useCallback(async d=>{var h,p,v;if(!(e!=null&&e.enabled))return;const u=d.eventId||(d.orderId?`pur_${d.orderId}_meta`:oc("pur")),m=d.eventId||(d.orderId?`pur_${d.orderId}_tt`:u);if(e.meta_enabled&&((h=window.fbq)==null||h.call(window,"track","Purchase",{value:d.value,currency:d.currency||"BRL"},{eventID:u})),e.tiktok_enabled&&((v=(p=window.ttq)==null?void 0:p.track)==null||v.call(p,"CompletePayment",{value:d.value,currency:d.currency||"BRL"},{event_id:m})),e.google_enabled){try{const f=sessionStorage.getItem("rla_lp_lead");f&&await OH(JSON.parse(f))}catch{}ac("purchase",{value:d.value,currency:d.currency||"BRL",transaction_id:d.orderId}),e.google_ads_conversion_id&&e.google_ads_conversion_label&&ac("conversion",{send_to:`${e.google_ads_conversion_id}/${e.google_ads_conversion_label}`,value:d.value,currency:d.currency||"BRL",transaction_id:d.orderId})}},[e]);return{config:e,sck:a.current,init:r,trackInitiateCheckout:s,saveLead:l,trackPurchase:c}}const Cd="efi",XH="stripe",YH="efi";let Xt=null,fr=null;async function QH(){if(!Xt){if(fr)return fr;fr=(async()=>{const{data:e,error:t}=await ne.from("payment_gateway_config").select("key, value").in("key",["default_gateway","efi_payee_code"]);if(t){console.error("[usePaymentGateway] load error",t),Xt={gateway:Cd,efiPayeeCode:null};return}const a={};e==null||e.forEach(o=>{a[o.key]=o.value}),Xt={gateway:a.default_gateway||Cd,efiPayeeCode:a.efi_payee_code||null}})(),await fr,fr=null}}function wf(e,t,a){return{gateway:e,efiPayeeCode:t,loading:a,isEfi:e==="efi",isStripe:e==="stripe",isMercadoPago:e==="mercadopago",isPixup:e==="pixup",cardGateway:XH,pixGateway:YH}}function ZH(){const[e,t]=g.useState(wf((Xt==null?void 0:Xt.gateway)||Cd,(Xt==null?void 0:Xt.efiPayeeCode)||null,!Xt));return g.useEffect(()=>{let a=!0;return QH().then(()=>{!a||!Xt||t(wf(Xt.gateway,Xt.efiPayeeCode,!1))}),()=>{a=!1}},[]),e}var JH="Label",cw=g.forwardRef((e,t)=>
537i.jsx(_e.label,{...e,ref:t,onMouseDown:a=>{var n;a.target.closest("button, input, select, textarea")||((n=e.onMouseDown)==null||n.call(e,a),!a.defaultPrevented&&a.detail>1&&a.preventDefault())}}));cw.displayName=JH;var dw=cw;const e8=tl("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Be=g.forwardRef(({className:e,...t},a)=>i.jsx(dw,{ref:a,className:ve(e8(),e),...t}));Be.displayName=dw.displayName;var t8=Object.defineProperty,Ms=Object.getOwnPropertySymbols,uw=Object.prototype.hasOwnProperty,mw=Object.prototype.propertyIsEnumerable,Cf=(e,t,a)=>t in e?t8(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Pd=(e,t)=>{for(var a in t||(t={}))uw.call(t,a)&&Cf(e,a,t[a]);if(Ms)for(var a of Ms(t))mw.call(t,a)&&Cf(e,a,t[a]);return e},Ad=(e,t)=>{var a={};for(var o in e)uw.call(e,o)&&t.indexOf(o)<0&&(a[o]=e[o]);if(e!=null&&Ms)for(var o of Ms(e))t.indexOf(o)<0&&mw.call(e,o)&&(a[o]=e[o]);return a};/** 538 * @license QR Code generator library (TypeScript) 539 * Copyright (c) Project Nayuki. 540 * SPDX-License-Identifier: MIT 541 */var rn;(e=>{const t=class Oe{constructor(c,d,u,m){if(this.version=c,this.errorCorrectionLevel=d,this.modules=[],this.isFunction=[],c<Oe.MIN_VERSION||c>Oe.MAX_VERSION)throw new RangeError("Version value out of range");if(m<-1||m>7)throw new RangeError("Mask value out of range");this.size=c*4+17;let h=[];for(let v=0;v<this.size;v++)h.push(!1);for(let v=0;v<this.size;v++)this.modules.push(h.slice()),this.isFunction.push(h.slice());this.drawFunctionPatterns();const p=this.addEccAndInterleave(u);if(this.drawCodewords(p),m==-1){let v=1e9;for(let f=0;f<8;f++){this.applyMask(f),this.drawFormatBits(f);const b=this.getPenaltyScore();b<v&&(m=f,v=b),this.applyMask(f)}}n(0<=m&&m<=7),this.mask=m,this.applyMask(m),this.drawFormatBits(m),this.isFunction=[]}static encodeText(c,d){const u=e.QrSegment.makeSegments(c);return Oe.encodeSegments(u,d)}static encodeBinary(c,d){const u=e.QrSegment.makeBytes(c);return Oe.encodeSegments([u],d)}static encodeSegments(c,d,u=1,m=40,h=-1,p=!0){if(!(Oe.MIN_VERSION<=u&&u<=m&&m<=Oe.MAX_VERSION)||h<-1||h>7)throw new RangeError("Invalid value");let v,f;for(v=u;;v++){const w=Oe.getNumDataCodewords(v,d)*8,P=s.getTotalBits(c,v);if(P<=w){f=P;break}if(v>=m)throw new RangeError("Data too long")}for(const w of[Oe.Ecc.MEDIUM,Oe.Ecc.QUARTILE,Oe.Ecc.HIGH])p&&f<=Oe.getNumDataCodewords(v,w)*8&&(d=w);let b=[];for(const w of c){a(w.mode.modeBits,4,b),a(w.numChars,w.mode.numCharCountBits(v),b);for(const P of w.getData())b.push(P)}n(b.length==f);const y=Oe.getNumDataCodewords(v,d)*8;n(b.length<=y),a(0,Math.min(4,y-b.length),b),a(0,(8-b.length%8)%8,b),n(b.length%8==0);for(let w=236;b.length<y;w^=253)a(w,8,b);let x=[];for(;x.length*8<b.length;)x.push(0);return b.forEach((w,P)=>x[P>>>3]|=w<<7-(P&7)),new Oe(v,d,x,h)}getModule(c,d){return 0<=c&&c<this.size&&0<=d&&d<this.size&&this.modules[d][c]}getModules(){return this.modules}drawFunctionPatterns(){for(let u=0;u<this.size;u++)this.setFunctionModule(6,u,u%2==0),this.setFunctionModule(u,6,u%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const c=this.getAlignmentPatternPositions(),d=c.length;for(let u=0;u<d;u++)for(let m=0;m<d;m++)u==0&&m==0||u==0&&m==d-1||u==d-1&&m==0||this.drawAlignmentPattern(c[u],c[m]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(c){const d=this.errorCorrectionLevel.formatBits<<3|c;let u=d;for(let h=0;h<10;h++)u=u<<1^(u>>>9)*1335;const m=(d<<10|u)^21522;n(m>>>15==0);for(let h=0;h<=5;h++)this.setFunctionModule(8,h,o(m,h));this.setFunctionModule(8,7,o(m,6)),this.setFunctionModule(8,8,o(m,7)),this.setFunctionModule(7,8,o(m,8));for(let h=9;h<15;h++)this.setFunctionModule(14-h,8,o(m,h));for(let h=0;h<8;h++)this.setFunctionModule(this.size-1-h,8,o(m,h));for(let h=8;h<15;h++)this.setFunctionModule(8,this.size-15+h,o(m,h));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let c=this.version;for(let u=0;u<12;u++)c=c<<1^(c>>>11)*7973;const d=this.version<<12|c;n(d>>>18==0);for(let u=0;u<18;u++){const m=o(d,u),h=this.size-11+u%3,p=Math.floor(u/3);this.setFunctionModule(h,p,m),this.setFunctionModule(p,h,m)}}drawFinderPattern(c,d){for(let u=-4;u<=4;u++)for(let m=-4;m<=4;m++){const h=Math.max(Math.abs(m),Math.abs(u)),p=c+m,v=d+u;0<=p&&p<this.size&&0<=v&&v<this.size&&this.setFunctionModule(p,v,h!=2&&h!=4)}}drawAlignmentPattern(c,d){for(let u=-2;u<=2;u++)for(let m=-2;m<=2;m++)this.setFunctionModule(c+m,d+u,Math.max(Math.abs(m),Math.abs(u))!=1)}setFunctionModule(c,d,u){this.modules[d][c]=u,this.isFunction[d][c]=!0}addEccAndInterleave(c){const d=this.version,u=this.errorCorrectionLevel;if(c.length!=Oe.getNumDataCodewords(d,u))throw new RangeError("Invalid argument");const m=Oe.NUM_ERROR_CORRECTION_BLOCKS[u.ordinal][d],h=Oe.ECC_CODEWORDS_PER_BLOCK[u.ordinal][d],p=Math.floor(Oe.getNumRawDataModules(d)/8),v=m-p%m,f=Math.floor(p/m);let b=[];const y=Oe.reedSolomonComputeDivisor(h);for(let w=0,P=0;w<m;w++){let E=c.slice(P,P+f-h+(w<v?0:1));P+=E.length;const k=Oe.reedSolomonComputeRemainder(E,y);w<v&&E.push(0),b.push(E.concat(k))}let x=[];for(let w=0;w<b[0].length;w++)b.forEach((P,E)=>{(w!=f-h||E>=v)&&x.push(P[w])});return n(x.length==p),x}drawCodewords(c){if(c.length!=Math.floor(Oe.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let d=0;for(let u=this.size-1;u>=1;u-=2){u==6&&(u=5);for(let m=0;m<this.size;m++)for(let h=0;h<2;h++){const p=u-h,f=(u+1&2)==0?this.size-1-m:m;!this.isFunction[f][p]&&d<c.length*8&&(this.modules[f][p]=o(c[d>>>3],7-(d&7)),d++)}}n(d==c.length*8)}
541applyMask(c){if(c<0||c>7)throw new RangeError("Mask value out of range");for(let d=0;d<this.size;d++)for(let u=0;u<this.size;u++){let m;switch(c){case 0:m=(u+d)%2==0;break;case 1:m=d%2==0;break;case 2:m=u%3==0;break;case 3:m=(u+d)%3==0;break;case 4:m=(Math.floor(u/3)+Math.floor(d/2))%2==0;break;case 5:m=u*d%2+u*d%3==0;break;case 6:m=(u*d%2+u*d%3)%2==0;break;case 7:m=((u+d)%2+u*d%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[d][u]&&m&&(this.modules[d][u]=!this.modules[d][u])}}getPenaltyScore(){let c=0;for(let h=0;h<this.size;h++){let p=!1,v=0,f=[0,0,0,0,0,0,0];for(let b=0;b<this.size;b++)this.modules[h][b]==p?(v++,v==5?c+=Oe.PENALTY_N1:v>5&&c++):(this.finderPenaltyAddHistory(v,f),p||(c+=this.finderPenaltyCountPatterns(f)*Oe.PENALTY_N3),p=this.modules[h][b],v=1);c+=this.finderPenaltyTerminateAndCount(p,v,f)*Oe.PENALTY_N3}for(let h=0;h<this.size;h++){let p=!1,v=0,f=[0,0,0,0,0,0,0];for(let b=0;b<this.size;b++)this.modules[b][h]==p?(v++,v==5?c+=Oe.PENALTY_N1:v>5&&c++):(this.finderPenaltyAddHistory(v,f),p||(c+=this.finderPenaltyCountPatterns(f)*Oe.PENALTY_N3),p=this.modules[b][h],v=1);c+=this.finderPenaltyTerminateAndCount(p,v,f)*Oe.PENALTY_N3}for(let h=0;h<this.size-1;h++)for(let p=0;p<this.size-1;p++){const v=this.modules[h][p];v==this.modules[h][p+1]&&v==this.modules[h+1][p]&&v==this.modules[h+1][p+1]&&(c+=Oe.PENALTY_N2)}let d=0;for(const h of this.modules)d=h.reduce((p,v)=>p+(v?1:0),d);const u=this.size*this.size,m=Math.ceil(Math.abs(d*20-u*10)/u)-1;return n(0<=m&&m<=9),c+=m*Oe.PENALTY_N4,n(0<=c&&c<=2568888),c}getAlignmentPatternPositions(){if(this.version==1)return[];{const c=Math.floor(this.version/7)+2,d=this.version==32?26:Math.ceil((this.version*4+4)/(c*2-2))*2;let u=[6];for(let m=this.size-7;u.length<c;m-=d)u.splice(1,0,m);return u}}static getNumRawDataModules(c){if(c<Oe.MIN_VERSION||c>Oe.MAX_VERSION)throw new RangeError("Version number out of range");let d=(16*c+128)*c+64;if(c>=2){const u=Math.floor(c/7)+2;d-=(25*u-10)*u-55,c>=7&&(d-=36)}return n(208<=d&&d<=29648),d}static getNumDataCodewords(c,d){return Math.floor(Oe.getNumRawDataModules(c)/8)-Oe.ECC_CODEWORDS_PER_BLOCK[d.ordinal][c]*Oe.NUM_ERROR_CORRECTION_BLOCKS[d.ordinal][c]}static reedSolomonComputeDivisor(c){if(c<1||c>255)throw new RangeError("Degree out of range");let d=[];for(let m=0;m<c-1;m++)d.push(0);d.push(1);let u=1;for(let m=0;m<c;m++){for(let h=0;h<d.length;h++)d[h]=Oe.reedSolomonMultiply(d[h],u),h+1<d.length&&(d[h]^=d[h+1]);u=Oe.reedSolomonMultiply(u,2)}return d}static reedSolomonComputeRemainder(c,d){let u=d.map(m=>0);for(const m of c){const h=m^u.shift();u.push(0),d.forEach((p,v)=>u[v]^=Oe.reedSolomonMultiply(p,h))}return u}static reedSolomonMultiply(c,d){if(c>>>8||d>>>8)throw new RangeError("Byte out of range");let u=0;for(let m=7;m>=0;m--)u=u<<1^(u>>>7)*285,u^=(d>>>m&1)*c;return n(u>>>8==0),u}finderPenaltyCountPatterns(c){const d=c[1];n(d<=this.size*3);const u=d>0&&c[2]==d&&c[3]==d*3&&c[4]==d&&c[5]==d;return(u&&c[0]>=d*4&&c[6]>=d?1:0)+(u&&c[6]>=d*4&&c[0]>=d?1:0)}finderPenaltyTerminateAndCount(c,d,u){return c&&(this.finderPenaltyAddHistory(d,u),d=0),d+=this.size,this.finderPenaltyAddHistory(d,u),this.finderPenaltyCountPatterns(u)}finderPenaltyAddHistory(c,d){d[0]==0&&(c+=this.size),d.pop(),d.unshift(c)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function a(l,c,d){if(c<0||c>31||l>>>c)throw new RangeError("Value out of range");for(let u=c-1;u>=0;u--)d.push(l>>>u&1)}function o(l,c){return(l>>>c&1)!=0}function n(l){if(!l)throw new Error("Assertion error")}const r=class ht{constructor(c,d,u){if(this.mode=c,this.numChars=d,this.bitData=u,d<0)throw new RangeError("Invalid argument");this.bitData=u.slice()}static makeBytes(c){let d=[];for(const u of c)a(u,8,d);return new ht(ht.Mode.BYTE,c.length,d)}static makeNumeric(c){if(!ht.isNumeric(c))throw new RangeError("String contains
541non-numeric characters");let d=[];for(let u=0;u<c.length;){const m=Math.min(c.length-u,3);a(parseInt(c.substring(u,u+m),10),m*3+1,d),u+=m}return new ht(ht.Mode.NUMERIC,c.length,d)}static makeAlphanumeric(c){if(!ht.isAlphanumeric(c))throw new RangeError("String contains unencodable characters in alphanumeric mode");let d=[],u;for(u=0;u+2<=c.length;u+=2){let m=ht.ALPHANUMERIC_CHARSET.indexOf(c.charAt(u))*45;m+=ht.ALPHANUMERIC_CHARSET.indexOf(c.charAt(u+1)),a(m,11,d)}return u<c.length&&a(ht.ALPHANUMERIC_CHARSET.indexOf(c.charAt(u)),6,d),new ht(ht.Mode.ALPHANUMERIC,c.length,d)}static makeSegments(c){return c==""?[]:ht.isNumeric(c)?[ht.makeNumeric(c)]:ht.isAlphanumeric(c)?[ht.makeAlphanumeric(c)]:[ht.makeBytes(ht.toUtf8ByteArray(c))]}static makeEci(c){let d=[];if(c<0)throw new RangeError("ECI assignment value out of range");if(c<128)a(c,8,d);else if(c<16384)a(2,2,d),a(c,14,d);else if(c<1e6)a(6,3,d),a(c,21,d);else throw new RangeError("ECI assignment value out of range");return new ht(ht.Mode.ECI,0,d)}static isNumeric(c){return ht.NUMERIC_REGEX.test(c)}static isAlphanumeric(c){return ht.ALPHANUMERIC_REGEX.test(c)}getData(){return this.bitData.slice()}static getTotalBits(c,d){let u=0;for(const m of c){const h=m.mode.numCharCountBits(d);if(m.numChars>=1<<h)return 1/0;u+=4+h+m.bitData.length}return u}static toUtf8ByteArray(c){c=encodeURI(c);let d=[];for(let u=0;u<c.length;u++)c.charAt(u)!="%"?d.push(c.charCodeAt(u)):(d.push(parseInt(c.substring(u+1,u+3),16)),u+=2);return d}};r.NUMERIC_REGEX=/^[0-9]*$/,r.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,r.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let s=r;e.QrSegment=r})(rn||(rn={}));(e=>{(t=>{const a=class{constructor(n,r){this.ordinal=n,this.formatBits=r}};a.LOW=new a(0,1),a.MEDIUM=new a(1,0),a.QUARTILE=new a(2,3),a.HIGH=new a(3,2),t.Ecc=a})(e.QrCode||(e.QrCode={}))})(rn||(rn={}));(e=>{(t=>{const a=class{constructor(n,r){this.modeBits=n,this.numBitsCharCount=r}numCharCountBits(n){return this.numBitsCharCount[Math.floor((n+7)/17)]}};a.NUMERIC=new a(1,[10,12,14]),a.ALPHANUMERIC=new a(2,[9,11,13]),a.BYTE=new a(4,[8,16,16]),a.KANJI=new a(8,[8,10,12]),a.ECI=new a(7,[0,0,0]),t.Mode=a})(e.QrSegment||(e.QrSegment={}))})(rn||(rn={}));var wn=rn;/** 542 * @license qrcode.react 543 * Copyright (c) Paul O'Shannessy 544 * SPDX-License-Identifier: ISC 545 */var a8={L:wn.QrCode.Ecc.LOW,M:wn.QrCode.Ecc.MEDIUM,Q:wn.QrCode.Ecc.QUARTILE,H:wn.QrCode.Ecc.HIGH},pw=128,hw="L",fw="#FFFFFF",gw="#000000",vw=!1,bw=1,o8=4,n8=0,r8=.1;function yw(e,t=0){const a=[];return e.forEach(function(o,n){let r=null;o.forEach(function(s,l){if(!s&&r!==null){a.push(`M${r+t} ${n+t}h${l-r}v1H${r+t}z`),r=null;return}if(l===o.length-1){if(!s)return;r===null?a.push(`M${l+t},${n+t} h1v1H${l+t}z`):a.push(`M${r+t},${n+t} h${l+1-r}v1H${r+t}z`);return}s&&r===null&&(r=l)})}),a.join("")}function xw(e,t){return e.slice().map((a,o)=>o<t.y||o>=t.y+t.h?a:a.map((n,r)=>r<t.x||r>=t.x+t.w?n:!1))}function i8(e,t,a,o){if(o==null)return null;const n=e.length+a*2,r=Math.floor(t*r8),s=n/t,l=(o.width||r)*s,c=(o.height||r)*s,d=o.x==null?e.length/2-l/2:o.x*s,u=o.y==null?e.length/2-c/2:o.y*s,m=o.opacity==null?1:o.opacity;let h=null;if(o.excavate){let v=Math.floor(d),f=Math.floor(u),b=Math.ceil(l+d-v),y=Math.ceil(c+u-f);h={x:v,y:f,w:b,h:y}}const p=o.crossOrigin;return{x:d,y:u,h:c,w:l,excavation:h,opacity:m,crossOrigin:p}}function s8(e,t){return t!=null?Math.max(Math.floor(t),0):e?o8:n8}function ww({value:e,level:t,minVersion:a,includeMargin:o,marginSize:n,imageSettings:r,size:s,boostLevel:l}){let c=ee.useMemo(()=>{const v=(Array.isArray(e)?e:[e]).reduce((f,b)=>(f.push(...wn.QrSegment.makeSegments(b)),f),[]);return wn.QrCode.encodeSegments(v,a8[t],a,void 0,void 0,l)},[e,t,a,l]);const{cells:d,margin:u,numCells:m,calculatedImageSettings:h}=ee.useMemo(()=>{let p=c.getModules();const v=s8(o,n),f=p.length+v*2,b=i8(p,s,v,r);return{cells:p,margin:v,numCells:f,calculatedImageSettings:b}},[c,s,r,o,n]);return{qrcode:c,margin:u,cells:d,numCells:m,calculatedImageSettings:h}}var l8=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),c8=ee.forwardRef(function(t,a){const o=t,{value:n,size:r=pw,level:s=hw,bgColor:l=fw,fgColor:c=gw,includeMargin:d=vw,minVersion:u=bw,boostLevel:m,marginSize:h,imageSettings:p}=o,f=Ad(o,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:b}=f,y=Ad(f,["style"]),x=p==null?void 0:p.src,w=ee.useRef(null),P=ee.useRef(null),E=ee.useCallback(A=>{w.current=A,typeof a=="function"?a(A):a&&(a.current=A)},[a]),[k,S]=ee.useState(!1),{margin:R,cells:I,numCells:M,calculatedImageSettings:q}=ww({value:n,level:s,minVersion:u,boostLevel:m,includeMargin:d,marginSize:h,imageSettings:p,size:r});ee.useEffect(()=>{if(w.current!=null){const A=w.current,_=A.getContext("2d");if(!_)return;let K=I;const V=P.current,H=q!=null&&V!==null&&V.complete&&V.naturalHeight!==0&&V.naturalWi
545dth!==0;H&&q.excavation!=null&&(K=xw(I,q.excavation));const B=window.devicePixelRatio||1;A.height=A.width=r*B;const te=r/M*B;_.scale(te,te),_.fillStyle=l,_.fillRect(0,0,M,M),_.fillStyle=c,l8?_.fill(new Path2D(yw(K,R))):I.forEach(function(j,L){j.forEach(function(Q,$){Q&&_.fillRect($+R,L+R,1,1)})}),q&&(_.globalAlpha=q.opacity),H&&_.drawImage(V,q.x+R,q.y+R,q.w,q.h)}}),ee.useEffect(()=>{S(!1)},[x]);const N=Pd({height:r,width:r},b);let F=null;return x!=null&&(F=ee.createElement("img",{src:x,key:x,style:{display:"none"},onLoad:()=>{S(!0)},ref:P,crossOrigin:q==null?void 0:q.crossOrigin})),ee.createElement(ee.Fragment,null,ee.createElement("canvas",Pd({style:N,height:r,width:r,ref:E,role:"img"},y)),F)});c8.displayName="QRCodeCanvas";var nm=ee.forwardRef(function(t,a){const o=t,{value:n,size:r=pw,level:s=hw,bgColor:l=fw,fgColor:c=gw,includeMargin:d=vw,minVersion:u=bw,boostLevel:m,title:h,marginSize:p,imageSettings:v}=o,f=Ad(o,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:b,cells:y,numCells:x,calculatedImageSettings:w}=ww({value:n,level:s,minVersion:u,boostLevel:m,includeMargin:d,marginSize:p,imageSettings:v,size:r});let P=y,E=null;v!=null&&w!=null&&(w.excavation!=null&&(P=xw(y,w.excavation)),E=ee.createElement("image",{href:v.src,height:w.h,width:w.w,x:w.x+b,y:w.y+b,preserveAspectRatio:"none",opacity:w.opacity,crossOrigin:w.crossOrigin}));const k=yw(P,b);return ee.createElement("svg",Pd({height:r,width:r,viewBox:`0 0 ${x} ${x}`,ref:a,role:"img"},f),!!h&&ee.createElement("title",null,h),ee.createElement("path",{fill:l,d:`M0,0 h${x}v${x}H0z`,shapeRendering:"crispEdges"}),ee.createElement("path",{fill:c,d:k,shapeRendering:"crispEdges"}),E)});nm.displayName="QRCodeSVG";const Cw="/_releases/legacy/assets/zapdata-logo-X4vvddIU.png";function Pf(e){return e.replace(/\D/g,"").slice(0,11).replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d{1,2})$/,"$1-$2")}const d8=4e3,u8=10*60*1e3,m8=3e4,p8=12e3,nc=7;function h8({onRetry:e,onBack:t}){const[a,o]=g.useState(!1);return g.useEffect(()=>{const n=setTimeout(()=>o(!0),p8);return()=>clearTimeout(n)},[]),i.jsx("div",{className:"space-y-4 py-8",children:i.jsxs("div",{className:"flex flex-col items-center gap-3",children:[i.jsx(xt,{className:"h-8 w-8 animate-spin text-emerald-500"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"Gerando autorização PIX Automático..."}),a&&i.jsxs("div",{className:"flex gap-2 pt-2",children:[i.jsx(we,{variant:"outline",size:"sm",onClick:t,children:"Voltar"}),i.jsx(we,{size:"sm",onClick:e,className:"bg-emerald-600 hover:bg-emerald-700 text-white",children:"Tentar novamente"})]})]})})}function f8({planId:e,planName:t,amount:a,billingPeriod:o,instanceCount:n,mode:r="create",lpContext:s,isFreeTrial:l=!1,onSuccess:c,onBack:d}){const{user:u}=ut(),m=om(),[h,p]=g.useState("form"),[v,f]=g.useState(""),[b,y]=g.useState(""),[x,w]=g.useState(!1),[P,E]=g.useState(null),[k,S]=g.useState(0),R=o==="yearly"?"anual":o==="quarterly"?"trimestral":"mensal",I=o==="yearly"?"daqui a 12 meses":o==="quarterly"?"daqui a 3 meses":"no próximo mês",M=o==="yearly"?"a cada 12 meses":o==="quarterly"?"a cada 3 meses":"por mês";g.useEffect(()=>{u&&(async()=>{const{data:N}=await ne.from("profiles").select("cpf, username").eq("id",u.id).maybeSingle();N&&(N.cpf&&f(Pf(N.cpf)),N.username&&y(N.username))})()},[u]);const q=g.useCallback(async()=>{var A;const N=v.replace(/\D/g,"");if(N.length!==11){Ge({title:"CPF inválido",description:"Informe um CPF com 11 dÃgitos.",variant:"destructive"});return}if(b.trim().length<3){Ge({title:"Nome inválido",description:"Informe seu nome completo.",variant:"destructive"});return}w(!0),p("loading");const F={planId:e,billingPeriod:o,mode:r};try{let _=!1;try{const{data:Q}=await ne.rpc("free_trial_needs_pix_auth");_=Q===!0}catch(Q){console.warn("[EfiPix] free_trial_needs_pix_auth check failed",Q)}const K=_?"efi-create-pix-recurrence-scheduled":"efi-create-pix-recurrence",V=n?{instance_count:n}:{},H=_?{planId:e,billingPeriod:o,cpf:N,fullName:b.trim(),firstChargeInDays:nc,...V}:{planId:e,billingPeriod:o,cpf:N,fullName:b.trim(),lp_context:s?{...s,full_name:b.trim()}:null,...V};console.log(`[EfiPix][handleGenerate] modo=${_?"free-trial (agendado 7d)":"normal (imediato)"}`,F);const B=ne.functions.invoke(K,{body:H}),te=new Promise((Q,$)=>setTimeout(()=>$(new Error("TIMEOUT")),m8)),{data:j,error:L}=await Promise.race([B,te]);if(L||!(j!=null&&j.ok)){const Q=(j==null?void 0:j.error)||(L==null?void 0:L.message)||"Falha ao gerar autorização PIX Automático";console.warn("[EfiPix][handleGenerate] falha",{...F,status:(A=L==null?void 0:L.context)==null?void 0:A.status,msg:Q,data:j,error:L}),Ge({title:"Erro ao gerar PIX Automático",description:Q,variant:"destructive"}),p("form");return}console.log("[EfiPix][handleGenerate] ok",{...F,idRec:j.idRec}),E({idRec:j.idRec,pixCopiaECola:j.pixCopiaECola,valor:j.valor}),S(Date.now()),p("qr")}catch(_){const K=(_==null?void 0:_.message)==="TIMEOUT";console.error("[EfiPix][handleGenerate] exception",{...F,isTimeout:K,error:_}),Ge({title:K?"A Efà demorou demais pra responder":(_==null?void 0:_.message)||"Erro inesperado",description:K?"Tente gerar o QR Code novamente.":void 0,variant:"destructive"}),p("form")}finally{w(!1)}},[v,b,e,o,n,r,s]);return g.useEffect(()=>{if(h!=="qr"||!P)return;const N=setInterval(async()=>
545{if(Date.now()-k>u8){clearInterval(N),p("expired");return}try{const{data:F}=await ne.functions.invoke("efi-check-rec-status",{body:{recId:P.idRec}});if((F==null?void 0:F.status)==="active"||(F==null?void 0:F.status)==="authorized_pending_charge"){if(clearInterval(N),p("done"),F.status==="active"){if(iw(a),s!=null&&s.sck)try{await m.trackPurchase({value:a,currency:"BRL",orderId:P.idRec,content_name:t})}catch(_){console.warn("[EfiPixAutomaticoCheckout] lp trackPurchase failed",_)}Ge({title:"Autorização confirmada!",description:`Plano ${t} ativado. Cobrança automática ${R} habilitada.`})}else Ge({title:"Autorização confirmada!",description:`Plano ${t} liberado. 1ª cobrança automática só daqui a ${nc} dias.`});setTimeout(c,1500)}else((F==null?void 0:F.status)==="cancelled"||(F==null?void 0:F.status)==="canceled")&&(clearInterval(N),Ge({title:"Autorização cancelada",variant:"destructive"}),d())}catch{}},d8);return()=>clearInterval(N)},[h,P,k,a,t,c,d]),h==="done"?i.jsxs("div",{className:"flex flex-col items-center justify-center py-8 space-y-4",children:[i.jsx(ri,{className:"h-16 w-16 text-emerald-500 animate-in zoom-in-50 duration-300"}),i.jsxs("div",{className:"text-center space-y-2",children:[i.jsx("h3",{className:"text-lg font-semibold text-emerald-500",children:"Autorização Confirmada!"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:l?`Plano ${t} liberado. 1ª cobrança automática só daqui a ${nc} dias.`:`Plano ${t} ativado. Próximas cobranças serão automáticas via PIX.`})]})]}):h==="expired"?i.jsxs("div",{className:"space-y-4 py-6 text-center",children:[i.jsx("p",{className:"text-sm text-muted-foreground",children:"O tempo para autorizar expirou. Você pode gerar um novo QR Code."}),i.jsxs("div",{className:"flex gap-2 justify-center",children:[i.jsx(we,{variant:"outline",onClick:d,children:"Voltar"}),i.jsx(we,{onClick:()=>p("form"),className:"bg-emerald-600 hover:bg-emerald-700 text-white",children:"Tentar novamente"})]})]}):h==="qr"&&P?i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(we,{type:"button",variant:"ghost",size:"icon",onClick:d,className:"h-8 w-8",children:i.jsx(_r,{className:"h-4 w-4"})}),i.jsxs("span",{className:"font-medium text-foreground",children:["PIX Automático â ",t]})]}),i.jsxs("div",{className:"rounded-lg border border-emerald-500/40 bg-emerald-500/5 p-3 text-sm space-y-1",children:[i.jsxs("p",{className:"font-medium text-emerald-600 flex items-center gap-1.5",children:[i.jsx(q0,{className:"h-4 w-4"}),"Autorização de débito automático ",R]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:["Você está autorizando uma cobrança recorrente ",i.jsx("strong",{children:R})," de"," ",i.jsxs("strong",{children:["R$ ",Number(P.valor).toFixed(2)]})," via PIX. Este valor será debitado"," ",i.jsx("strong",{children:"agora"})," e novamente ",i.jsx("strong",{children:I}),". Este QR Code"," ",i.jsx("strong",{children:"não é um pagamento único avulso"})," â é a autorização da recorrência. Cancele quando quiser, sem multa."]})]}),i.jsx("div",{className:"flex justify-center",children:i.jsx("div",{className:"bg-white p-4 rounded-lg",children:i.jsx(nm,{value:P.pixCopiaECola,size:208,level:"H",includeMargin:!1,imageSettings:{src:Cw,height:44,width:44,excavate:!0}})})}),i.jsxs("div",{className:"space-y-2",children:[i.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"Ou copie o código PIX:"}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx(it,{value:P.pixCopiaECola,readOnly:!0,className:"font-mono text-xs"}),i.jsx(we,{variant:"outline",size:"icon",onClick:()=>{navigator.clipboard.writeText(P.pixCopiaECola),Ge({title:"Código copiado!"})},children:i.jsx(Og,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground justify-center",children:[i.jsx(xt,{className:"h-4 w-4 animate-spin"}),"Aguardando autorização no app do seu banco..."]})]}):h==="loading"?i.jsx(h8,{onBack:d,onRetry:()=>p("form")}):i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(we,{type:"button",variant:"ghost",size:"icon",onClick:d,className:"h-8 w-8",children:i.jsx(_r,{className:"h-4 w-4"})}),i.jsxs("span",{className:"font-medium text-foreground",children:[r==="upgrade"?"
545Upgrade":"Assinar"," ",t," â PIX Automático"]})]}),l?i.jsxs("div",{className:"rounded-lg border border-emerald-500/40 bg-emerald-500/10 p-3 text-sm space-y-1",children:[i.jsxs("p",{className:"font-medium text-emerald-600 flex items-center gap-1.5",children:[i.jsx(Sm,{className:"h-4 w-4"}),"ð 7 dias grátis â sem cobrança agora"]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:["Você autoriza o PIX automático agora, mas a ",i.jsxs("strong",{children:["1ª cobrança de R$ ",Number(a).toFixed(2)," só acontece daqui a 7 dias"]}),". Cancele antes e não paga nada."]})]}):i.jsxs("div",{className:"rounded-lg border border-emerald-500/40 bg-emerald-500/5 p-3 text-sm space-y-1",children:[i.jsxs("p",{className:"font-medium text-emerald-600 flex items-center gap-1.5",children:[i.jsx(Sm,{className:"h-4 w-4"}),"Cobrança recorrente ",R," via PIX"]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:["Sem cartão de crédito. O valor será debitado da sua conta ",M,", automaticamente. Cancele a qualquer momento."]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:"Nome completo do titular da conta"}),i.jsx(it,{value:b,onChange:N=>y(N.target.value),placeholder:"Como aparece no banco",maxLength:120})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:"CPF do titular"}),i.jsx(it,{value:v,onChange:N=>f(Pf(N.target.value)),placeholder:"000.000.000-00",inputMode:"numeric",maxLength:14}),i.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Deve ser o mesmo CPF da conta bancária que você usará para autorizar."})]}),i.jsx(we,{onClick:q,disabled:x,className:"w-full bg-emerald-600 hover:bg-emerald-700 text-white h-11",children:x?i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"h-4 w-4 mr-2 animate-spin"})," Gerando..."]}):i.jsxs(i.Fragment,{children:["Gerar QR Code de autorização â R$ ",a.toFixed(2)]})}),i.jsx("p",{className:"text-[11px] text-center text-muted-foreground",children:"Após escanear, você autoriza no app do seu banco e a assinatura é ativada automaticamente."})]})}function Af(e,[t,a]){return Math.min(a,Math.max(t,e))}function g8(e){const t=e+"CollectionProvider",[a,o]=La(t),[n,r]=a(t,{collectionRef:{current:null},itemMap:new Map}),s=f=>{const{scope:b,children:y}=f,x=ee.useRef(null),w=ee.useRef(new Map).current;return i.jsx(n,{scope:b,itemMap:w,collectionRef:x,children:y})};s.displayName=t;const l=e+"CollectionSlot",c=Wn(l),d=ee.forwardRef((f,b)=>{const{scope:y,children:x}=f,w=r(l,y),P=Qe(b,w.collectionRef);return i.jsx(c,{ref:P,children:x})});d.displayName=l;const u=e+"CollectionItemSlot",m="data-radix-collection-item",h=Wn(u),p=ee.forwardRef((f,b)=>{const{scope:y,children:x,...w}=f,P=ee.useRef(null),E=Qe(b,P),k=r(u,y);return ee.useEffect(()=>(k.itemMap.set(P,{ref:P,...w}),()=>void k.itemMap.delete(P))),i.jsx(h,{[m]:"",ref:E,children:x})});p.displayName=u;function v(f){const b=r(e+"CollectionConsumer",f);return ee.useCallback(()=>{const x=b.collectionRef.current;if(!x)return[];const w=Array.from(x.querySelectorAll(`[${m}]`));return Array.from(b.itemMap.values()).sort((k,S)=>w.indexOf(k.ref.current)-w.indexOf(S.ref.current))},[b.collectionRef,b.itemMap])}return[{Provider:s,Slot:d,ItemSlot:p},v,o]}var v8=g.createContext(void 0);function b8(e){const t=g.useContext(v8);return e||t||"ltr"}function rm(e){const t=g.useRef({value:e,previous:e});return g.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var y8=[" ","Enter","ArrowUp","ArrowDown"],x8=[" ","Enter"],sn="Select",[pl,hl,w8]=g8(sn),[ir,cJ]=La(sn,[w8,Hs]),fl=Hs(),[C8,So]=ir(sn),[P8,A8]=ir(sn),Pw=e=>{const{__scopeSelect:t,children:a,open:o,defaultOpen:n,onOpenChange:r,value:s,defaultValue:l,onValueChange:c,dir:d,name:u,autoComplete:m,disabled:h,required:p,form:v}=e,f=fl(t),[b,y]=g.useState(null),[x,w]=g.useState(null),[P,E]=g.useState(!1),k=b8(d),[S,R]=Gn({prop:o,defaultProp:n??!1,onChange:r,caller:sn}),[I,M]=Gn({prop:s,defaultProp:l,onChange:c,caller:sn}),q=g.useRef(null),N=b?v||!!b.closest("form"):!0,[F,A]=g.useState(new Set),_=Array.from(F).map(K=>K.props.value).join(";");return i.jsx(yv,{...f,children:i.jsxs(C8,{required:p,scope:t,trigger:b,onTriggerChange:y,valueNode:x,onValueNodeChange:w,valueNodeHasChildren:P,onValueNodeHasChildrenChange:E,contentId:Xo(),value:I,onValueChange:M,open:S,onOpenChange:R,dir:k,triggerPointerDownPosRef:q,disabled:h,children:[i.jsx(pl.Provider,{scope:t,children:i.jsx(P8,{scope:e.__scopeSelect,onNativeOptionAdd:g.useCallback(K=>{A(V=>new Set(V).add(K))},[]),onNativeOptionRemove:g.useCallback(K=>{A(V=>{const H=new Set(V);return H.delete(K),H})},[]),children:a})}),N?i.jsxs(Kw,{"aria-hidden":!0,required:p,tabIndex:-1,name:u,autoComplete:m,value:I,onChange:K=>M(K.target.value),disabled:h,form:v,children:[I===void 0?i.jsx("option",{value:""}):null,Array.from(F)]},_):null]})})};Pw.displayName=sn;var Aw="SelectTrigger",Ew=g.forwardRef((e,t)=>
545{const{__scopeSelect:a,disabled:o=!1,...n}=e,r=fl(a),s=So(Aw,a),l=s.disabled||o,c=Qe(t,s.onTriggerChange),d=hl(a),u=g.useRef("touch"),[m,h,p]=Yw(f=>{const b=d().filter(w=>!w.disabled),y=b.find(w=>w.value===s.value),x=Qw(b,f,y);x!==void 0&&s.onValueChange(x.value)}),v=f=>{l||(s.onOpenChange(!0),p()),f&&(s.triggerPointerDownPosRef.current={x:Math.round(f.pageX),y:Math.round(f.pageY)})};return i.jsx(xv,{asChild:!0,...r,children:i.jsx(_e.button,{type:"button",role:"combobox","aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":Xw(s.value)?"":void 0,...n,ref:c,onClick:qe(n.onClick,f=>{f.currentTarget.focus(),u.current!=="mouse"&&v(f)}),onPointerDown:qe(n.onPointerDown,f=>{u.current=f.pointerType;const b=f.target;b.hasPointerCapture(f.pointerId)&&b.releasePointerCapture(f.pointerId),f.button===0&&f.ctrlKey===!1&&f.pointerType==="mouse"&&(v(f),f.preventDefault())}),onKeyDown:qe(n.onKeyDown,f=>{const b=m.current!=="";!(f.ctrlKey||f.altKey||f.metaKey)&&f.key.length===1&&h(f.key),!(b&&f.key===" ")&&y8.includes(f.key)&&(v(),f.preventDefault())})})})});Ew.displayName=Aw;var Sw="SelectValue",Nw=g.forwardRef((e,t)=>{const{__scopeSelect:a,className:o,style:n,children:r,placeholder:s="",...l}=e,c=So(Sw,a),{onValueNodeHasChildrenChange:d}=c,u=r!==void 0,m=Qe(t,c.onValueNodeChange);return Pt(()=>{d(u)},[d,u]),i.jsx(_e.span,{...l,ref:m,style:{pointerEvents:"none"},children:Xw(c.value)?i.jsx(i.Fragment,{children:s}):r})});Nw.displayName=Sw;var E8="SelectIcon",kw=g.forwardRef((e,t)=>{const{__scopeSelect:a,children:o,...n}=e;return i.jsx(_e.span,{"aria-hidden":!0,...n,ref:t,children:o||"â¼"})});kw.displayName=E8;var S8="SelectPortal",Tw=e=>i.jsx(Yd,{asChild:!0,...e});Tw.displayName=S8;var ln="SelectContent",Iw=g.forwardRef((e,t)=>{const a=So(ln,e.__scopeSelect),[o,n]=g.useState();if(Pt(()=>{n(new DocumentFragment)},[]),!a.open){const r=o;return r?Vs.createPortal(i.jsx(Rw,{scope:e.__scopeSelect,children:i.jsx(pl.Slot,{scope:e.__scopeSelect,children:i.jsx("div",{children:e.children})})}),r):null}return i.jsx(Dw,{...e,ref:t})});Iw.displayName=ln;var pa=10,[Rw,No]=ir(ln),N8="SelectContentImpl",k8=Wn("SelectContent.RemoveScroll"),Dw=g.forwardRef((e,t)=>{const{__scopeSelect:a,position:o="item-aligned",onCloseAutoFocus:n,onEscapeKeyDown:r,onPointerDownOutside:s,side:l,sideOffset:c,align:d,alignOffset:u,arrowPadding:m,collisionBoundary:h,collisionPadding:p,sticky:v,hideWhenDetached:f,avoidCollisions:b,...y}=e,x=So(ln,a),[w,P]=g.useState(null),[E,k]=g.useState(null),S=Qe(t,J=>P(J)),[R,I]=g.useState(null),[M,q]=g.useState(null),N=hl(a),[F,A]=g.useState(!1),_=g.useRef(!1);g.useEffect(()=>{if(w)return wb(w)},[w]),pb();const K=g.useCallback(J=>{const[ie,...le]=N().map(oe=>oe.ref.current),[pe]=le.slice(-1),ce=document.activeElement;for(const oe of J)if(oe===ce||(oe==null||oe.scrollIntoView({block:"nearest"}),oe===ie&&E&&(E.scrollTop=0),oe===pe&&E&&(E.scrollTop=E.scrollHeight),oe==null||oe.focus(),document.activeElement!==ce))return},[N,E]),V=g.useCallback(()=>K([R,w]),[K,R,w]);g.useEffect(()=>{F&&V()},[F,V]);const{onOpenChange:H,triggerPointerDownPosRef:B}=x;g.useEffect(()=>{if(w){let J={x:0,y:0};const ie=pe=>{var ce,oe;J={x:Math.abs(Math.round(pe.pageX)-(((ce=B.current)==null?void 0:ce.x)??0)),y:Math.abs(Math.round(pe.pageY)-(((oe=B.current)==null?void 0:oe.y)??0))}},le=pe=>{J.x<=10&&J.y<=10?pe.preventDefault():w.contains(pe.target)||H(!1),document.removeEventListener("pointermove",ie),B.current=null};return B.current!==null&&(document.addEventListener("pointermove",ie),document.addEventListener("pointerup",le,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ie),document.removeEventListener("pointerup",le,{capture:!0})}}},[w,H,B]),g.useEffect(()=>{const J=()=>H(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[H]);const[te,j]=Yw(J=>{const ie=N().filter(ce=>!ce.disabled),le=ie.find(ce=>ce.ref.current===document.activeElement),pe=Qw(ie,J,le);pe&&setTimeout(()=>pe.ref.current.focus())}),L=g.useCallback((J,ie,le)=>{const pe=!_.current&&!le;(x.value!==void 0&&x.value===ie||pe)&&(I(J),pe&&(_.current=!0))},[x.value]),Q=g.useCallback(()=>w==null?void 0:w.focus(),[w]),$=g.useCallback((J,ie,le)=>{const pe=!_.current&&!le;(x.value!==void 0&&x.value===ie||pe)&&q(J)},[x.value]),X=o==="popper"?Ed:Mw,fe=X===Ed?{side:l,sideOffset:c,align:d,alignOffset:u,arrowPadding:m,collisionBoundary:h,collisionPadding:p,sticky:v,hideWhenDetached:f,avoidCollisions:b}:{};return i.jsx(Rw,{scope:a,content:w,viewport:E,onViewportChange:k,itemRefCallback:L,selectedItem:R,onItemLeave:Q,itemTextRefCallback:$,focusSelectedItem:V,selectedItemText:M,position:o,isPositioned:F,searchRef:te,children:i.jsx(pu,{as:k8,allowPinchZoom:!0,children:i.jsx(mu,{asChild:!0,trapped:x.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:qe(n,J=>{var ie;
545(ie=x.trigger)==null||ie.focus({preventScroll:!0}),J.preventDefault()}),children:i.jsx(Us,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:r,onPointerDownOutside:s,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>x.onOpenChange(!1),children:i.jsx(X,{role:"listbox",id:x.contentId,"data-state":x.open?"open":"closed",dir:x.dir,onContextMenu:J=>J.preventDefault(),...y,...fe,onPlaced:()=>A(!0),ref:S,style:{display:"flex",flexDirection:"column",outline:"none",...y.style},onKeyDown:qe(y.onKeyDown,J=>{const ie=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!ie&&J.key.length===1&&j(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let pe=N().filter(ce=>!ce.disabled).map(ce=>ce.ref.current);if(["ArrowUp","End"].includes(J.key)&&(pe=pe.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const ce=J.target,oe=pe.indexOf(ce);pe=pe.slice(oe+1)}setTimeout(()=>K(pe)),J.preventDefault()}})})})})})})});Dw.displayName=N8;var T8="SelectItemAlignedPosition",Mw=g.forwardRef((e,t)=>{const{__scopeSelect:a,onPlaced:o,...n}=e,r=So(ln,a),s=No(ln,a),[l,c]=g.useState(null),[d,u]=g.useState(null),m=Qe(t,S=>u(S)),h=hl(a),p=g.useRef(!1),v=g.useRef(!0),{viewport:f,selectedItem:b,selectedItemText:y,focusSelectedItem:x}=s,w=g.useCallback(()=>{if(r.trigger&&r.valueNode&&l&&d&&f&&b&&y){const S=r.trigger.getBoundingClientRect(),R=d.getBoundingClientRect(),I=r.valueNode.getBoundingClientRect(),M=y.getBoundingClientRect();if(r.dir!=="rtl"){const ce=M.left-R.left,oe=I.left-ce,ye=S.left-oe,C=S.width+ye,z=Math.max(C,R.width),U=window.innerWidth-pa,T=Af(oe,[pa,Math.max(pa,U-z)]);l.style.minWidth=C+"px",l.style.left=T+"px"}else{const ce=R.right-M.right,oe=window.innerWidth-I.right-ce,ye=window.innerWidth-S.right-oe,C=S.width+ye,z=Math.max(C,R.width),U=window.innerWidth-pa,T=Af(oe,[pa,Math.max(pa,U-z)]);l.style.minWidth=C+"px",l.style.right=T+"px"}const q=h(),N=window.innerHeight-pa*2,F=f.scrollHeight,A=window.getComputedStyle(d),_=parseInt(A.borderTopWidth,10),K=parseInt(A.paddingTop,10),V=parseInt(A.borderBottomWidth,10),H=parseInt(A.paddingBottom,10),B=_+K+F+H+V,te=Math.min(b.offsetHeight*5,B),j=window.getComputedStyle(f),L=parseInt(j.paddingTop,10),Q=parseInt(j.paddingBottom,10),$=S.top+S.height/2-pa,X=N-$,fe=b.offsetHeight/2,J=b.offsetTop+fe,ie=_+K+J,le=B-ie;if(ie<=$){const ce=q.length>0&&b===q[q.length-1].ref.current;l.style.bottom="0px";const oe=d.clientHeight-f.offsetTop-f.offsetHeight,ye=Math.max(X,fe+(ce?Q:0)+oe+V),C=ie+ye;l.style.height=C+"px"}else{const ce=q.length>0&&b===q[0].ref.current;l.style.top="0px";const ye=Math.max($,_+f.offsetTop+(ce?L:0)+fe)+le;l.style.height=ye+"px",f.scrollTop=ie-$+f.offsetTop}l.style.margin=`${pa}px 0`,l.style.minHeight=te+"px",l.style.maxHeight=N+"px",o==null||o(),requestAnimationFrame(()=>p.current=!0)}},[h,r.trigger,r.valueNode,l,d,f,b,y,r.dir,o]);Pt(()=>w(),[w]);const[P,E]=g.useState();Pt(()=>{d&&E(window.getComputedStyle(d).zIndex)},[d]);const k=g.useCallback(S=>{S&&v.current===!0&&(w(),x==null||x(),v.current=!1)},[w,x]);return i.jsx(R8,{scope:a,contentWrapper:l,shouldExpandOnScrollRef:p,onScrollButtonChange:k,children:i.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:P},children:i.jsx(_e.div,{...n,ref:m,style:{boxSizing:"border-box",maxHeight:"100%",...n.style}})})})});Mw.displayName=T8;var I8="SelectPopperPosition",Ed=g.forwardRef((e,t)=>{const{__scopeSelect:a,align:o="start",collisionPadding:n=pa,...r}=e,s=fl(a);return i.jsx(wv,{...s,...r,ref:t,align:o,collisionPadding:n,style:{boxSizing:"border-box",...r.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Ed.displayName=I8;var[R8,im]=ir(ln,{}),Sd="SelectViewport",Fw=g.forwardRef((e,t)=>{const{__scopeSelect:a,nonce:o,...n}=e,r=No(Sd,a),s=im(Sd,a),l=Qe(t,r.onViewportChange),c=g.useRef(0);return i.jsxs(i.Fragment,{children:[i.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),i.jsx(pl.Slot,{scope:a,children:i.jsx(_e.div,{"data-radix-select-viewport":"",role:"presentation",...n,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...n.style},onScroll:qe(n.onScroll,d=>{const u=d.currentTarget,{contentWrapper:m,shouldExpandOnScrollRef:h}=s;if(h!=null&&h.current&&m){const p=Math.abs(c.current-u.scrollTop);if(p>0){const v=window.innerHeight-pa*2,f=parseFloat(m.style.minHeight),b=parseFloat(m.style.height),y=Math.max(f,b);if(y<v){const x=y+p,w=Math.min(v,x),P=x-w;m.style.height=w+"px",m.style.bottom==="0px"&&(u.scrollTop=P>0?P:0,m.style.justifyContent="flex-end")}}}c.current=u.scrollTop})})})]})});Fw.displayName=Sd;var Lw="SelectGroup",[D8,M8]=ir(Lw),jw=g.forwardRef((e,t)=>
545{const{__scopeSelect:a,...o}=e,n=Xo();return i.jsx(D8,{scope:a,id:n,children:i.jsx(_e.div,{role:"group","aria-labelledby":n,...o,ref:t})})});jw.displayName=Lw;var _w="SelectLabel",Ow=g.forwardRef((e,t)=>{const{__scopeSelect:a,...o}=e,n=M8(_w,a);return i.jsx(_e.div,{id:n.id,...o,ref:t})});Ow.displayName=_w;var Fs="SelectItem",[F8,Bw]=ir(Fs),zw=g.forwardRef((e,t)=>{const{__scopeSelect:a,value:o,disabled:n=!1,textValue:r,...s}=e,l=So(Fs,a),c=No(Fs,a),d=l.value===o,[u,m]=g.useState(r??""),[h,p]=g.useState(!1),v=Qe(t,x=>{var w;return(w=c.itemRefCallback)==null?void 0:w.call(c,x,o,n)}),f=Xo(),b=g.useRef("touch"),y=()=>{n||(l.onValueChange(o),l.onOpenChange(!1))};if(o==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return i.jsx(F8,{scope:a,value:o,disabled:n,textId:f,isSelected:d,onItemTextChange:g.useCallback(x=>{m(w=>w||((x==null?void 0:x.textContent)??"").trim())},[]),children:i.jsx(pl.ItemSlot,{scope:a,value:o,disabled:n,textValue:u,children:i.jsx(_e.div,{role:"option","aria-labelledby":f,"data-highlighted":h?"":void 0,"aria-selected":d&&h,"data-state":d?"checked":"unchecked","aria-disabled":n||void 0,"data-disabled":n?"":void 0,tabIndex:n?void 0:-1,...s,ref:v,onFocus:qe(s.onFocus,()=>p(!0)),onBlur:qe(s.onBlur,()=>p(!1)),onClick:qe(s.onClick,()=>{b.current!=="mouse"&&y()}),onPointerUp:qe(s.onPointerUp,()=>{b.current==="mouse"&&y()}),onPointerDown:qe(s.onPointerDown,x=>{b.current=x.pointerType}),onPointerMove:qe(s.onPointerMove,x=>{var w;b.current=x.pointerType,n?(w=c.onItemLeave)==null||w.call(c):b.current==="mouse"&&x.currentTarget.focus({preventScroll:!0})}),onPointerLeave:qe(s.onPointerLeave,x=>{var w;x.currentTarget===document.activeElement&&((w=c.onItemLeave)==null||w.call(c))}),onKeyDown:qe(s.onKeyDown,x=>{var P;((P=c.searchRef)==null?void 0:P.current)!==""&&x.key===" "||(x8.includes(x.key)&&y(),x.key===" "&&x.preventDefault())})})})})});zw.displayName=Fs;var Sr="SelectItemText",Vw=g.forwardRef((e,t)=>{const{__scopeSelect:a,className:o,style:n,...r}=e,s=So(Sr,a),l=No(Sr,a),c=Bw(Sr,a),d=A8(Sr,a),[u,m]=g.useState(null),h=Qe(t,y=>m(y),c.onItemTextChange,y=>{var x;return(x=l.itemTextRefCallback)==null?void 0:x.call(l,y,c.value,c.disabled)}),p=u==null?void 0:u.textContent,v=g.useMemo(()=>i.jsx("option",{value:c.value,disabled:c.disabled,children:p},c.value),[c.disabled,c.value,p]),{onNativeOptionAdd:f,onNativeOptionRemove:b}=d;return Pt(()=>(f(v),()=>b(v)),[f,b,v]),i.jsxs(i.Fragment,{children:[i.jsx(_e.span,{id:c.textId,...r,ref:h}),c.isSelected&&s.valueNode&&!s.valueNodeHasChildren?Vs.createPortal(r.children,s.valueNode):null]})});Vw.displayName=Sr;var qw="SelectItemIndicator",Uw=g.forwardRef((e,t)=>{const{__scopeSelect:a,...o}=e;return Bw(qw,a).isSelected?i.jsx(_e.span,{"aria-hidden":!0,...o,ref:t}):null});Uw.displayName=qw;var Nd="SelectScrollUpButton",Ww=g.forwardRef((e,t)=>{const a=No(Nd,e.__scopeSelect),o=im(Nd,e.__scopeSelect),[n,r]=g.useState(!1),s=Qe(t,o.onScrollButtonChange);return Pt(()=>{if(a.viewport&&a.isPositioned){let l=function(){const d=c.scrollTop>0;r(d)};const c=a.viewport;return l(),c.addEventListener("scroll",l),()=>c.removeEventListener("scroll",l)}},[a.viewport,a.isPositioned]),n?i.jsx(Gw,{...e,ref:s,onAutoScroll:()=>{const{viewport:l,selectedItem:c}=a;l&&c&&(l.scrollTop=l.scrollTop-c.offsetHeight)}}):null});Ww.displayName=Nd;var kd="SelectScrollDownButton",$w=g.forwardRef((e,t)=>{const a=No(kd,e.__scopeSelect),o=im(kd,e.__scopeSelect),[n,r]=g.useState(!1),s=Qe(t,o.onScrollButtonChange);return Pt(()=>{if(a.viewport&&a.isPositioned){let l=function(){const d=c.scrollHeight-c.clientHeight,u=Math.ceil(c.scrollTop)<d;r(u)};const c=a.viewport;return l(),c.addEventListener("scroll",l),()=>c.removeEventListener("scroll",l)}},[a.viewport,a.isPositioned]),n?i.jsx(Gw,{...e,ref:s,onAutoScroll:()=>{const{viewport:l,selectedItem:c}=a;l&&c&&(l.scrollTop=l.scrollTop+c.offsetHeight)}}):null});$w.displayName=kd;var Gw=g.forwardRef((e,t)=>{const{__scopeSelect:a,onAutoScroll:o,...n}=e,r=No("SelectScrollButton",a),s=g.useRef(null),l=hl(a),c=g.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return g.useEffect(()=>()=>c(),[c]),Pt(()=>{var u;const d=l().find(m=>m.ref.current===document.activeElement);(u=d==null?void 0:d.ref.current)==null||u.scrollIntoView({block:"nearest"})},[l]),i.jsx(_e.div,{"aria-hidden":!0,...n,ref:t,style:{flexShrink:0,...n.style},onPointerDown:qe(n.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(o,50))}),onPointerMove:qe(n.onPointerMove,()=>{var d;(d=r.onItemLeave)==null||d.call(r),s.current===null&&(s.current=window.setInterval(o,50))}),onPointerLeave:qe(n.onPointerLeave,()=>{c()})})}),L8="SelectSeparator",Hw=g.forwardRef((e,t)=>
545{const{__scopeSelect:a,...o}=e;return i.jsx(_e.div,{"aria-hidden":!0,...o,ref:t})});Hw.displayName=L8;var Td="SelectArrow",j8=g.forwardRef((e,t)=>{const{__scopeSelect:a,...o}=e,n=fl(a),r=So(Td,a),s=No(Td,a);return r.open&&s.position==="popper"?i.jsx(Cv,{...n,...o,ref:t}):null});j8.displayName=Td;var _8="SelectBubbleInput",Kw=g.forwardRef(({__scopeSelect:e,value:t,...a},o)=>{const n=g.useRef(null),r=Qe(o,n),s=rm(t);return g.useEffect(()=>{const l=n.current;if(!l)return;const c=window.HTMLSelectElement.prototype,u=Object.getOwnPropertyDescriptor(c,"value").set;if(s!==t&&u){const m=new Event("change",{bubbles:!0});u.call(l,t),l.dispatchEvent(m)}},[s,t]),i.jsx(_e.select,{...a,style:{...Pv,...a.style},ref:r,defaultValue:t})});Kw.displayName=_8;function Xw(e){return e===""||e===void 0}function Yw(e){const t=bo(e),a=g.useRef(""),o=g.useRef(0),n=g.useCallback(s=>{const l=a.current+s;t(l),function c(d){a.current=d,window.clearTimeout(o.current),d!==""&&(o.current=window.setTimeout(()=>c(""),1e3))}(l)},[t]),r=g.useCallback(()=>{a.current="",window.clearTimeout(o.current)},[]);return g.useEffect(()=>()=>window.clearTimeout(o.current),[]),[a,n,r]}function Qw(e,t,a){const n=t.length>1&&Array.from(t).every(d=>d===t[0])?t[0]:t,r=a?e.indexOf(a):-1;let s=O8(e,Math.max(r,0));n.length===1&&(s=s.filter(d=>d!==a));const c=s.find(d=>d.textValue.toLowerCase().startsWith(n.toLowerCase()));return c!==a?c:void 0}function O8(e,t){return e.map((a,o)=>e[(t+o)%e.length])}var B8=Pw,Zw=Ew,z8=Nw,V8=kw,q8=Tw,Jw=Iw,U8=Fw,W8=jw,eC=Ow,tC=zw,$8=Vw,G8=Uw,aC=Ww,oC=$w,nC=Hw;const Cn=B8,dJ=W8,Pn=z8,Oo=g.forwardRef(({className:e,children:t,...a},o)=>i.jsxs(Zw,{ref:o,className:ve("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm r
545ing-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...a,children:[t,i.jsx(V8,{asChild:!0,children:i.jsx(_g,{className:"h-4 w-4 opacity-50"})})]}));Oo.displayName=Zw.displayName;const rC=g.forwardRef(({className:e,...t},a)=>i.jsx(aC,{ref:a,className:ve("flex cursor-default items-center justify-center py-1",e),...t,children:i.jsx(y0,{className:"h-4 w-4"})}));rC.displayName=aC.displayName;const iC=g.forwardRef(({className:e,...t},a)=>i.jsx(oC,{ref:a,className:ve("flex cursor-default items-center justify-center py-1",e),...t,children:i.jsx(_g,{className:"h-4 w-4"})}));iC.displayName=oC.displayName;const Bo=g.forwardRef(({className:e,children:t,position:a="popper",...o},n)=>i.jsx(q8,{children:i.jsxs(Jw,{ref:n,className:ve("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:a,...o,children:[i.jsx(rC,{}),i.jsx(U8,{className:ve("p-1",a==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),i.jsx(iC,{})]})}));Bo.displayName=Jw.displayName;const H8=g.forwardRef(({className:e,...t},a)=>i.jsx(eC,{ref:a,className:ve("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));H8.displayName=eC.displayName;const jt=g.forwardRef(({className:e,children:t,...a},o)=>i.jsxs(tC,{ref:o,className:ve("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",e),...a,children:[i.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:i.jsx(G8,{children:i.jsx(fn,{className:"h-4 w-4"})})}),i.jsx($8,{children:t})]}));jt.displayName=tC.displayName;const K8=g.forwardRef(({className:e,...t},a)=>i.jsx(nC,{ref:a,className:ve("-mx-1 my-1 h-px bg-muted",e),...t}));K8.displayName=nC.displayName;function X8({value:e,onChange:t,minInstances:a,billingPeriod:o="monthly",disabled:n}){const r=Fk(a);return i.jsxs(Cn,{value:e?String(e):"",onValueChange:s=>t(Number(s)),disabled:n||r.length===0,children:[i.jsx(Oo,{children:i.jsx(Pn,{placeholder:"Quantas conexões?"})}),i.jsx(Bo,{className:"max-h-72",children:r.map(s=>{const l=lu(s),c=Ua(s,o);return i.jsxs(jt,{value:String(s),children:[s," conexões â R$ ",l.toFixed(0),"/mês",o!=="monthly"?` (R$ ${c.toFixed(0)} no perÃodo)`:""]},s)})})]})}const Y8=eH("pk_live_51R6AxvHXG4eRgF5T45efMhG8WJ0605AlcmF695vLZpJg04s9siAlJguRs5KsiEU9bMpo5YpK9lhtDw32honsAbSR009pN8TpXA",{locale:tH});async function Q8(e,t,a){let o=null;try{const r=e==null?void 0:e.context;r&&typeof r.json=="function"?o=await(typeof r.clone=="function"?r.clone():r).json():typeof(r==null?void 0:r.body)=="string"&&(o=JSON.parse(r.body))}catch{}const n=o??t??{};return{code:(n==null?void 0:n.error)||(e==null?void 0:e.name)||null,message:(n==null?void 0:n.message)||(n==null?void 0:n.error_description)||(n==null?void 0:n.error)||(e==null?void 0:e.message)||a||Ae.t("billing:planSelectionModal.genericRequestError"),raw:n}}const Z8={free:i.jsx(qs,{className:"h-6 w-6"}),iniciante:i.jsx(H0,{className:"h-6 w-6"}),acesso:i.jsx(Wg,{className:"h-6 w-6"}),expansao:i.jsx(U0,{className:"h-6 w-6"}),ascensao:i.jsx(X0,{className:"h-6 w-6"}),dominacao:i.jsx(us,{className:"h-6 w-6"}),titan:i.jsx(R0,{className:"h-6 w-6"}),enterprise:i.jsx(jg,{className:"h-6 w-6"})},Ef=["cloud","aiAgent","metaPixel","pixAuto","crmKanban"],J8=["acesso","expansao","ascensao","dominacao","titan","enterprise","custom"],rc=e=>J8.includes(e)?[...Ef,"iaStudio","adsTab","groupTab"]:Ef,eK={free:"border-muted-foreground
545/30",iniciante:"border-orange-500",acesso:"border-orange-500",expansao:"border-orange-500",ascensao:"border-orange-500",dominacao:"border-orange-500",titan:"border-orange-500",enterprise:"border-purple-500"};function tK({planId:e,planName:t,amount:a,onSuccess:o,onBack:n,billingPeriod:r="monthly",lpContext:s,isFreeTrial:l=!1,instanceCount:c}){const{t:d}=tt("billing"),u=EH(),m=wH(),h=om(),{theme:p}=Ld(),v=g.useMemo(()=>({base:{fontSize:"16px",color:p==="dark"?"#ffffff":"#1a1a1a","::placeholder":{color:"#71717a"},iconColor:"#f97316"},invalid:{color:"#ef4444",iconColor:"#ef4444"}}),[p]),[f,b]=g.useState(!1),[y,x]=g.useState(!1),[w,P]=g.useState(!1),[E,k]=g.useState(!1),[S,R]=g.useState(!1),[I,M]=g.useState(!1),[q,N]=g.useState("â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢"),[F,A]=g.useState("â¢â¢/â¢â¢"),[_,K]=g.useState("â¢â¢â¢"),[V,H]=g.useState(""),[B,te]=g.useState(""),j=fe=>{k(fe.complete),fe.empty?N("â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢ â¢â¢â¢â¢"):fe.complete&&N("**** **** **** â¢â¢â¢â¢")},L=fe=>{R(fe.complete),(fe.empty||fe.complete)&&A("â¢â¢/â¢â¢")},Q=fe=>{M(fe.complete),fe.empty?K("â¢â¢â¢"):fe.complete&&K("***")},$=fe=>{const J=fe.toUpperCase().slice(0,25);te(J),H(J||d("planSelectionModal.cardForm.cardholderPlaceholder"))},X=async fe=>{if(fe.preventDefault(),!u||!m)return;const J=m.getElement(pf);if(!J)return;if(!B.trim()){Ge({title:d("planSelectionModal.cardForm.cardholderName"),description:d("planSelectionModal.cardForm.cardholderRequired"),variant:"destructive"});return}b(!0);const ie=setTimeout(()=>{b(!1),Ge({title:d("planSelectionModal.cardForm.timeoutTitle"),description:d("planSelectionModal.cardForm.timeoutDescription"),variant:"destructive"})},3e4);try{console.log("[PlanCardForm] Starting subscription for plan:",e);const{data:le,error:pe}=await ne.functions.invoke("create-plan-subscription-inline",{body:{plan_id:e,billing_period:r,cardholder_name:B,...c?{instance_count:c}:{}}});if(console.log("[PlanCardForm] Backend response:",{data:le?{...le,clientSecret:le!=null&&le.clientSecret?"***":null}:null,error:pe}),pe||le!=null&&le.error){const z=await Q8(pe,le);Ge({title:z.code==="USE_UPGRADE_FLOW"?d("planSelectionModal.cardForm.alreadyActivePlanTitle"):d("planSelectionModal.cardForm.couldNotStartSubscription"),description:z.message,variant:"destructive"});return}if(le.alreadyActive){console.log("[PlanCardForm] Subscription already active, provisioning..."),await ne.functions.invoke("create-plan-subscription-inline",{body:{action:"confirm",plan_id:e,subscription_id:le.subscriptionId,lp_context:s}}),clearTimeout(ie),x(!0),setTimeout(()=>o(),800);return}const{clientSecret:ce,mode:oe}=le;if(!ce)throw new Error(d("planSelectionModal.cardForm.missingClientSecret"));if(oe==="setup"){console.log("[PlanCardForm] Free trial â confirmando SetupIntent (sem cobrança)...");const{error:z,setupIntent:U}=await u.confirmCardSetup(ce,{payment_method:{card:J,billing_details:{name:B||void 0}}});if(console.log("[PlanCardForm] confirmCardSetup result:",{error:z,status:U==null?void 0:U.status}),z)Ge({title:d("planSelectionModal.cardForm.couldNotSaveCard"),description:sf(z),variant:"destructive"});else if((U==null?void 0:U.status)==="succeeded"){if(U.payment_method){const T=typeof U.payment_method=="string"?U.payment_method:U.payment_method.id;ne.functions.invoke("manage-payment-methods",{body:{action:"save-payment-method",paymentMethodId:T}}).catch(()=>{})}await ne.functions.invoke("create-plan-subscription-inline",{body:{action:"confirm",plan_id:e,subscription_id:le.subscriptionId,lp_context:s}}),clearTimeout(ie),x(!0),setTimeout(()=>o(),800)}return}console.log("[PlanCardForm] Got clientSecret, confirming card payment...");const{error:ye,paymentIntent:C}=await u.confirmCardPayment(ce,{payment_method:{card:J,billing_details:{name:B||void 0}}});if(console.log("[PlanCardForm] Stripe confirmCardPayment result:",{error:ye,status:C==null?void 0:C.status}),ye)Ge({title:ye.code==="card_declined"?d("planSelectionModal.cardForm.cardDeclined"):d("planSelectionModal.cardForm.processError"),description:sf(ye),variant:"destructive"});else if((C==null?void 0:C.status)==="succeeded"){if(C.payment_method){const U=typeof C.payment_method=="string"?C.payment_method:C.payment_method.id;ne.functions.invoke("manage-payment-methods",{body:{action:"save-payment-method",paymentMethodId:U}}).catch(()=>{})}const{data:z}=await ne.functions.invoke("create-plan-subscription-inline",{body:{action:"confirm",plan_id:e,subscription_id:le.subscriptionId,lp_context:s}});if(iw(a),s!=null&&s.sck)try{await h.trackPurchase({value:a,currency:"BRL",orderId:le.subscriptionId,content_name:t})}catch(U){console.warn("[PlanCardForm] lp trackPurchase failed",U)}x(!0),setTimeout(()=>
545o(),800)}else Ge({title:d("planSelectionModal.cardForm.unexpectedStatus"),variant:"destructive"})}catch(le){console.error("[PlanCardForm] Payment error:",le),Ge({title:le.message||d("planSelectionModal.cardForm.processError"),variant:"destructive"})}finally{clearTimeout(ie),b(!1)}};return y?i.jsxs("div",{className:"flex flex-col items-center justify-center py-8 space-y-4",children:[i.jsx(ri,{className:"h-16 w-16 text-orange-500 animate-in zoom-in-50 duration-300"}),i.jsxs("div",{className:"text-center space-y-2",children:[i.jsx("h3",{className:"text-lg font-semibold text-orange-500",children:d("planSelectionModal.cardForm.approvedTitle")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:d("planSelectionModal.cardForm.planActivatedSuccess",{planName:t})})]})]}):i.jsxs("form",{onSubmit:X,className:"space-y-3",children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(we,{type:"button",variant:"ghost",size:"icon",onClick:n,className:"h-8 w-8",children:i.jsx(_r,{className:"h-4 w-4"})}),i.jsx("span",{className:"font-medium text-foreground",children:d("planSelectionModal.cardForm.confirmPayment",{amount:a.toFixed(2)})})]}),i.jsx("div",{className:"flex justify-center mb-2",children:i.jsx(tw,{cardholderName:V||d("planSelectionModal.cardForm.cardholderPlaceholder"),cardNumber:q,expiryDate:F,cvv:_,isFlipped:w})}),i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-sm font-medium text-muted-foreground",children:d("planSelectionModal.cardForm.cardholderName")}),i.jsx(it,{type:"text",placeholder:d("planSelectionModal.cardForm.cardholderPlaceholder"),value:B,onChange:fe=>$(fe.target.value),className:"bg-card border-border text-foreground placeholder:text-muted-foreground/50 h-11 uppercase",maxLength:25})]}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-sm font-medium text-muted-foreground",children:d("planSelectionModal.cardForm.cardNumber")}),i.jsx("div",{className:"bg-card border border-border rounded-md px-3 py-3 h-11 flex items-center [&_.StripeElement]:w-full",children:i.jsx(pf,{options:{style:v,showIcon:!0},onChange:j,className:"w-full"})})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-sm font-medium text-muted-foreground",children:d("planSelectionModal.cardForm.expiry")}),i.jsx("div",{className:"bg-card border border-border rounded-md px-3 py-3 h-11 flex items-center [&_.StripeElement]:w-full",children:i.jsx(SH,{options:{style:v},onChange:L,onFocus:()=>P(!1),className:"w-full"})})]}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("label",{className:"text-sm font-medium text-muted-foreground",children:"CVV"}),i.jsx("div",{className:"bg-card border border-border rounded-md px-3 py-3 h-11 flex items-center [&_.StripeElement]:w-full",children:i.jsx(NH,{options:{style:v},onChange:Q,onFocus:()=>P(!0),onBlur:()=>P(!1),className:"w-full"})})]})]})]}),l&&i.jsxs("div",{className:"rounded-lg border border-emerald-500/40 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-300",children:["ð ",i.jsx("strong",{children:d("planSelectionModal.cardForm.freeTrialBanner.freeDays")})," ",d("planSelectionModal.cardForm.freeTrialBanner.youIntro")," ",i.jsx("strong",{children:d("planSelectionModal.cardForm.freeTrialBanner.notChargedToday")}),d("planSelectionModal.cardForm.freeTrialBanner.cardSavedLeadIn")," ",i.jsxs("strong",{children:["R$ ",a.toFixed(2)]})," ",d("planSelectionModal.cardForm.freeTrialBanner.onlyHappens")," ",i.jsx("strong",{children:d("planSelectionModal.cardForm.freeTrialBanner.in7Days")}),d("planSelectionModal.cardForm.freeTrialBanner.cancelFooter")]}),i.jsx(we,{type:"submit",disabled:!u||f||!E||!S||!I||!B.trim(),className:"w-full bg-emerald-600 text-white hover:bg-emerald-700 h-11",children:f?i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"h-4 w-4 mr-2 animate-spin"}),d("planSelectionModal.cardForm.processing")]}):i.jsxs(i.Fragment,{children:[i.jsx(ii,{className:"h-4 w-4 mr-2"}),l?d("planSelectionModal.cardForm.startFreeTrial"):d("planSelectionModal.cardForm.confirmPayment",{amount:a.toFixed(2)})]})}),i.jsxs("p",{className:"text-xs text-center text-muted-foreground flex items-center justify-center gap-1",children:[i.jsx(Nr,{className:"h-3 w-3"}),d(l?"planSelectionModal.cardForm.freeTrialSecureNote":"planSelectionModal.cardForm.securePaymentNote")]})]})}const go=({open:e,onOpenChange:t,hideFreePlan:a,hideIniciante:o,forceSelection:n,mode:r,preselectedPlanId:s,preselectedInstanceCount:l,onPaymentSuccess:c,lpMode:d,lpContext:u})=>{const{t:m}=tt("billing"),{plans:h,startCheckout:p,refresh:v,currentPlan:f,hasActivePlan:b,subscription:y,isPastDue:x,isSubscriptionExpired:w,isInGracePeriod:P}=ar(),{user:E}=ut(),k=k4();ZH();const[S,R]=g.useState("monthly"),[I,M]=g.useState(null),[q,N]=g.useState(null),[F,A]=g.useState(null),[_,K]=g.useState(!1),[V,H]=g.useState(null),[B,te]=g.useState(Yo),[j,L]=g.useState(!1);g.useEffect(()=>{if(!e||!E){L(!1);return}let T=!1;return(async()=>{try{const{data:D}=await ne.rpc("free_trial_needs_pix_auth");T||L(D===!0)}catch{}})(),()=>{T=!0}},[e,E]);const[Q,$]=g.useState(!1);g.useEffect(()=>{if(!e){$(!1);return}if(Q||!s||!h||h.length===0)return;const T=h.find(O=>O.id===s);if(!T)return;if($(!0),sb(T.id)){const O=l??Yo;H({id:T.id,name:`Modo Enterprise (${O} números)`,price:Ua(O,"monthly"),instanceCount:O}),K(!0);return}const D={iniciante:59,acesso:119,expansao:169,ascensao:219,dominacao:319,titan:519}[T.id]??T.price_brl;H({id:T.id,name:T.name,price:D}),K(!0)},[e,s,l,h,Q]);const X=T=>{var O;return((O={iniciante:{monthly:{monthly:59,total:59},quarterly:{monthly:47,total:142},yearly:{monthly:41,total:496}},acesso:{monthly:{monthly:119,total:119},quarterly:{monthly:95,total:286},yearly:{monthly:83,total:1e3}},expansao:{monthly:{monthly:169,total:169},quarterly:{monthly:135,total:406},yearly:{monthly:118,total:1420}},ascensao:{monthly:{monthly:219,total:219},quarterly:{monthly:175,total:526},yearly:{monthly:153,total:1840}},dominacao:{monthly:{monthly:319,total:319},quarterly:{monthly:255,total:766},yearly:{monthly:223,total:2680}},titan:{monthly:{monthly:519,total:519},quarterly:{monthly:415,total:1246},yearly:{monthly:363,total:4360}}}[T.id])==null?void 0:O[S])||{monthly:T.price_brl,total:T.price_brl}},fe=async T=>{const D=h.find(Y=>Y.id===T);if(!D)return;if(T==="free"){M(T);try{await p(T),await v(),Ge({title:m("planSelectionModal.toasts.planActivatedTitle"),description:m("planSelectionModal.toasts.freePlanActivated")}),t(!1)}catch{Ge({title:m("planSelectionModal.toasts.genericErrorTitle"),description:m("planSelectionModal.toasts.couldNotActivatePlan"),variant:"destructive"})}finally{M(null)}return}const O=X(D);H({id:T,name:D.name,price:O.total}),K(!0)},J=()=>{const T=Ua(B,S);H({id:Pr,name:`Modo Enterprise (${B} números)`,price:T,instanceCount:B}),K(!0)},ie=()=>{K(!1),V&&N(V)},le=()=>{K(!1),V&&A(V)},pe=async()=>{await v();try{c&&q&&await c({planId:q.id})}catch(T){console.warn("[PlanSelectionModal] onPaymentSuccess callback failed",T)}Ge({title:m("planSelectionModal.toasts.planActivatedTitle"),description:m("planSelectionModal.toasts.subscriptionCreated")}),N(null),t(!1)},ce=async()=>{await v();try{c&&V&&await c({planId:V.id})}catch(T){console.warn("[PlanSelectionModal] onPaymentSuccess callback failed",T)}Ge(j?{title:m("planSelectionModal.toasts.planUnlockedTitle"),description:m("planSelectionModal.toasts.freeTrialReady")}:{title:m("planSelectionModal.toasts.planActivatedTitle"),description:m("planSelectionModal.toasts.pixConfirmed")}),H(null),A(null),t(!1),window.dispatchEvent(new Event("subscription-changed"))},oe=b&&(f!=null&&f.price_brl)?f.price_brl:0,ye=y!=null&&y.current_period_end?new Date(y.current_period_end):null,C=!!ye&&ye.getTime()<Date.now(),z=r==="regularize"||r!=="upgrade"&&(x||w||P||C||(y==null?void 0:y.cancel_at_period_end)===!0),U=h.filter(T=>!(T.id==="free"||!(Number(T.price_brl)>0)||T.id===Pr||o&&T.id==="iniciante"||!z&&oe>0&&T.price_brl<=oe));return i.jsxs(i.Fragment,{children:[i.jsx(ya,{open:e,onOpenChange:T=>{F&&!T||t(T)},children:i.jsx(sa,{className:"max-w-[95vw] sm:max-w-4xl w-full max-h-[95vh] overflow-visible flex flex-col p-0",children:F?i.jsx("div",{className:"p-4 sm:p-6 overflow-y-auto",children:i.jsx(f8,{planId:F.id,planName:F.name,amount:F.price,billingPeriod:S,instanceCount:F.instanceCount,mode:"create",lpContext:u,isFreeTrial:j,onSuccess:()=>{A(null),ce()},onBack:()=>A(null)})}):q?i.jsx("div",{className:"p-4 sm:p-6 overflow-y-auto",children:i.jsx(Jx,{stripe:Y8,children:i.jsx(tK,{planId:q.id,planName:q.name,instanceCount:q.instanceCount,amount:q.price,onSuccess:pe,onBack:()=>N(null),billingPeriod:S,lpContext:u,isFreeTrial:j})})}):d?i.jsxs("div",{className:"flex flex-col items-center justify-center py-12 px-4 gap-3",children:[i.jsx(xt,{className:"h-6 w-6 animate-spin text-orange-500"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:m("planSelectionModal.preparingCheckout")})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"text-center pt-6 pb-2 px-4 sm:px-6 shrink-0",children:[i.jsx("h2",{className:"text-xl sm:text-2xl font-bold",children:m("planSelectionModal.header.chooseYourPlan")}),i.jsx("p",{className:"text-muted-foreground mt-1 text-sm",children:m("planSelectionModal.header.chooseYourPlanSubtitle")}),i.jsxs("div",{className:"flex items-center justify-center gap-2 mt-4",children:[i.jsx("button",{onClick:()=>R("monthly"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${S==="monthly"?"bg-orange-500 text-white":"bg-muted text-muted-foreground hover:bg-muted/80"}`,children:m("planSelectionModal.header.monthly")}),i.jsxs("button",{onClick:()=>R("quarterly"),className:`relative px-4 py-2 rounded-lg text-sm font-medium transition-all ${S==="quarterly"?"bg-
545orange-500 text-white":"bg-muted text-muted-foreground hover:bg-muted/80"}`,children:[m("planSelectionModal.header.quarterly"),i.jsx("span",{className:"absolute -top-2 -right-2 bg-emerald-500 text-white text-[10px] px-1.5 py-0.5 rounded-full font-bold",children:"-20%"})]}),i.jsxs("button",{onClick:()=>R("yearly"),className:`relative px-4 py-2 rounded-lg text-sm font-medium transition-all ${S==="yearly"?"bg-orange-500 text-white":"bg-muted text-muted-foreground hover:bg-muted/80"}`,children:[m("planSelectionModal.header.yearly"),i.jsx("span",{className:"absolute -top-2 -right-2 bg-emerald-500 text-white text-[10px] px-1.5 py-0.5 rounded-full font-bold",children:"-30%"})]})]})]}),i.jsx("div",{className:"flex-1 overflow-y-auto px-4 pb-16 sm:px-6",children:U.length===0?i.jsx("div",{className:"flex gap-4 justify-center pt-4",children:[1,2,3].map(T=>i.jsxs("div",{className:"rounded-xl border-2 border-border bg-card p-4 sm:p-5 flex flex-col w-64 space-y-3",children:[i.jsx(Ro,{className:"h-6 w-24"}),i.jsx(Ro,{className:"h-10 w-full"}),i.jsx(Ro,{className:"h-7 w-20"}),i.jsxs("div",{className:"space-y-2 flex-1",children:[i.jsx(Ro,{className:"h-4 w-full"}),i.jsx(Ro,{className:"h-4 w-3/4"})]}),i.jsx(Ro,{className:"h-10 w-full rounded-md"})]},T))}):i.jsx("div",{className:"px-8 sm:px-12 pt-4 pb-4",children:i.jsxs(oy,{opts:{align:"start",loop:!1},className:"w-full",children:[i.jsxs(ny,{className:"-ml-4 py-6",children:[U.map(T=>{const D=X(T),O=D.monthly,Y=D.total,ae=S==="quarterly"?3:S==="yearly"?12:1,G=O/30,re=T.id==="acesso"||T.id==="dominacao",de=S!=="monthly";return i.jsx(Ji,{className:"pl-4 basis-full sm:basis-1/2 lg:basis-1/3",children:i.jsxs("div",{className:`relative rounded-xl border-2 ${eK[T.id]||"border-border"} bg-card p-4 sm:p-5 flex flex-col h-full transition-all hover:scale-[1.02] overflow-visible mt-3`,children:[re&&i.jsx(na,{className:"absolute -top-3 left-1/2 -translate-x-1/2 bg-orange-500 text-white text-xs whitespace-nowrap z-10",children:m("planSelectionModal.mostPopular")}),i.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[i.jsx("div",{className:"text-orange-500",children:Z8[T.id]}),i.jsx("span",{className:"text-xs sm:text-sm font-medium text-muted-foreground uppercase tracking-wider truncate",children:T.name})]}),T.id!=="free"&&i.jsx("p",{className:"text-orange-500 text-base sm:text-lg font-bold mb-3",children:m(`planSelectionModal.plans.subtitles.${T.id}`)}),T.id!=="free"&&i.jsx(na,{variant:"outline",className:"border-orange-500 text-orange-500 text-xs mb-2 w-fit",children:m("planSelectionModal.instancesConnected",{count:T.max_instances})}),i.jsx("div",{className:"mb-3",children:T.price_brl>0?i.jsxs("div",{children:[de&&i.jsx("p",{className:"text-muted-foreground text-xs line-through",children:m("planSelectionModal.priceFrom",{price:T.price_brl.toFixed(0)})}),i.jsxs("span",{className:"text-xl sm:text-2xl font-bold",children:["R$ ",O.toFixed(0),",00"]}),i.jsxs("span",{className:"text-muted-foreground text-xs sm:text-sm",children:[" ",m("planSelectionModal.perMonth")]}),i.jsxs("p",{className:"text-muted-foreground text-[10px]",children:["R$ ",G.toFixed(2),m("planSelectionModal.perDay")]}),de&&i.jsxs("p",{className:"text-orange-500 text-xs font-semibold mt-1",children:[m("planSelectionModal.totalLabel")," R$ ",Y.toFixed(0),",00 ",m("planSelectionModal.everyMonths",{months:ae})]})]}):i.jsx("span",{className:"text-xl sm:text-2xl font-bold",children:m("planSelectionModal.viaRecharge")})}),i.jsx("ul",{className:"space-y-1.5 flex-1 mb-3",children:T.id!=="free"?rc(T.id).map((se,ue)=>i.jsxs("li",{className:"flex items-start gap-1.5 text-xs",children:[i.jsx(fn,{className:"h-3.5 w-3.5 text-orange-500 shrink-0 mt-0.5"}),i.jsx("span",{children:m(`planSelectionModal.plans.features.${se}`)})]},ue)):i.jsxs("li",{className:"flex items-center gap-1.5 text-xs",children:[i.jsx(fn,{className:"h-3.5 w-3.5 text-orange-500 shrink-0"}),m("planSelectionModal.allFeatures")]})}),i.jsx(we,{onClick:()=>fe(T.id),disabled:I!==null,className:`w-full text-sm ${T.id==="free"?"bg-emerald-600 text-white hover:bg-emerald-700":"bg-orange-500 text-white hover:bg-orange-600"}`,children:I===T.id?m("planSelectionModal.processingButton"):T.id==="free"?m("planSelectionModal.startButton"):m("planSelectionModal.selectPlanButton")})]})},T.id)}),h.some(T=>T.id===Pr&&Number(T.price_brl)>0)&&(z||oe<=0||Ua(Yo,"monthly")>oe)&&i.jsx(Ji,{className:"pl-4 basis-full sm:basis-1/2 lg:basis-1/3",children:i.jsxs("div",{className:"relative rounded-xl border-2 border-purple-500 bg-card p-4 sm:p-5 flex flex-col h-full transition-all hover:scale-[1.02] overflow-visible mt-3",children:[i.jsx(na,{className:"absolute -top-3 left-1/2 -translate-x-1/2 bg-purple-500 text-white text-xs whitespace-nowrap z-10",children:"21 a 100 conexões"}),i.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[i.jsx("div",{className:"text-purple-500",children:i.jsx(jg,{className:"h-6 w-6"})}),i.jsx("span",{className:"text-xs sm:text-sm font-medium text-muted-foreground uppercase tracking-wider truncate",children:m("planSelectionModal.enterprisePlan.name")}
545)]}),i.jsx("p",{className:"text-purple-500 text-base sm:text-lg font-bold mb-3",children:m("planSelectionModal.enterprisePlan.subtitle")}),i.jsx("div",{className:"mb-3",children:i.jsx(X8,{value:B,onChange:te,billingPeriod:S})}),(()=>{const T=Mk(B,S),D=Ua(B,S),O=S==="quarterly"?3:S==="yearly"?12:1,Y=S!=="monthly";return i.jsxs("div",{className:"mb-3",children:[Y&&i.jsx("p",{className:"text-muted-foreground text-xs line-through",children:m("planSelectionModal.priceFrom",{price:Ua(B,"monthly").toFixed(0)})}),i.jsxs("span",{className:"text-xl sm:text-2xl font-bold",children:["R$ ",T.toFixed(0),",00"]}),i.jsxs("span",{className:"text-muted-foreground text-xs sm:text-sm",children:[" ",m("planSelectionModal.perMonth")]}),Y&&i.jsxs("p",{className:"text-orange-500 text-xs font-semibold mt-1",children:[m("planSelectionModal.totalLabel")," R$ ",D.toFixed(0),",00 ",m("planSelectionModal.everyMonths",{months:O})]})]})})(),i.jsx("ul",{className:"space-y-1.5 flex-1 mb-3",children:rc(Pr).map((T,D)=>i.jsxs("li",{className:"flex items-start gap-1.5 text-xs",children:[i.jsx(fn,{className:"h-3.5 w-3.5 text-purple-500 shrink-0 mt-0.5"}),i.jsx("span",{children:m(`planSelectionModal.plans.features.${T}`)})]},D))}),i.jsx(we,{onClick:J,disabled:I!==null,className:"w-full text-sm bg-purple-500 text-white hover:bg-purple-600",children:m("planSelectionModal.selectPlanButton")})]})}),i.jsx(Ji,{className:"pl-4 basis-full sm:basis-1/2 lg:basis-1/3",children:i.jsxs("div",{className:"relative rounded-xl border-2 border-purple-500 bg-card p-4 sm:p-5 flex flex-col h-full transition-all hover:scale-[1.02] overflow-visible mt-3",children:[i.jsx(na,{className:"absolute -top-3 left-1/2 -translate-x-1/2 bg-purple-500 text-white text-xs whitespace-nowrap z-10",children:m("planSelectionModal.empire.customQuote")}),i.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[i.jsx("div",{className:"text-purple-500",children:i.jsx(us,{className:"h-6 w-6"})}),i.jsx("span",{className:"text-xs sm:text-sm font-medium text-muted-foreground uppercase tracking-wider truncate",children:m("planSelectionModal.empire.name")})]}),i.jsx("p",{className:"text-purple-500 text-base sm:text-lg font-bold mb-3",children:m("planSelectionModal.empire.subtitle")}),i.jsx(na,{variant:"outline",className:"border-purple-500 text-purple-500 text-xs mb-2 w-fit",children:m("planSelectionModal.empire.customInstances")}),i.jsxs("div",{className:"mb-3",children:[i.jsx("span",{className:"text-sm font-bold",children:m("planSelectionModal.empire.priceOnRequest")}),i.jsx("p",{className:"text-muted-foreground text-xs",children:m("planSelectionModal.empire.priceOnRequestHint")})]}),i.jsx("ul",{className:"space-y-1.5 flex-1 mb-3",children:rc("custom").map((T,D)=>i.jsxs("li",{className:"flex items-start gap-1.5 text-xs",children:[i.jsx(fn,{className:"h-3.5 w-3.5 text-purple-500 shrink-0 mt-0.5"}),i.jsx("span",{children:m(`planSelectionModal.plans.features.${T}`)})]},D))}),i.jsx(we,{onClick:()=>window.open(`https://wa.me/${k.replace(/\D/g,"")}?text=Quero%20conhecer%20o%20plano%20Empire`,"_blank"),className:"w-full text-sm bg-purple-500 text-white hover:bg-purple-600",children:m("planSelectionModal.empire.talkToSupport")})]})})]}),i.jsx(ry,{}),i.jsx(iy,{})]})})})]})})}),i.jsx(q6,{open:_,onOpenChange:K,onSelectCard:ie,onSelectPix:le})]})},Sf={payment_failure:{icon:i.jsx(ii,{className:"h-12 w-12 text-destructive mx-auto"}),title:"Pagamento Não Identificado",description:"Não conseguimos confirmar o pagamento da sua assinatura e o acesso foi suspenso. Para reativar a plataforma e recriar suas instâncias, regularize agora escolhendo um plano."},cancel_expiry:{icon:i.jsx(g0,{className:"h-12 w-12 text-destructive mx-auto"}),title:"Assinatura Encerrada",description:"Você cancelou sua assinatura e o perÃodo contratado terminou. Para voltar a usar a plataforma e recriar suas instâncias, assine um plano."},refund:{icon:i.jsx(J0,{className:"h-12 w-12 text-destructive mx-auto"}),title:"Assinatura Reembolsada",description:"Sua assinatura foi reembolsada e o acesso foi suspenso. Para voltar a usar a plataforma, assine um plano."},chargeback:{icon:i.jsx(ms,{className:"h-12 w-12 text-destructive mx-auto"}),title:"Acesso Suspenso por Chargeback",description:"Identificamos um chargeback na sua última cobrança e o acesso foi suspenso. Para regularizar e voltar a usar a plataforma, fale com o suporte."},admin:{icon:i.jsx(ms,{className:"h-12 w-12 text-destructive mx-auto"}),title:"Acesso Suspenso",description:"Seu acesso foi suspenso. Assine um plano ou fale com o suporte para regularizar."}},pn=({status:e,gracePeriodEnd:t,hasAvulsaInstances:a=!1,isCreditSlotExpiry:o=!1,suspensionReason:n=null})=>{const[r,s]=g.useState(!1),[l,c]=g.useState(!1),{signOut:d}=ut(),u=e==="blocked";if(g.useEffect(()=>{var w;if(u)return window.__zdEnforcementActive=!0,(w=window.__zdApplySupport)==null||w.call(window),()=>{var P;window.__zdEnforcementActive=!1,(P=window.__zdApplySupport)==null||P.call(window)}},[u]),!u&&l)return null;const m=()=>{if(!t)return"";const w=new Date,P=t.getTime()-w.getTime();if(P<=0)return"expirado";const E=Math.floor(P/(1e3*60*60*24)),k=Math.floor(P%(1e3*60*60*24)/(1e3*60*60));return E>0?`${E} dia${E>1?"s":""} e ${k}h`:`${k} hora${k>1?"s":""}`},h=u?n&&Sf[n]?n:"admin":null,p=()=>
545{if(o)return{icon:u?i.jsx(ms,{className:"h-12 w-12 text-destructive mx-auto"}):i.jsx(Wa,{className:"h-12 w-12 text-amber-500 mx-auto"}),title:u?"Instâncias Expiradas":"Instâncias Expirando",description:u?"Suas instâncias avulsas expiraram e o prazo de carência terminou. Assine um plano para criar e manter instâncias.":i.jsxs(i.Fragment,{children:["Suas instâncias avulsas estão expirando! Você tem"," ",i.jsx("span",{className:"font-semibold text-foreground",children:m()})," ","para assinar um plano antes que sejam apagadas."]})};if(u&&h){const w=Sf[h];return{icon:w.icon,title:w.title,description:w.description}}return{icon:i.jsx(Wa,{className:"h-12 w-12 text-amber-500 mx-auto"}),title:"Atenção â Plano Expirando",description:i.jsxs(i.Fragment,{children:["Seu pagamento falhou ou sua assinatura foi cancelada. Você tem"," ",i.jsx("span",{className:"font-semibold text-foreground",children:m()})," ","para regularizar antes que o acesso seja bloqueado."]})}},{icon:v,title:f,description:b}=p(),x=u&&!(u&&(h==="refund"||h==="cancel_expiry")&&a);return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"fixed inset-0 z-40 bg-black/80","aria-hidden":"true",style:{pointerEvents:x?"auto":"none"}}),i.jsx(ya,{open:!0,modal:!1,children:i.jsxs(sa,{className:"max-w-md z-50 [&>button]:hidden",onPointerDownOutside:w=>{x&&w.preventDefault()},onEscapeKeyDown:w=>{x&&w.preventDefault()},onInteractOutside:w=>{x&&w.preventDefault()},children:[i.jsxs(xa,{className:"text-center items-center gap-2",children:[v,i.jsx(wa,{className:"text-xl",children:f}),i.jsx(wo,{className:"text-center",children:b})]}),i.jsxs("div",{className:"flex flex-col gap-3 mt-4",children:[h!=="chargeback"&&i.jsx(we,{onClick:()=>s(!0),className:"w-full",size:"lg",children:o?"Recarregar / Assinar Plano":u?"Assinar Plano":"Renovar Plano"}),i.jsxs("div",{className:"flex gap-2",children:[i.jsxs(we,{variant:"outline",size:"sm",className:"flex-1",onClick:()=>{const w=window.$crisp;w&&w.push&&(w.push(["do","chat:show"]),w.push(["do","chat:open"]))},children:[i.jsx(j0,{className:"h-4 w-4 mr-1"}),"Falar com Suporte"]}),i.jsxs(we,{variant:"ghost",size:"sm",className:"flex-1 text-muted-foreground",onClick:()=>d(),children:[i.jsx(jd,{className:"h-4 w-4 mr-1"}),"Sair da Conta"]})]}),!x&&i.jsxs(i.Fragment,{children:[i.jsx(we,{variant:"ghost",size:"sm",onClick:()=>c(!0),className:"text-muted-foreground",children:"Fechar por agora"}),!u&&i.jsxs("div",{className:"flex items-center justify-center gap-2 text-xs text-muted-foreground",children:[i.jsx(A0,{className:"h-3.5 w-3.5"}),i.jsx("span",{children:"Após o prazo, suas instâncias do plano serão apagadas"})]})]})]})]})}),i.jsx(go,{open:r,onOpenChange:s,hideFreePlan:!0,mode:"regularize"})]})};var gl="Checkbox",[aK,uJ]=La(gl),[oK,sm]=aK(gl);function nK(e){const{__scopeCheckbox:t,checked:a,children:o,defaultChecked:n,disabled:r,form:s,name:l,onCheckedChange:c,required:d,value:u="on",internal_do_not_use_render:m}=e,[h,p]=Gn({prop:a,defaultProp:n??!1,onChange:c,caller:gl}),[v,f]=g.useState(null),[b,y]=g.useState(null),x=g.useRef(!1),w=v?!!s||!!v.closest("form"):!0,P={checked:h,disabled:r,setChecked:p,control:v,setControl:f,name:l,form:s,value:u,hasConsumerStoppedPropagationRef:x,required:d,defaultChecked:vo(n)?!1:n,isFormControl:w,bubbleInput:b,setBubbleInput:y};return i.jsx(oK,{scope:t,...P,children:rK(m)?m(P):o})}var sC="CheckboxTrigger",lC=g.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:a,...o},n)=>{const{control:r,value:s,disabled:l,checked:c,required:d,setControl:u,setChecked:m,hasConsumerStoppedPropagationRef:h,isFormControl:p,bubbleInput:v}=sm(sC,e),f=Qe(n,u),b=g.useRef(c);return g.useEffect(()=>{const y=r==null?void 0:r.form;if(y){const x=()=>m(b.current);return y.addEventListener("reset",x),()=>y.removeEventListener("reset",x)}},[r,m]),i.jsx(_e.button,{type:"button",role:"checkbox","aria-checked":vo(c)?"mixed":c,"aria-required":d,"data-state":pC(c),"data-disabled":l?"":void 0,disabled:l,value:s,...o,ref:f,onKeyDown:qe(t,y=>{y.key==="Enter"&&y.preventDefault()}),onClick:qe(a,y=>{m(x=>vo(x)?!0:!x),v&&p&&(h.current=y.isPropagationStopped(),h.current||y.stopPropagation())})})});lC.displayName=sC;var lm=g.forwardRef((e,t)=>
545{const{__scopeCheckbox:a,name:o,checked:n,defaultChecked:r,required:s,disabled:l,value:c,onCheckedChange:d,form:u,...m}=e;return i.jsx(nK,{__scopeCheckbox:a,checked:n,defaultChecked:r,disabled:l,required:s,onCheckedChange:d,name:o,form:u,value:c,internal_do_not_use_render:({isFormControl:h})=>i.jsxs(i.Fragment,{children:[i.jsx(lC,{...m,ref:t,__scopeCheckbox:a}),h&&i.jsx(mC,{__scopeCheckbox:a})]})})});lm.displayName=gl;var cC="CheckboxIndicator",dC=g.forwardRef((e,t)=>{const{__scopeCheckbox:a,forceMount:o,...n}=e,r=sm(cC,a);return i.jsx(Jn,{present:o||vo(r.checked)||r.checked===!0,children:i.jsx(_e.span,{"data-state":pC(r.checked),"data-disabled":r.disabled?"":void 0,...n,ref:t,style:{pointerEvents:"none",...e.style}})})});dC.displayName=cC;var uC="CheckboxBubbleInput",mC=g.forwardRef(({__scopeCheckbox:e,...t},a)=>{const{control:o,hasConsumerStoppedPropagationRef:n,checked:r,defaultChecked:s,required:l,disabled:c,name:d,value:u,form:m,bubbleInput:h,setBubbleInput:p}=sm(uC,e),v=Qe(a,p),f=rm(r),b=Hd(o);g.useEffect(()=>{const x=h;if(!x)return;const w=window.HTMLInputElement.prototype,E=Object.getOwnPropertyDescriptor(w,"checked").set,k=!n.current;if(f!==r&&E){const S=new Event("click",{bubbles:k});x.indeterminate=vo(r),E.call(x,vo(r)?!1:r),x.dispatchEvent(S)}},[h,f,r,n]);const y=g.useRef(vo(r)?!1:r);return i.jsx(_e.input,{type:"checkbox","aria-hidden":!0,defaultChecked:s??y.current,required:l,disabled:c,name:d,value:u,form:m,...t,tabIndex:-1,ref:v,style:{...t.style,...b,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});mC.displayName=uC;function rK(e){return typeof e=="function"}function vo(e){return e==="indeterminate"}function pC(e){return vo(e)?"indeterminate":e?"checked":"unchecked"}const vl=g.forwardRef(({className:e,...t},a)=>i.jsx(lm,{ref:a,className:ve("peer h-4 w-4 shrink-0 rounded-sm border-2 border-accent bg-background ring-offset-background data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:i.jsx(dC,{className:ve("flex items-center justify-center text-current"),children:i.jsx(fn,{className:"h-4 w-4",strokeWidth:3})})}));vl.displayName=lm.displayName;const iK=({userId:e,maxInstances:t,onResolved:a})=>{const{t:o}=tt("billing"),n=Rt(),[r,s]=g.useState([]),[l,c]=g.useState(new Set),[d,u]=g.useState(!0),[m,h]=g.useState(!1);g.useEffect(()=>{let b=!0;return(async()=>{const{data:y}=await ne.from("maturador_instances").select("id, instance_name, phone_number, profile_name").eq("user_id",e).in("status",["connected","open"]).is("deletion_requested_at",null).order("created_at",{ascending:!0}),x=y??[];if(b&&x.length<=t){try{await ne.rpc("resolve_downgrade_overage",{p_keep_instance_ids:x.map(w=>w.id)}),window.dispatchEvent(new Event("subscription-changed"))}catch{}if(b){a();return}}b&&(s(x),u(!1))})(),()=>{b=!1}},[e,t]);const p=b=>{c(y=>{const x=new Set(y);return x.has(b)?x.delete(b):x.size<t&&x.add(b),x})},v=b=>b.instance_name||b.profile_name||b.phone_number||b.id.slice(0,8),f=async()=>{h(!0);try{const{data:b,error:y}=await ne.rpc("resolve_downgrade_overage",{p_keep_instance_ids:Array.from(l)});if(y)throw y;if(b&&b.ok===!1)throw new Error(b.error==="too_many_kept"?o("downgradeOverageModal.errors.tooManyKept",{count:t}):o("downgradeOverageModal.errors.couldNotComplete"));Ge({title:o("downgradeOverageModal.readyTitle"),description:o("downgradeOverageModal.readyDescription")}),window.dispatchEvent(new Event("subscription-changed")),a()}catch(b){Ge({title:o("downgradeOverageModal.errors.genericTitle"),description:(b==null?void 0:b.message)||o("downgradeOverageModal.errors.tryAgain"),variant:"destructive"})}finally{h(!1)}};return i.jsx(ya,{open:!0,modal:!0,children:i.jsxs(sa,{className:"max-w-md [&>button]:hidden",onPointerDownOutside:b=>b.preventDefault(),onEscapeKeyDown:b=>b.preventDefault(),onInteractOutside:b=>b.preventDefault(),children:[i.jsxs(xa,{className:"text-center items-center gap-2",children:[i.jsx(Wa,{className:"h-12 w-12 text-amber-500 mx-auto"}),i.jsx(wa,{className:"text-xl",children:o("downgradeOverageModal.title")}),i.jsxs(wo,{className:"text-center",children:[o("downgradeOverageModal.descriptionPrefix")," ",i.jsx("strong",{children:t})," ",o("downgradeOverageModal.descriptionSuffix",{count:t})]})]}),d?i.jsx("div",{className:"flex justify-center py-6",children:i.jsx(xt,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):i.jsx("div",{className:"space-y-2 max-h-64 overflow-y-auto py-2",children:r.map(b=>{const y=l.has(b.id),x=!y&&l.size>=t;return i.jsxs("label",{className:`flex items-center gap-3 rounded-md border p-3 cursor-pointer ${y?"border-primary bg-primary/5":"border-border"} ${x?"opacity-50 cursor-not-allowed":""}`,children:[i.jsx(vl,{checked:y,disabled:x,onCheckedChange:()=>p(b.id)}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("p",{className:"text-sm font-medium truncate",children:v(b)}),b.phone_number&&i.jsx("p",{className:"text-xs text-muted-foreground truncate",children:b.phone_number})]})]},b.id)})}),i.jsx("p",{className:"text-xs text-center text-muted-foreground",children:o("downgradeOverageModal.selectedCount",{selected:l.size,max:t})}),i.jsxs("div",{className:"flex flex-col gap-2 mt-2",children:[i.jsxs(we,{onClick:f,disabled:m||d,className:"w-full",size:"lg",children:[m?i.jsx(xt,{className:"h-4 w-4 animate-spin mr-2"}):null,o("downgradeOverageModal.keepSelectedButton")]}),i.jsxs(we,{variant:"outline",className:"w-full gap-2",onClick:()=>n("/subscription"),children:[i.jsx(m0,{className:"h-4 w-4"}),o("downgradeOverageModal.backToLargerPlan")]})]})]})})},sK=()=>{const{user:e}=ut(),[t,a]=g.useState([]),[o,n]=g.useState(!0),r=g.useCallback(async()=>
545{if(!e){a([]),n(!1);return}n(!0);try{const l=new Date(Date.now()-864e5).toISOString(),{data:c,error:d}=await ne.from("system_notifications").select("*").eq("user_id",e.id).is("dismissed_at",null).gte("created_at",l).order("created_at",{ascending:!1});if(d)throw d;a(c||[])}catch(l){console.error("[useSystemNotifications] fetch error",l),a([])}finally{n(!1)}},[e]);g.useEffect(()=>{r()},[r]);const s=g.useCallback(async l=>{a(c=>c.filter(d=>d.id!==l));try{await ne.from("system_notifications").update({dismissed_at:new Date().toISOString()}).eq("id",l)}catch(c){console.error("[useSystemNotifications] dismiss error",c),r()}},[r]);return{notifications:t,loading:o,refresh:r,dismiss:s}},hC=56,Nf={warning:{container:"border-amber-500/40 bg-amber-500/10 text-amber-100",icon:Wa},info:{container:"border-sky-500/40 bg-sky-500/10 text-sky-100",icon:zg},success:{container:"border-emerald-500/40 bg-emerald-500/10 text-emerald-100",icon:ri}},lK=({notification:e,onDismiss:t})=>{const{t:a}=tt(["notifications","common"]),o=Nf[e.type]??Nf.info,n=o.icon;return i.jsx("div",{className:ve("relative border-b backdrop-blur-md px-4 sm:px-6",o.container),style:{height:`${hC}px`},role:"alert",children:i.jsxs("div",{className:"mx-auto flex h-full max-w-6xl items-center gap-3 pr-8",children:[i.jsx(n,{className:"h-5 w-5 flex-shrink-0"}),i.jsxs("div",{className:"flex-1 min-w-0 flex flex-col sm:flex-row sm:items-center sm:gap-3",children:[i.jsx("h4",{className:"font-semibold text-sm leading-tight flex-shrink-0",children:e.title}),i.jsx("p",{className:"text-xs leading-snug opacity-90 line-clamp-2 sm:line-clamp-1",children:e.body})]}),e.action_url&&e.action_label&&i.jsx(we,{asChild:!0,size:"sm",variant:"outline",className:"h-7 text-xs bg-background/20 border-current hover:bg-background/40 flex-shrink-0",children:i.jsx(ds,{to:e.action_url,children:e.action_label})}),i.jsx("button",{onClick:()=>t(e.id),className:"absolute right-3 top-1/2 -translate-y-1/2 p-1 rounded hover:bg-background/20 transition-colors","aria-label":a("banner.dismiss"),children:i.jsx(Ma,{className:"h-4 w-4"})})]})})},cK=()=>{const{notifications:e,dismiss:t}=sK(),a=e.length;return g.useEffect(()=>(a>0?(document.body.setAttribute("data-system-banner",String(a)),document.body.style.setProperty("--system-banner-height",`${hC*a}px`)):(document.body.removeAttribute("data-system-banner"),document.body.style.removeProperty("--system-banner-height")),()=>{document.body.removeAttribute("data-system-banner"),document.body.style.removeProperty("--system-banner-height")}),[a]),a?i.jsx("div",{className:"fixed top-0 left-0 right-0 z-[60] flex flex-col max-h-[40vh] overflow-y-auto",children:e.map(o=>i.jsx(lK,{notification:o,onDismiss:t},o.id))}):null},dK=4e3,uK=10*60*1e3,kf="upgrade_reauth_dismissed_v1";function mK(e){const[t,a,o]=(e||"").split("-");return o?`${o}/${a}/${t}`:e}function pK(e){return e.replace(/\D/g,"").slice(0,11).replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d{1,2})$/,"$1-$2")}function hK(){const{user:e}=ut(),{subscription:t,refresh:a}=Qs(),[o,n]=g.useState(!1),[r,s]=g.useState("idle"),[l,c]=g.useState(""),[d,u]=g.useState(""),[m,h]=g.useState(null),[p,v]=g.useState(0),[f,b]=g.useState(!1),y=g.useRef(!1),x=t,w=!!x&&x.gateway==="efi"&&x.payment_method==="pix_automatico"&&x.status==="active"&&x.efi_authorized===!1&&!!x.current_period_end&&new Date(x.current_period_end)>new Date;g.useEffect(()=>{if(!w){n(!1);return}sessionStorage.getItem(kf)!=="1"&&n(!0)},[w]);const P=g.useCallback(async k=>{b(!0),s("loading");try{const{data:S,error:R}=await ne.functions.invoke("efi-reauth-recurrence",{body:k??{}});if(R||!(S!=null&&S.ok)){const I=S==null?void 0:S.error;if(S!=null&&S.alreadyAuthorized){s("done"),setTimeout(()=>{a(),n(!1)},1200);return}if(I==="CPF_REQUIRED"||I==="NAME_REQUIRED"){s("form");return}Ge({title:"Erro ao gerar re-autorização",description:(S==null?void 0:S.message)||(R==null?void 0:R.message)||"Tente novamente.",variant:"destructive"}),s("form");return}h({idRec:S.idRec,pixCopiaECola:S.pixCopiaECola,valorRec:S.valorRec,scheduledFor:S.scheduledFor}),v(Date.now()),s("qr")}catch(S){Ge({title:(S==null?void 0:S.message)||"Erro inesperado",variant:"destructive"}),s("form")}finally{b(!1)}},[a]);g.useEffect(()=>{o&&r==="idle"&&!y.current&&(y.current=!0,P()),o||(y.current=!1)},[o,r,P]),g.useEffect(()=>{if(r!=="qr"||!m||!e)return;const k=setInterval(async()=>
545{if(Date.now()-p>uK){clearInterval(k),Ge({title:"Tempo esgotado",description:"Gere um novo QR para tentar de novo.",variant:"destructive"}),s("form");return}try{const{data:S}=await ne.functions.invoke("efi-check-reauth-status",{body:{recId:m.idRec}});S!=null&&S.authorized?(clearInterval(k),s("done"),Ge({title:"Recorrência autorizada!",description:"Sua renovação está garantida."}),setTimeout(()=>{a(),n(!1)},1500)):S!=null&&S.rejected&&(clearInterval(k),Ge({title:"Autorização recusada no banco",description:"Gere um novo QR ou use outro banco.",variant:"destructive"}),s("form"))}catch{}},dK);return()=>clearInterval(k)},[r,m,p,e,a]);const E=()=>{sessionStorage.setItem(kf,"1"),n(!1)};return w?i.jsx(ya,{open:o,onOpenChange:k=>{k||E()},children:i.jsxs(sa,{className:"sm:max-w-md",children:[i.jsxs(xa,{children:[i.jsxs(wa,{className:"flex items-center gap-2",children:[i.jsx(ms,{className:"h-5 w-5 text-amber-500"}),"Autorize a renovação do seu plano"]}),i.jsxs(wo,{children:["Seu upgrade foi pago, mas a autorização do débito automático do ",i.jsx("strong",{children:"próximo mês"})," não foi aprovada pelo banco. ",i.jsx("strong",{children:"Você não paga nada agora"})," â só autoriza a cobrança do próximo ciclo."]})]}),r==="loading"&&i.jsxs("div",{className:"flex flex-col items-center gap-3 py-8",children:[i.jsx(xt,{className:"h-8 w-8 animate-spin text-amber-500"}),i.jsx("p",{className:"text-sm text-muted-foreground",children:"Gerando QR de autorização..."})]}),r==="done"&&i.jsxs("div",{className:"flex flex-col items-center gap-4 py-8",children:[i.jsx(ri,{className:"h-16 w-16 text-emerald-500"}),i.jsx("p",{className:"text-lg font-semibold text-emerald-500",children:"Renovação autorizada!"})]}),r==="qr"&&m&&i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"rounded-lg border border-amber-500/40 bg-amber-500/5 p-3 text-sm space-y-1",children:[i.jsxs("p",{className:"font-medium text-amber-600 flex items-center gap-1.5",children:[i.jsx(f0,{className:"h-4 w-4"})," Você não será cobrado agora"]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:["A próxima cobrança de ",i.jsxs("strong",{children:["R$ ",Number(m.valorRec).toFixed(2)]})," acontece automaticamente em ",i.jsx("strong",{children:mK(m.scheduledFor)}),". Escaneie para autorizar o débito no app do seu banco."]})]}),i.jsx("div",{className:"flex justify-center",children:i.jsx("div",{className:"bg-white p-4 rounded-lg",children:i.jsx(nm,{value:m.pixCopiaECola,size:208,level:"H",imageSettings:{src:Cw,height:44,width:44,excavate:!0}})})}),i.jsxs("div",{className:"space-y-2",children:[i.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"Ou copie o código PIX:"}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx(it,{value:m.pixCopiaECola,readOnly:!0,className:"font-mono text-xs"}),i.jsx(we,{variant:"outline",size:"icon",onClick:()=>{navigator.clipboard.writeText(m.pixCopiaECola),Ge({title:"Código copiado!"})},children:i.jsx(Og,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground justify-center",children:[i.jsx(xt,{className:"h-4 w-4 animate-spin"})," Aguardando autorização no app do seu banco..."]}),i.jsx(we,{variant:"ghost",className:"w-full text-xs text-muted-foreground",onClick:E,children:"Fazer isso depois"})]}),r==="form"&&i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:"Nome completo do titular"}),i.jsx(it,{value:d,onChange:k=>u(k.target.value),placeholder:"Como aparece no banco",maxLength:120})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:"CPF do titular"}),i.jsx(it,{value:l,onChange:k=>c(pK(k.target.value)),placeholder:"000.000.000-00",inputMode:"numeric",maxLength:14})]}),i.jsx(we,{className:"w-full bg-amber-600 hover:bg-amber-700 text-white h-11",disabled:f,onClick:()=>{const k=l.replace(/\D/g,"");if(k.length!==11){Ge({title:"CPF inválido",variant:"destructive"});return}if(d.trim().length<3){Ge({title:"Nome inválido",variant:"destructive"});return}P({cpf:k,fullName:d.trim()})},children:f?i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"h-4 w-4 mr-2 animate-spin"})," Gerando..."]}):"Gerar QR de autorização"}),i.jsx(we,{variant:"ghost",className:"w-full text-xs text-muted-foreground",onClick:E,children:"Fazer isso depois"})]})]})}):null}const fK=["/track-ofertas","/transcricao-audio"];function jr(e){return e?fK.some(t=>e===t||e.startsWith(t+"/")):!1}const fC=()=>{const{isAdmin:e,isSupport:t,hasAdminAccess:a,loading:o}=iu();return{isAdmin:e,isSupport:t,hasAdminAccess:a,canEditWallets:e,canEditAffiliates:e,canManageUsersFully:e||t,loading:o}},gK=["acesso","expansao","ascensao","dominacao","titan","enterprise","custom"],vK=["free","iniciante"];function mJ(e){var a;if(e.isAdmin)return!0;const t=((a=e.subscription)==null?void 0:a.plan_id)??null;return t&&vK.includes(t)||!t||!gK.includes(t)?!1:gC(e.subscription)}function gC(e){if(!e)return!1;const t=e.status??"";return!!(t==="active"||t==="trialing"||!!e.current_period_end&&new Date(e.current_period_end).getTime()>Date.now()&&(t==="authorized_pending_charge"||t==="pending_authorization")||e.grace_peri
545od_end&&new Date(e.grace_period_end).getTime()>Date.now())}function vC(e){return!e.isCollaborator}const ic=768;function bC(){const[e,t]=g.useState(void 0);return g.useEffect(()=>{const a=window.matchMedia(`(max-width: ${ic-1}px)`),o=()=>{t(window.innerWidth<ic)};return a.addEventListener("change",o),t(window.innerWidth<ic),()=>a.removeEventListener("change",o)},[]),!!e}const Ls="/_releases/legacy/assets/zapdata-logo-X4vvddIU.png";function et(e){const t=Object.prototype.toString.call(e);return e instanceof Date||typeof e=="object"&&t==="[object Date]"?new e.constructor(+e):typeof e=="number"||t==="[object Number]"||typeof e=="string"||t==="[object String]"?new Date(e):new Date(NaN)}function Po(e,t){return e instanceof Date?new e.constructor(t):new Date(t)}const yC=6048e5,bK=864e5,pJ=6e4,hJ=36e5,Wi=43200,Tf=1440;let yK={};function bi(){return yK}function Jr(e,t){var l,c,d,u;const a=bi(),o=(t==null?void 0:t.weekStartsOn)??((c=(l=t==null?void 0:t.locale)==null?void 0:l.options)==null?void 0:c.weekStartsOn)??a.weekStartsOn??((u=(d=a.locale)==null?void 0:d.options)==null?void 0:u.weekStartsOn)??0,n=et(e),r=n.getDay(),s=(r<o?7:0)+r-o;return n.setDate(n.getDate()-s),n.setHours(0,0,0,0),n}function js(e){return Jr(e,{weekStartsOn:1})}function xC(e){const t=et(e),a=t.getFullYear(),o=Po(e,0);o.setFullYear(a+1,0,4),o.setHours(0,0,0,0);const n=js(o),r=Po(e,0);r.setFullYear(a,0,4),r.setHours(0,0,0,0);const s=js(r);return t.getTime()>=n.getTime()?a+1:t.getTime()>=s.getTime()?a:a-1}function If(e){const t=et(e);return t.setHours(0,0,0,0),t}function _s(e){const t=et(e),a=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return a.setUTCFullYear(t.getFullYear()),+e-+a}function xK(e,t){const a=If(e),o=If(t),n=+a-_s(a),r=+o-_s(o);return Math.round((n-r)/bK)}function wK(e){const t=xC(e),a=Po(e,0);return a.setFullYear(t,0,4),a.setHours(0,0,0,0),js(a)}function is(e,t){const a=et(e),o=et(t),n=a.getTime()-o.getTime();return n<0?-1:n>0?1:n}function CK(e){return Po(e,Date.now())}function PK(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function AK(e){if(!PK(e)&&typeof e!="number")return!1;const t=et(e);return!isNaN(Number(t))}function EK(e,t){const a=et(e),o=et(t),n=a.getFullYear()-o.getFullYear(),r=a.getMonth()-o.getMonth();return n*12+r}function SK(e){return t=>{const o=(e?Math[e]:Math.trunc)(t);return o===0?0:o}}function NK(e,t){return+et(e)-+et(t)}function kK(e){const t=et(e);return t.setHours(23,59,59,999),t}function TK(e){const t=et(e),a=t.getMonth();return t.setFullYear(t.getFullYear(),a+1,0),t.setHours(23,59,59,999),t}function IK(e){const t=et(e);return+kK(t)==+TK(t)}function RK(e,t){const a=et(e),o=et(t),n=is(a,o),r=Math.abs(EK(a,o));let s;if(r<1)s=0;else{a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-n*r);let l=is(a,o)===-n;IK(et(e))&&r===1&&is(e,o)===1&&(l=!1),s=n*(r-Number(l))}return s===0?0:s}function DK(e,t,a){const o=NK(e,t)/1e3;return SK(a==null?void 0:a.roundingMethod)(o)}function MK(e){const t=et(e),a=Po(e,0);return a.setFullYear(t.getFullYear(),0,1),a.setHours(0,0,0,0),a}const FK={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},LK=(e,t,a)=>{let o;const n=FK[e];return typeof n=="string"?o=n:t===1?o=n.one:o=n.other.replace("{{count}}",t.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+o:o+" ago":o};function Tn(e){return(t={})=>{const a=t.width?String(t.width):e.defaultWidth;return e.formats[a]||e.formats[e.defaultWidth]}}const jK={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},_K={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},OK={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},BK={date:Tn({formats:jK,defaultWidth:"full"}),time:Tn({formats:_K,defaultWidth:"full"}),dateTime:Tn({formats:OK,defaultWidth:"full"})},zK={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},VK=(e,t,a,o)=>zK[e];function Sa(e){return(t,a)=>{const o=a!=null&&a.context?String(a.context):"standalone";let n;if(o==="formatting"&&e.formattingValues){const s=e.defaultFormattingWidth||e.defaultWidth,l=a!=null&&a.width?String(a.width):s;n=e.formattingValues[l]||e.formattingValues[s]}else{const s=e.defaultWidth,l=a!=null&&a.width?String(a.width):e.defaultWidth;n=e.values[l]||e.values[s]}const r=e.argumentCallback?e.argumentCallback(t):t;return n[r]}}const qK={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},UK={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},WK={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]}
vendor: 13,452 bytes, line 545
545,$K={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},GK={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},HK={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},KK=(e,t)=>{const a=Number(e),o=a%100;if(o>20||o<10)switch(o%10){case 1:return a+"st";case 2:return a+"nd";case 3:return a+"rd"}return a+"th"},XK={ordinalNumber:KK,era:Sa({values:qK,defaultWidth:"wide"}),quarter:Sa({values:UK,defaultWidth:"wide",argumentCallback:e=>e-1}),month:Sa({values:WK,defaultWidth:"wide"}),day:Sa({values:$K,defaultWidth:"wide"}),dayPeriod:Sa({values:GK,defaultWidth:"wide",formattingValues:HK,defaultFormattingWidth:"wide"})};function Na(e){return(t,a={})=>{const o=a.width,n=o&&e.matchPatterns[o]||e.matchPatterns[e.defaultMatchWidth],r=t.match(n);if(!r)return null;const s=r[0],l=o&&e.parsePatterns[o]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(l)?QK(l,m=>m.test(s)):YK(l,m=>m.test(s));let d;d=e.valueCallback?e.valueCallback(c):c,d=a.valueCallback?a.valueCallback(d):d;const u=t.slice(s.length);return{value:d,rest:u}}}function YK(e,t){for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)&&t(e[a]))return a}function QK(e,t){for(let a=0;a<e.length;a++)if(t(e[a]))return a}function wC(e){return(t,a={})=>{const o=t.match(e.matchPattern);if(!o)return null;const n=o[0],r=t.match(e.parsePattern);if(!r)return null;let s=e.valueCallback?e.valueCallback(r[0]):r[0];s=a.valueCallback?a.valueCallback(s):s;const l=t.slice(n.length);return{value:s,rest:l}}}const ZK=/^(\d+)(th|st|nd|rd)?/i,JK=/\d+/i,e9={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},t9={any:[/^b/i,/^(a|c)/i]},a9={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},o9={any:[/1/i,/2/i,/3/i,/4/i]},n9={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},r9={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},i9={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},s9={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},l9={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},c9={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},d9={ordinalNumber:wC({matchPattern:ZK,parsePattern:JK,valueCallback:e=>parseInt(e,10)}),era:Na({matchPatterns:e9,defaultMatchWidth:"wide",parsePatterns:t9,defaultParseWidth:"any"}),quarter:Na({matchPatterns:a9,defaultMatchWidth:"wide",parsePatterns:o9,defaultParseWidth:"any",valueCallback:e=>e+1}),month:Na({matchPatterns:n9,defaultMatchWidth:"wide",parsePatterns:r9,defaultParseWidth:"any"}),day:Na({matchPatterns:i9,defaultMatchWidth:"wide",parsePatterns:s9,defaultParseWidth:"any"}),dayPeriod:Na({matchPatterns:l9,defaultMatchWidth:"any",parsePatterns:c9,defaultParseWidth:"any"})},CC={code:"en-US",formatDistance:LK,formatLong:BK,formatRelative:VK,localize:XK,match:d9,options:{weekStartsOn:0,firstWeekContainsDate:1}};function u9(e){const t=et(e);return xK(t,MK(t))+1}function m9(e){const t=et(e),a=+js(t)-+wK(t);return Math.round(a/yC)+1}function PC(e,t){var u,m,h,p;const a=et(e),o=a.getFullYear(),n=bi(),r=(t==null?void 0:t.firstWeekContainsDate)??((m=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:m.firstWeekContainsDate)??n.firstWeekContainsDate??((p=(h=n.locale)==null?void 0:h.options)==null?void 0:p.firstWeekContainsDate)??1,s=Po(e,0);s.setFullYear(o+1,0,r),s.setHours(0,0,0,0);const l=Jr(s,t),c=Po(e,0);c.setFullYear(o,0,r),c.setHours(0,0,0,0);const d=Jr(c,t);return a.getTime()>=l.getTime()?o+1:a.getTime()>=d.getTime()?o:o-1}function p9(e,t){var l,c,d,u;const a=bi(),o=(t==null?void 0:t.firstWeekContainsDate)??((c=(l=t==null?void 0:t.locale)==null?void 0:l.options)==null?void 0:c.firstWeekContainsDate)??a.firstWeekContainsDate??((u=(d=a.locale)==null?void 0:d.options)==null?void 0:u.firstWeekContainsDate)??1,n=PC(e,t),r=Po(e,0);return r.setFullYear(n,0,o),r.setHours(0,0,0,0),Jr(r,t)}function h9(e,t){const a=et(e),o=+Jr(a,t)-+p9(a,t);return Math.round(o/yC)+1}function Ye(e,t){const a=e<0?"-":"",o=Math.abs(e).toString().padStart(t,"0");return a+o}const to={y(e,t){const a=e.getFullYear(),o=a>0?a:1-a;return Ye(t==="yy"?o%100:o,t.length)},M(e,t){const a=e.getMonth();return t==="M"?String(a+1):Ye(a+1,2)},d(e,t){return Ye(e.getDate(),t.length)},a(e,t){const a=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return a.toUpperCase();case"aaa":return a;case"aaaaa":return a[0];case"aaaa":default:return a==="am"?"a.m.":"p.m."}},h(e,t){return Ye(e.getHours()%12||12,t.length)},H(e,t){return Ye(e.getHours(),t.length)},m(e,t){return Ye(e.getMinutes(),t.length)},s(e,t){return Ye(e.getSeconds(),t.length)},S(e,t){const a=t.length,o=e.getMilliseconds(),n=Math.trunc(o*Math.pow(10,a-3));return Ye(n,t.length)}},hn={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Rf={G:function(e,t,a){const o=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return a.era(o,{width:"abbreviated"});case"GGGGG":return a.era(o,{width:"narrow"});case"GGGG":default:return a.era(o,{width:"wide"})}},y:function(e,t,a){if(t==="yo"){const o=e.getFullYear(),n=o>0?o:1-o;return a.ordinalNumber(n,{unit:"year"})}return to.y(e,t)},Y:function(e,t,a,o){const n=PC(e,o),r=n>0?n:1-n;if(t==="YY"){const s=r%100;return Ye(s,2)}return t==="Yo"?a.ordinalNumber(r,{unit:"year"}):Ye(r,t.length)},R:function(e,t){const a=xC(e);return Ye(a,t.length)},u:function(e,t){const a=e.getFullYear();return Ye(a,t.length)},Q:function(e,t,a){const o=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(o);case"QQ":return Ye(o,2);case"Qo":return a.ordinalNumber(o,{unit:"quarter"});case"QQQ":return a.quarter(o,{width:"abbreviated",context:"formatting"});case"QQQQQ":return a.quarter(o,{width:"narrow",context:"formatting"});case"QQQQ":default:return a.quarter(o,{width:"wide",context:"formatting"})}},q:function(e,t,a){const o=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(o);case"qq":return Ye(o,2);case"qo":return a.ordinalNumber(o,{unit:"quarter"});case"qqq":return a.quarter(o,{width:"abbreviated",context:"standalone"});case"qqqqq":return a.quarter(o,{width:"narrow",context:"standalone"});case"qqqq":default:return a.quarter(o,{width:"wide",context:"standalone"})}},M:function(e,t,a){const o=e.getMonth();switch(t){case"M":case"MM":return to.M(e,t);case"Mo":return a.ordinalNumber(o+1,{unit:"month"});case"MMM":return a.month(o,{width:"abbreviated",context:"formatting"});case"MMMMM":return a.month(o,{width:"narrow",context:"formatting"});case"MMMM":default:return a.month(o,{width:"wide",context:"formatting"})}},L:function(e,t,a){const o=e.getMonth();switch(t){case"L":return String(o+1);case"LL":return Ye(o+1,2);case"Lo":return a.ordinalNumber(o+1,{unit:"month"});case"LLL":return a.month(o,{width:"abbreviated",context:"standalone"});case"LLLLL":return a.month(o,{width:"narrow",context:"standalone"});case"LLLL":default:return a.month(o,{width:"wide",context:"standalone"})}},w:function(e,t,a,o){const n=h9(e,o);return t==="wo"?a.ordinalNumber(n,{unit:"week"}):Ye(n,t.length)},I:function(e,t,a){const o=m9(e);return t==="Io"?a.ordinalNumber(o,{unit:"week"}):Ye(o,t.length)},d:function(e,t,a){return t==="do"?a.ordinalNumber(e.getDate(),{unit:"date"}):to.d(e,t)},D:function(e,t,a){const o=u9(e);return t==="Do"?a.ordinalNumber(o,{unit:"dayOfYear"}):Ye(o,t.length)},E:function(e,t,a){const o=e.getDay();switch(t){case"E":case"EE":case"EEE":return a.day(o,{width:"abbreviated",context:"formatting"});case"EEEEE":return a.day(o,{width:"narrow",context:"formatting"});case"EEEEEE":return a.day(o,{width:"short",context:"formatting"});case"EEEE":default:return a.day(o,{width:"wide",context:"formatting"})}},e:function(e,t,a,o){const n=e.getDay(),r=(n-o.weekStartsOn+8)%7||7;switch(t){case"e":return String(r);case"ee":return Ye(r,2);case"eo":return a.ordinalNumber(r,{unit:"day"});case"eee":return a.day(n,{width:"abbreviated",context:"formatting"});case"eeeee":return a.day(n,{width:"narrow",context:"formatting"});case"eeeeee":return a.day(n,{width:"short",context:"formatting"});case"eeee":default:return a.day(n,{width:"wide",context:"formatting"})}},c:function(e,t,a,o){const n=e.getDay(),r=(n-o.weekStartsOn+8)%7||7;switch(t){case"c":return String(r);case"cc":return Ye(r,t.length);case"co":return a.ordinalNumber(r,{unit:"day"});case"ccc":return a.day(n,{width:"abbreviated",context:"standalone"});case"ccccc":return a.day(n,{width:"narrow",context:"standalone"});case"cccccc":return a.day(n,{width:"short",context:"standalone"});case"cccc":default:return a.day(n,{width:"wide",context:"standalone"})}},i:function(e,t,a){const o=e.getDay(),n=o===0?7:o;switch(t){case"i":return String(n);case"ii":return Ye(n,t.length);case"io":return a.ordinalNumber(n,{unit:"day"});case"iii":return a.day(o,{width:"abbreviated",context:"formatting"});case"iiiii":return a.day(o,{width:"narrow",context:"formatting"});case"iiiiii":return a.day(o,{width:"short",context:"formatting"});case"iiii":default:return a.day(o,{width:"wide",context:"formatting"})}},a:function(e,t,a){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return a.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return a.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return a.dayPeriod(n,{width:"narrow",context:"formatting"});case"aaaa":default:return a.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(e,t,a){const o=e.getHours();let n;switch(o===12?n=hn.noon:o===0?n=hn.midnight:n=o/12>=1?"pm":"am",t){case"b":case"bb":return a.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return a.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return a.dayPeriod(n,{width:"narrow",context:"formatting"});case"bbbb":default:return a.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(e,t,a){const o=e.getHours();let n;switch(o>=17?n=hn.evening:o>=12?n=hn.afternoon:o>=4?n=hn.morning:n=hn.night,t){case"B":case"BB":case"BBB":return a.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return a.dayPeriod(n,{width:"narrow",context:"formatting"});case"BBBB":default:return a.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(e,t,a){if(t==="ho"){let o=e.getHours()%12;return o===0&&(o=12),a.ordinalNumber(o,{unit:"hour"})}return to.h(e,t)},H:function(e,t,a){return t==="Ho"?a.ordinalNumber(e.getHours(),{unit:"hour"}):to.H(e,t)},K:function(e,t,a){const o=e.getHours()%12;return t==="Ko"?a.ordinalNumber(o,{unit:"hour"}):Ye(o,t.length)},k:function(e,t,a){let o=e.getHours();return o===0&&(o=24),t==="ko"?a.ordinalNumber(o,{unit:"hour"}):Ye(o,t.length)},m:function(e,t,a){return t==="mo"?a.ordinalNumber(e.getMinutes(),{unit:"minute"}):to.m(e,t)},s:function(e,t,a){return t==="so"?a.ordinalNumber(e.getSeconds(),{unit:"second"}):to.s(e,t)},S:function(e,t){return to.S(e,t)},X:function(e,t,a){const o=e.getTimezoneOffset();if(o===0)return"Z";switch(t){case"X":return Mf(o);case"XXXX":case"XX":return Mo(o);case"XXXXX":case"XXX":default:return Mo(o,":")}},x:function(e,t,a){const o=e.getTimezoneOffset();switch(t){case"x":return Mf(o);case"xxxx":case"xx":return Mo(o);case"xxxxx":case"xxx":default:return Mo(o,":")}},O:function(e,t,a){const o=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Df(o,":");case"OOOO":default:return"GMT"+Mo(o,":")}},z:function(e,t,a){const o=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Df(o,":");case"zzzz":default:return"GMT"+Mo(o,":")}},t:function(e,t,a){const o=Math.trunc(e.getTime()/1e3);return Ye(o,t.length)},T:function(e,t,a){const o=e.getTime();return Ye(o,t.length)}};function Df(e,t=""){const a=e>0?"-":"+",o=Math.abs(e),n=Math.trunc(o/60),r=o%60;return r===0?a+String(n):a+String(n)+t+Ye(r,2)}function Mf(e,t){return e%60===0?(e>0?"-":"+")+Ye(Math.abs(e)/60,2):Mo(e,t)}function Mo(e,t=""){const a=e>0?"-":"+",o=Math.abs(e),n=Ye(Math.trunc(o/60),2),r=Ye(o%60,2);return a+n+t+r}const Ff=(e,t)=>
545{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},AC=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},f9=(e,t)=>{const a=e.match(/(P+)(p+)?/)||[],o=a[1],n=a[2];if(!n)return Ff(e,t);let r;switch(o){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;case"PPPP":default:r=t.dateTime({width:"full"});break}return r.replace("{{date}}",Ff(o,t)).replace("{{time}}",AC(n,t))},g9={p:AC,P:f9},v9=/^D+$/,b9=/^Y+$/,y9=["D","DD","YY","YYYY"];function x9(e){return v9.test(e)}function w9(e){return b9.test(e)}function C9(e,t,a){const o=P9(e,t,a);if(console.warn(o),y9.includes(e))throw new RangeError(o)}function P9(e,t,a){const o=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${o} to the input \`${a}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const A9=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,E9=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,S9=/^'([^]*?)'?$/,N9
545=/''/g,k9=/[a-zA-Z]/;function T9(e,t,a){var u,m,h,p,v,f,b,y;const o=bi(),n=(a==null?void 0:a.locale)??o.locale??CC,r=(a==null?void 0:a.firstWeekContainsDate)??((m=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:m.firstWeekContainsDate)??o.firstWeekContainsDate??((p=(h=o.locale)==null?void 0:h.options)==null?void 0:p.firstWeekContainsDate)??1,s=(a==null?void 0:a.weekStartsOn)??((f=(v=a==null?void 0:a.locale)==null?void 0:v.options)==null?void 0:f.weekStartsOn)??o.weekStartsOn??((y=(b=o.locale)==null?void 0:b.options)==null?void 0:y.weekStartsOn)??0,l=et(e);if(!AK(l))throw new RangeError("Invalid time value");let c=t.match(E9).map(x=>{const w=x[0];if(w==="p"||w==="P"){const P=g9[w];return P(x,n.formatLong)}return x}).join("").match(A9).map(x=>{if(x==="''")return{isToken:!1,value:"'"};const w=x[0];if(w==="'")return{isToken:!1,value:I9(x)};if(Rf[w])return{isToken:!0,value:x};if(w.match(k9))throw new RangeError("Format string contains an unescaped latin alphabet character `"+w+"`");return{isToken:!1,value:x}});n.localize.preprocessor&&(c=n.localize.preprocessor(l,c));const d={firstWeekContainsDate:r,weekStartsOn:s,locale:n};return c.map(x=>{if(!x.isToken)return x.value;const w=x.value;(!(a!=null&&a.useAdditionalWeekYearTokens)&&w9(w)||!(a!=null&&a.useAdditionalDayOfYearTokens)&&x9(w))&&C9(w,t,String(e));const P=Rf[w[0]];return P(l,w,n.localize,d)}).join("")}function I9(e){const t=e.match(S9);return t?t[1].replace(N9,"'"):e}function R9(e,t,a){const o=bi(),n=(a==null?void 0:a.locale)??o.locale??CC,r=2520,s=is(e,t);if(isNaN(s))throw new RangeError("Invalid time value");const l=Object.assign({},a,{addSuffix:a==null?void 0:a.addSuffix,comparison:s});let c,d;s>0?(c=et(t),d=et(e)):(c=et(e),d=et(t));const u=DK(d,c),m=(_s(d)-_s(c))/1e3,h=Math.round((u-m)/60);let p;if(h<2)return a!=null&&a.includeSeconds?u<5?n.formatDistance("lessThanXSeconds",5,l):u<10?n.formatDistance("lessThanXSeconds",10,l):u<20?n.formatDistance("lessThanXSeconds",20,l):u<40?n.formatDistance("halfAMinute",0,l):u<60?n.formatDistance("lessThanXMinutes",1,l):n.formatDistance("xMinutes",1,l):h===0?n.formatDistance("lessThanXMinutes",1,l):n.formatDistance("xMinutes",h,l);if(h<45)return n.formatDistance("xMinutes",h,l);if(h<90)return n.formatDistance("aboutXHours",1,l);if(h<Tf){const v=Math.round(h/60);return n.formatDistance("aboutXHours",v,l)}else{if(h<r)return n.formatDistance("xDays",1,l);if(h<Wi){const v=Math.round(h/Tf);return n.formatDistance("xDays",v,l)}else if(h<Wi*2)return p=Math.round(h/Wi),n.formatDistance("aboutXMonths",p,l)}if(p=RK(d,c),p<12){const v=Math.round(h/Wi);return n.formatDistance("xMonths",v,l)}else{const v=p%12,f=Math.trunc(p/12);return v<3?n.formatDistance("aboutXYears",f,l):v<9?n.formatDistance("overXYears",f,l):n.formatDistance("almostXYears",f+1,l)}}function D9(e,t){return R9(e,CK(e),t)}const M9={lessThanXSeconds:{one:"menos de um segundo",other:"menos de {{count}} segundos"},xSeconds:{one:"1 segundo",other:"{{count}} segundos"},halfAMinute:"meio minuto",lessThanXMinutes:{one:"menos de um minuto",other:"menos de {{count}} minutos"},xMinutes:{one:"1 minuto",other:"{{count}} minutos"},aboutXHours:{one:"cerca de 1 hora",other:"cerca de {{count}} horas"},xHours:{one:"1 hora",other:"{{count}} horas"},xDays:{one:"1 dia",other:"{{count}} dias"},aboutXWeeks:{one:"cerca de 1 semana",other:"cerca de {{count}} semanas"},xWeeks:{one:"1 semana",other:"{{count}} semanas"},aboutXMonths:{one:"cerca de 1 mês",other:"cerca de {{count}} meses"},xMonths:{one:"1 mês",other:"{{count}} meses"},aboutXYears:{one:"cerca de 1 ano",other:"cerca de {{count}} anos"},xYears:{one:"1 ano",other:"{{count}} anos"},overXYears:{one:"mais de 1 ano",other:"mais de {{count}} anos"},almostXYears:{one:"quase 1 ano",other:"quase {{count}} anos"}},F9=(e,t,a)=>{let o;const n=M9[e];return typeof n=="string"?o=n:t===1?o=n.one:o=n.other.replace("{{count}}",String(t)),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"em "+o:"há "+o:o},L9={full:"EEEE, d 'de' MMMM 'de' y",long:"d 'de' MMMM 'de' y",medium:"d MMM y",short:"dd/MM/yyyy"},j9={full:"HH:mm:ss zzzz",long:"HH:mm:ss z",medium:"HH:mm:ss",short:"HH:mm"},_9={full:"{{date}} 'à s' {{time}}",long:"{{date}} 'à s' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},O9={date:Tn({formats:L9,defaultWidth:"full"}),time:Tn({formats:j9,defaultWidth:"full"}),dateTime:Tn({formats:_9,defaultWidth:"full"})},B9={lastWeek:e=>{const t=e.getDay();return"'"+(t===0||t===6?"último":"última")+"' eeee 'à s' p"},yesterday:"'ontem à s' p",today:"'hoje à s' p",tomorrow:"'amanhã à s' p",nextWeek:"eeee 'à s' p",other:"P"},z9=(e,t,a,o)=>{const n=B9[e];return typeof n=="function"?n(t):n},V9={narrow:["AC","DC"],abbreviated:["AC","DC"],wide:["antes de cristo","depois de cristo"]},q9={narrow:["1","2","3","4"],abbreviated:["T1","T2","T3","T4"],wide:["1º trimestre","2º trimestre","3º trimestre","4º trimestre"]},U9={narrow:["j","f","m","a","m","j","j","a","s","o","n","d"],abbreviated:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],wide:["janeiro","fevereiro","març
545o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"]},W9={narrow:["D","S","T","Q","Q","S","S"],short:["dom","seg","ter","qua","qui","sex","sab"],abbreviated:["domingo","segunda","terça","quarta","quinta","sexta","sábado"],wide:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},$9={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"manhã",afternoon:"tarde",evening:"tarde",night:"noite"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"tarde",night:"noite"},wide:{am:"a.m.",pm:"p.m.",midnight:"meia-noite",noon:"meio-dia",morning:"manhã",afternoon:"tarde",evening:"tarde",night:"noite"}},G9={narrow:{am:"a",pm:"p",midnight:"mn",noon:"md",morning:"da manhã",afternoon:"da tarde",evening:"da tarde",night:"da noite"},abbreviated:{am:"AM",pm:"PM",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da tarde",night:"da noite"},wide:{am:"a.m.",pm:"p.m.",midnight:"meia-noite",noon:"meio-dia",morning:"da manhã",afternoon:"da tarde",evening:"da tarde",night:"da noite"}},H9=(e,t)=>{const a=Number(e);return(t==null?void 0:t.unit)==="week"?a+"ª":a+"º"},K9={ordinalNumber:H9,era:Sa({values:V9,defaultWidth:"wide"}),quarter:Sa({values:q9,defaultWidth:"wide",argumentCallback:e=>e-1}),month:Sa({values:U9,defaultWidth:"wide"}),day:Sa({values:W9,defaultWidth:"wide"}),dayPeriod:Sa({values:$9,defaultWidth:"wide",formattingValues:G9,defaultFormattingWidth:"wide"})},X9=/^(\d+)[ºªo]?/i,Y9=/\d+/i,Q9={narrow:/^(ac|dc|a|d)/i,abbreviated:/^(a\.?\s?c\.?|d\.?\s?c\.?)/i,wide:/^(antes de cristo|depois de cristo)/i},Z9={any:[/^ac/i,/^dc/i],wide:[/^antes de cristo/i,/^depois de cristo/i]},J9={narrow:/^[1234]/i,abbreviated:/^T[1234]/i,wide:/^[1234](º)? trimestre/i},e7={any:[/1/i,/2/i,/3/i,/4/i]},t7={narrow:/^[jfmajsond]/i,abbreviated:/^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,wide:/^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i},a7={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^fev/i,/^mar/i,/^abr/i,/^mai/i,/^jun/i,/^jul/i,/^ago/i,/^set/i,/^out/i,/^nov/i,/^dez/i]},o7={narrow:/^(dom|[23456]ª?|s[aá]b)/i,short:/^(dom|[23456]ª?|s[aá]b)/i,abbreviated:/^(dom|seg|ter|qua|qui|sex|s[aá]b)/i,wide:/^(domingo|(segunda|ter[cç]a|quarta|quinta|sexta)([- ]feira)?|s[aá]bado)/i},n7={short:[/^d/i,/^2/i,/^3/i,/^4/i,/^5/i,/^6/i,/^s[aá]/i],narrow:[/^d/i,/^2/i,/^3/i,/^4/i,/^5/i,/^6/i,/^s[aá]/i],any:[/^d/i,/^seg/i,/^t/i,/^qua/i,/^qui/i,/^sex/i,/^s[aá]b/i]},r7={narrow:/^(a|p|mn|md|(da) (manhã|tarde|noite))/i,any:/^([ap]\.?\s?m\.?|meia[-\s]noite|meio[-\s]dia|(d
545a) (manhã|tarde|noite))/i},i7={any:{am:/^a/i,pm:/^p/i,midnight:/^mn|^meia[-\s]noite/i,noon:/^md|^meio[-\s]dia/i,morning:/manhã/i,afternoon:/tarde/i,evening:/tarde/i,night:/noite/i}},s7={ordinalNumber:wC({matchPattern:X9,parsePattern:Y9,valueCallback:e=>parseInt(e,10)}),era:Na({matchPatterns:Q9,defaultMatchWidth:"wide",parsePatterns:Z9,defaultParseWidth:"any"}),quarter:Na({matchPatterns:J9,defaultMatchWidth:"wide",parsePatterns:e7,defaultParseWidth:"any",valueCallback:e=>e+1}),month:Na({matchPatterns:t7,defaultMatchWidth:"wide",parsePatterns:a7,defaultParseWidth:"any"}),day:Na({matchPatterns:o7,defaultMatchWidth:"wide",parsePatterns:n7,defaultParseWidth:"any"}),dayPeriod:Na({matchPatterns:r7,defaultMatchWidth:"any",parsePatterns:i7,defaultParseWidth:"any"})},Lf={code:"pt-BR",formatDistance:F9,formatLong:O9,formatRelative:z9,localize:K9,match:s7,options:{weekStartsOn:0,firstWeekContainsDate:1}},Id="notif_icon_",l7=7*24*60*60*1e3;function EC(e){try{const t=localStorage.getItem(Id+e);if(!t)return null;const a=JSON.parse(t);return Date.now()-a.ts>l7?(localStorage.removeItem(Id+e),null):a.dataUrl}catch{return null}}function c7(e){if(!e||EC(e))return;const t=new Image;t.crossOrigin="anonymous",t.onload=()=>{try{const a=document.createElement("canvas");a.width=t.naturalWidth,a.height=t.naturalHeight;const o=a.getContext("2d");if(!o)return;o.drawImage(t,0,0);const n=a.toDataURL("image/webp",.8);localStorage.setItem(Id+e,JSON.stringify({dataUrl:n,ts:Date.now()}))}catch{}},t.src=e}function SC(e,t){return e?EC(e)||e:t}const jf={operational:{label:"Operacional",text:"text-emerald-400",dot:"bg-emerald-500",bar:"bg-emerald-500/15 border-emerald-500/30",severity:0},maintenance:{label:"Em manutenção",text:"text-sky-400",dot:"bg-sky-500",bar:"bg-sky-500/15 border-sky-500/30",severity:1},degraded:{label:"Instável",text:"text-amber-400",dot:"bg-amber-500",bar:"bg-amber-500/15 border-amber-500/30",severity:2},partial_outage:{label:"Instabilidade parcial",text:"text-orange-400",dot:"bg-orange-500",bar:"bg-orange-500/15 border-orange-500/30",severity:3},major_outage:{label:"Fora do ar",text:"text-red-400",dot:"bg-red-500",bar:"bg-red-500/15 border-red-500/30",severity:4}},fJ=["operational","maintenance","degraded","partial_outage","major_outage"];function gJ(e){if(e.length===0)return{status:"operational",title:"Todos os sistemas operacionais",allOk:!0};const t=e.reduce((o,n)=>jf[n].severity>jf[o].severity?n:o,"operational");return t==="operational"?{status:"operational",title:"Todos os sistemas operacionais",allOk:!0}:{status:t,title:{operational:"Todos os sistemas operacionais",maintenance:"Manutenção em andamento",degraded:"Alguns serviços instáveis",partial_outage:"Instabilidade em alguns serviços",major_outage:"Estamos com uma interrupção"}[t],allOk:!1}}const _f={novidade:{label:"Novidade",className:"bg-emerald-500/15 text-emerald-400 border-emerald-500/30"},melhoria:{label:"Melhoria",className:"bg-sky-500/15 text-sky-400 border-sky-500/30"},correcao:{label:"Correção",className:"bg-amber-500/15 text-amber-400 border-amber-500/30"},manutencao:{label:"Manutenção",className:"bg-orange-500/15 text-orange-400 border-orange-500/30"},aviso:{label:"Aviso",className:"bg-red-500/15 text-red-400 border-red-500/30"}},vJ=["novidade","melhoria","correcao","manutencao","aviso"],d7=45e3;function u7(){const{t:e}=tt(["notifications","common"]),{user:t}=ut(),a=bC(),o=Rt(),[n,r]=g.useState([]),[s,l]=g.useState(0),[c,d]=g.useState(!1),[u,m]=g.useState(!1),[h,p]=g.useState("notifications"),[v,f]=g.useState([]),[b,y]=g.useState(null),x=g.useRef(null),w=g.useCallback(async()=>{if(!(t!=null&&t.id))return;const{data:M}=await ne.from("desktop_notifications").select("*").eq("user_id",t.id).order("created_at",{ascending:!1}).limit(50);if(M){const q=M;r(q),l(q.filter(N=>!N.is_read).length),q.forEach(N=>{N.icon_url&&c7(N.icon_url)})}m(!0)},[t==null?void 0:t.id]),P=g.useCallback(async()=>{const M=ne,{data:q}=await M.from("blog_posts").select("id,title,category,excerpt,published_at,created_at").eq("is_published",!0).order("published_at",{ascending:!1}).limit(20);q&&f(q)},[]),E=g.useCallback(async()=>
545{if(!(t!=null&&t.id))return;const M=ne,{data:q}=await M.from("notification_read_cursors").select("blog_last_seen_at").eq("user_id",t.id).maybeSingle();y((q==null?void 0:q.blog_last_seen_at)??null)},[t==null?void 0:t.id]);g.useEffect(()=>{w(),P(),E()},[w,P,E]),g.useEffect(()=>{if(!c||!(t!=null&&t.id))return;w();const M=setInterval(w,d7);return()=>clearInterval(M)},[c,t==null?void 0:t.id,w]),g.useEffect(()=>{c&&s>0&&(t!=null&&t.id)&&ne.from("desktop_notifications").update({is_read:!0}).eq("user_id",t.id).eq("is_read",!1).then(()=>{l(0),r(M=>M.map(q=>({...q,is_read:!0})))})},[c,s,t==null?void 0:t.id]),g.useEffect(()=>{if(!c||h!=="blog"||!(t!=null&&t.id))return;const M=new Date().toISOString();ne.from("notification_read_cursors").upsert({user_id:t.id,blog_last_seen_at:M},{onConflict:"user_id"}).then(()=>y(M))},[c,h,t==null?void 0:t.id]),g.useEffect(()=>{if(!c)return;const M=q=>{x.current&&!x.current.contains(q.target)&&d(!1)};return document.addEventListener("mousedown",M),()=>document.removeEventListener("mousedown",M)},[c]);const k=async M=>{await ne.from("desktop_notifications").delete().eq("id",M),r(q=>q.filter(N=>N.id!==M))},S=async()=>{t!=null&&t.id&&(await ne.from("desktop_notifications").delete().eq("user_id",t.id),r([]),l(0))},R=M=>{M.click_url&&(d(!1),o(M.click_url))},I=v.filter(M=>{const q=M.published_at||M.created_at;return!b||new Date(q)>new Date(b)}).length;return a?null:i.jsxs("div",{className:"relative",ref:x,children:[i.jsxs(we,{variant:"ghost",size:"icon",className:"h-9 w-9 text-muted-foreground hover:text-foreground relative",onClick:()=>d(M=>!M),children:[i.jsx(h0,{className:"h-4 w-4"}),(s>0||I>0)&&i.jsx("span",{className:"absolute -top-0.5 -right-0.5 bg-destructive text-destructive-foreground text-[10px] font-bold rounded-full min-w-[18px] h-[18px] flex items-center justify-center px-1",children:s+I>99?"99+":s+I})]}),i.jsx(sl,{children:c&&i.jsxs(Ze.div,{initial:{opacity:0,y:-8},animate:{opacity:1,y:0},exit:{opacity:0,y:-8},transition:{duration:.2,ease:"easeOut"},className:"fixed top-14 right-4 z-[9998] max-w-sm w-full",onWheel:M=>M.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-1 mb-2 gap-2",children:[i.jsxs("div",{className:"flex items-center gap-1 bg-white/[0.04] rounded-lg p-0.5",children:[i.jsxs("button",{onClick:()=>p("notifications"),className:ve("text-xs font-medium px-2.5 py-1 rounded-md transition-colors relative",h==="notifications"?"bg-[#1a1a1e] text-foreground":"text-muted-foreground hover:text-foreground"),children:[e("center.tabs.notifications"),s>0&&i.jsx("span",{className:"ml-1.5 inline-flex items-center justify-center min-w-[16px] h-4 px-1 rounded-full bg-destructive text-destructive-foreground text-[9px] font-bold",children:s})]}),i.jsxs("button",{onClick:()=>p("blog"),className:ve("text-xs font-medium px-2.5 py-1 rounded-md transition-colors flex items-center gap-1",h==="blog"?"bg-[#1a1a1e] text-foreground":"text-muted-foreground hover:text-foreground"),children:[i.jsx(Em,{className:"w-3 h-3"}),e("center.tabs.news"),I>0&&i.jsx("span",{className:"ml-0.5 inline-flex items-center justify-center min-w-[16px] h-4 px-1 rounded-full bg-destructive text-destructive-foreground text-[9px] font-bold",children:I})]})]}),h==="notifications"&&n.length>0&&i.jsxs(we,{variant:"ghost",size:"sm",onClick:S,className:"h-7 text-xs text-muted-foreground hover:text-destructive flex-shrink-0",children:[i.jsx(fc,{className:"w-3 h-3 mr-1"}),e("common:actions.clear")]})]}),i.jsx("div",{className:"max-h-[calc(100vh-120px)] overflow-y-auto pr-1 scrollbar-none",style:{overscrollBehavior:"contain"},children:h==="notifications"?u&&n.length===0?i.jsxs("div",{className:"rounded-2xl bg-[#1a1a1e] border border-white/[0.04] p-6 flex flex-col items-center gap-3 text-center",children:[i.jsx("div",{className:"w-12 h-12 rounded-full bg-white/[0.06] flex items-center justify-center",children:i.jsx(p0,{className:"w-6 h-6 text-muted-foreground"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm font-semibold text-foreground",children:e("center.empty.title")}),i.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e("center.empty.description")})]}),i.jsx(we,{size:"sm",variant:"secondary",className:"mt-1 text-xs",onClick:()=>{d(!1),o("/settings")},children:e("center.empty.enableButton")})]}):i.jsx("div",{className:"flex flex-col gap-2",children:n.map((M,q)=>i.jsx(Ze.div,{initial:{opacity:0,x:60,scale:.97}
545,animate:{opacity:1,x:0,scale:1},transition:{duration:.25,delay:q*.02,ease:"easeOut"},className:"group relative",children:i.jsxs("div",{className:ve("rounded-2xl bg-[#1a1a1e] border border-white/[0.04] p-3 flex items-start gap-3",M.click_url&&"cursor-pointer hover:border-white/[0.1]"),onClick:()=>R(M),children:[i.jsx("img",{src:SC(M.icon_url,Ls),alt:e("iconAlt"),className:"w-10 h-10 rounded-xl object-cover flex-shrink-0",onError:N=>{N.target.src=Ls}}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("p",{className:"text-sm font-semibold text-foreground truncate",children:M.title}),(M.occurrence_count??1)>1&&i.jsxs("span",{className:"flex-shrink-0 text-[9px] font-bold px-1.5 py-0.5 rounded-full bg-amber-500/15 text-amber-400 border border-amber-500/30",children:["Ã",M.occurrence_count]})]}),i.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2 mt-0.5",children:M.message}),i.jsx("p",{className:"text-[10px] text-muted-foreground/50 mt-1",children:D9(new Date(M.created_at),{addSuffix:!0,locale:Lf})})]}),i.jsx("button",{onClick:N=>{N.stopPropagation(),k(M.id)},className:"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-destructive flex-shrink-0 mt-1",children:i.jsx(fc,{className:"w-3.5 h-3.5"})})]})},M.id))}):v.length===0?i.jsxs("div",{className:"rounded-2xl bg-[#1a1a1e] border border-white/[0.04] p-6 flex flex-col items-center gap-3 text-center",children:[i.jsx("div",{className:"w-12 h-12 rounded-full bg-white/[0.06] flex items-center justify-center",children:i.jsx(Em,{className:"w-6 h-6 text-muted-foreground"})}),i.jsx("p",{className:"text-sm font-semibold text-foreground",children:e("center.blogEmpty")})]}):i.jsx("div",{className:"flex flex-col gap-2",children:v.map((M,q)=>{const N=_f[M.category]??_f.novidade,F=M.published_at||M.created_at;return i.jsxs(Ze.div,{initial:{opacity:0,x:60,scale:.97},animate:{opacity:1,x:0,scale:1},transition:{duration:.25,delay:q*.02,ease:"easeOut"},className:"rounded-2xl bg-[#1a1a1e] border border-white/[0.04] p-3 cursor-pointer hover:border-white/[0.1]",onClick:()=>{d(!1),o("/status")},children:[i.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[i.jsx("span",{className:`text-[9px] px-1.5 py-0.5 rounded-full border font-medium ${N.className}`,children:N.label}),i.jsx("span",{className:"text-[10px] text-muted-foreground/50",children:T9(new Date(F),"d 'de' MMM",{locale:Lf})})]}),i.jsx("p",{className:"text-sm font-semibold text-foreground truncate",children:M.title}),M.excerpt&&i.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2 mt-0.5",children:M.excerpt})]},M.id)})})})]})})]})}function m7(){return Yb.useSyncExternalStore(p7,()=>!0,()=>!1)}function p7(){return()=>{}}var cm="Avatar",[h7,bJ]=La(cm),[f7,NC]=h7(cm),kC=g.forwardRef((e,t)=>{const{__scopeAvatar:a,...o}=e,[n,r]=g.useState("idle");return i.jsx(f7,{scope:a,imageLoadingStatus:n,onImageLoadingStatusChange:r,children:i.jsx(_e.span,{...o,ref:t})})});kC.displayName=cm;var TC="AvatarImage",IC=g.forwardRef((e,t)=>{const{__scopeAvatar:a,src:o,onLoadingStatusChange:n=()=>{},...r}=e,s=NC(TC,a),l=g7(o,r),c=bo(d=>{n(d),s.onImageLoadingStatusChange(d)});return Pt(()=>{l!=="idle"&&c(l)},[l,c]),l==="loaded"?i.jsx(_e.img,{...r,ref:t,src:o}):null});IC.displayName=TC;var RC="AvatarFallback",DC=g.forwardRef((e,t)=>{const{__scopeAvatar:a,delayMs:o,...n}=e,r=NC(RC,a),[s,l]=g.useState(o===void 0);return g.useEffect(()=>{if(o!==void 0){const c=window.setTimeout(()=>l(!0),o);return()=>window.clearTimeout(c)}},[o]),s&&r.imageLoadingStatus!=="loaded"?i.jsx(_e.span,{...n,ref:t}):null});DC.displayName=RC;function Of(e,t){return e?t?(e.src!==t&&(e.src=t),e.complete&&e.naturalWidth>0?"loaded":"loading"):"error":"idle"}function g7(e,{referrerPolicy:t,crossOrigin:a}){const o=m7(),n=g.useRef(null),r=o?(n.current||(n.current=new window.Image),n.current):null,[s,l]=g.useState(()=>Of(r,e));return Pt(()=>{l(Of(r,e))},[r,e]),Pt(()=>{const c=m=>()=>{l(m)};if(!r)return;const d=c("loaded"),u=c("error");return r.addEventListener("load",d),r.addEventListener("error",u),t&&(r.referrerPolicy=t),typeof a=="str
545ing"&&(r.crossOrigin=a),()=>{r.removeEventListener("load",d),r.removeEventListener("error",u)}},[r,a,t]),s}var MC=kC,FC=IC,LC=DC;const jC=g.forwardRef(({className:e,...t},a)=>i.jsx(MC,{ref:a,className:ve("relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",e),...t}));jC.displayName=MC.displayName;const _C=g.forwardRef(({className:e,...t},a)=>i.jsx(FC,{ref:a,className:ve("aspect-square h-full w-full",e),...t}));_C.displayName=FC.displayName;const OC=g.forwardRef(({className:e,...t},a)=>i.jsx(LC,{ref:a,className:ve("flex h-full w-full items-center justify-center rounded-full bg-muted",e),...t}));OC.displayName=LC.displayName;const v7=()=>Gk(),b7=6.5,y7=e=>{const t=g.useCallback(o=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(o*b7),[]),a=g.useCallback(async()=>{},[]);return{balance:0,loading:!1,transactions:[],creditsToReais:t,refresh:a,loadTransactions:a}},BC=()=>kk(),cn=g.forwardRef(({className:e,...t},a)=>i.jsx("div",{ref:a,className:ve("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));cn.displayName="Card";const zC=g.forwardRef(({className:e,...t},a)=>i.jsx("div",{ref:a,className:ve("flex flex-col space-y-1.5 p-6",e),...t}));zC.displayName="CardHeader";const VC=g.forwardRef(({className:e,...t},a)=>i.jsx("h3",{ref:a,className:ve("text-2xl font-semibold leading-none tracking-tight",e),...t}));VC.displayName="CardTitle";const qC=g.forwardRef(({className:e,...t},a)=>i.jsx("p",{ref:a,className:ve("text-sm text-muted-foreground",e),...t}));qC.displayName="CardDescription";const ei=g.forwardRef(({className:e,...t},a)=>i.jsx("div",{ref:a,className:ve("p-6 pt-0",e),...t}));ei.displayName="CardContent";const x7=g.forwardRef(({className:e,...t},a)=>i.jsx("div",{ref:a,className:ve("flex items-center p-6 pt-0",e),...t}));x7.displayName="CardFooter";function w7(){const{t:e}=tt("billing"),{user:t}=ut(),[a,o]=g.useState(!1),[n,r]=g.useState(!0),[s,l]=g.useState(!0);return g.useEffect(()=>{if(!t)return;(async()=>{var d;try{const{data:u}=await ne.functions.invoke("manage-payment-methods",{body:{action:"list"}}),m=((d=u==null?void 0:u.methods)==null?void 0:d.length)>0;o(m);const{data:h}=await ne.from("profiles").select("auto_renewal_enabled").eq("id",t.id).single();r((h==null?void 0:h.auto_renewal_enabled)!==!1)}catch(u){console.error("Error checking auto-renewal status:",u)}finally{l(!1)}})()},[t]),s||!a||!n?null:i.jsxs("div",{className:"mt-3 p-3 rounded-lg border border-zinc-700 bg-zinc-800/50",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(ii,{className:"h-4 w-4 text-zinc-300"}),i.jsx("span",{className:"text-sm text-white",children:e("autoRenewal.active")})]}),i.jsx("p",{className:"text-xs text-zinc-400 mt-1",children:e("autoRenewal.description")})]})}const C7=({open:e,onOpenChange:t,onViewPlans:a})=>{const{t:o}=tt("billing"),{plans:n}=ar(),s=n.filter(l=>l.id!=="free"&&l.id!=="enterprise"&&l.price_brl>0).sort((l,c)=>l.price_brl-c.price_brl)[0];return i.jsx(ya,{open:e,onOpenChange:t,children:i.jsxs(sa,{className:"sm:max-w-md",children:[i.jsxs(xa,{children:[i.jsxs(wa,{className:"flex items-center gap-2 text-lg",children:[i.jsx(Un,{className:"h-5 w-5 text-yellow-500"}),o("planUpsellModal.title")]}),i.jsx(wo,{children:o("planUpsellModal.description")})]}),s&&i.jsx("div",{className:"py-2",children:i.jsxs("div",{className:"relative p-4 rounded-lg border-2 border-primary bg-primary/5 space-y-2",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(us,{className:"h-4 w-4 text-primary"}),i.jsx("span",{className:"font-medium text-sm",children:o("planUpsellModal.planLabel",{planName:s.name})})]}),i.jsxs("span",{className:"text-lg font-bold text-primary",children:["R$ ",s.price_brl.toFixed(2).replace(".",","),i.jsx("span",{className:"text-xs font-normal text-muted-foreground",children:o("planUpsellModal.perMonth")})]})]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:[o("planUpsellModal.instancesIncluded",{count:s.max_instances}),s.monthly_credits>0&&` ⢠${o("planUpsellModal.aiCredits",{count:s.monthly_credits})}`]})]})}),i.jsx("div",{className:"flex flex-col gap-2 pt-2",children:i.jsxs(we,{onClick:a,className:"w-full gap-2",children:[i.jsx(us,{className:"h-4 w-4"}),o("planUpsellModal.viewPlans"),i.jsx(Or,{className:"h-4 w-4"})]})})]})})},P7=({compact:e=!1,showTransactions:t=!1,userId:a})=>{const{t:o}=tt("billing"),n=v7(),r=y7(),s=a?r:n,{balance:l,loading:c,transactions:d,creditsToReais:u}=s,m=s.loadTransactions,{isActive:h}=BC(),{hasActivePlan:p,isFreePlan:v,needsPlanSelection:f}=ar(),b=Rt(),[y,x]=g.useState(!1),[w,P]=g.useState(!1);if(g.useEffect(()=>{t&&m&&m()},[t,m]),!h)return null;if(c)return i.jsx(cn,{className:"border-accent/20",children:i.jsx(ei,{className:"p-4",children:i.jsx(Ro,{className:"h-16 w-full"})})});const E=()=>{!p&&(v||f)?x(!0):(localStorage.setItem("homeMode","marketplace"),b("/marketplace?tab=creditos"))};return e?i.jsxs(Ze.div,{initial:{opacity:0,scale:.95}
545,animate:{opacity:1,scale:1},className:"flex items-center gap-2 px-3 py-1.5 rounded-full bg-accent/10 border border-accent/20",children:[i.jsx(Nm,{className:"h-4 w-4 text-accent"}),i.jsx("span",{className:"text-sm font-semibold text-accent",children:l.toFixed(2)}),i.jsx("span",{className:"text-xs text-muted-foreground",children:o("shared.credits")})]}):i.jsxs(i.Fragment,{children:[i.jsx(Ze.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},children:i.jsx(cn,{className:"border-accent/20 bg-gradient-to-br from-accent/5 to-accent/10",children:i.jsxs(ei,{className:"p-4",children:[i.jsx("div",{className:"flex items-center justify-between mb-3",children:i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"p-2 rounded-lg bg-accent/20",children:i.jsx(Nm,{className:"h-5 w-5 text-accent"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-xs text-muted-foreground",children:o("creditWallet.yourWallet")}),i.jsxs("p",{className:"text-2xl font-bold",children:[l.toFixed(2)," ",i.jsx("span",{className:"text-sm font-normal text-muted-foreground",children:o("shared.credits")})]})]})]})}),i.jsxs(we,{onClick:E,className:"w-full bg-accent hover:bg-accent/90",size:"sm",children:[o("creditWallet.recharge"),i.jsx(Or,{className:"h-4 w-4 ml-2"})]}),i.jsx(w7,{}),t&&d.length>0&&i.jsxs("div",{className:"mt-4 pt-4 border-t border-border",children:[i.jsx("p",{className:"text-xs text-muted-foreground mb-2",children:o("creditWallet.recentTransactions")}),i.jsx("div",{className:"space-y-2 max-h-32 overflow-y-auto",children:d.slice(0,5).map(k=>i.jsxs("div",{className:"flex items-center justify-between text-sm",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[k.amount>0?i.jsx(Z0,{className:"h-3 w-3 text-green-500"}):i.jsx(Q0,{className:"h-3 w-3 text-red-500"}),i.jsx("span",{className:"text-xs truncate max-w-[150px]",children:k.description})]}),i.jsxs("span",{className:`font-medium ${k.amount>0?"text-green-500":"text-red-500"}`,children:[k.amount>0?"+":"",k.amount.toFixed(2)]})]},k.id))})]})]})})}),i.jsx(C7,{open:y,onOpenChange:x,instanceCost:10,onContinueAvulsa:()=>{x(!1),localStorage.setItem("homeMode","marketplace"),b("/marketplace?tab=creditos")},onViewPlans:()=>{x(!1),P(!0)}}),i.jsx(go,{open:w,onOpenChange:P,hideFreePlan:!0})]})},A7=({open:e,onOpenChange:t})=>{const{t:a}=tt(["profile","common"]),{user:o}=ut(),{isImpersonating:n,impersonatedUserId:r,impersonatedEmail:s}=di(),l=n&&r?r:o==null?void 0:o.id,c=n&&s?s:o==null?void 0:o.email,{toast:d}=Hk(),{theme:u,setTheme:m}=Ld(),h=Rt(),[p,v]=g.useState(""),[f,b]=g.useState(""),[y,x]=g.useState(""),[w,P]=g.useState(!1),[E,k]=g.useState(null),[S,R]=g.useState(!1),I=g.useRef(null),[M,q]=g.useState(""),[N,F]=g.useState(""),[A,_]=g.useState(!1);g.useEffect(()=>{e&&l&&(async()=>{if(!l)return;const{data:L}=await ne.from("profiles").select("avatar_url, username").eq("id",l).single();L!=null&&L.avatar_url&&k(L.avatar_url),L!=null&&L.username&&(q(L.username),F(L.username))})()},[e,l]);const K=async j=>{var Q;const L=(Q=j.target.files)==null?void 0:Q[0];if(!(!L||!l)){if(!L.type.startsWith("image/")){d({variant:"destructive",title:a("avatar.invalidFile.title"),description:a("avatar.invalidFile.description")});return}if(L.size>2*1024*1024){d({variant:"destructive",title:a("avatar.tooLarge.title"),description:a("avatar.tooLarge.description")});return}R(!0);try{const $=L.name.split(".").pop(),X=`${l}/avatar.${$}`,{error:fe}=await ne.storage.from("avatars").upload(X,L,{upsert:!0});if(fe)throw fe;const{data:{publicUrl:J}}=ne.storage.from("avatars").getPublicUrl(X),ie=`${J}?t=${Date.now()}`,{error:le}=await ne.from("profiles").update({avatar_url:ie}).eq("id",l);if(le)throw le;k(ie),d({title:a("avatar.updateSuccess.title"),description:a("avatar.updateSuccess.description")})}catch($){console.error("Error uploading avatar:",$),d({variant:"destructive",title:a("avatar.uploadError.title"),description:$.message})}finally{R(!1)}}},V=async()=>{if(!l||!M.trim()){d({variant:"destructive",title:a("username.invalid.title"),description:a("username.invalid.description")});return}const j=M.trim();if(j!==N){_(!0);try{const{data:L}=await ne.from("profiles").select("id").ilike("username",j).neq("id",l).maybeSingle();if(L){d({variant:"destructive",title:a("username.alreadyExists.title"),description:a("username.alreadyExists.description")}),_(!1);return}const{error:Q}=await ne.from("profiles").update({username:j}).eq("id",l);if(Q)throw Q;F(j),d({title:a("username.updateSuccess.title"),description:a("username.updateSuccess.description")})}catch(L){console.error("Error updating username:",L),d({variant:"destructive",title:a("username.updateError.title"),description:L.message||a("username.updateError.description")})}finally{_(!1)}}},H=async j=>{if(j.preventDefault(),!f||!y){d({variant:"destructive",title:a("password.requiredFields.title"),description:a("password.requiredFields.description")});return}if(f!==y){d({variant:"destructive",title:a("password.mismatch.title"),description:a("password.mismatch.description")});return}if(f.length<6){d({variant:"destructive",title:a("password.tooShort.title"),description:a("password.tooShort.description")});return}P(!0);const{error:L}=await ne.auth.updateUser({password:f});P(!1),L?d({variant:"destructive",title:a("password.changeError.title"),description:L.message}):(d({title:a("password.changeSuccess.title"),description:a("password.changeSuccess.description")}),v(""),b(""),x(""),t(!1))},B=M||(c==null?void 0:c.split("@")[0])||a("defaultDisplayName"),te=B.slice(0,2).toUpperCase();return i.jsx(ya,{open:e,onOpenChange:t,children:i.jsxs(sa,{className:"sm:max-w-md border-accent/50",children:[i.jsxs(xa,{children:[i.jsx(wa,{children:a("title")}),i.jsx(wo,{children:a("description")})]}),i.jsxs("div",{className:"space-y-6 max-h-[70vh] overflow-y-auto pr-2",children:[i.jsxs("div",{className:"flex flex-col items-center gap-3",children:[i.jsxs("div",{className:"relative",children:[i.jsxs(jC,{className:"w-24 h-24 border-2 border-accent/30",children:[i.jsx(_C,{src:E||void 0,alt:B}),i.jsx(OC,{className:"text-2xl bg-accent/20 text-accent",children:te})]}),i.jsx("button",{onClick:()=>{var j;return(j=I.current)==null?void 0:j.click()},disabled:S,className:"absolute bottom-0 right-0 p-2 bg-accent text-accent-foreground rounded-full hover:bg-accent/90 transition-colors disabled:opacity-50",children:S?i.jsx(xt,{className:"w-4 h-4 animate-spin"}):i.jsx(v0,{className:"w-4 h-4"})}),i.jsx("input",{ref:I,type:"file",accept:"image/*",onChange:K,className:"hidden"})]}),i.jsx("p",{className:"text-sm text-muted-foreground",children:a("avatar.changeHint")})]}),i.jsxs("div",{className:"space-y-4 p-4 rounded-lg bg-secondary/30 border border-border",children:[i.jsxs("div",{children:[i.jsx(Be,{className:"text-muted-foreground text-sm",children:a("common:fields.email")}),i.jsx("p",{className:"font-medium",children:c})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"username",className:"text-muted-foreground text-sm",children:a("username.label")}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx(it,{id:"username",type:"text",placeholder:a("username.placeholder"),value:M,onChange:j=>q(j.target.value),disabled:A,className:"flex-1 focus-visible:ring-accent focus-visible:border-accent"}),i.jsx(we,{onClick:V,disabled:A||M.trim()===N,size:"sm",className:"bg-accent hover:bg-accent/90 text-accent-foreground",children:A?i.jsx(xt,{className:"w-4 h-4 animate-spin"}):a("common:actions.save")})]})]})]}),i.jsxs(we,{variant:"outline",className:"w-full border-accent/50 hover:bg-accent/10",onClick:()=>{t(!1),h("/affiliate")},children:[i.jsx(qg,{className:"h-4 w-4 mr-2 text-accent"}),a("affiliateArea")]}),i.jsx(P7,{userId:l||void 0}),i.jsxs("div",{className:"space-y-3",children:[i.jsx("h3",{className:"font-semibold text-sm",children:a("theme.title")}),i.jsxs("div",{className:"flex gap-2",children:[i.jsxs("button",{onClick:()=>m("dark"),className:ve("flex-1 flex items-center justify-center gap-2 p-3 rounded-lg border-2 transition-all",u==="dark"?"border-accent bg-accent/10 text-accent":"border-border bg-secondary/30 text-muted-foreground hover:border-accent/50"),children:[i.jsx(_d,{className:"h-5 w-5"}),i.jsx("span",{className:"text-sm font-medium",children:a("theme.dark")})]}),i.jsxs("button",{onClick:()=>m("light"),className:ve("flex-1 flex items-center justify-center gap-2 p-3 rounded-lg border-2 transition-all",u==="light"?"border-accent bg-accent/10 text-accent":"border-border bg-secondary/30 text-muted-foreground hover:border-accent/50"),children:[i.jsx(Vg,{className:"h-5 w-5"}),i.jsx("span",{className:"text-sm font-medium",children:a("theme.light")})]})]})]}),i.jsxs("form",{id:"password-section",onSubmit:H,className:"space-y-4",children:[i.jsx("h3",{className:"font-semibold text-sm",children:a("password.title")}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"new-password",children:a("password.newPassword")}),i.jsx(it,{id:"new-password",type:"password",placeholder:a("password.newPasswordPlaceholder"),value:f,onChange:j=>b(j.target.value),disabled:w,className:"focus-visible:ring-accent focus-visible:border-accent"})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"confirm-password",children:a("password.confirmNewPassword")}),i.jsx(it,{id:"confirm-password",type:"password",placeholder:a("password.confirmNewPasswordPlaceholder"),value:y,onChange:j=>x(j.target.value),disabled:w,className:"focus-visible:ring-accent focus-visible:border-accent"})]}),i.jsx(we,{type:"submit",className:"w-full bg-accent hover:bg-accent/90 text-accent-foreground",disabled:w,children:a(w?"password.changing":"password.title")})]})]})]})})},UC=()=>{const{i18n:e}=tt(),t=Qb(e.language)?e.language:Ps,a=g.useCallback(n=>{e.changeLanguage(n),window.localStorage.setItem(Zb,n)},[e]),o=Zi.find(n=>n.code===t)??Zi[0];return{language:t,setLanguage:a,intlLocale:o.intlLocale,languages:Zi}},E7={BR:i.jsxs("svg",{viewBox:"0 0 3 2",preserveAspectRatio:"xMidYMid slice",className:"h-full w-full",children:[i.jsx("rect",{width:"3",height:"2",fill:"#009c3b"}),i.jsx("polygon",{points:"1.5,0.25 2.75,1 1.5,1.75 0.25,1",fill:"#ffdf00"}),i.jsx("circle",{cx:"1.5",cy:"1",r:"0.42",fill:"#002776"})]}),ES:i.jsxs("svg",{viewBox:"0 0 3 2",preserveAspectRatio:"xMidYMid slice",className:"h-full w-full",children:[i.jsx("rect",{width:"3",height:"2",fill:"#aa151b"}),i.jsx("rect",{y:"0.5",width:"3",height:"1",fill:"#f1bf00"})]}),US:i.jsxs("svg",{viewBox:"0 0 3 2",preserveAspectRatio:"xMidYMid slice",className:"h-full w-full",children:[i.jsx("rect",{width:"3",height:"2",fill:"#fff"}),[0,2,4,6,8,10,12].map(e=>i.jsx("rect",{y:e*2/13,width:"3",height:2/13,fill:"#b22234"},e)),i.jsx("rect",{width:"1.5",height:2*7/13,fill:"#3c3b6e"})]})},S7=({code:e,className:t})=>i.jsx("span",{"aria-hidden":"true",className:`relative inline-flex shrink-0 overflow-hidden rounded-full ring-1 ring-black/10 ${t||"h-4 w-4"}`,children:E7[e]}),N7={pt:"BR",es:"ES",en:"US"},k7=()=>{const{theme:e,toggleTheme:t}=Ld(),{language:a,setLanguage:o,languages:n}=UC(),{t:r}=tt("header");return i.jsxs("div",{className:"flex items-center gap-0.5 rounded-full bg-secondary/60 px-1 py-1",children:[i.jsx("button",{type:"button",onClick:t,title:r("toggleTheme"),"aria-label":r("toggleTheme"),className:"flex h-7 w-7 items-center justify-center rounded-full text-muted-foreground hover:text-foreground hover:bg-secondary transition-colors",children:e==="dark"?i.jsx(_d,{className:"h-4 w-4"}):i.jsx(Vg,{className:"h-4 w-4"})}),i.jsx("div",{className:"mx-0.5 h-4 w-px bg-border","aria-hidden":"true"}),i.jsx("div",{role:"group","aria-label":r("changeLanguage"),className:"flex items-center gap-0.5",children:n.map(s=>i.jsx("button",{type:"button",onClick:()=>o(s.code),title:s.label,"aria-label":s.label,"aria-pressed":a===s.code,className:ve("flex h-7 w-7 items-center justify-center rounded-full text-base leading-none transition-all",a===s.code?"ring-2 ring-accent bg-secondary":"opacity-50 hover:opacity-90 hover:bg-secondary/60"),children:i.jsx(S7,{code:N7[s.c
545ode],className:"h-4 w-4"})},s.code))})]})},T7="/_releases/legacy/assets/zapdata-logo-header-BPwdvO9a.png",Os=({mode:e,onModeChange:t,onSidebarToggle:a,onMobileMenuToggle:o,topOffsetPx:n=0,useBannerOffsetVar:r=!1})=>{const{t:s}=tt("header"),{signOut:l}=ut(),{hasAdminAccess:c}=fC(),{isImpersonating:d}=di(),{isCollaborator:u}=tr(),m=Rt(),h=Ao(),[p,v]=g.useState(!1),f=h.pathname==="/auth",b=h.pathname.startsWith("/ads");vC({isCollaborator:u});const y=!f&&!b,x=d?40:0,w=x+n,P=r?{top:`calc(var(--app-banner-offset, 0px) + ${x}px)`}:w?{top:w}:void 0;return i.jsxs(i.Fragment,{children:[i.jsx("header",{style:P,className:ve("fixed left-0 right-0 h-14 bg-card border-b border-border z-50",P?"":"top-0"),children:i.jsxs("div",{className:"h-full px-4 flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[y&&o&&i.jsx(we,{variant:"ghost",size:"icon",onClick:o,"aria-label":s("openMenu"),className:"md:hidden h-9 w-9 text-muted-foreground hover:text-foreground",children:i.jsx(Am,{className:"h-5 w-5"})}),y&&a&&i.jsx(we,{variant:"ghost",size:"icon",onClick:a,className:"hidden md:inline-flex h-9 w-9 text-muted-foreground hover:text-foreground",children:i.jsx(Am,{className:"h-5 w-5"})}),i.jsx("button",{onClick:()=>m("/"),className:"flex items-center gap-2 group",children:i.jsx("img",{src:T7,alt:"Zapdata",className:"h-16 md:h-28 w-auto object-contain"})})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(k7,{}),i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx(u7,{}),!u&&i.jsx(we,{variant:"ghost",size:"icon",onClick:()=>v(!0),title:s("profile"),"aria-label":s("profile"),className:"hidden sm:inline-flex h-9 w-9 text-muted-foreground hover:text-foreground",children:i.jsx(aA,{className:"h-4 w-4"})}),c&&!u&&i.jsx(we,{variant:"ghost",size:"icon",onClick:()=>m("/admin-panel"),title:s("adminPanel"),"aria-label":s("adminPanel"),className:"hidden md:inline-flex h-9 w-9 text-muted-foreground hover:text-foreground",children:i.jsx(qs,{className:"h-4 w-4"})}),i.jsx(we,{variant:"ghost",size:"icon",onClick:l,title:s("logout"),"aria-label":s("logout"),className:"h-9 w-9 text-muted-foreground hover:text-foreground",children:i.jsx(jd,{className:"h-4 w-4"})})]})]})]})}),i.jsx(A7,{open:p,onOpenChange:v})]})},I7="/_releases/legacy/assets/whatsapp-logo-BE1clGI_.png",sc=[{id:"dashboard",path:"/inbox",titleKey:"nav.dashboard",icon:i.jsx(F0,{className:"w-[18px] h-[18px]"}),exact:!0},{id:"inbox",path:"/inbox/chat",titleKey:"nav.inbox",icon:i.jsx(M0,{className:"w-[18px] h-[18px]"})},{id:"fluxos",path:"/inbox/flows",titleKey:"nav.flows",icon:i.jsx(nA,{className:"w-[18px] h-[18px]"})},{id:"disparos",path:"/disparador",titleKey:"nav.campaigns",icon:i.jsx($0,{className:"w-[18px] h-[18px]"})},{id:"contatos",path:"/inbox/contacts",titleKey:"nav.contacts",icon:i.jsx(qg,{className:"w-[18px] h-[18px]"})},{id:"crm",path:"/inbox/kanban",titleKey:"nav.crm",icon:i.jsx(K0,{className:"w-[18px] h-[18px]"})},{id:"respostas-rapidas",path:"/inbox/global-settings",titleKey:"nav.quickReplies",icon:i.jsx(_0,{className:"w-[18px] h-[18px]"})},{id:"ads",path:"/ads",titleKey:"nav.ads",icon:i.jsx(L0,{className:"w-[18px] h-[18px]"})},{id:"ferramentas",path:"/ferramentas",titleKey:"nav.tools",icon:i.jsx(Ug,{className:"w-[18px] h-[18px]"})}],lc=[{id:"settings",path:"/settings",titleKey:"accountNav.settings",icon:i.jsx(Od,{className:"w-[18px] h-[18px]"})},{id:"integrations",path:"/integrations",titleKey:"accountNav.integrations",icon:i.jsx(B0,{className:"w-[18px] h-[18px]"})},{id:"subscription",path:"/subscription",titleKey:"accountNav.subscription",icon:i.jsx(ii,{className:"w-[18px] h-[18px]"})},{id:"affiliate",path:"/affiliate",titleKey:"accountNav.affiliate",icon:i.jsx(Bg,{className:"w-[18px] h-[18px]"})}],WC=({isOpen:e,onToggle:t,collapsed:a=!1,onCollapse:o})=>{const{t:n}=tt("sidebar"),r=Rt(),s=Ao(),{isAdmin:l}=ui(),c=y=>y.exact?s.pathname===y.path:s.pathname===y.path||s.pathname.startsWith(y.path+"/"),d=y=>{jr(y.path)&&!l||(r(y.path),window.innerWidth<1024&&t())},u=y=>Gg(y.path),m=y=>{const x=c(y),w=jr(y.path)&&!l;return i.jsxs("button",{onClick:()=>d(y),onMouseEnter:()=>u(y),onFocus:()=>u(y),disabled:w,className:ve("group flex items-center gap-3 w-full px-3 py-2.5 rounded-xl text-sm transition-colors",x?"bg-accent text-accent-foreground font-semibold shadow-lg shadow-accent/25":"text-muted-foreground hover:text-foreground hover:bg-secondary/70",w&&"opacity-40 cursor-not-allowed"),children:[i.jsx("span",{className:"flex-shrink-0",children:y.icon}),i.jsx("span",{className:"flex-1 min-w-0 text-left truncate",children:n(y.titleKey)})]},y.id)},h=y=>{const x=c(y),w=jr(y.path)&&!l;return i.jsxs(zv,{children:[i.jsx(Vv,{asChild:!0,children:i.jsx("button",{onClick:()=>d(y),onMouseEnter:()=>u(y),onFocus:()=>u(y),disabled:w,className:ve("flex items-center justify-center w-11 h-11 rounded-xl transition-colors",x?"bg-accent text-accent-foreground shadow-lg shadow-accent/25":"text-muted-foreground hover:text-foreground hover:bg-secondary",w&&"opacity-40 cursor-not-allowed"),children:y.icon})}),i.jsx(eu,{side:"right",className:"text-xs",children:n(y.titleKey)})]},y.id)},p=i.jsxs("div",{className:"px-3 pb-3 space-y-2",children:[i.jsxs("a",{href:"/status",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 w-full px-3 py-2.5 rounded-lg border transition-colors bg-emerald-500/10 border-emerald-500/20 text-emerald-400 hover:bg-emerald-500/20",children:[i.jsx(u0,{className:"w-5 h-5"}),i.jsx("span",{className:"text-sm font-medium",children:n("systemStatus")})]}),i.jsxs("a",{href:"https://zzfunnels.co/tutoriais-zzhub-9360d1ff/membros/share/8g0jt421",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 w-full px-3 py-2.5 rounded-lg border transition-colors bg-blue-500/10 border-blue-500/20 text-blue-400 hover:bg-blue-500/20",children:[i.jsx(C0,{className:"w-5 h-5"}),i.jsx("span",{className:"text-sm font-medium",children:n("tutorials")})]}),i.jsxs("a",{href:"https://whatsapp.com/channel/0029VbDIttjAe5VwHD3NHe03",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-3 w-full px-3 py-2.5 rounded-lg border transition-colors bg-green-500/10 border-green-500/20 text-green-500 hover:bg-green-500/20",children:[i.jsx("img",{src:I7,alt:"",className:"w-5 h-5 object-contain flex-shrink-0"}),i.jsx("span",{className:"text-sm font-medium",children:n("whatsappChannel")})]})]}
545),v=i.jsx(Jd,{delayDuration:0,children:i.jsxs("div",{"data-sidebar-fixed":!0,className:"hidden md:flex flex-col w-16 bg-card border-r border-border fixed left-0 top-14 bottom-0 z-30",children:[i.jsxs("div",{className:"flex-1 overflow-y-auto py-3 flex flex-col items-center gap-1.5 scrollbar-sidebar",children:[sc.map(h),i.jsx("div",{className:"w-8 h-px bg-border my-1.5"}),lc.map(h)]}),i.jsx("div",{className:"p-2 border-t border-border flex justify-center",children:i.jsx("button",{onClick:()=>o==null?void 0:o(!1),className:"w-9 h-9 flex items-center justify-center rounded-lg text-muted-foreground hover:text-foreground hover:bg-secondary transition-colors",children:i.jsx(b0,{className:"w-4 h-4"})})})]})}),f=i.jsx("div",{"data-sidebar-fixed":!0,className:"hidden md:flex flex-col w-64 bg-card border-r border-border fixed left-0 top-14 bottom-0 z-30",children:i.jsxs("div",{className:"flex flex-col h-full",children:[i.jsxs("nav",{className:"flex-1 overflow-y-auto scrollbar-sidebar px-2 pt-3 space-y-1",children:[i.jsx("div",{className:"px-2 pb-1 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70",children:n("sectionMenu")}),sc.map(m),i.jsx("div",{className:"my-2 mx-2 h-px bg-border"}),i.jsx("div",{className:"px-2 pb-1 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70",children:n("sectionAccount")}),lc.map(m)]}),p]})}),b=i.jsxs(i.Fragment,{children:[e&&i.jsx("div",{className:"fixed inset-0 bg-black/50 z-40 md:hidden",onClick:t}),i.jsxs("div",{className:ve("fixed left-0 top-0 bottom-0 w-64 bg-card border-r border-border z-50 md:hidden transition-transform duration-200 flex flex-col",e?"translate-x-0":"-translate-x-full"),children:[i.jsxs("div",{className:"p-4 border-b border-border flex items-center gap-2",children:[i.jsx("div",{className:"w-8 h-8 rounded-md bg-accent flex items-center justify-center shadow-lg shadow-accent/20",children:i.jsx("span",{className:"text-accent-foreground font-bold text-sm",children:"Z"})}),i.jsx("span",{className:"font-semibold text-accent",children:"Zapdata"})]}),i.jsxs("nav",{className:"flex-1 overflow-y-auto scrollbar-sidebar px-2 py-3 space-y-1",children:[sc.map(m),i.jsx("div",{className:"my-2 mx-2 h-px bg-border"}),lc.map(m)]}),p]})]});return i.jsxs(i.Fragment,{children:[b,a?v:f]})},R7=[],D7=["/inbox/chat"],M7=({children:e})=>{const t=Ao(),[a,o]=g.useState(()=>typeof window>"u"?!1:localStorage.getItem("sidebar-collapsed-v2")==="true"),[n,r]=g.useState(!1);g.useEffect(()=>{r(!1)},[t.pathname]);const s=D7.some(u=>t.pathname===u||t.pathname.startsWith(u+"/")),l=g.useCallback(u=>{o(u),localStorage.setItem("sidebar-collapsed-v2",String(u))},[]);g.useEffect(()=>{R7.some(m=>t.pathname===m||t.pathname.startsWith(m+"/"))&&!a&&l(!0)},[t.pathname]);const c=g.useCallback(()=>{l(!a)},[a,l]),d=s?"":a?"md:ml-16":"md:ml-64";return i.jsxs(i.Fragment,{children:[i.jsx(Os,{onSidebarToggle:s?void 0:c,onMobileMenuToggle:s?void 0:()=>r(!0),useBannerOffsetVar:!0}),!s&&i.jsx(WC,{isOpen:n,onToggle:()=>r(u=>!u),collapsed:a,onCollapse:l}),i.jsx("div",{style:{height:"calc(var(--app-banner-offset, 0px) + var(--system-header-height, 3.5rem))"},className:`cancel-banner-spacer ${d} transition-[margin] duration-200`}),i.jsx("div",{className:`${d} transition-[margin] duration-200 pb-16 md:pb-0`,children:e})]})},$C=()=>i.jsx(M7,{children:i.jsxs("div",{className:"flex flex-col items-center justify-center min-h-[60vh] text-center px-6",children:[i.jsx("div",{className:"w-16 h-16 rounded-full bg-orange-500/15 flex items-center justify-center mb-5",children:i.jsx(Ug,{className:"w-8 h-8 text-orange-500"})}),i.jsx("h1",{className:"text-2xl font-bold mb-2",children:"Função em manutenção"}),i.jsx("p",{className:"text-muted-foreground max-w-md",children:"Estamos fazendo melhorias nesta função para entregar uma experiência melhor. Ela volta em breve â obrigado pela paciência! ð ï¸"})]})}),F7=new Set(["/marketplace","/affiliate","/subscription","/settings","/ads","/gerador-audio","/transcricao-audio","/disparador","/video-downloader","/zap-converter","/limpa-hash","/gerador-palavras-chaves","/extensao-ads","/sms-bot","/smm-panel","/track-ofertas","/criativos"]),nt=({children:e})=>{const{user:t,loading:a}=ut(),{isCollaborator:o,loading:n}=tr(),{isInGracePeriod:r,isGraceExpired:s,gracePeriodEnd:l,loading:c,isFreePlan:d,subscription:u,isCancelScheduled:m,periodEndDate:h,isImmediateBlock:p,hasAvulsaInstances:v,isCreditSlotGracePeriod:f,isCreditSlotGraceExpired:b,creditSlotGraceEnd:y,isAvulsaSlotGracePeriod:x,isAvulsaSlotGraceExpired:w,avulsaSlotGraceEnd:P,isPaymentFailure:E,suspensionReason:k,isAdminBlocked:S,effectiveMaxInstances:R,refresh:I}=ar(),{isAdmin:M}=ui(),{isFullMember:q,isSemiFullMember:N}=uu(),F=Rt(),[A,_]=g.useState(!1),[K,V]=g.useState(!1);g.useEffect(()=>{if(c){V(!1);return}const $=setTimeout(()=>V(!0),250);return()=>clearTimeout($)},[c]);const B=M||q&&!N||o||!u||!K,te=K&&m&&!!h&&!M&&!o,j=!B&&d&&!m&&!r&&!s&&!p,L=te||j;if(g.useEffect(()=>(L?document.body.setAttribute("data-cancel-banner","true"):document.body.removeAttribute("data-cancel-banner"),()=>document.body.removeAttribute("data-cancel-banner")),[L]),g.useEffect(()=>{!a&&!t&&F("/auth")},[t,a,F]),g.useEffect(()=>{if(!n&&o){const $=window.location.pathname||"/";
545for(const X of F7)if($===X||$.startsWith(X+"/")){F("/inbox");return}}},[o,n,F]),a&&!t)return i.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background",children:i.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-md border border-border/60 bg-card/95 px-6 py-5 shadow-lg",children:[i.jsx(xt,{className:"h-8 w-8 animate-spin text-accent"}),i.jsx("p",{className:"text-sm font-medium text-muted-foreground",children:"Carregando sistema..."})]})});if(!t)return null;if(!M&&jr(window.location.pathname))return i.jsx($C,{});if(!B&&k==="downgrade_overage"&&!window.location.pathname.startsWith("/subscription"))return i.jsx(iK,{userId:t.id,maxInstances:R,onResolved:()=>{I()}});if(!B&&b)return i.jsx(pn,{status:"blocked",gracePeriodEnd:y,hasAvulsaInstances:!1,isCreditSlotExpiry:!0});if(!B&&f)return i.jsxs(i.Fragment,{children:[i.jsx(pn,{status:"grace",gracePeriodEnd:y,hasAvulsaInstances:!1,isCreditSlotExpiry:!0}),e]});if(!B&&x&&P){const $=Math.max(0,Math.ceil((P.getTime()-Date.now())/864e5));return i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"fixed top-0 left-0 right-0 z-[60] bg-orange-600 px-4 h-[48px] flex items-center justify-center gap-3 text-base shadow-lg overflow-hidden",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Wa,{className:"h-5 w-5 text-white flex-shrink-0 animate-pulse"}),i.jsxs("span",{className:"text-white font-bold",children:["Suas instâncias avulsas expiraram e serão apagadas em"," ",i.jsxs("span",{className:"bg-white/20 px-1.5 py-0.5 rounded text-white font-bold text-sm",children:[$," dia",$!==1?"s":""]})]})]}),i.jsx("span",{className:"text-orange-100 text-sm hidden sm:inline",children:"Recarregue créditos para mantê-las ativas."}),i.jsxs(we,{size:"sm",className:"bg-white text-orange-700 hover:bg-orange-50 gap-1.5 font-semibold border-0",onClick:()=>_(!0),children:[i.jsx(Pl,{className:"h-3.5 w-3.5"}),"Recarregar Créditos"]})]}),e,i.jsx(go,{open:A,onOpenChange:_,mode:"regularize"})]})}if(!(M||!K)&&S){const $=k||(E?"payment_failure":"admin");return i.jsx(pn,{status:"blocked",gracePeriodEnd:null,hasAvulsaInstances:v,suspensionReason:$})}if(!B&&p){const $=k||(E?"payment_failure":"admin");return i.jsx(pn,{status:"blocked",gracePeriodEnd:null,hasAvulsaInstances:v,suspensionReason:$})}if(!B&&s)return i.jsx(pn,{status:"blocked",gracePeriodEnd:l,hasAvulsaInstances:v,suspensionReason:k||"payment_failure"});if(!B&&r)return i.jsxs(i.Fragment,{children:[i.jsx(pn,{status:"grace",gracePeriodEnd:l,hasAvulsaInstances:v}),e]});if(te&&h){const $=Math.max(0,Math.ceil((h.getTime()-Date.now())/864e5)),X=h.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric"});return i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"fixed top-0 left-0 right-0 z-[60] bg-red-600 px-4 h-[48px] flex items-center justify-center gap-3 text-base shadow-lg overflow-hidden",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Wa,{className:"h-5 w-5 text-white flex-shrink-0 animate-pulse"}),i.jsxs("span",{className:"text-white font-bold",children:["Seu plano foi cancelado e expira em"," ",i.jsx("strong",{children:X})," ",i.jsxs("span",{className:"bg-white/20 px-1.5 py-0.5 rounded text-white font-bold text-sm",children:[$," dia",$!==1?"s":""]})]})]}),i.jsx("span",{className:"text-red-100 text-sm",children:v?"Após essa data, a conta voltará ao modo recarga e as instâncias do plano serão apagadas imediatamente.":"Após essa data, você perderá acesso a todas as funcionalidades e suas instâncias do plano serão apagadas imediatamente."}),i.jsxs(we,{size:"sm",className:"bg-white text-red-700 hover:bg-red-50 gap-1.5 font-semibold border-0",onClick:()=>_(!0),children:[i.jsx(Pl,{className:"h-3.5 w-3.5"}),"Renovar Plano"]})]}),e,i.jsx(go,{open:A,onOpenChange:_,hideFreePlan:!0,mode:"regularize"})]})}return j?i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"fixed top-0 left-0 right-0 z-[60] bg-blue-600 px-4 h-[48px] flex items-center justify-center gap-3 text-base shadow-lg overflow-hidden",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Wa,{className:"h-5 w-5 text-white flex-shrink-0"}),i.jsx("span",{className:"text-white font-bold",children:"Você está no modo recarga â assine um plano e economize em suas instâncias!"})]}),i.jsxs(we,{size:"sm",className:"bg-white text-blue-700 hover:bg-blue-50 gap-1.5 font-semibold border-0",onClick:()=>_(!0),children:[i.jsx(Pl,{className:"h-3.5 w-3.5"}),"Assinar Plano"]})]}),e,i.jsx(go,{open:A,onOpenChange:_,hideFreePlan:!0,mode:"regularize"})]}):i.jsxs(i.Fragment,{children:[i.jsx(cK,{}),e,i.jsx(hK,{})]})},gr=({children:e})=>{const t=Rt(),{isCollaborator:a,loading:o}=tr(),n=vC({isCollaborator:a});return g.useEffect(()=>{o||n||(rt.error("Configurações é uma área da conta principal.",{id:"settings-access-denied",description:"Peça ao responsável pela conta para ajustar essas opções."}),t("/inbox",{replace:!0}))},[o,n,t]),o?i.jsx("div",{className:"min-h-screen flex items-center justify-center",children:i.jsx("div",{className:"animate-pulse text-lg",children:"Carregando..."})}):n?i.jsx(i.Fragment,{children:e}):null},bt=({children:e})=>i.jsx(nt,{children:e}),L7=3e4,cc=({children:e})=>{const{user:t,loading:a}=ut(),{hasAdminAccess:o,loading:n}=fC(),r=Rt(),s=g.useRef(null),l=g.useRef(null),c=g.useCallback(()=>{l.current&&(l.current.innerHTML="")},[]),d=g.useCallback(()=>{c(),_c(),r("/",{replace:!0})},[c,r]);return g.useEffect(()=>{!a&&!t&&r("/auth",{replace:!0})},[t,a,r]),g.useEffect(()=>{!a&&!n&&!o&&t&&r("/",{replace:!0})},[o,n,a,t,r]),g.useEffect(()=>{if(!o||n)return;const u=async()=>{try{const{data:{session:m}}=await ne.auth.getSession();if(!(m!=null&&m.access_token)){d();return}const{data:h,error:p}=await ne.functions.invoke("validate-admin-access",{headers:{Authorization:`Bearer ${m.access_token}`}});(p||(h==null?void 0:h.hasAdminAccess)!==!0)&&d()}catch{d()}};return s.current=setInterval(u,L7),()=>{s.current&&clearInterval(s.current)}},[o,n,d]),a||n?i.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background",children:i.jsxs("div",{className:"text-center space-y-4",children:[i.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"}),i.jsx("p",{className:"text-lg text-muted-foreground",children:"Verificando permissões..."})]})}):o?i.jsx("div",{ref:l,"data-admin-content":!0,children:e}):null},j7=({children:e})=>{const{user:t,loading:a}=ut(),{isAdmin:o,loading:n}=ui(),{subscription:r,loading:s}=Qs(),l=Rt(),c=a||n||s,d=!!r&&r.plan_id!=="free",u=o||d&&gC(r);return g.useEffect(()=>{if(!a&&!t){l("/auth",{replace:!0});return}!c&&t&&!u&&(rt.error("Assine um plano (a partir do Iniciante) para usar o DisparaZap Oficial"),l("/subscription",{replace:!0}))},[c,t,a,u,l]),c?i.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background",children:i.jsxs("div",{className:"text-center space-y-4",children:[i.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"}),i.jsx("p",{className:"text-lg text-muted-foreground",children:"Verificando acesso..."})]})}):u?!o&&jr(window.location.pathname)?i.jsx($C,{}):i.jsx(i.Fragment,{children:e}):null}
545,_7=["/lp","/auth","/termos","/privacidade","/unsubscribe","/tutorial","/flow-preview","/s/"],Bf=()=>{if(typeof window>"u")return!1;const e=window.location.pathname||"/";return _7.some(t=>e===t||e.startsWith(t+"/")||e.startsWith(t))},GC="is_free_trial_user_v2:",zf=e=>{if(!e)return null;try{const t=localStorage.getItem(`${GC}${e}`);if(t==="1")return!0;if(t==="0")return!1}catch{}try{if(sessionStorage.getItem("is_free_trial_user")==="1")return!0}catch{}return null},O7=(e,t)=>{try{localStorage.setItem(`${GC}${e}`,t?"1":"0")}catch{}},HC=g.createContext({isBlocking:!1}),B7=()=>g.useContext(HC),z7=({children:e})=>{const{user:t,loading:a}=ut(),{needsPlanSelection:o,isTrialExpired:n,loading:r,refresh:s,subscription:l}=ar(),{isAdmin:c,loading:d}=uu(),{isCollaborator:u,loading:m}=tr(),[h,p]=g.useState(!1),[v,f]=g.useState(null),[b,y]=g.useState(()=>zf(void 0)),[x,w]=g.useState(()=>Bf());g.useEffect(()=>{const R=()=>w(Bf());return window.addEventListener("hashchange",R),window.addEventListener("popstate",R),()=>{window.removeEventListener("hashchange",R),window.removeEventListener("popstate",R)}},[]),g.useEffect(()=>{if(!t){p(!1);return}try{sessionStorage.getItem(`plan_gate_dismissed_${t.id}`)==="1"&&p(!0)}catch{}},[t]),g.useEffect(()=>{if(!t){sessionStorage.getItem("is_free_trial_user")!=="1"&&y(null);return}const R=zf(t.id);R!==null&&y(R)},[t]),g.useEffect(()=>{if(!t)return;let R=!1;return(async()=>{const{data:M,error:q}=await ne.rpc("is_current_user_free_trial_signup");if(R)return;if(q){console.error("[FREE-TRIAL] check error:",q);return}const N=M===!0;if(O7(t.id,N),N){try{sessionStorage.setItem("is_free_trial_user","1")}catch{}y(!0)}else y(!1)})(),()=>{R=!0}},[t]),g.useEffect(()=>{if(!t||!n){f(null);return}(async()=>{const{data:I}=await ne.from("sms_transactions").select("id").eq("user_id",t.id).eq("type","deposit").eq("status","completed").limit(1).maybeSingle();f(!!I)})()},[t,n]),g.useEffect(()=>{if(n&&(p(!1),t))try{sessionStorage.removeItem(`plan_gate_dismissed_${t.id}`)}catch{}},[n,t]);const P=async()=>{if(await s(),t)try{sessionStorage.setItem(`plan_gate_dismissed_${t.id}`,"1")}catch{}p(!0)},E=!t||a||r||d||m||b===null;let k=null,S=!x&&E;if(!x&&!E){const R=u||c||b,I=!!l&&l.plan_id!=="free"&&l.status==="active";!R&&!I&&(n?v===null?S=!0:v||(S=!0,k=i.jsx(go,{open:!0,onOpenChange:P,hideFreePlan:!0,forceSelection:!0}
545)):!h&&o&&(S=!0,k=i.jsx(go,{open:!0,onOpenChange:P,forceSelection:!0})))}return i.jsxs(HC.Provider,{value:{isBlocking:S},children:[e,k]})},V7=({videoCode:e,optimizationCode:t,isVisible:a})=>{const o=g.useRef(null);return g.useEffect(()=>{if(!e||!o.current||!a)return;const n=o.current,r=d=>d.replace(/<script[^>]*>/gi,"").replace(/<\/script>/gi,"").trim();n.innerHTML="";const s=document.createElement("div");s.innerHTML=e;const l=Array.from(s.querySelectorAll("script"));for(l.forEach(d=>d.remove());s.firstChild;)n.appendChild(s.firstChild);const c=d=>{const u=document.createElement("script");if(Array.from(d.attributes).forEach(m=>{u.setAttribute(m.name,m.value)}),d.src)u.src=d.src;else{const m=d.textContent??"";u.textContent=r(m)}n.appendChild(u)};if(l.forEach(d=>c(d)),t){const d=document.createElement("script");d.type="text/javascript",d.textContent=r(t),n.appendChild(d)}return()=>{o.current&&(o.current.innerHTML="")}},[e,t,a]),e?i.jsx("div",{ref:o,className:"w-full rounded-lg overflow-hidden relative",style:{position:"relative",zIndex:1,maxWidth:"100%",contain:"layout paint"}}):null},Vf=[{id:"metricas",name:"Sistema de Métricas",emoji:"ð",route:"/metricas"},{id:"organizador-numeros",name:"Organizador de Números",emoji:"ð±",route:"/organizador-numeros"},{id:"track-ofertas",name:"Track Ofertas",emoji:"ð¯",route:"/track-ofertas"},{id:"gerador-audio",name:"Gerador de Ãudio",emoji:"ðï¸",route:"/gerador-audio"},{id:"transcricao-audio",name:"Transcrição de Ãudio",emoji:"ð",route:"/transcricao-audio"},{id:"painel-marketing",name:"Painel Marketing",emoji:"ð",route:"/smm-panel"},{id:"numeros-virtuais",name:"Números Virtuais",emoji:"ð",route:"/sms-bot"}],q7=()=>{const{user:e}=ut(),t=Rt(),{isBlocking:a}=B7(),[o,n]=g.useState(null),[r,s]=g.useState(!1);g.useEffect(()=>{e&&!a&&l()},[e,a]),g.useEffect(()=>{a&&r&&s(!1)},[a,r]);const l=async()=>{try{const{data:h,error:p}=await ne.from("admin_announcements").select("*").eq("is_active",!0).order("created_at",{ascending:!1});if(p)throw p;if(!h||h.length===0)return;const{data:v,error:f}=await ne.from("user_announcement_views").select("announcement_id").eq("user_id",e==null?void 0:e.id);if(f)throw f;const b=new Set((v==null?void 0:v.map(w=>w.announcement_id))||[]),y=new Date,x=h.find(w=>!(b.has(w.id)||w.scheduled_at&&new Date(w.scheduled_at)>y));x&&(n(x),s(!0),await c(x.id))}catch(h){console.error("Error checking announcements:",h)}},c=async h=>{try{await ne.from("user_announcement_views").upsert({user_id:e==null?void 0:e.id,announcement_id:h},{onConflict:"user_id,announcement_id",ignoreDuplicates:!0});const{count:p}=await ne.from("user_announcement_views").select("*",{count:"exact",head:!0}).eq("announcement_id",h);await ne.from("admin_announcements").update({views_count:p||0}).eq("id",h)}catch(p){console.error("Error registering view:",p)}},d=async(h,p)=>{if(o){try{await ne.from("user_announcement_views").update({clicked:!0}).eq("user_id",e==null?void 0:e.id).eq("announcement_id",o.id);const{count:v}=await ne.from("user_announcement_views").select("*",{count:"exact",head:!0}).eq("announcement_id",o.id).eq("clicked",!0);await ne.from("admin_announcements").update({clicks_count:v||0}).eq("id",o.id)}catch(v){console.error("Error registering click:",v)}if(h==="redirect"&&o.redirect_url)window.open(o.redirect_url,"_blank");else if(h==="system"&&p){const v=Vf.find(f=>f.id===p);v&&t(v.route)}s(!1)}};if(!o)return null;const u=o.redirect_system?o.redirect_system.split(",").map(h=>h.trim()):[],m=!!o.video_code;return i.jsx(ya,{open:r,onOpenChange:s,children:i.jsxs(sa,{className:"max-w-lg border-accent max-h-[90vh] overflow-y-auto",children:[i.jsx(xa,{children:o.title&&i.jsx(wa,{className:"text-xl text-center",dangerouslySetInnerHTML:{__html:o.title}})}),i.jsxs("div",{className:"space-y-4",children:[m&&i.jsx(V7,{videoCode:o.video_code||"",optimizationCode:o.video_optimization_code,isVisible:r}),!m&&o.image_url&&i.jsx("div",{className:"w-full rounded-lg overflow-hidden",children:i.jsx("img",{src:o.image_url,alt:"Aviso",className:"w-full h-auto object-contain max-h-[70vh]"})}),i.jsx("div",{className:"text-center text-muted-foreground whitespace-pre-wrap",dangerouslySetInnerHTML:{__html:o.content}}),o.redirect_type==="system"&&u.length>0&&i.jsx("div",{className:"flex flex-wrap justify-center gap-3 pt-2",children:u.map(h=>{const p=Vf.find(v=>v.id===h);return p?i.jsxs(we,{variant:"outline",className:"flex flex-col items-center gap-1 h-auto py-3 px-4 border-accent hover:bg-accent/10",onClick:()=>d("system",h),children:[i.jsx("span",{className:"text-2xl",children:p.emoji}),i.jsx("span",{className:"text-xs",children:p.name})]},h):null})}),o.redirect_type==="custom_link"&&o.redirect_url&&i.jsx("div",{className:"flex justify-center pt-2",children:i.jsxs(we,{onClick:()=>d("redirect"),className:"bg-accent hover:bg-accent/90 text-accent-foreground",children:[i.jsx(k0,{className:"mr-2 h-4 w-4"}),o.redirect_button_text||"Acessar"]})})]})]})})},U7=({userEmail:e,onExit:t})=>i.jsx(Ze.div,{initial:{y:-50,opacity:0}
545,animate:{y:0,opacity:1},className:"sticky top-0 left-0 right-0 z-[60] bg-destructive text-destructive-foreground py-2 px-4 shadow-lg",children:i.jsxs("div",{className:"container mx-auto flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(P0,{className:"h-5 w-5"}),i.jsxs("span",{className:"font-medium",children:["Você está logado como: ",i.jsx("span",{className:"font-bold",children:e})]})]}),i.jsxs(we,{variant:"secondary",size:"sm",onClick:t,className:"bg-white/20 hover:bg-white/30 text-white border-white/30",children:[i.jsx(jd,{className:"h-4 w-4 mr-2"}),"Sair da Conta"]})]})}),W7=()=>{const{t:e}=tt("billing"),{isAdminTesting:t,isSimulatingPartial:a,systemStatus:o,updateStatus:n,loading:r}=BC(),s=t||a,l=async()=>{await n("inactive")&&rt.success(e("creditsBanner.testModeDeactivated"))};return i.jsx(sl,{children:s&&!r&&i.jsx(Ze.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},transition:{duration:.2},className:"fixed top-14 md:top-16 left-0 right-0 z-50",children:i.jsx("div",{className:`w-full py-2.5 px-4 ${a?"bg-gradient-to-r from-purple-600 to-purple-500":"bg-gradient-to-r from-amber-500 to-orange-500"} shadow-lg`,children:i.jsxs("div",{className:"container mx-auto flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3 text-white",children:[i.jsx("div",{className:`p-1.5 rounded-full ${a?"bg-purple-700/50":"bg-amber-600/50"}`,children:a?i.jsx(tA,{className:"h-4 w-4"}):i.jsx(T0,{className:"h-4 w-4"})}),i.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3",children:[i.jsx("span",{className:"font-semibold text-sm",children:e(a?"creditsBanner.partialSimulationTitle":"creditsBanner.testModeTitle")}),i.jsx("span",{className:"text-xs text-white/80 hidden sm:inline",children:e(a?"creditsBanner.partialDescription":"creditsBanner.testDescription")})]})]}),i.jsxs(we,{variant:"secondary",size:"sm",onClick:l,className:"h-7 text-xs font-medium bg-white/20 hover:bg-white/30 text-white border-0",children:[i.jsx(Ma,{className:"h-3 w-3 mr-1"}),e("creditsBanner.deactivate")]})]})})})})},$7=()=>{const{t:e}=tt(["affiliate","common"]),{user:t}=ut(),a=Rt(),o=Ao(),[n,r]=g.useState(null),[s,l]=g.useState(()=>sessionStorage.getItem("affiliate_widget_dismissed")==="true");g.useEffect(()=>{t!=null&&t.id&&ne.from("affiliates").select("id").eq("user_id",t.id).maybeSingle().then(({data:m})=>r(!!m))},[t==null?void 0:t.id]);const c=["/auth","/affiliate"],d=/^\/criativos\/[^/]+/.test(o.pathname);if(s||d||c.some(m=>o.pathname===m)||o.pathname.startsWith("/inbox/chat")||n===null)return null;const u=m=>{m.stopPropagation(),sessionStorage.setItem("affiliate_widget_dismissed","true"),l(!0)};return i.jsx(sl,{children:i.jsxs(Ze.div,{initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:{type:"spring",stiffness:260,damping:20,delay:2},className:"fixed bottom-24 right-6 z-40 flex items-center gap-2",children:[i.jsx(Ze.button,{onClick:()=>a("/affiliate"),initial:{opacity:0,x:20},animate:{opacity:1,x:0},transition:{delay:2.3},className:"affiliate-shimmer relative overflow-hidden bg-gradient-to-r from-accent/90 to-yellow-500/80 text-primary-foreground rounded-full px-4 py-2.5 shadow-lg border border-accent/40 hover:scale-105 transition-transform duration-200",children:i.jsx("span",{className:"relative z-10 text-xs font-bold whitespace-nowrap",children:e(n?"widget.panel":"widget.cta")})}),i.jsxs("div",{className:"relative",children:[i.jsxs("button",{onClick:()=>a("/affiliate"),className:ve("relative w-16 h-16 rounded-full flex items-center justify-center shadow-lg transition-all duration-300 hover:scale-110 animate-bounce-subtle",n?"bg-accent/20 border border-accent/30 text-accent hover:bg-accent/30":"bg-gradient-to-br from-accent to-yellow-500 border border-accent/40 text-primary-foreground affiliate-glow-pulse"),children:[!n&&i.jsx("span",{className:"absolute inset-0 rounded-full animate-ping bg-accent/20"}),i.jsx(Bg,{className:"w-7 h-7 relative z-10"})]}),i.jsx("button",{onClick:u,className:"absolute -top-1 -right-1 w-5 h-5 rounded-full bg-muted border border-border flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-muted/80 transition-colors z-20",children:i.jsx(Ma,{className:"w-3 h-3"})})]})]})})},G7=()=>{const{user:e}=ut(),{isFreePlan:t,isPastDue:a,isSubscriptionExpired:o,isInGracePeriod:n,loading:r,subscription:s}=ar(),{isAdmin:l}=ui(),{isFullMember:c}=uu(),{isImpersonating:d}=di(),{isCollaborator:u}=tr(),[m,h]=g.useState(!1),[p,v]=g.useState(!1);if(!e||r||!s||l||c||u||p)return null;const f=(a||o)&&n;if(!(t&&!f)&&!f)return null;const y=d?"top-24":"top-14";return i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:ve("fixed left-0 right-0 z-40 px-4 py-2 flex items-center justify-center gap-3 text-sm shadow-md",f?"bg-destructive text-destructive-foreground":"bg-gradient-to-r from-accent/90 to-primary/90 text-primary-foreground",y),children:[i.jsx(Un,{className:"h-4 w-4 flex-shrink-0"}),i.jsx("span",{className:"font-medium",children:f?"â ï¸ Pagamento pendente â regularize para manter o acesso à s suas instâncias!":"Você está no plano Recarga. Assine um plano e desbloqueie todos os recursos!"}),i.jsx(we,{size:"sm",variant:"secondary",onClick:()=>h(!0),className:"h-7 px-3 text-xs font-semibold",neon:!1,children:f?"Regularizar":"Ver Planos"}),i.jsx("button",{onClick:()=>v(!0),className:"absolute right-3 p-1 rounded hover:bg-white/20 transition-colors",children:i.jsx(Ma,{className:"h-3.5 w-3.5"})})]}),i.jsx(go,{open:m,onOpenChange:h,hideFreePlan:!0,mode:f?"regularize":void 0})]})};function H7(){const{t:e}=tt(["notifications","common"]),t=bC(),[a,o]=g.useState([]),n=g.useCallback(r=>{o(s=>s.filter(l=>l.id!==r))},[]);return t||a.length===0?null:i.jsx("div",{className:"fixed top-16 right-4 z-[9999] flex flex-col gap-2 max-w-sm w-full pointer-events-none",children:i.jsx(sl,{children:a.map(r=>i.jsx(Ze.div,{initial:{opacity:0,x:60,scale:.97}
545,animate:{opacity:1,x:0,scale:1},exit:{opacity:0,x:60,scale:.97},transition:{duration:.25,ease:"easeOut"},className:"pointer-events-auto",children:i.jsxs("div",{className:"rounded-2xl bg-[#1a1a1e] border border-white/[0.04] p-3 flex items-start gap-3",children:[i.jsx("img",{src:SC(r.icon_url,Ls),alt:e("iconAlt"),className:"w-10 h-10 rounded-xl object-cover flex-shrink-0",onError:s=>{s.target.src=Ls}}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("p",{className:"text-sm font-semibold text-foreground truncate",children:r.title}),i.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2 mt-0.5",children:r.message})]}),i.jsx("button",{onClick:()=>n(r.id),className:"text-muted-foreground hover:text-foreground transition-colors flex-shrink-0 mt-1",children:i.jsx(Ma,{className:"w-3.5 h-3.5"})})]})},r.id))})})}const K7=10*60*1e3,X7=5*60*1e3,Rd="zapdata_update_attempts_v2",Y7=3,Q7=5*60*1e3,qf=30*1e3,Z7=5*60*1e3,dc="1790260439630";function Uf(){try{const e=localStorage.getItem(Rd);return e?JSON.parse(e):null}catch{return null}}function Wf(e){try{e===null?localStorage.removeItem(Rd):localStorage.setItem(Rd,JSON.stringify(e))}catch{}}const J7=()=>{const[e,t]=g.useState(!1),a=g.useRef(null),o=g.useRef(!1),n=g.useRef(0),r=g.useRef(null),s=g.useCallback(async d=>{if(o.current)return;o.current=!0;const u=Date.now(),m=Uf();let h;if(m&&m.buildId===d)if(u-m.firstAttemptAt>Q7)h={buildId:d,attempts:1,firstAttemptAt:u};else if(m.attempts>=Y7){o.current=!1;try{window.dispatchEvent(new CustomEvent("zapdata:update-stuck"))}catch{}return}else h={...m,attempts:m.attempts+1};else h={buildId:d||`unknown-${u}`,attempts:1,firstAttemptAt:u};Wf(h),t(!0);try{if("caches"in window){const v=await caches.keys();await Promise.all(v.map(f=>caches.delete(f)))}}catch{}try{if("serviceWorker"in navigator){const v=await navigator.serviceWorker.getRegistrations();await Promise.all(v.map(f=>f.unregister().catch(()=>{})))}}catch{}const p=d||String(Date.now());window.location.replace(`/?v=${encodeURIComponent(p)}`)},[]),l=g.useCallback(()=>{if(r.current)return;const d=qf+Math.random()*(Z7-qf);r.current=setTimeout(async()=>{if(r.current=null,!o.current)try{const u=await fetch(`/version.json?t=${Date.now()}`,{cache:"no-store"});if(!u.ok)return;const m=await u.json();if(!(m!=null&&m.buildId)||m.buildId==="dev"||m.buildId===dc)return;s(m.buildId)}catch{}},d)},[s]),c=g.useCallback(async()=>{if(o.current)return;const d=Date.now();if(!(d-n.current<X7)){n.current=d;try{const u=await fetch(`/version.json?t=${Date.now()}`,{cache:"no-store"});if(!u.ok)return;const m=await u.json();if(!(m!=null&&m.buildId)||dc==="dev"||m.buildId==="dev")return;if(m.buildId!==dc){try{window.dispatchEvent(new CustomEvent("zapdata:update-stuck"))}catch{}l()}else{r.current&&(clearTimeout(r.current),r.current=null);const h=Uf();h&&h.buildId===m.buildId&&Wf(null)}}catch{}}},[l]);return g.useEffect(()=>{c(),a.current=setInterval(c,K7);const d=()=>{document.hidden||c()};return document.addEventListener("visibilitychange",d),()=>{a.current&&clearInterval(a.current),r.current&&(clearTimeout(r.current),r.current=null),document.removeEventListener("visibilitychange",d)}},[c]),{applying:e}},eX=()=>{const{applying:e}=J7();return e?i.jsx("div",{className:"fixed top-3 left-1/2 -translate-x-1/2 z-[80] px-3",role:"status",children:i.jsxs("div",{className:ve("flex items-center gap-2.5 px-4 py-2 rounded-full","border border-primary/30 bg-primary/15 backdrop-blur-xl","shadow-[0_8px_32px_-8px_hsl(var(--primary)/0.4)] text-foreground"),children:[i.jsx(Un,{className:"h-4 w-4 text-primary"}),i.jsx("span",{className:"text-sm font-semibold",children:"Atualizando para nova versão"}),i.jsx(xt,{className:"h-4 w-4 animate-spin text-primary"})]})}):null};var bl="Switch",[tX,yJ]=La(bl),[aX,oX]=tX(bl),KC=g.forwardRef((e,t)=>{const{__scopeSwitch:a,name:o,checked:n,defaultChecked:r,required:s,disabled:l,value:c="on",onCheckedChange:d,form:u,...m}=e,[h,p]=g.useState(null),v=Qe(t,w=>p(w)),f=g.useRef(!1),b=h?u||!!h.closest("form"):!0,[y,x]=Gn({prop:n,defaultProp:r??!1,onChange:d,caller:bl});return i.jsxs(aX,{scope:a,checked:y,disabled:l,children:[i.jsx(_e.button,{type:"button",role:"switch","aria-checked":y,"aria-required":s,"data-state":ZC(y),"data-disabled":l?"":void 0,disabled:l,value:c,...m,ref:v,onClick:qe(e.onClick,w=>{x(P=>!P),b&&(f.current=w.isPropagationStopped(),f.current||w.stopPropagation())})}),b&&i.jsx(QC,{control:h,bubbles:!f.current,name:o,value:c,checked:y,required:s,disabled:l,form:u,style:{transform:"translateX(-100%)"}})]})});KC.displayName=bl;var XC="SwitchThumb",YC=g.forwardRef((e,t)=>
545{const{__scopeSwitch:a,...o}=e,n=oX(XC,a);return i.jsx(_e.span,{"data-state":ZC(n.checked),"data-disabled":n.disabled?"":void 0,...o,ref:t})});YC.displayName=XC;var nX="SwitchBubbleInput",QC=g.forwardRef(({__scopeSwitch:e,control:t,checked:a,bubbles:o=!0,...n},r)=>{const s=g.useRef(null),l=Qe(s,r),c=rm(a),d=Hd(t);return g.useEffect(()=>{const u=s.current;if(!u)return;const m=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(m,"checked").set;if(c!==a&&p){const v=new Event("click",{bubbles:o});p.call(u,a),u.dispatchEvent(v)}},[c,a,o]),i.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:a,...n,tabIndex:-1,ref:l,style:{...n.style,...d,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});QC.displayName=nX;function ZC(e){return e?"checked":"unchecked"}var JC=KC,rX=YC;const Yt=g.forwardRef(({className:e,...t},a)=>i.jsx(JC,{className:ve("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50",e),...t,ref:a,children:i.jsx(rX,{className:ve("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));Yt.displayName=JC.displayName;const iX=()=>{const[e,t]=g.useState(!1),[a,o]=g.useState(!1),[n,r]=g.useState(!0);if(g.useEffect(()=>{t(!WH()),r(!Ds())},[]),!e)return null;const s=()=>{$H(),t(!1)},l=c=>{r(c),UH(!c)};return i.jsx("div",{className:"fixed bottom-3 inset-x-3 sm:inset-x-auto sm:right-4 sm:max-w-sm z-50",children:i.jsx("div",{className:"bg-background border border-border/60 rounded-xl shadow-lg p-4",children:a?i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("p",{className:"text-xs font-medium text-foreground",children:"Preferências de cookies"}),i.jsx("button",{type:"button","aria-label":"Fechar aviso",onClick:s,className:"text-muted-foreground/60 hover:text-foreground transition-colors",children:i.jsx(Ma,{className:"h-3.5 w-3.5"})})]}),i.jsxs("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-xs text-foreground",children:"Necessários"}),i.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Login, segurança e funcionamento básico. Sempre ativos."})]}),i.jsx(Yt,{checked:!0,disabled:!0})]}),i.jsxs("div",{className:"flex items-center justify-between gap-3 py-1.5",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-xs text-foreground",children:"Marketing e personalização"}),i.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Anúncios e medição de campanhas (Meta, Google, TikTok)."})]}),i.jsx(Yt,{checked:n,onCheckedChange:l})]}),i.jsx("button",{type:"button",onClick:s,className:"mt-3 w-full text-xs font-medium text-accent hover:text-accent/80 transition-colors text-center",children:"Salvar preferências"})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-start gap-2.5",children:[i.jsx(E0,{className:"h-4 w-4 text-accent mt-0.5 shrink-0"}),i.jsxs("p",{className:"text-xs leading-relaxed text-muted-foreground",children:["Usamos cookies para melhorar sua experiência e personalizar anúncios. Ao continuar navegando, você concorda com isso, conforme nosso"," ",i.jsx(ds,{to:"/privacidade",className:"underline hover:text-foreground transition-colors",children:"Aviso de Privacidade"}),"."]}),i.jsx("button",{type:"button","aria-label":"Fechar aviso",onClick:s,className:"text-muted-foreground/60 hover:text-foreground transition-colors shrink-0",children:i.jsx(Ma,{className:"h-3.5 w-3.5"})})]}),i.jsxs("div",{className:"flex items-center gap-3 mt-3",children:[i.jsx("button",{type:"button",onClick:()=>o(!0),className:"text-xs underline text-muted-foreground hover:text-foreground transition-colors",children:"Preferências de cookies"}),i.jsx("button",{type:"button",onClick:s,className:"text-xs font-medium text-accent hover:text-accent/80 transition-colors ml-auto",children:"Entendi"})]})]})})})};
545async function ss(e="manual"){try{if("serviceWorker"in navigator)try{const o=await navigator.serviceWorker.getRegistrations();await Promise.all(o.map(n=>n.unregister().catch(()=>{})))}catch{}if("caches"in window)try{const o=await caches.keys();await Promise.all(o.map(n=>caches.delete(n).catch(()=>{})))}catch{}if("indexedDB"in window&&indexedDB.databases)try{const o=await indexedDB.databases();await Promise.all((o||[]).map(n=>{const r=n==null?void 0:n.name;return!r||/supabase|sb-/i.test(r)?Promise.resolve():new Promise(s=>{const l=indexedDB.deleteDatabase(r);l.onsuccess=l.onerror=l.onblocked=()=>s()})}))}catch{}}catch{}const a=`/?v=${Date.now()}&hard=1&r=${encodeURIComponent(e)}`;window.location.replace(a)}const sX=()=>{const[e,t]=g.useState(!1);return g.useEffect(()=>{const a=()=>t(!0);return window.addEventListener("zapdata:update-stuck",a),()=>window.removeEventListener("zapdata:update-stuck",a)},[]),e?i.jsx("div",{className:"fixed bottom-4 left-1/2 -translate-x-1/2 z-[90] px-3 w-[min(440px,calc(100vw-24px))]",children:i.jsxs("button",{type:"button",onClick:()=>ss("stuck-toast"),className:"w-full flex items-center gap-3 px-4 py-3 rounded-2xl border border-primary/40 bg-background/95 backdrop-blur-xl shadow-[0_12px_40px_-8px_hsl(var(--primary)/0.5)] text-left hover:bg-primary/10 transition-colors",children:[i.jsx(Un,{className:"h-5 w-5 text-primary shrink-0"}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("div",{className:"text-sm font-semibold text-foreground",children:"Nova versão disponÃvel"}),i.jsx("div",{className:"text-xs text-muted-foreground",children:"Clique para atualizar agora e liberar funções novas."})]}),i.jsx(V0,{className:"h-4 w-4 text-primary shrink-0"})]})}):null},dm=()=>{const{user:e}=ut(),{isImpersonating:t,impersonatedUserId:a,impersonatedEmail:o}=di(),{isCollaborator:n,parentUserId:r,effectiveUserId:s}=tr();return t&&a?{effectiveUserId:a,effectiveEmail:o,isImpersonating:!0,realUserId:(e==null?void 0:e.id)||null,realEmail:(e==null?void 0:e.email)||null}:n&&r?{effectiveUserId:r,effectiveEmail:(e==null?void 0:e.email)||null,isImpersonating:!1,realUserId:(e==null?void 0:e.id)||null,realEmail:(e==null?void 0:e.email)||null}:{effectiveUserId:(e==null?void 0:e.id)||null,effectiveEmail:(e==null?void 0:e.email)||null,isImpersonating:!1,realUserId:(e==null?void 0:e.id)||null,realEmail:(e==null?void 0:e.email)||null}},lX=6e4,cX=2*6e4;let $f=0;const dX=e=>{const t=(e==null?void 0:e.code)??"";return t==="42883"||t==="PGRST202"?!0:/upsert_realtime_presence/i.test((e==null?void 0:e.message)??"")&&/not (?:exist|find|found)|does not exist|schema cache/i.test((e==null?void 0:e.message)??"")},uX=()=>{const{user:e}=ut(),{effectiveUserId:t}=dm(),a=t||(e==null?void 0:e.id)||null;g.useEffect(()=>{if(!a)return;let o=!1,n=!1;const r=async()=>{if(!(o||n)&&!(Date.now()<$f)){n=!0;try{const{error:l}=await ne.rpc("upsert_realtime_presence",{p_owner_user_id:a});l&&dX(l)&&($f=Date.now()+cX)}catch{}finally{n=!1}}};r();const s=setInterval(r,lX);return()=>{o=!0,clearInterval(s)}},[a])},mX={default:"bg-zinc-950 border-primary text-white",success:"bg-zinc-950 border-primary text-white",error:"bg-zinc-950 border-destructive text-white",warning:"bg-zinc-950 border-amber-500 text-white"},pX={default:"text-white",success:"text-primary",error:"text-destructive",warning:"text-amber-500"},hX={default:"text-primary",success:"text-primary",error:"text-destructive",warning:"text-amber-500"},fX={default:zg,success:w0,error:x0,warning:Wa},gX={initial:{opacity:0,y:50,scale:.95},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:50,scale:.95}},eP=g.forwardRef(({defaultPosition:e="bottom-right"},t)=>{const a=g.useRef(null);return g.useImperativeHandle(t,()=>({show({title:o,message:n,variant:r="default",duration:s=4e3,position:l=e,actions:c,onDismiss:d,highlightTitle:u}){const m=fX[r];a.current=rt.custom(h=>i.jsxs(Ze.div,{...gX,transition:{type:"spring",stiffness:350,damping:25},className:ve("flex w-[22rem] items-start justify-between gap-3 rounded-lg border p-4 shadow-lg",mX[r]),children:[i.jsxs("div",{className:"flex items-start gap-3",children:[i.jsx(m,{className:ve("mt-0.5 h-5 w-5",hX[r])}),i.jsxs("div",{className:"flex flex-col gap-1",children:[o&&i.jsx("p",{className:ve("text-sm font-semibold",u?pX[r]:"text-foreground"),children:o}),i.jsx("p",{className:"text-sm text-zinc-300",children:n})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[(c==null?void 0:c.label)&&i.jsx(we,{size:"sm",variant:"outline",onClick:()=>{c.onClick(),rt.dismiss(h)},className:ve("cursor-pointer",r==="success"?"text-green-600 border-green-600 hover:bg-green-600/10 dark:hover:bg-green-400/20":r==="error"?"text-destructive border-destructive hover:bg-destructive/10 dark:hover:bg-destructive/20":r==="warning"?"text-amber-600 border-amber-600 hover:bg-amber-600/10 dark:hover:bg-amber-400/20":"text-foreground border-border hover:bg-muted/10 dark:hover:bg-muted/20"),children:c.label}),i.jsx("button",{onClick:()=>{rt.dismiss(h),d==null||d()},className:"rounded-full p-1 hover:bg-muted/50 dark:hover:bg-muted/30 transition-colors focus:outline-none focus:ring-2 focus:ring-ring","aria-label":"Dismiss notification",children:i.jsx(Ma,{className:"h-4 w-4 text-muted-foreground"})})]})]}),{duration:s,position:l})}}
545)),i.jsx(mk,{position:e,visibleToasts:5,style:{zIndex:2147483647}})});eP.displayName="Toaster";async function tP(e,t="Ocorreu um erro."){try{const a=e==null?void 0:e.context;if(a&&typeof a.json=="function"){const o=await(typeof a.clone=="function"?a.clone():a).json();if(o!=null&&o.error)return String(o.error);if(o!=null&&o.message)return String(o.message);if(o!=null&&o.code)return String(o.code)}}catch{}return(e==null?void 0:e.message)||t}var vX=Object.defineProperty,bX=Object.defineProperties,yX=Object.getOwnPropertyDescriptors,Bs=Object.getOwnPropertySymbols,aP=Object.prototype.hasOwnProperty,oP=Object.prototype.propertyIsEnumerable,Gf=(e,t,a)=>t in e?vX(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,xX=(e,t)=>{for(var a in t||(t={}))aP.call(t,a)&&Gf(e,a,t[a]);if(Bs)for(var a of Bs(t))oP.call(t,a)&&Gf(e,a,t[a]);return e},wX=(e,t)=>bX(e,yX(t)),CX=(e,t)=>{var a={};for(var o in e)aP.call(e,o)&&t.indexOf(o)<0&&(a[o]=e[o]);if(e!=null&&Bs)for(var o of Bs(e))t.indexOf(o)<0&&oP.call(e,o)&&(a[o]=e[o]);return a};function PX(e){let t=setTimeout(e,0),a=setTimeout(e,10),o=setTimeout(e,50);return[t,a,o]}function AX(e){let t=g.useRef();return g.useEffect(()=>{t.current=e}),t.current}var EX=18,nP=40,SX=`${nP}px`,NX=["[data-lastpass-icon-root]","com-1password-button","[data-dashlanecreated]",'[style$="2147483647 !important;"]'].join(",");function kX({containerRef:e,inputRef:t,pushPasswordManagerStrategy:a,isFocused:o}){let[n,r]=g.useState(!1),[s,l]=g.useState(!1),[c,d]=g.useState(!1),u=g.useMemo(()=>a==="none"?!1:(a==="increase-width"||a==="experimental-no-flickering")&&n&&s,[n,s,a]),m=g.useCallback(()=>{let h=e.current,p=t.current;if(!h||!p||c||a==="none")return;let v=h,f=v.getBoundingClientRect().left+v.offsetWidth,b=v.getBoundingClientRect().top+v.offsetHeight/2,y=f-EX,x=b;document.querySelectorAll(NX).length===0&&document.elementFromPoint(y,x)===h||(r(!0),d(!0))},[e,t,c,a]);return g.useEffect(()=>{let h=e.current;if(!h||a==="none")return;function p(){let f=window.innerWidth-h.getBoundingClientRect().right;l(f>=nP)}p();let v=setInterval(p,1e3);return()=>{clearInterval(v)}},[e,a]),g.useEffect(()=>{let h=o||document.activeElement===t.current;if(a==="none"||!h)return;let p=setTimeout(m,0),v=setTimeout(m,2e3),f=setTimeout(m,5e3),b=setTimeout(()=>{d(!0)},6e3);return()=>{clearTimeout(p),clearTimeout(v),clearTimeout(f),clearTimeout(b)}},[t,o,a,m]),{hasPWMBadge:n,willPushPWMBadge:u,PWM_BADGE_SPACE_WIDTH:SX}}var rP=g.createContext({}),iP=g.forwardRef((e,t)=>{var a=e,{value:o,onChange:n,maxLength:r,textAlign:s="left",pattern:l,placeholder:c,inputMode:d="numeric",onComplete:u,pushPasswordManagerStrategy:m="increase-width",pasteTransformer:h,containerClassName:p,noScriptCSSFallback:v=TX,render:f,children:b}=a,y=CX(a,["value","onChange","maxLength","textAlign","pattern","placeholder","inputMode","onComplete","pushPasswordManagerStrategy","pasteTransformer","containerClassName","noScriptCSSFallback","render","children"]),x,w,P,E,k;let[S,R]=g.useState(typeof y.defaultValue=="string"?y.defaultValue:""),I=o??S,M=AX(I),q=g.useCallback(C=>{n==null||n(C),R(C)},[n]),N=g.useMemo(()=>l?typeof l=="string"?new RegExp(l):l:null,[l]),F=g.useRef(null),A=g.useRef(null),_=g.useRef({value:I,onChange:q,isIOS:typeof window<"u"&&((w=(x=window==null?void 0:window.CSS)==null?void 0:x.supports)==null?void 0:w.call(x,"-webkit-touch-callout","none"))}),K=g.useRef({prev:[(P=F.current)==null?void 0:P.selectionStart,(E=F.current)==null?void 0:E.selectionEnd,(k=F.current)==null?void 0:k.selectionDirection]});g.useImperativeHandle(t,()=>F.current,[]),g.useEffect(()=>{let C=F.current,z=A.current;if(!C||!z)return;_.current.value!==C.value&&_.current.onChange(C.value),K.current.prev=[C.selectionStart,C.selectionEnd,C.selectionDirection];function U(){if(document.activeElement!==C){L(null),$(null);return}let O=C.selectionStart,Y=C.selectionEnd,ae=C.selectionDirection,G=C.maxLength,re=C.value,de=K.current.prev,se=-1,ue=-1,Ee;if(re.length!==0&&O!==null&&Y!==null){let he=O===Y,Ie=O===re.length&&re.length<G;if(he&&!Ie){let be=O;if(be===0)se=0,ue=1,Ee="forward";else if(be===G)se=be-1,ue=be,Ee="backward";else if(G>1&&re.length>1){let je=0;if(de[0]!==null&&de[1]!==null){Ee=be<de[1]?"backward":"forward";let $e=de[0]===de[1]&&de[0]<G;Ee==="backward"&&!$e&&(je=-1)}se=je+be,ue=je+be+1}}se!==-1&&ue!==-1&&se!==ue&&F.current.setSelectionRange(se,ue,Ee)}let Te=se!==-1?se:O,Ke=ue!==-1?ue:Y,at=Ee??ae;L(Te),$(Ke),K.current.prev=[Te,Ke,at]}if(document.addEventListener("selectionchange",U,{capture:!0}),U(),document.activeElement===C&&te(!0),!document.getElementById("input-otp-style")){let O=document.createElement("style");if(O.id="input-otp-style",document.head.appendChild(O),O.sheet){let Y="background: transparent !important; color: transparent !important; border-color: transparent !important; opacity: 0 !important; box-shadow: none !important; -webkit-box-shadow: none !important; -webkit-text-fill-color: transparent !important;";vr(O.sheet,"[data-input-otp]::selection { background: transparent !important; color: transparent !important; }"),vr(O.sheet,`[data-input-otp]:autofill { ${Y} }`),vr(O.sheet,`[data-input-otp]:-webkit-autofill { ${Y} }
545`),vr(O.sheet,"@supports (-webkit-touch-callout: none) { [data-input-otp] { letter-spacing: -.6em !important; font-weight: 100 !important; font-stretch: ultra-condensed; font-optical-sizing: none !important; left: -1px !important; right: 1px !important; } }"),vr(O.sheet,"[data-input-otp] + * { pointer-events: all !important; }")}}let T=()=>{z&&z.style.setProperty("--root-height",`${C.clientHeight}px`)};T();let D=new ResizeObserver(T);return D.observe(C),()=>{document.removeEventListener("selectionchange",U,{capture:!0}),D.disconnect()}},[]);let[V,H]=g.useState(!1),[B,te]=g.useState(!1),[j,L]=g.useState(null),[Q,$]=g.useState(null);g.useEffect(()=>{PX(()=>{var C,z,U,T;(C=F.current)==null||C.dispatchEvent(new Event("input"));let D=(z=F.current)==null?void 0:z.selectionStart,O=(U=F.current)==null?void 0:U.selectionEnd,Y=(T=F.current)==null?void 0:T.selectionDirection;D!==null&&O!==null&&(L(D),$(O),K.current.prev=[D,O,Y])})},[I,B]),g.useEffect(()=>{M!==void 0&&I!==M&&M.length<r&&I.length===r&&(u==null||u(I))},[r,u,M,I]);let X=kX({containerRef:A,inputRef:F,pushPasswordManagerStrategy:m,isFocused:B}),fe=g.useCallback(C=>{let z=C.currentTarget.value.slice(0,r);if(z.length>0&&N&&!N.test(z)){C.preventDefault();return}typeof M=="string"&&z.length<M.length&&document.dispatchEvent(new Event("selectionchange")),q(z)},[r,q,M,N]),J=g.useCallback(()=>{var C;if(F.current){let z=Math.min(F.current.value.length,r-1),U=F.current.value.length;(C=F.current)==null||C.setSelectionRange(z,U),L(z),$(U)}te(!0)},[r]),ie=g.useCallback(C=>{var z,U;let T=F.current;if(!h&&(!_.current.isIOS||!C.clipboardData||!T))return;let D=C.clipboardData.getData("text/plain"),O=h?h(D):D;C.preventDefault();let Y=(z=F.current)==null?void 0:z.selectionStart,ae=(U=F.current)==null?void 0:U.selectionEnd,G=(Y!==ae?I.slice(0,Y)+O+I.slice(ae):I.slice(0,Y)+O+I.slice(Y)).slice(0,r);if(G.length>0&&N&&!N.test(G))return;T.value=G,q(G);let re=Math.min(G.length,r-1),de=G.length;T.setSelectionRange(re,de),L(re),$(de)},[r,q,N,I]),le=g.useMemo(()=>({position:"relative",cursor:y.disabled?"default":"text",userSelect:"none",WebkitUserSelect:"none",pointerEvents:"none"}),[y.disabled]),pe=g.useMemo(()=>({position:"absolute",inset:0,width:X.willPushPWMBadge?`calc(100% + ${X.PWM_BADGE_SPACE_WIDTH})`:"100%",clipPath:X.willPushPWMBadge?`inset(0 ${X.PWM_BADGE_SPACE_WIDTH} 0 0)`:void 0,height:"100%",display:"flex",textAlign:s,opacity:"1",color:"transparent",pointerEvents:"all",background:"transparent",caretColor:"transparent",border:"0 solid transparent",outline:"0 solid transparent",boxShadow:"none",lineHeight:"1",letterSpacing:"-.5em",fontSize:"var(--root-height)",fontFamily:"monospace",fontVariantNumeric:"tabular-nums"}),[X.PWM_BADGE_SPACE_WIDTH,X.willPushPWMBadge,s]),ce=g.useMemo(()=>g.createElement("input",wX(xX({autoComplete:y.autoComplete||"one-time-code"},y),{"data-input-otp":!0,"data-input-otp-placeholder-shown":I.length===0||void 0,"data-input-otp-mss":j,"data-input-otp-mse":Q,inputMode:d,pattern:N==null?void 0:N.source,"aria-placeholder":c,style:pe,maxLength:r,value:I,ref:F,onPaste:C=>{var z;ie(C),(z=y.onPaste)==null||z.call(y,C)},onChange:fe,onMouseOver:C=>{var z;H(!0),(z=y.onMouseOver)==null||z.call(y,C)},onMouseLeave:C=>{var z;H(!1),(z=y.onMouseLeave)==null||z.call(y,C)},onFocus:C=>{var z;J(),(z=y.onFocus)==null||z.call(y,C)},onBlur:C=>{var z;te(!1),(z=y.onBlur)==null||z.call(y,C)}})),[fe,J,ie,d,pe,r,Q,j,y,N==null?void 0:N.source,I]),oe=g.useMemo(()=>({slots:Array.from({length:r}).map((C,z)=>{var U;let T=B&&j!==null&&Q!==null&&(j===Q&&z===j||z>=j&&z<Q),D=I[z]!==void 0?I[z]:null,O=I[0]!==void 0?null:(U=c==null?void 0:c[z])!=null?U:null;return{char:D,placeholderChar:O,isActive:T,hasFakeCaret:T&&D===null}}),isFocused:B,isHovering:!y.disabled&&V}),[B,V,r,Q,j,y.disabled,I]),ye=g.useMemo(()=>f?f(oe):g.createElement(rP.Provider,{value:oe},b),[b,oe,f]);return g.createElement(g.Fragment,null,v!==null&&g.createElement("noscript",null,g.createElement("style",null,v)),g.createElement("div",{ref:A,"data-input-otp-container":!0,style:le,className:p},ye,g.createElement("div",{style:{position:"absolute",inset:0,pointerEvents:"none"}},ce)))});iP.displayName="Input";function vr(e,t){try{e.insertRule(t)}catch{console.error("input-otp could not insert CSS rule:",t)}}var TX=` 546[data-input-otp] { 547 --nojs-bg: white !important; 548 --nojs-fg: black !important; 549 550 background-color: var(--nojs-bg) !important; 551 color: var(--nojs-fg) !important; 552 caret-color: var(--nojs-fg) !important; 553 letter-spacing: .25em !important; 554 text-align: center !important; 555 border: 1px solid var(--nojs-fg) !important; 556 border-radius: 4px !important; 557 width: 100% !important; 558} 559@media (prefers-color-scheme: dark) { 560 [data-input-otp] { 561 --nojs-bg: black !important; 562 --nojs-fg: white !important; 563 } 564}`;const sP=g.forwardRef(({className:e,containerClassName:t,...a},o)=>i.jsx(iP,{ref:o,containerClassName:ve("flex items-center gap-2 has-[:disabled]:opacity-50",t),className:ve("disabled:cursor-not-allowed",e),...a}));sP.displayName="InputOTP";const lP=g.forwardRef(({className:e,...t},a)=>i.jsx("div",{ref:a,className:ve("flex items-center",e),...t}));lP.displayName="InputOTPGroup";const Fo=g.forwardRef(({index:e,className:t,...a},o)=>{const n=g.useContext(rP),{char:r,hasFakeCaret:s,isActive:l}=n.slots[e];return i.jsxs("div",{ref:o,className:ve("relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",l&&"z-10 ring-2 ring-ring ring-offset-background",t),...a,children:[r,s&&i.jsx("div",{className:"pointer-events-none absolute inset-0 flex items-center justify-center",children:i.jsx("div",{className:"animate-caret-blink h-4 w-px bg-foreground duration-1000"})})]})});Fo.displayName="InputOTPSlot";const IX=g.forwardRef(({...e},t)=>i.jsx("div",{ref:t,role:"separator",...e,children:i.jsx(S0,{})}));IX.displayName="InputOTPSeparator";const RX="/_releases/legacy/assets/zapdata-logo-auth-DiXjtKTO.webp",Hf="cf-turnstile-script",DX="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit";let br=null;const MX=()=>typeof window>"u"||window.turnstile?Promise.resolve():br||(br=new Promise((e,t)=>
564{const a=document.getElementById(Hf);if(a){a.addEventListener("load",()=>e(),{once:!0}),a.addEventListener("error",()=>t(new Error("Turnstile script failed")),{once:!0});return}const o=document.createElement("script");o.id=Hf,o.src=DX,o.async=!0,o.defer=!0,o.onload=()=>e(),o.onerror=()=>{br=null,t(new Error("Turnstile script failed"))},document.head.appendChild(o)}),br),FX="1x00000000000000000000AA",LX=()=>{if(typeof window>"u")return!1;const e=window.location.hostname;return e==="localhost"||e==="127.0.0.1"},Kf=({onVerify:e,onExpire:t,onError:a,action:o,className:n})=>{const{t:r}=tt("auth"),s=g.useRef(null),l=g.useRef(null),[c,d]=g.useState(null),m=LX()?FX:"0x4AAAAAAC_HWREccNQ_KU7G";return g.useEffect(()=>{let h=!1;if(!m){d(r("errors.turnstileNotConfigured"));return}return MX().then(()=>{if(!(h||!s.current||!window.turnstile)){if(l.current){try{window.turnstile.remove(l.current)}catch{}l.current=null}l.current=window.turnstile.render(s.current,{sitekey:m,theme:"dark",size:"flexible",action:o,callback:p=>e(p),"expired-callback":()=>t==null?void 0:t(),"timeout-callback":()=>t==null?void 0:t(),"error-callback":()=>a==null?void 0:a()})}}).catch(()=>{h||d(r("errors.turnstileLoadFailed"))}),()=>{if(h=!0,l.current&&window.turnstile){try{window.turnstile.remove(l.current)}catch{}l.current=null}}},[m]),c?i.jsx("p",{className:`text-xs text-destructive ${n??""}`,children:c}):i.jsx("div",{className:`flex justify-center w-full overflow-hidden ${n??""}`,children:i.jsx("div",{ref:s,className:"origin-center scale-[0.85] sm:scale-100 min-h-[56px] sm:min-h-[65px] w-full"})})},Xf=()=>{if(typeof window<"u"&&window.turnstile)try{window.turnstile.reset()}catch{}},jX=()=>{const{t:e}=tt(["auth","common"]),{intlLocale:t}=UC(),[a,o]=g.useState(null);return g.useEffect(()=>{(async()=>{try{const{data:r,error:s}=await ne.rpc("get_public_user_count");!s&&typeof r=="number"&&o(r)}catch(r){console.error("Error fetching user count:",r)}})()},[]),a===null?i.jsx("p",{className:"text-xs text-muted-foreground text-center mt-4",children:e("userCount.joinCommunity")}):i.jsxs("p",{className:"text-xs text-muted-foreground text-center mt-4",children:[e("userCount.prefix")," ",i.jsx("span",{className:"text-accent font-semibold",children:a.toLocaleString(t)})," ",e("userCount.suffix")]})};function yr(e){const t=new URLSearchParams(e).get("next");return!t||!t.startsWith("/")||t.startsWith("//")||t.includes("\\")?"/":t}const _X=()=>{const{t:e}=tt(["auth","common"]),[t,a]=g.useState(""),[o,n]=g.useState(""),[r,s]=g.useState(""),[l,c]=g.useState(""),[d,u]=g.useState(""),[m,h]=g.useState(!1),[p,v]=g.useState(!1),[f,b]=g.useState(!1),[y,x]=g.useState(!1),[w,P]=g.useState("login"),[E,k]=g.useState(null),[S,R]=g.useState(!1),[I,M]=g.useState(!1),[q,N]=g.useState(""),[F,A]=g.useState(null),[_,K]=g.useState(!1),[V,H]=g.useState(!1),[B,te]=g.useState(null),[j,L]=g.useState(!1),[Q,$]=g.useState(""),[X,fe]=g.useState(!1),[J,ie]=g.useState(null),[le,pe]=g.useState(null),{signIn:ce,signUp:oe,user:ye}=ut(),C=Rt(),[z,U]=g.useState(null),[T,D]=g.useState(!1);g.useEffect(()=>{const he=new URLSearchParams(window.location.search),Ie=new URLSearchParams(window.location.hash.split("?")[1]||""),be=he.get("ref")||Ie.get("ref"),je=he.get("trial")||Ie.get("trial");if(be){U(be),sessionStorage.setItem("affiliate_ref",be);const $e=`aff_click_${be}`;sessionStorage.getItem($e)||(sessionStorage.setItem($e,"1"),ne.from("affiliate_link_clicks").insert({affiliate_code:be,user_agent:navigator.userAgent.
564slice(0,255)}).then(()=>{}))}else{const $e=sessionStorage.getItem("affiliate_ref");$e&&U($e)}je==="1"?(D(!0),sessionStorage.setItem("affiliate_free_trial","1")):sessionStorage.getItem("affiliate_free_trial")==="1"&&D(!0)},[]),g.useEffect(()=>{const he=window.matchMedia("(hover: hover) and (pointer: fine)");R(he.matches);const Ie=be=>R(be.matches);return he.addEventListener("change",Ie),()=>he.removeEventListener("change",Ie)},[]),g.useEffect(()=>{nw()},[]);const O=hd(0),Y=hd(0),ae=ef(Y,[-300,300],[8,-8]),G=ef(O,[-300,300],[-8,8]),re=he=>{if(!S)return;const Ie=he.currentTarget.getBoundingClientRect();O.set(he.clientX-Ie.left-Ie.width/2),Y.set(he.clientY-Ie.top-Ie.height/2)},de=()=>{O.set(0),Y.set(0)};g.useEffect(()=>{ye&&C(yr(window.location.search))},[ye,C]);const se=async(he,Ie,be)=>{let je;const $e=new Promise((Le,ot)=>{je=window.setTimeout(()=>{ot(new Error(e("errors.timeoutGeneric",{label:be})))},Ie)});try{return await Promise.race([he,$e])}finally{je&&window.clearTimeout(je)}},ue=async he=>{var Ie;if(he.preventDefault(),!t||!o){We.error(e("errors.requiredFields.title"),e("errors.requiredFields.description"));return}if(!J){We.error(e("errors.verificationRequired.title"),e("errors.verificationRequired.description"));return}v(!0);try{const{error:be,data:je}=await se(ce(t,o,J??void 0),15e3,e("timeouts.login"));if(be){ie(null),Xf(),We.error(e("errors.loginError.title"),be.message);return}const $e=(Ie=je==null?void 0:je.user)==null?void 0:Ie.id;te($e||null);let Le=!1;if($e)try{const{data:ot}=await ne.from("blocked_users").select("user_id").eq("user_id",$e).maybeSingle();Le=!!ot}catch{}if(!Le)try{const{data:ot}=await se(ne.auth.mfa.listFactors(),8e3,e("timeouts.twoFactorCheck")),Nt=((ot==null?void 0:ot.totp)||[]).find(st=>st.status==="verified");if(Nt){let st={};try{st=JSON.parse(localStorage.getItem("mfa_trusted_devices")||"{}")}catch{st={}}if(st[$e||""]){We.success(e("success.title"),e("success.loginSuccess")),C(yr(window.location.search));return}A(Nt.id),M(!0);return}}catch(ot){console.log("MFA check skipped:",ot)}We.success(e("success.title"),e("success.loginSuccess")),C(yr(window.location.search))}catch(be){We.error(e("errors.loginError.title"),(be==null?void 0:be.message)||e("errors.loginError.fallback"))}finally{v(!1)}},Ee=async()=>{if(!(!F||q.length!==6)){K(!0);try{const{data:he,error:Ie}=await ne.auth.mfa.challenge({factorId:F});if(Ie)throw Ie;const{error:be}=await ne.auth.mfa.verify({factorId:F,challengeId:he.id,code:q});if(be)throw be;if(V&&B){const je=JSON.parse(localStorage.getItem("mfa_trusted_devices")||"{}");je[B]=Date.now().toString(),localStorage.setItem("mfa_trusted_devices",JSON.stringify(je))}M(!1),N(""),H(!1),We.success(e("success.title"),e("success.loginSuccess")),C(yr(window.location.search))}catch(he){console.error("MFA verification error:",he),We.error(e("errors.invalidCode.title"),e("errors.invalidCode.description")),N("")}finally{K(!1)}}},Te=async()=>{await ne.auth.signOut(),M(!1),N(""),A(null),H(!1)},Ke=async he=>{if(he.preventDefault(),!r||!l||!d){We.error(e("errors.requiredFields.title"),e("errors.requiredFields.description"));return}if(!r.includes("@")||!r.includes(".")){We.error(e("errors.invalidEmail.title"),e("errors.invalidEmail.description"));return}if(l!==d){We.error(e("errors.passwordMismatch.title"),e("errors.passwordMismatch.description"));return}if(l.length<6){We.error(e("errors.passwordTooShort.title"),e("errors.passwordTooShort.description"));return}if(!le){We.error(e("errors.verificationRequired.title"),e("errors.verificationRequired.description"));return}if(!m){We.error(e("errors.termsNotAccepted.title"),e("errors.termsNotAccepted.description"));return}v(!0);try{const{error:Ie,data:be}=await se(oe(r,l,le??void 0),2e4,e("timeouts.accountCreation"));if(Ie){pe(null),Xf(),We.error(e("errors.signupError.title"),Ie.message);return}if(IH(r),be!=null&&be.user&&!(be!=null&&be.session)){We.success(e("success.accountCreated.title"),e("success.accountCreated.confirmEmailDescription"));return}if(We.success(e("success.accountCreated.title"),e("success.accountCreated.description")),be!=null&&be.user){const je=z||sessionStorage.getItem("affiliate_ref"),$e=T||sessionStorage.getItem("affiliate_free_trial")==="1";if(je)try{const{data:Le}=await ne.rpc("lookup_affiliate_by_code",{_code:je}),ot=Array.isArray(Le)?Le[0]:Le;if(ot&&(await ne.from("affiliate_referrals").insert({affiliate_id:ot.id,referred_user_id:be.user.id,is_free_trial:$e}),$e))try{const{data:At}=await ne.from("profiles").select("username").eq("id",ot.user_id||"").maybeSingle(),Nt=(At==null?void 0:At.username)||je;await ne.from("admin_notifications").insert({user_id:be.user.id,user_email:r,action_type:"free_trial_signup",action_description:`Novo cadastro via Free Trial: ${r} | Link do afiliado: ${Nt}`});const{data:st}=await ne.from("user_roles").select("user_id").eq("role","admin");if(st)for(const zt of st)ne.functions.invoke("send-push-event",{body:{user_id:zt.user_id,event_type:"free_trial_signup",title:{pt:"
564ð Novo Cadastro Free Trial!",en:"ð New Free Trial Signup!"},content:{pt:`${r} - Link free trial do afiliado ${Nt}`,en:`${r} - Free trial link from ${Nt}`}}}).catch(kt=>console.error("Push error:",kt))}catch(At){console.error("Error sending free trial admin notification:",At)}sessionStorage.removeItem("affiliate_ref")}catch(Le){console.error("Error saving referral:",Le)}if($e){sessionStorage.setItem("is_free_trial_user","1");try{const{data:Le,error:ot}=await ne.rpc("provision_free_trial_signup",{p_affiliate_code:je||null});ot?console.error("[FREE-TRIAL] Provision RPC error:",ot):Le!=null&&Le.success?console.log("[FREE-TRIAL] Provisioned successfully via RPC",Le):console.error("[FREE-TRIAL] Provision RPC failed:",Le)}catch(Le){console.error("Error provisioning free trial:",Le)}sessionStorage.removeItem("affiliate_free_trial")}C(yr(window.location.search))}}catch(Ie){We.error(e("errors.generic"),(Ie==null?void 0:Ie.message)||e("errors.signupError.fallback"))}finally{v(!1)}},at=async()=>{if(!Q){We.error(e("errors.emailRequired.title"),e("errors.emailRequired.description"));return}if(!Q.includes("@")||!Q.includes(".")){We.error(e("errors.invalidEmail.title"),e("errors.invalidEmail.description"));return}fe(!0);try{const{data:he,error:Ie}=await ne.functions.invoke("forgot-password",{body:{email:Q,redirectTo:`${window.location.origin}/reset-password`}});if(Ie){const be=await tP(Ie,e("errors.sendEmailFailed"));We.error(e("errors.generic"),be);return}if(he&&he.success===!1&&he.error){We.error(e("errors.userNotFound.title"),he.error);return}We.success(e("success.emailSent.title"),(he==null?void 0:he.message)||e("success.emailSent.fallback")),L(!1),$("")}catch{We.error(e("errors.generic"),e("errors.sendEmailFailed"))}finally{fe(!1)}};return i.jsxs("div",{className:"min-h-screen flex items-center justify-center bg-background overflow-hidden relative isolate",children:[i.jsx("div",{className:"fixed inset-0 z-0 pointer-events-none bg-gradient-to-b from-background via-background to-background",children:i.jsx("div",{className:"absolute top-0 left-1/2 -translate-x-1/2 w-[800px] h-[600px] bg-[radial-gradient(ellipse_at_center,hsl(var(--accent)/0.15)_0%,transparent_70%)]"})}),i.jsx("div",{className:"fixed inset-0 z-0 pointer-events-none bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj48ZmlsdGVyIGlkPSJhIiB4PSIwIiB5PSIwIj48ZmVUdXJidWxlbmNlIGJhc2VGcmVxdWVuY3k9Ii43NSIgc3RpdGNoVGlsZXM9InN0aXRjaCIgdHlwZT0iZnJhY3RhbE5vaXNlIi8+PGZlQ29sb3JNYXRyaXggdHlwZT0ic2F0dXJhdGUiIHZhbHVlcz0iMCIvPjwvZmlsdGVyPjxwYXRoIGQ9Ik0wIDBoMzAwdjMwMEgweiIgZmlsdGVyPSJ1cmwoI2EpIiBvcGFjaXR5PSIuMDUiLz48L3N2Zz4=')] opacity-50"}),i.jsx("div",{className:"fixed top-0 left-0 right-0 h-64 z-0 pointer-events-none bg-gradient-to-b from-accent/5 to-transparent"}),i.jsx(Ze.div,{className:"fixed top-1/4 left-1/4 w-96 h-96 z-0 pointer-events-none bg-accent/10 rounded-full blur-3xl",animate:{x:[0,50,0],y:[0,-30,0],scale:[1,1.1,1]},transition:{duration:8,repeat:1/0,ease:"easeInOut"}}),i.jsx(Ze.div,{className:"fixed bottom-1/4 right-1/4 w-96 h-96 z-0 pointer-events-none bg-accent/8 rounded-full blur-3xl",animate:{x:[0,-30,0],y:[0,50,0],scale:[1.1,1,1.1]},transition:{duration:10,repeat:1/0,ease:"easeInOut"}}),i.jsx("div",{className:"relative z-10 w-full max-w-md px-4",style:S?{perspective:"1000px"}:void 0,children:i.jsxs(Ze.div,{onMouseMove:S?re:void 0,onMouseLeave:S?de:void 0,style:S?{rotateX:ae,rotateY:G,transformStyle:"preserve-3d"}:void 0,className:"relative",children:[i.jsxs("div",{className:"absolute -inset-1 rounded-2xl overflow-hidden pointer-events-none",children:[i.jsxs("div",{className:"absolute inset-0",children:[i.jsx(Ze.div,{className:"absolute top-0 left-0 right-0 h-[2px]",style:{background:"linear-gradient(90deg, transparent, hsl(var(--accent)), transparent)",boxShadow:"0 0 20px 5px hsl(var(--accent) / 0.5)"},animate:{x:["-100%","100%"]},transition:{duration:3,repeat:1/0,ease:"linear"}}),i.jsx(Ze.div,{className:"absolute top-0 right-0 bottom-0 w-[2px]",style:{background:"linear-gradient(180deg, transparent, hsl(var(--accent)), transparent)",boxShadow:"0 0 20px 5px hsl(var(--accent) / 0.5)"},animate:{y:["-100%","100%"]},transition:{duration:3,repeat:1/0,ease:"linear",delay:.75}}),i.jsx(Ze.div,{className:"absolute bottom-0 left-0 right-0 h-[2px]",style:{background:"linear-gradient(90deg, transparent, hsl(var(--accent)), transparent)",boxShadow:"0 0 20px 5px hsl(var(--accent) / 0.5)"},animate:{x:["100%","-100%"]},transition:{duration:3,repeat:1/0,ease:"linear",delay:1.5}}),i.jsx(Ze.div,{className:"absolute top-0 left-0 bottom-0 w-[2px]",style:{background:"linear-gradient(180deg, transparent, hsl(var(--accent)), transparent)",boxShadow:"0 0 20px 5px hsl(var(--accent) / 0.5)"},animate:{y:["100%","-100%"]},transition:{duration:3,repeat:1/0,ease:"linear",delay:2.25}})]}),i.jsx("div",{className:"absolute inset-0 rounded-2xl border border-accent/20"})]}),i.jsxs("div",{className:"relative bg-card/80 backdrop-blur-xl rounded-2xl border border-border/50 p-8 shadow-2xl",children:[i.jsx("div",{className:"absolute inset-0 rounded-2xl bg-gradient-to-br from-accent/5 via-trans
564parent to-accent/5 opacity-50 pointer-events-none"}),i.jsxs("div",{className:"relative flex flex-col items-center mb-8",children:[i.jsx(Ze.div,{className:"mb-4",whileHover:{scale:1.05},transition:{type:"spring",stiffness:400,damping:10},children:i.jsx("img",{src:RX,alt:"Zapdata",width:203,height:48,fetchPriority:"high",decoding:"async",className:"h-12 w-auto object-contain"})}),i.jsx("h1",{className:"text-2xl font-bold text-foreground",children:e(w==="login"?"welcomeBack":"welcome")}),i.jsx("p",{className:"text-muted-foreground text-sm mt-1",children:e(w==="login"?"loginSubtitle":"signupSubtitle")})]}),i.jsxs("div",{className:"relative flex mb-6 bg-muted/50 rounded-lg p-1",children:[i.jsx("button",{type:"button",onClick:()=>P("login"),className:ve("flex-1 py-2 px-4 rounded-md text-sm font-medium transition-all duration-200",w==="login"?"bg-accent text-accent-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:e("tabs.login")}),i.jsx("button",{type:"button",onClick:()=>P("signup"),className:ve("flex-1 py-2 px-4 rounded-md text-sm font-medium transition-all duration-200",w==="signup"?"bg-accent text-accent-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:e("tabs.signup")})]}),w==="login"&&i.jsxs(Ze.form,{onSubmit:ue,className:"relative space-y-4",initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.2},children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"login-email",className:"text-foreground/80 text-sm",children:e("common:fields.email")}),i.jsxs("div",{className:"relative",children:[i.jsx(Ei,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"login-email",type:"text",placeholder:e("placeholders.email"),value:t,onChange:he=>a(he.target.value),onFocus:()=>k("login-email"),onBlur:()=>k(null),disabled:p,className:"pl-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all"}),E==="login-email"&&i.jsx(Ze.div,{className:"absolute inset-0 rounded-md border-2 border-accent pointer-events-none",layoutId:"input-focus",initial:{opacity:0}
564,animate:{opacity:1},exit:{opacity:0}})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"login-password",className:"text-foreground/80 text-sm",children:e("common:fields.password")}),i.jsxs("div",{className:"relative",children:[i.jsx(Nr,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"login-password",type:f?"text":"password",placeholder:e("placeholders.password"),value:o,onChange:he=>n(he.target.value),onFocus:()=>k("login-password"),onBlur:()=>k(null),disabled:p,className:"pl-10 pr-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all"}),i.jsx("button",{type:"button",onClick:()=>b(!f),className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",children:f?i.jsx(pc,{className:"h-4 w-4"}):i.jsx(hc,{className:"h-4 w-4"})}),E==="login-password"&&i.jsx(Ze.div,{className:"absolute inset-0 rounded-md border-2 border-accent pointer-events-none",layoutId:"input-focus",initial:{opacity:0}
564,animate:{opacity:1},exit:{opacity:0}})]})]}),i.jsx("div",{className:"text-center",children:i.jsx("button",{type:"button",onClick:()=>L(!0),className:"text-sm text-muted-foreground hover:text-accent transition-colors",children:e("forgotPassword.link")})}),i.jsx(Kf,{action:"login",onVerify:he=>ie(he),onExpire:()=>ie(null),onError:()=>ie(null)}),i.jsxs("div",{className:"relative pt-2",children:[i.jsx("div",{className:"absolute -inset-1 rounded-lg bg-gradient-to-r from-accent/50 to-accent/30 opacity-50 blur-sm animate-pulse pointer-events-none"}),i.jsx("button",{type:"submit",disabled:p,className:"relative w-full py-3 px-4 bg-accent hover:bg-accent/90 text-accent-foreground font-medium rounded-lg flex items-center justify-center gap-2 transition-all disabled:opacity-50 hover:scale-[1.02] active:scale-[0.98]",children:p?i.jsx("div",{className:"w-5 h-5 border-2 border-accent-foreground/30 border-t-accent-foreground rounded-full animate-spin"}):i.jsxs(i.Fragment,{children:[e("tabs.login"),i.jsx(Or,{className:"h-4 w-4"})]})})]})]}),w==="signup"&&i.jsxs(Ze.form,{onSubmit:Ke,className:"relative space-y-4",initial:{opacity:0,x:20},animate:{opacity:1,x:0},transition:{duration:.2},children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"signup-email",className:"text-foreground/80 text-sm",children:e("common:fields.email")}),i.jsxs("div",{className:"relative",children:[i.jsx(Ei,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"signup-email",type:"email",placeholder:e("placeholders.email"),value:r,onChange:he=>s(he.target.value),onFocus:()=>k("signup-email"),onBlur:()=>k(null),disabled:p,className:"pl-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all"})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"signup-password",className:"text-foreground/80 text-sm",children:e("common:fields.password")}),i.jsxs("div",{className:"relative",children:[i.jsx(Nr,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"signup-password",type:y?"text":"password",placeholder:e("placeholders.createPassword"),value:l,onChange:he=>c(he.target.value),onFocus:()=>k("signup-password"),onBlur:()=>k(null),disabled:p,className:"pl-10 pr-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all"}),i.jsx("button",{type:"button",onClick:()=>x(!y),className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",children:y?i.jsx(pc,{className:"h-4 w-4"}):i.jsx(hc,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"signup-confirm-password",className:"text-foreground/80 text-sm",children:e("common:fields.confirmPassword")}),i.jsxs("div",{className:"relative",children:[i.jsx(Nr,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"signup-confirm-password",type:y?"text":"password",placeholder:e("placeholders.confirmPassword"),value:d,onChange:he=>u(he.target.value),onFocus:()=>k("signup-confirm"),onBlur:()=>k(null),disabled:p,className:"pl-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all"})]})]}),i.jsx(Kf,{action:"signup",onVerify:he=>pe(he),onExpire:()=>pe(null),onError:()=>pe(null)}),i.jsxs("div",{className:"relative pt-2",children:[i.jsx("div",{className:"absolute -inset-1 rounded-lg bg-gradient-to-r from-accent/50 to-accent/30 opacity-50 blur-sm animate-pulse pointer-events-none"}),i.jsx("button",{type:"submit",disabled:p||!m,className:"relative w-full py-3 px-4 bg-accent hover:bg-accent/90 text-accent-foreground font-medium rounded-lg flex items-center justify-center gap-2 transition-all disabled:opacity-50 hover:scale-[1.02] active:scale-[0.98]",children:p?i.jsx("div",{className:"w-5 h-5 border-2 border-accent-foreground/30 border-t-accent-foreground rounded-full animate-spin"}):i.jsxs(i.Fragment,{children:[e("tabs.signup"),i.jsx(Or,{className:"h-4 w-4"})]})})]}),i.jsxs("div",{className:"flex items-start gap-2 mt-3",children:[i.jsx("input",{type:"checkbox",id:"privacy-accept",checked:m,onChange:he=>h(he.target.checked),required:!0,className:"mt-0.5 h-3.5 w-3.5 rounded border-border accent-accent"}),i.jsxs("label",{htmlFor:"privacy-accept",className:"text-[11px] leading-tight text-muted-foreground
564/70",children:[e("terms.agreement")," ",i.jsx("a",{href:"/termos",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-muted-foreground transition-colors",children:e("terms.termsOfService")})," ",e("terms.and")," ",i.jsx("a",{href:"/privacidade",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-muted-foreground transition-colors",children:e("terms.privacyPolicy")})]})]}),i.jsx(jX,{})]})]})]})}),i.jsx(ya,{open:I,children:i.jsxs(sa,{className:"sm:max-w-md [&>button]:hidden",onPointerDownOutside:he=>he.preventDefault(),onEscapeKeyDown:he=>he.preventDefault(),onInteractOutside:he=>he.preventDefault(),children:[i.jsxs(xa,{children:[i.jsxs(wa,{className:"flex items-center gap-2",children:[i.jsx(qs,{className:"h-5 w-5 text-accent"}),e("mfaDialog.title")]}),i.jsx(wo,{children:e("mfaDialog.description")})]}),i.jsxs("div",{className:"space-y-6 py-4",children:[i.jsx("div",{className:"flex justify-center",children:i.jsx(sP,{maxLength:6,value:q,onChange:N,autoFocus:!0,inputMode:"numeric",pattern:"[0-9]*",children:i.jsxs(lP,{className:"gap-2",children:[i.jsx(Fo,{index:0,className:"w-12 h-12 text-lg border-2"}),i.jsx(Fo,{index:1,className:"w-12 h-12 text-lg border-2"}),i.jsx(Fo,{index:2,className:"w-12 h-12 text-lg border-2"}),i.jsx(Fo,{index:3,className:"w-12 h-12 text-lg border-2"}),i.jsx(Fo,{index:4,className:"w-12 h-12 text-lg border-2"}),i.jsx(Fo,{index:5,className:"w-12 h-12 text-lg border-2"})]})})}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(vl,{id:"remember-device",checked:V,onCheckedChange:he=>H(he)}),i.jsx(Be,{htmlFor:"remember-device",className:"text-sm cursor-pointer",children:e("mfaDialog.rememberDevice")})]}),i.jsxs("div",{className:"flex gap-3",children:[i.jsx(we,{onClick:Ee,disabled:q.length!==6||_,className:"flex-1",children:_?i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"h-4 w-4 mr-2 animate-spin"}),e("mfaDialog.verifying")]}):e("mfaDialog.verify")}),i.jsx(we,{variant:"outline",onClick:Te,children:e("common:actions.cancel")})]})]})]})}),i.jsx(ya,{open:j,onOpenChange:L,children:i.jsxs(sa,{className:"sm:max-w-md bg-card/95 backdrop-blur-xl border-border/50",children:[i.jsxs(xa,{children:[i.jsxs(wa,{className:"flex items-center gap-2 text-lg",children:[i.jsx(Ei,{className:"h-5 w-5 text-accent"}),e("forgotPassword.dialogTitle")]}),i.jsx(wo,{children:e("forgotPassword.dialogDescription")})]}),i.jsxs("div",{className:"space-y-4 py-2",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"forgot-email",className:"text-foreground/80 text-sm",children:e("common:fields.email")}),i.jsxs("div",{className:"relative",children:[i.jsx(Ei,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none"}),i.jsx(it,{id:"forgot-email",type:"email",placeholder:e("placeholders.email"),value:Q,onChange:he=>$(he.target.value),disabled:X,className:"pl-10 bg-muted/30 border-border/50 focus:border-accent focus:bg-muted/50 transition-all",onKeyDown:he=>{he.key==="Enter"&&(he.preventDefault(),at())}})]})]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsx(we,{onClick:at,disabled:X||!Q.trim(),className:"flex-1 bg-accent hover:bg-accent/90 text-accent-foreground",children:X?i.jsxs(i.Fragment,{children:[i.jsx(xt,{className:"h-4 w-4 mr-2 animate-spin"}),e("forgotPassword.sending")]}):e("forgotPassword.sendButton")}),i.jsx(we,{variant:"outline",onClick:()=>{L(!1),$("")},children:e("common:actions.cancel")})]})]})]})})]})},OX=()=>{const{t:e}=tt(["dashboard","common"]),t=Ao(),a=Rt(),[o,n]=g.useState(!1);return g.useEffect(()=>{const r=new URLSearchParams(window.location.search),s=new URLSearchParams(window.location.hash.replace("#","").split("?")[1]||""),l=r.has("code")||s.has("code");if(r.has("state")||s.has("state"),l||window.location.href.includes("code=")){n(!0),setTimeout(()=>{a("/ads/settings")},2e3);return}console.error("404 Error: User attempted to access non-existent route:",t.pathname)},[t.pathname,a]),o?i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:i.jsxs("div",{className:"text-center space-y-4",children:[i.jsx(xt,{className:"h-12 w-12 animate-spin text-primary mx-auto"}),i.jsx("p",{className:"text-lg text-muted-foreground",children:e("notFound.connectingFacebook")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:e("notFound.processingAuth")})]})}):i.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:i.jsxs("div",{className:"text-center",children:[i.jsx("h1",{className:"mb-4 text-4xl font-bold text-foreground",children:"404"}),i.jsx("p",{className:"mb-4 text-xl text-muted-foreground",children:e("notFound.title")}),i.jsx("a",{href:"/",className:"text-primary underline hover:text-primary/80",children:e("notFound.backHome")})]})})};var um="Progress",mm=100,[BX,xJ]=La(um),[zX,VX]=BX(um),cP=g.forwardRef((e,t)=>
564{const{__scopeProgress:a,value:o=null,max:n,getValueLabel:r=qX,...s}=e;(n||n===0)&&!Yf(n)&&console.error(UX(`${n}`,"Progress"));const l=Yf(n)?n:mm;o!==null&&!Qf(o,l)&&console.error(WX(`${o}`,"Progress"));const c=Qf(o,l)?o:null,d=zs(c)?r(c,l):void 0;return i.jsx(zX,{scope:a,value:c,max:l,children:i.jsx(_e.div,{"aria-valuemax":l,"aria-valuemin":0,"aria-valuenow":zs(c)?c:void 0,"aria-valuetext":d,role:"progressbar","data-state":mP(c,l),"data-value":c??void 0,"data-max":l,...s,ref:t})})});cP.displayName=um;var dP="ProgressIndicator",uP=g.forwardRef((e,t)=>{const{__scopeProgress:a,...o}=e,n=VX(dP,a);return i.jsx(_e.div,{"data-state":mP(n.value,n.max),"data-value":n.value??void 0,"data-max":n.max,...o,ref:t})});uP.displayName=dP;function qX(e,t){return`${Math.round(e/t*100)}%`}function mP(e,t){return e==null?"indeterminate":e===t?"complete":"loading"}function zs(e){return typeof e=="number"}function Yf(e){return zs(e)&&!isNaN(e)&&e>0}function Qf(e,t){return zs(e)&&!isNaN(e)&&e<=t&&e>=0}function UX(e,t){return`Invalid prop \`max\` of value \`${e}\` supplied to \`${t}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${mm}\`.`}function WX(e,t){return`Invalid prop \`value\` of value \`${e}\` supplied to \`${t}\`. The \`value\` prop must be: 565 - a positive number 566 - less than the value passed to \`max\` (or ${mm} if no \`max\` prop is set) 567 - \`null\` or \`undefined\` if the progress is indeterminate. 568 569Defaulting to \`null\`.`}var pP=cP,$X=uP;const hP=g.forwardRef(({className:e,value:t,...a},o)=>i.jsx(pP,{ref:o,className:ve("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...a,children:i.jsx($X,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})}));hP.displayName=pP.displayName;function $i(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var fP={exports:{}};/*! 570 571JSZip v3.10.1 - A JavaScript class for generating and reading zip files 572<http://stuartk.com/jszip> 573 574(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com> 575Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. 576 577JSZip uses the library pako released under the MIT license : 578https://github.com/nodeca/pako/blob/main/LICENSE 579*/(function(e,t){(function(a){e.exports=a()})(function(){return function a(o,n,r){function s(d,u){if(!n[d]){if(!o[d]){var m=typeof $i=="function"&&$i;if(!u&&m)return m(d,!0);if(l)return l(d,!0);var h=new Error("Cannot find module '"+d+"'");throw h.code="MODULE_NOT_FOUND",h}var p=n[d]={exports:{}};o[d][0].call(p.exports,function(v){var f=o[d][1][v];return s(f||v)},p,p.exports,a,o,n,r)}return n[d].exports}for(var l=typeof $i=="function"&&$i,c=0;c<r.length;c++)s(r[c]);return s}({1:[function(a,o,n){var r=a("./utils"),s=a("./support"),l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.encode=function(c){for(var d,u,m,h,p,v,f,b=[],y=0,x=c.length,w=x,P=r.getTypeOf(c)!=="string";y<c.length;)w=x-y,m=P?(d=c[y++],u=y<x?c[y++]:0,y<x?c[y++]:0):(d=c.charCodeAt(y++),u=y<x?c.charCodeAt(y++):0,y<x?c.charCodeAt(y++):0),h=d>>2,p=(3&d)<<4|u>>4,v=1<w?(15&u)<<2|m>>6:64,f=2<w?63&m:64,b.push(l.charAt(h)+l.charAt(p)+l.charAt(v)+l.charAt(f));return b.join("")},n.decode=function(c){var d,u,m,h,p,v,f=0,b=0,y="data:";if(c.substr(0,y.length)===y)throw new Error("Invalid base64 input, it looks like a data url.");var x,w=3*(c=c.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(c.charAt(c.length-1)===l.charAt(64)&&w--,c.charAt(c.length-2)===l.charAt(64)&&w--,w%1!=0)throw new Error("Invalid base64 input, bad content length.");for(x=s.uint8array?new Uint8Array(0|w):new Array(0|w);f<c.length;)d=l.indexOf(c.charAt(f++))<<2|(h=l.indexOf(c.charAt(f++)))>>4,u=(15&h)<<4|(p=l.indexOf(c.charAt(f++)))>>2,m=(3&p)<<6|(v=l.indexOf(c.charAt(f++))),x[b++]=d,p!==64&&(x[b++]=u),v!==64&&(x[b++]=m);return x}},{"./support":30,"./utils":32}],2:[function(a,o,n){var r=a("./external"),s=a("./stream/DataWorker"),l=a("./stream/Crc32Probe"),c=a("./stream/DataLengthProbe");function d(u,m,h,p,v){this.compressedSize=u,this.uncompressedSize=m,this.crc32=h,this.compression=p,this.compressedContent=v}d.prototype={getContentWorker:function(){var u=new s(r.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new c("data_length")),m=this;return u.on("end",function(){if(this.streamInfo.data_length!==m.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),u},getCompressedWorker:function(){return new s(r.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},d.createWorkerFrom=function(u,m,h){return u.pipe(new l).pipe(new c("uncompressedSize")).pipe(m.compressWorker(h)).pipe(new c("compressedSize")).withStreamInfo("compression",m)},o.exports=d},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(a,o,n){var r=a("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=a("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(a,o,n){var r=a("./utils"),s=function(){for(var l,c=[],d=0;d<256;d++){l=d;for(var u=0;u<8;u++)l=1&l?3988292384^l>>>1:l>>>1;c[d]=l}return c}();o.exports=function(l,c){return l!==void 0&&l.length?r.getTypeOf(l)!=="str
579ing"?function(d,u,m,h){var p=s,v=h+m;d^=-1;for(var f=h;f<v;f++)d=d>>>8^p[255&(d^u[f])];return-1^d}(0|c,l,l.length,0):function(d,u,m,h){var p=s,v=h+m;d^=-1;for(var f=h;f<v;f++)d=d>>>8^p[255&(d^u.charCodeAt(f))];return-1^d}(0|c,l,l.length,0):0}},{"./utils":32}],5:[function(a,o,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(a,o,n){var r=null;r=typeof Promise<"u"?Promise:a("lie"),o.exports={Promise:r}},{lie:37}],7:[function(a,o,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",s=a("pako"),l=a("./utils"),c=a("./stream/GenericWorker"),d=r?"uint8array":"array";function u(m,h){c.call(this,"FlateWorker/"+m),this._pako=null,this._pakoAction=m,this._pakoOptions=h,this.meta={}}n.magic="\b\0",l.inherits(u,c),u.prototype.processChunk=function(m){this.meta=m.meta,this._pako===null&&this._createPako(),this._pako.push(l.transformTo(d,m.data),!1)},u.prototype.flush=function(){c.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},u.prototype.cleanUp=function(){c.prototype.cleanUp.call(this),this._pako=null},u.prototype._createPako=function(){this._pako=new s[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var m=this;this._pako.onData=function(h){m.push({data:h,meta:m.meta})}},n.compressWorker=function(m){return new u("Deflate",m)},n.uncompressWorker=function(){return new u("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(a,o,n){function r(p,v){var f,b="";for(f=0;f<v;f++)b+=String.fromCharCode(255&p),p>>>=8;return b}function s(p,v,f,b,y,x){var w,P,E=p.file,k=p.compression,S=x!==d.utf8encode,R=l.transformTo("string",x(E.name)),I=l.transformTo("string",d.utf8encode(E.name)),M=E.comment,q=l.transformTo("string",x(M)),N=l.transformTo("string",d.utf8encode(M)),F=I.length!==E.name.length,A=N.length!==M.length,_="",K="",V="",H=E.dir,B=E.date,te={crc32:0,compressedSize:0,uncompressedSize:0};v&&!f||(te.crc32=p.crc32,te.compressedSize=p.compressedSize,te.uncompressedSize=p.uncompressedSize);var j=0;v&&(j|=8),S||!F&&!A||(j|=2048);var L=0,Q=0;H&&(L|=16),y==="UNIX"?(Q=798,L|=function(X,fe){var J=X;return X||(J=fe?16893:33204),(65535&J)<<16}(E.unixPermissions,H)):(Q=20,L|=function(X){return 63&(X||0)}(E.dosPermissions)),w=B.getUTCHours(),w<<=6,w|=B.getUTCMinutes(),w<<=5,w|=B.getUTCSeconds()/2,P=B.getUTCFullYear()-1980,P<<=4,P|=B.getUTCMonth()+1,P<<=5,P|=B.getUTCDate(),F&&(K=r(1,1)+r(u(R),4)+I,_+="up"+r(K.length,2)+K),A&&(V=r(1,1)+r(u(q),4)+N,_+="uc"+r(V.length,2)+V);var $="";return $+=` 580\0`,$+=r(j,2),$+=k.magic,$+=r(w,2),$+=r(P,2),$+=r(te.crc32,4),$+=r(te.compressedSize,4),$+=r(te.uncompressedSize,4),$+=r(R.length,2),$+=r(_.length,2),{fileRecord:m.LOCAL_FILE_HEADER+$+R+_,dirRecord:m.CENTRAL_FILE_HEADER+r(Q,2)+$+r(q.length,2)+"\0\0\0\0"+r(L,4)+r(b,4)+R+_+q}}var l=a("../utils"),c=a("../stream/GenericWorker"),d=a("../utf8"),u=a("../crc32"),m=a("../signature");function h(p,v,f,b){c.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=v,this.zipPlatform=f,this.encodeFileName=b,this.streamFiles=p,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}l.inherits(h,c),h.prototype.push=function(p){var v=p.meta.percent||0,f=this.entriesCount,b=this._sources.length;this.accumulate?this.contentBuffer.push(p):(this.bytesWritten+=p.data.length,c.prototype.push.call(this,{data:p.data,meta:{currentFile:this.currentFile,percent:f?(v+100*(f-b-1))/f:100}}))},h.prototype.openedSource=function(p){this.currentSourceOffset=this.bytesWritten,this.currentFile=p.file.name;var v=this.streamFiles&&!p.file.dir;if(v){var f=s(p,v,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:f.fileRecord,meta:{percent:0}})}else this.accumulate=!0},h.prototype.closedSource=function(p){this.accumulate=!1;var v=this.streamFiles&&!p.file.dir,f=s(p,v,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(f.dirRecord),v)this.push({data:function(b){return m.DATA_DESCRIPTOR+r(b.crc32,4)+r(b.compressedSize,4)+r(b.uncompressedSize,4)}(p),meta:{percent:100}});else for(this.push({data:f.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},h.prototype.flush=function(){for(var p=this.bytesWritten,v=0;v<this.dirRecords.length;v++)this.push({data:this.dirRecords[v],meta:{percent:100}});var f=this.bytesWritten-p,b=function(y,x,w,P,E){var k=l.transformTo("string",E(P));return m.CENTRAL_DIRECTORY_END+"\0\0\0\0"+r(y,2)+r(y,2)+r(x,4)+r(w,4)+r(k.length,2)+k}(this.dirRecords.length,f,p,this.zipComment,this.encodeFileName);this.push({data:b,meta:{percent:100}})},h.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},h.prototype.registerPrevious=function(p){this._sources.push(p);var v=this;return p.on("data",function(f){v.processChunk(f)}),p.on("end",function(){v.closedSource(v.previous.streamInfo),v._sources.length?v.prepareNextSource():v.end()}),p.on("error",function(f){v.error(f)}),this},h.prototype.resume=function(){return!!c.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},h.prototype.error=function(p){var v=this._sources;if(!c.prototype.error.call(this,p))return!1;for(var f=0;f<v.length;f++)try{v[f].error(p)}catch{}return!0},h.prototype.lock=function(){c.prototype.lock.call(this);for(var p=this._sources,v=0;v<p.length;v++)p[v].lock()},o.exports=h},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(a,o,n){var r=a("../compressions"),s=a("./ZipFileWorker");n.generateWorker=function(l,c,d){var u=new s(c.streamFiles,d,c.platform,c.encodeFileName),m=0;try{l.forEach(function(h,p){m++;var v=function(x,w){var P=x||w,E=r[P];if(!E)throw new Error(P+" is not a valid compression method !");return E}(p.options.compression,c.compression),f=p.options.compressionOptions||c.compressionOptions||{},b=p.dir,y=p.date;p._compressWorker(v,f).withStreamInfo("file",{name:h,dir:b,date:y,comment:p.comment||"",unixPermissions:p.unixPermissions,dosPermissions:p.dosPermissions}).pipe(u)}
vendor: 28,503 bytes, line 580
580),u.entriesCount=m}catch(h){u.error(h)}return u}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(a,o,n){function r(){if(!(this instanceof r))return new r;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var s=new r;for(var l in this)typeof this[l]!="function"&&(s[l]=this[l]);return s}}(r.prototype=a("./object")).loadAsync=a("./load"),r.support=a("./support"),r.defaults=a("./defaults"),r.version="3.10.1",r.loadAsync=function(s,l){return new r().loadAsync(s,l)},r.external=a("./external"),o.exports=r},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(a,o,n){var r=a("./utils"),s=a("./external"),l=a("./utf8"),c=a("./zipEntries"),d=a("./stream/Crc32Probe"),u=a("./nodejsUtils");function m(h){return new s.Promise(function(p,v){var f=h.decompressed.getContentWorker().pipe(new d);f.on("error",function(b){v(b)}).on("end",function(){f.streamInfo.crc32!==h.decompressed.crc32?v(new Error("Corrupted zip : CRC32 mismatch")):p()}).resume()})}o.exports=function(h,p){var v=this;return p=r.extend(p||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:l.utf8decode}),u.isNode&&u.isStream(h)?s.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):r.prepareContent("the loaded zip file",h,!0,p.optimizedBinaryString,p.base64).then(function(f){var b=new c(p);return b.load(f),b}).then(function(f){var b=[s.Promise.resolve(f)],y=f.files;if(p.checkCRC32)for(var x=0;x<y.length;x++)b.push(m(y[x]));return s.Promise.all(b)}).then(function(f){for(var b=f.shift(),y=b.files,x=0;x<y.length;x++){var w=y[x],P=w.fileNameStr,E=r.resolve(w.fileNameStr);v.file(E,w.decompressed,{binary:!0,optimizedBinaryString:!0,date:w.date,dir:w.dir,comment:w.fileCommentStr.length?w.fileCommentStr:null,unixPermissions:w.unixPermissions,dosPermissions:w.dosPermissions,createFolders:p.createFolders}),w.dir||(v.file(E).unsafeOriginalName=P)}return b.zipComment.length&&(v.comment=b.zipComment),v})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(a,o,n){var r=a("../utils"),s=a("../stream/GenericWorker");function l(c,d){s.call(this,"Nodejs stream input adapter for "+c),this._upstreamEnded=!1,this._bindStream(d)}r.inherits(l,s),l.prototype._bindStream=function(c){var d=this;(this._stream=c).pause(),c.on("data",function(u){d.push({data:u,meta:{percent:0}})}).on("error",function(u){d.isPaused?this.generatedError=u:d.error(u)}).on("end",function(){d.isPaused?d._upstreamEnded=!0:d.end()})},l.prototype.pause=function(){return!!s.prototype.pause.call(this)&&(this._stream.pause(),!0)},l.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},o.exports=l},{"../stream/GenericWorker":28,"../utils":32}],13:[function(a,o,n){var r=a("readable-stream").Readable;function s(l,c,d){r.call(this,c),this._helper=l;var u=this;l.on("data",function(m,h){u.push(m)||u._helper.pause(),d&&d(h)}).on("error",function(m){u.emit("error",m)}).on("end",function(){u.push(null)})}a("../utils").inherits(s,r),s.prototype._read=function(){this._helper.resume()},o.exports=s},{"../utils":32,"readable-stream":16}],14:[function(a,o,n){o.exports={isNode:typeof Buffer<"u",newBufferFrom:function(r,s){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(r,s);if(typeof r=="number")throw new Error('The "data" argument must not be a number');return new Buffer(r,s)},allocBuffer:function(r){if(Buffer.alloc)return Buffer.alloc(r);var s=new Buffer(r);return s.fill(0),s},isBuffer:function(r){return Buffer.isBuffer(r)},isStream:function(r){return r&&typeof r.on=="function"&&typeof r.pause=="function"&&typeof r.resume=="function"}}},{}],15:[function(a,o,n){function r(E,k,S){var R,I=l.getTypeOf(k),M=l.extend(S||{},u);M.date=M.date||new Date,M.compression!==null&&(M.compression=M.compression.toUpperCase()),typeof M.unixPermissions=="string"&&(M.unixPermissions=parseInt(M.unixPermissions,8)),M.unixPermissions&&16384&M.unixPermissions&&(M.dir=!0),M.dosPermissions&&16&M.dosPermissions&&(M.dir=!0),M.dir&&(E=y(E)),M.createFolders&&(R=b(E))&&x.call(this,R,!0);var q=I==="string"&&M.binary===!1&&M.base64===!1;S&&S.binary!==void 0||(M.binary=!q),(k instanceof m&&k.uncompressedSize===0||M.dir||!k||k.length===0)&&(M.base64=!1,M.binary=!0,k="",M.compression="STORE",I="string");var N=null;N=k instanceof m||k instanceof c?k:v.isNode&&v.isStream(k)?new f(E,k):l.prepareContent(E,k,M.binary,M.optimizedBinaryString,M.base64);var F=new h(E,N,M);this.files[E]=F}var s=a("./utf8"),l=a("./utils"),c=a("./stream/GenericWorker"),d=a("./stream/StreamHelper"),u=a("./defaults"),m=a("./compressedObject"),h=a("./zipObject"),p=a("./generate"),v=a("./nodejsUtils"),f=a("./nodejs/NodejsStreamInputAdapter"),b=function(E){E.slice(-1)==="/"&&(E=E.substring(0,E.length-1));var k=E.lastIndexOf("/");return 0<k?E.substring(0,k):""},y=function(E){return E.slice(-1)!=="/"&&(E+="/"),E},x=function(E,k){return k=k!==void 0?k:u.createFolders,E=y(E),this.files[E]||r.call(this,E,null,{dir:!0,createFolders:k}),this.files[E]};function w(E){return Object.prototype.toString.call(E)==="[object RegExp]"}var P={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(E){var k,S,R;for(k in this.files)R=this.files[k],(S=k.slice(this.root.length,k.length))&&k.slice(0,this.root.length)===this.root&&E(S,R)},filter:function(E){var k=[];return this.forEach(function(S,R){E(S,R)&&k.push(R)}),k},file:function(E,k,S){if(arguments.length!==1)return E=this.root+E,r.call(this,E,k,S),this;if(w(E)){var R=E;return this.filter(function(M,q){return!q.dir&&R.test(M)})}var I=this.files[this.root+E];return I&&!I.dir?I:null},folder:function(E){if(!E)return this;if(w(E))return this.filter(function(I,M){return M.dir&&E.test(I)});var k=this.root+E,S=x.call(this,k),R=this.clone();return R.root=S.name,R},remove:function(E){E=this.root+E;var k=this.files[E];if(k||(E.slice(-1)!=="/"&&(E+="/"),k=this.files[E]),k&&!k.dir)delete this.files[E];else for(var S=this.filter(function(I,M){return M.name.slice(0,E.length)===E}),R=0;R<S.length;R++)delete this.files[S[R].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(E){var k,S={};try{if((S=l.extend(E||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:s.utf8encode})).type=S.type.toLowerCase(),S.compression=S.compression.toUpperCase(),S.type==="binarystring"&&(S.type="string"),!S.type)throw new Error("No output type specified.");l.checkSupport(S.type),S.platform!=="darwin"&&S.platform!=="freebsd"&&S.platform!=="linux"&&S.platform!=="sunos"||(S.platform="UNIX"),S.platform==="win32"&&(S.platform="DOS");var R=S.comment||this.comment||"";k=p.generateWorker(this,S,R)}catch(I){(k=new c("error")).error(I)}return new d(k,S.type||"string",S.mimeType)},generateAsync:function(E,k){return this.generateInternalStream(E).accumulate(k)},generateNodeStream:function(E,k){return(E=E||{}).type||(E.type="nodebuffer"),this.generateInternalStream(E).toNodejsStream(k)}};o.exports=P},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(a,o,n){o.exports=a("stream")},{stream:void 0}],17:[function(a,o,n){var r=a("./DataReader");function s(l){r.call(this,l);for(var c=0;c<this.data.length;c++)l[c]=255&l[c]}a("../utils").inherits(s,r),s.prototype.byteAt=function(l){return this.data[this.zero+l]},s.prototype.lastIndexOfSignature=function(l){for(var c=l.charCodeAt(0),d=l.charCodeAt(1),u=l.charCodeAt(2),m=l.charCodeAt(3),h=this.length-4;0<=h;--h)if(this.data[h]===c&&this.data[h+1]===d&&this.data[h+2]===u&&this.data[h+3]===m)return h-this.zero;return-1},s.prototype.readAndCheckSignature=function(l){var c=l.charCodeAt(0),d=l.charCodeAt(1),u=l.charCodeAt(2),m=l.charCodeAt(3),h=this.readData(4);return c===h[0]&&d===h[1]&&u===h[2]&&m===h[3]},s.prototype.readData=function(l){if(this.checkOffset(l),l===0)return[];var c=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,c},o.exports=s},{"../utils":32,"./DataReader":18}],18:[function(a,o,n){var r=a("../utils");function s(l){this.data=l,this.length=l.length,this.index=0,this.zero=0}s.prototype={checkOffset:function(l){this.checkIndex(this.index+l)},checkIndex:function(l){if(this.length<this.zero+l||l<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+l+"). Corrupted zip ?")},setIndex:function(l){this.checkIndex(l),this.index=l},skip:function(l){this.setIndex(this.index+l)},byteAt:function(){},readInt:function(l){var c,d=0;for(this.checkOffset(l),c=this.index+l-1;c>=this.index;c--)d=(d<<8)+this.byteAt(c);return this.index+=l,d},readString:function(l){return r.transformTo("string",this.readData(l))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var l=this.readInt(4);return new Date(Date.UTC(1980+(l>>25&127),(l>>21&15)-1,l>>16&31,l>>11&31,l>>5&63,(31&l)<<1))}},o.exports=s},{"../utils":32}],19:[function(a,o,n){var r=a("./Uint8ArrayReader");function s(l){r.call(this,l)}a("../utils").inherits(s,r),s.prototype.readData=function(l){this.checkOffset(l);var c=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,c},o.exports=s},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(a,o,n){var r=a("./DataReader");function s(l){r.call(this,l)}a("../utils").inherits(s,r),s.prototype.byteAt=function(l){return this.data.charCodeAt(this.zero+l)},s.prototype.lastIndexOfSignature=function(l){return this.data.lastIndexOf(l)-this.zero},s.prototype.readAndCheckSignature=function(l){return l===this.readData(4)},s.prototype.readData=function(l){this.checkOffset(l);var c=this.data.slice(this.zero+this.index,this.zero+this.index+l);return this.index+=l,c},o.exports=s},{"../utils":32,"./DataReader":18}],21:[function(a,o,n){var r=a("./ArrayReader");function s(l){r.call(this,l)}a("../utils").inherits(s,r),s.prototype.readData=function(l){if(this.checkOffset(l),l===0)return new Uint8Array(0);var c=this.data.subarray(this.zero+this.index,this.zero+this.index+l);return this.index+=l,c},o.exports=s},{"../utils":32,"./ArrayReader":17}],22:[function(a,o,n){var r=a("../utils"),s=a("../support"),l=a("./ArrayReader"),c=a("./StringReader"),d=a("./NodeBufferReader"),u=a("./Uint8ArrayReader");o.exports=function(m){var h=r.getTypeOf(m);return r.checkSupport(h),h!=="string"||s.uint8array?h==="nodebuffer"?new d(m):s.uint8array?new u(r.transformTo("uint8array",m)):new l(r.transformTo("array",m)):new c(m)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(a,o,n){n.LOCAL_FILE_HEADER="PK��",n.CENTRAL_FILE_HEADER="PK��",n.CENTRAL_DIRECTORY_END="PK��",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK�\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK��",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(a,o,n){var r=a("./GenericWorker"),s=a("../utils");function l(c){r.call(this,"ConvertWorker to "+c),this.destType=c}s.inherits(l,r),l.prototype.processChunk=function(c){this.push({data:s.transformTo(this.destType,c.data),meta:c.meta})},o.exports=l},{"../utils":32,"./GenericWorker":28}],25:[function(a,o,n){var r=a("./GenericWorker"),s=a("../crc32");function l(){r.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}a("../utils").inherits(l,r),l.prototype.processChunk=function(c){this.streamInfo.crc32=s(c.data,this.streamInfo.crc32||0),this.push(c)},o.exports=l},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(a,o,n){var r=a("../utils"),s=a("./GenericWorker");function l(c){s.call(this,"DataLengthProbe for "+c),this.propName=c,this.withStreamInfo(c,0)}r.inherits(l,s),l.prototype.processChunk=function(c){if(c){var d=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=d+c.data.length}s.prototype.processChunk.call(this,c)},o.exports=l},{"../utils":32,"./GenericWorker":28}],27:[function(a,o,n){var r=a("../utils"),s=a("./GenericWorker");function l(c){s.call(this,"DataWorker");var d=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,c.then(function(u){d.dataIsReady=!0,d.data=u,d.max=u&&u.length||0,d.type=r.getTypeOf(u),d.isPaused||d._tickAndRepeat()},function(u){d.error(u)})}r.inherits(l,s),l.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this.data=null},l.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,r.delay(this._tickAndRepeat,[],this)),!0)},l.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(r.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},l.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var c=null,d=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":c=this.data.substring(this.index,d);break;case"uint8array":c=this.data.subarray(this.index,d);break;case"array":case"nodebuffer":c=this.data.slice(this.index,d)}return this.index=d,this.push({data:c,meta:{percent:this.max?this.index/this.max*100:0}})},o.exports=l},{"../utils":32,"./GenericWorker":28}],28:[function(a,o,n){function r(s){this.name=s||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(s){this.emit("data",s)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(s){this.emit("error",s)}return!0},error:function(s){return!this.isFinished&&(this.isPaused?this.generatedError=s:(this.isFinished=!0,this.emit("error",s),this.previous&&this.previous.error(s),this.cleanUp()),!0)},on:function(s,l){return this._listeners[s].push(l),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(s,l){if(this._listeners[s])for(var c=0;c<this._listeners[s].length;c++)this._listeners[s][c].call(this,l)},pipe:function(s){return s.registerPrevious(this)},registerPrevious:function(s){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=s.streamInfo,this.mergeStreamInfo(),this.previous=s;var l=this;return s.on("data",function(c){l.processChunk(c)}),s.on("end",function(){l.end()}),s.on("error",function(c){l.error(c)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var s=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),s=!0),this.previous&&this.previous.resume(),!s},flush:function(){},processChunk:function(s){this.push(s)},withStreamInfo:function(s,l){return this.extraStreamInfo[s]=l,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var s in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,s)&&(this.streamInfo[s]=this.extraStreamInfo[s])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var s="Worker "+this.name;return this.previous?this.previous+" -> "+s:s}},o.exports=r},{}],29:[function(a,o,n){var r=a("../utils"),s=a("./ConvertWorker"),l=a("./GenericWorker"),c=a("../base64"),d=a("../support"),u=a("../external"),m=null;if(d.nodestream)try{m=a("../nodejs/NodejsStreamOutputAdapter")}catch{}function h(v,f){return new u.Promise(function(b,y){var x=[],w=v._internalType,P=v._outputType,E=v._mimeType;v.on("data",function(k,S){x.push(k),f&&f(S)}).on("error",function(k){x=[],y(k)}).on("end",function(){try{var k=function(S,R,I){switch(S){case"blob":return r.newBlob(r.transformTo("arraybuffer",R),I);case"base64":return c.encode(R);default:return r.transformTo(S,R)}}(P,function(S,R){var I,M=0,q=null,N=0;for(I=0;I<R.length;I++)N+=R[I].length;switch(S){case"string":return R.join("");case"array":return Array.prototype.concat.apply([],R);case"uint8array":for(q=new Uint8Array(N),I=0;I<R.length;I++)q.set(R[I],M),M+=R[I].length;return q;case"nodebuffer":return Buffer.concat(R);default:throw new Error("concat : unsupported type '"+S+"'")}}(w,x),E);b(k)}catch(S){y(S)}x=[]}).resume()})}function p(v,f,b){var y=f;switch(f){case"blob":case"arraybuffer":y="uint8array";break;case"base64":y="string"}try{this._internalType=y,this._outputType=f,this._mimeType=b,r.checkSupport(y),this._worker=v.pipe(new s(y)),v.lock()}catch(x){this._worker=new l("error"),this._worker.error(x)}}p.prototype={accumulate:function(v){return h(this,v)},on:function(v,f){var b=this;return v==="data"?this._worker.on(v,function(y){f.call(b,y.data,y.meta)}):this._worker.on(v,function(){r.delay(f,arguments,b)}),this},resume:function(){return r.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(v){if(r.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new m(this,{objectMode:this._outputType!=="nodebuffer"},v)}},o.exports=p},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(a,o,n){if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",n.nodebuffer=typeof Buffer<"u",n.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")n.blob=!1;else{var r=new ArrayBuffer(0);try{n.blob=new Blob([r],{type:"application/zip"}).size===0}catch{try{var s=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);s.append(r),n.blob=s.getBlob("application/zip").size===0}catch{n.blob=!1}}}try{n.nodestream=!!a("readable-stream").Readable}catch{n.nodestream=!1}},{"readable-stream":16}],31:[function(a,o,n){for(var r=a("./utils"),s=a("./support"),l=a("./nodejsUtils"),c=a("./stream/GenericWorker"),d=new Array(256),u=0;u<256;u++)d[u]=252<=u?6:248<=u?5:240<=u?4:224<=u?3:192<=u?2:1;d[254]=d[254]=1;function m(){c.call(this,"utf-8 decode"),this.leftOver=null}function h(){c.call(this,"utf-8 encode")}n.utf8encode=function(p){return s.nodebuffer?l.newBufferFrom(p,"utf-8"):function(v){var f,b,y,x,w,P=v.length,E=0;for(x=0;x<P;x++)(64512&(b=v.charCodeAt(x)))==55296&&x+1<P&&(64512&(y=v.charCodeAt(x+1)))==56320&&(b=65536+(b-55296<<10)+(y-56320),x++),E+=b<128?1:b<2048?2:b<65536?3:4;for(f=s.uint8array?new Uint8Array(E):new Array(E),x=w=0;w<E;x++)(64512&(b=v.charCodeAt(x)))==55296&&x+1<P&&(64512&(y=v.charCodeAt(x+1)))==56320&&(b=65536+(b-55296<<10)+(y-56320),x++),b<128?f[w++]=b:(b<2048?f[w++]=192|b>>>6:(b<65536?f[w++]=224|b>>>12:(f[w++]=240|b>>>18,f[w++]=128|b>>>12&63),f[w++]=128|b>>>6&63),f[w++]=128|63&b);return f}(p)},n.utf8decode=function(p){return s.nodebuffer?r.transformTo("nodebuffer",p).toString("utf-8"):function(v){var f,b,y,x,w=v.length,P=new Array(2*w);for(f=b=0;f<w;)if((y=v[f++])<128)P[b++]=y;else if(4<(x=d[y]))P[b++]=65533,f+=x-1;else{for(y&=x===2?31:x===3?15:7;1<x&&f<w;)y=y<<6|63&v[f++],x--;1<x?P[b++]=65533:y<65536?P[b++]=y:(y-=65536,P[b++]=55296|y>>10&1023,P[b++]=56320|1023&y)}return P.length!==b&&(P.subarray?P=P.subarray(0,b):P.length=b),r.applyFromCharCode(P)}(p=r.transformTo(s.uint8array?"uint8array":"array",p))},r.inherits(m,c),m.prototype.processChunk=function(p){var v=r.transformTo(s.uint8array?"uint8array":"array",p.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var f=v;(v=new Uint8Array(f.length+this.leftOver.length)).set(this.leftOver,0),v.set(f,this.leftOver.length)}else v=this.leftOver.concat(v);this.leftOver=null}var b=function(x,w){var P;for((w=w||x.length)>x.length&&(w=x.length),P=w-1;0<=P&&(192&x[P])==128;)P--;return P<0||P===0?w:P+d[x[P]]>w?P:w}(v),y=v;b!==v.length&&(s.uint8array?(y=v.subarray(0,b),this.leftOver=v.subarray(b,v.length)):(y=v.slice(0,b),this.leftOver=v.slice(b,v.length))),this.push({data:n.utf8decode(y),meta:p.meta})},m.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=m,r.inherits(h,c),h.prototype.processChunk=function(p){this.push({data:n.utf8encode(p.data),meta:p.meta})},n.Utf8EncodeWorker=h},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(a,o,n){var r=a("./support"),s=a("./base64"),l=a("./nodejsUtils"),c=a("./external");function d(f){return f}function u(f,b){for(var y=0;y<f.length;++y)b[y]=255&f.charCodeAt(y);return b}a("setimmediate"),n.newBlob=function(f,b){n.checkSupport("blob");try{return new Blob([f],{type:b})}catch{try{var y=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return y.append(f),y.getBlob(b)}catch{throw new Error("Bug : can't construct the Blob.")}}};var m={stringifyByChunk:function(f,b,y){var x=[],w=0,P=f.length;if(P<=y)return String.fromCharCode.apply(null,f);for(;w<P;)b==="array"||b==="nodebuffer"?x.push(String.fromCharCode.apply(null,f.slice(w,Math.min(w+y,P)))):x.push(String.fromCharCode.apply(null,f.subarray(w,Math.min(w+y,P)))),w+=y;return x.join("")},stringifyByChar:function(f){for(var b="",y=0;y<f.length;y++)b+=String.fromCharCode(f[y]);return b},applyCanBeUsed:{uint8array:function(){try{return r.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return r.nodebuffer&&String.fromCharCode.apply(null,l.allocBuffer(1)).length===1}catch{return!1}}()}};function h(f){var b=65536,y=n.getTypeOf(f),x=!0;if(y==="uint8array"?x=m.applyCanBeUsed.uint8array:y==="nodebuffer"&&(x=m.applyCanBeUsed.nodebuffer),x)for(;1<b;)try{return m.stringifyByChunk(f,y,b)}catch{b=Math.floor(b/2)}return m.stringifyByChar(f)}function p(f,b){for(var y=0;y<f.length;y++)b[y]=f[y];return b}n.applyFromCharCode=h;var v={};v.string={string:d,array:function(f){return u(f,new Array(f.length))},arraybuffer:function(f){return v.string.uint8array(f).buffer},uint8array:function(f){return u(f,new Uint8Array(f.length))},nodebuffer:function(f){return u(f,l.allocBuffer(f.length))}},v.array={string:h,array:d,arraybuffer:function(f){return new Uint8Array(f).buffer},uint8array:function(f){return new Uint8Array(f)},nodebuffer:function(f){return l.newBufferFrom(f)}},v.arraybuffer={string:function(f){return h(new Uint8Array(f))},array:function(f){return p(new Uint8Array(f),new Array(f.byteLength))},arraybuffer:d,uint8array:function(f){return new Uint8Array(f)},nodebuffer:function(f){return l.newBufferFrom(new Uint8Array(f))}},v.uint8array={string:h,array:function(f){return p(f,new Array(f.length))},arraybuffer:function(f){return f.buffer},uint8array:d,nodebuffer:function(f){return l.newBufferFrom(f)}},v.nodebuffer={string:h,array:function(f){return p(f,new Array(f.length))},arraybuffer:function(f){return v.nodebuffer.uint8array(f).buffer},uint8array:function(f){return p(f,new Uint8Array(f.length))},nodebuffer:d},n.transformTo=function(f,b){if(b=b||"",!f)return b;n.checkSupport(f);var y=n.getTypeOf(b);return v[y][f](b)},n.resolve=function(f){for(var b=f.split("/"),y=[],x=0;x<b.length;x++){var w=b[x];w==="."||w===""&&x!==0&&x!==b.length-1||(w===".."?y.pop():y.push(w))}return y.join("/")},n.getTypeOf=function(f){return typeof f=="string"?"string":Object.prototype.toString.call(f)==="[object Array]"?"array":r.nodebuffer&&l.isBuffer(f)?"nodebuffer":r.uint8array&&f instanceof Uint8Array?"uint8array":r.arraybuffer&&f instanceof ArrayBuffer?"arraybuffer":void 0},n.checkSupport=function(f){if(!r[f.toLowerCase()])throw new Error(f+" is not supported by this platform")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(f){var b,y,x="";for(y=0;y<(f||"").length;y++)x+="\\x"+((b=f.charCodeAt(y))<16?"0":"")+b.toString(16).toUpperCase();return x},n.delay=function(f,b,y){setImmediate(function(){f.apply(y||null,b||[])})},n.inherits=function(f,b){function y(){}y.prototype=b.prototype,f.prototype=new y},n.extend=function(){var f,b,y={};for(f=0;f<arguments.length;f++)for(b in arguments[f])Object.prototype.hasOwnProperty.call(arguments[f],b)&&y[b]===void 0&&(y[b]=arguments[f][b]);return y},n.prepareContent=function(f,b,y,x,w){return c.Promise.resolve(b).then(function(P){return r.blob&&(P instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(P))!==-1)&&typeof FileReader<"u"?new c.Promise(function(E,k){var S=new FileReader;S.onload=function(R){E(R.target.result)},S.onerror=function(R){k(R.target.error)},S.readAsArrayBuffer(P)}):P}).then(function(P){var E=n.getTypeOf(P);return E?(E==="arraybuffer"?P=n.transformTo("uint8array",P):E==="string"&&(w?P=s.decode(P):y&&x!==!0&&(P=function(k){return u(k,r.uint8array?new Uint8Array(k.length):new Array(k.length))}(P))),P):c.Promise.reject(new Error("Can't read the data of '"+f+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(a,o,n){var r=a("./reader/readerFor"),s=a("./utils"),l=a("./signature"),c=a("./zipEntry"),d=a("./support");function u(m){this.files=[],this.loadOptions=m}u.prototype={checkSignature:function(m){if(!this.reader.readAndCheckSignature(m)){this.reader.index-=4;var h=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+s.pretty(h)+", expected "+s.pretty(m)+")")}},isSignature:function(m,h){var p=this.reader.index;this.reader.setIndex(m);var v=this.reader.readString(4)===h;return this.reader.setIndex(p),v},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var m=this.reader.readData(this.zipCommentLength),h=d.uint8array?"uint8array":"array",p=s.transformTo(h,m);this.zipComment=this.loadOptions.decodeFileName(p)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var m,h,p,v=this.zip64EndOfCentralSize-44;0<v;)m=this.reader.readInt(2),h=this.reader.readInt(4),p=this.reader.readData(h),this.zip64ExtensibleData[m]={id:m,length:h,value:p}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var m,h;for(m=0;m<this.files.length;m++)h=this.files[m],this.reader.setIndex(h.localHeaderOffset),this.checkSignature(l.LOCAL_FILE_HEADER),h.readLocalPart(this.reader),h.handleUTF8(),h.processAttributes()},readCentralDir:function(){var m;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(l.CENTRAL_FILE_HEADER);)(m=new c({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(m);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var m=this.reader.lastIndexOfSignature(l.CENTRAL_DIRECTORY_END);if(m<0)throw this.isSignature(0,l.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip f
580ile ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(m);var h=m;if(this.checkSignature(l.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===s.MAX_VALUE_16BITS||this.diskWithCentralDirStart===s.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===s.MAX_VALUE_16BITS||this.centralDirRecords===s.MAX_VALUE_16BITS||this.centralDirSize===s.MAX_VALUE_32BITS||this.centralDirOffset===s.MAX_VALUE_32BITS){if(this.zip64=!0,(m=this.reader.lastIndexOfSignature(l.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(m),this.checkSignature(l.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,l.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(l.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(l.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var p=this.centralDirOffset+this.centralDirSize;this.zip64&&(p+=20,p+=12+this.zip64EndOfCentralSize);var v=h-p;if(0<v)this.isSignature(h,l.CENTRAL_FILE_HEADER)||(this.reader.zero=v);else if(v<0)throw new Error("Corrupted zip: missing "+Math.abs(v)+" bytes.")},prepareReader:function(m){this.reader=r(m)},load:function(m){this.prepareReader(m),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},o.exports=u},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(a,o,n){var r=a("./reader/readerFor"),s=a("./utils"),l=a("./compressedObject"),c=a("./crc32"),d=a("./utf8"),u=a("./compressions"),m=a("./support");function h(p,v){this.options=p,this.loadOptions=v}h.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(p){var v,f;if(p.skip(22),this.fileNameLength=p.readInt(2),f=p.readInt(2),this.fileName=p.readData(this.fileNameLength),p.skip(f),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((v=function(b){for(var y in u)if(Object.prototype.hasOwnProperty.call(u,y)&&u[y].magic===b)return u[y];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new l(this.compressedSize,this.uncompressedSize,this.crc32,v,p.readData(this.compressedSize))},readCentralPart:function(p){this.versionMadeBy=p.readInt(2),p.skip(2),this.bitFlag=p.readInt(2),this.compressionMethod=p.readString(2),this.date=p.readDate(),this.crc32=p.readInt(4),this.compressedSize=p.readInt(4),this.uncompressedSize=p.readInt(4);var v=p.readInt(2);if(this.extraFieldsLength=p.readInt(2),this.fileCommentLength=p.readInt(2),this.diskNumberStart=p.readInt(2),this.internalFileAttributes=p.readInt(2),this.externalFileAttributes=p.readInt(4),this.localHeaderOffset=p.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");p.skip(v),this.readExtraFields(p),this.parseZIP64ExtraField(p),this.fileComment=p.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var p=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),p==0&&(this.dosPermissions=63&this.externalFileAttributes),p==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var p=r(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=p.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=p.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&
vendor: 55,373 bytes, line 580
580(this.localHeaderOffset=p.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=p.readInt(4))}},readExtraFields:function(p){var v,f,b,y=p.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});p.index+4<y;)v=p.readInt(2),f=p.readInt(2),b=p.readData(f),this.extraFields[v]={id:v,length:f,value:b};p.setIndex(y)},handleUTF8:function(){var p=m.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=d.utf8decode(this.fileName),this.fileCommentStr=d.utf8decode(this.fileComment);else{var v=this.findExtraFieldUnicodePath();if(v!==null)this.fileNameStr=v;else{var f=s.transformTo(p,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(f)}var b=this.findExtraFieldUnicodeComment();if(b!==null)this.fileCommentStr=b;else{var y=s.transformTo(p,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(y)}}},findExtraFieldUnicodePath:function(){var p=this.extraFields[28789];if(p){var v=r(p.value);return v.readInt(1)!==1||c(this.fileName)!==v.readInt(4)?null:d.utf8decode(v.readData(p.length-5))}return null},findExtraFieldUnicodeComment:function(){var p=this.extraFields[25461];if(p){var v=r(p.value);return v.readInt(1)!==1||c(this.fileComment)!==v.readInt(4)?null:d.utf8decode(v.readData(p.length-5))}return null}},o.exports=h},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(a,o,n){function r(v,f,b){this.name=v,this.dir=b.dir,this.date=b.date,this.comment=b.comment,this.unixPermissions=b.unixPermissions,this.dosPermissions=b.dosPermissions,this._data=f,this._dataBinary=b.binary,this.options={compression:b.compression,compressionOptions:b.compressionOptions}}var s=a("./stream/StreamHelper"),l=a("./stream/DataWorker"),c=a("./utf8"),d=a("./compressedObject"),u=a("./stream/GenericWorker");r.prototype={internalStream:function(v){var f=null,b="string";try{if(!v)throw new Error("No output type specified.");var y=(b=v.toLowerCase())==="string"||b==="text";b!=="binarystring"&&b!=="text"||(b="string"),f=this._decompressWorker();var x=!this._dataBinary;x&&!y&&(f=f.pipe(new c.Utf8EncodeWorker)),!x&&y&&(f=f.pipe(new c.Utf8DecodeWorker))}catch(w){(f=new u("error")).error(w)}return new s(f,b,"")},async:function(v,f){return this.internalStream(v).accumulate(f)},nodeStream:function(v,f){return this.internalStream(v||"nodebuffer").toNodejsStream(f)},_compressWorker:function(v,f){if(this._data instanceof d&&this._data.compression.magic===v.magic)return this._data.getCompressedWorker();var b=this._decompressWorker();return this._dataBinary||(b=b.pipe(new c.Utf8EncodeWorker)),d.createWorkerFrom(b,v,f)},_decompressWorker:function(){return this._data instanceof d?this._data.getContentWorker():this._data instanceof u?this._data:new l(this._data)}};for(var m=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],h=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},p=0;p<m.length;p++)r.prototype[m[p]]=h;o.exports=r},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(a,o,n){(function(r){var s,l,c=r.MutationObserver||r.WebKitMutationObserver;if(c){var d=0,u=new c(v),m=r.document.createTextNode("");u.observe(m,{characterData:!0}),s=function(){m.data=d=++d%2}}else if(r.setImmediate||r.MessageChannel===void 0)s="document"in r&&"onreadystatechange"in r.document.createElement("script")?function(){var f=r.document.createElement("script");f.onreadystatechange=function(){v(),f.onreadystatechange=null,f.parentNode.removeChild(f),f=null},r.document.documentElement.appendChild(f)}:function(){setTimeout(v,0)};else{var h=new r.MessageChannel;h.port1.onmessage=v,s=function(){h.port2.postMessage(0)}}var p=[];function v(){var f,b;l=!0;for(var y=p.length;y;){for(b=p,p=[],f=-1;++f<y;)b[f]();y=p.length}l=!1}o.exports=function(f){p.push(f)!==1||l||s()}}).call(this,typeof Ai<"u"?Ai:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(a,o,n){var r=a("immediate");function s(){}var l={},c=["REJECTED"],d=["FULFILLED"],u=["PENDING"];function m(y){if(typeof y!="function")throw new TypeError("resolver must be a function");this.state=u,this.queue=[],this.outcome=void 0,y!==s&&f(this,y)}function h(y,x,w){this.promise=y,typeof x=="function"&&(this.onFulfilled=x,this.callFulfilled=this.otherCallFulfilled),typeof w=="function"&&(this.onRejected=w,this.callRejected=this.otherCallRejected)}function p(y,x,w){r(function(){var P;try{P=x(w)}catch(E){return l.reject(y,E)}P===y?l.reject(y,new TypeError("Cannot resolve promise with itself")):l.resolve(y,P)})}function v(y){var x=y&&y.then;if(y&&(typeof y=="object"||typeof y=="function")&&typeof x=="function")return function(){x.apply(y,arguments)}}function f(y,x){var w=!1;function P(S){w||(w=!0,l.reject(y,S))}function E(S){w||(w=!0,l.resolve(y,S))}var k=b(function(){x(E,P)});k.status==="error"&&P(k.value)}function b(y,x){var w={};try{w.value=y(x),w.status="success"}catch(P){w.status="error",w.value=P}return w}(o.exports=m).prototype.finally=function(y){if(typeof y!="function")return this;var x=this.constructor;return this.then(function(w){return x.resolve(y()).then(function(){return w})},function(w){return x.resolve(y()).then(function(){throw w})})},m.prototype.catch=function(y){return this.then(null,y)},m.prototype.then=function(y,x){if(typeof y!="function"&&this.state===d||typeof x!="function"&&this.state===c)return this;var w=new this.constructor(s);return this.state!==u?p(w,this.state===d?y:x,this.outcome):this.queue.push(new h(w,y,x)),w},h.prototype.callFulfilled=function(y){l.resolve(this.promise,y)},h.prototype.otherCallFulfilled=function(y){p(this.promise,this.onFulfilled,y)},h.prototype.callRejected=function(y){l.reject(this.promise,y)},h.prototype.otherCallRejected=function(y){p(this.promise,this.onRejected,y)},l.resolve=function(y,x){var w=b(v,x);if(w.status==="error")return l.reject(y,w.value);var P=w.value;if(P)f(y,P);else{y.state=d,y.outcome=x;for(var E=-1,k=y.queue.length;++E<k;)y.queue[E].callFulfilled(x)}return y},l.reject=function(y,x){y.state=c,y.outcome=x;for(var w=-1,P=y.queue.length;++w<P;)y.queue[w].callRejected(x);return y},m.resolve=function(y){return y instanceof this?y:l.resolve(new this(s),y)},m.reject=function(y){var x=new this(s);return l.reject(x,y)},m.all=function(y){var x=this;if(Object.prototype.toString.call(y)!=="[object Array]")return this.reject(new TypeError("must be an array"));var w=y.length,P=!1;if(!w)return this.resolve([]);for(var E=new Array(w),k=0,S=-1,R=new this(s);++S<w;)I(y[S],S);return R;function I(M,q){x.resolve(M).then(function(N){E[q]=N,++k!==w||P||(P=!0,l.resolve(R,E))},function(N){P||(P=!0,l.reject(R,N))})}},m.race=function(y){var x=this;if(Object.prototype.toString.call(y)!=="[object Array]")return this.reject(new TypeError("must be an array"));var w=y.length,P=!1;if(!w)return this.resolve([]);for(var E=-1,k=new this(s);++E<w;)S=y[E],x.resolve(S).then(function(R){P||(P=!0,l.resolve(k,R))},function(R){P||(P=!0,l.reject(k,R))});var S;return k}},{immediate:36}],38:[function(a,o,n){var r={};(0,a("./lib/utils/common").assign)(r,a("./lib/deflate"),a("./lib/inflate"),a("./lib/zlib/constants")),o.exports=r},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(a,o,n){var r=a("./zlib/deflate"),s=a("./utils/common"),l=a("./utils/strings"),c=a("./zlib/messages"),d=a("./zlib/zstream"),u=Object.prototype.toString,m=0,h=-1,p=0,v=8;function f(y){if(!(this instanceof f))return new f(y);this.options=s.assign({level:h,method:v,chunkSize:16384,windowBits:15,memLevel:8,strategy:p,to:""},y||{});var x=this.options;x.raw&&0<x.windowBits?x.windowBits=-x.windowBits:x.gzip&&0<x.windowBits&&x.windowBits<16&&(x.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var w=r.deflateInit2(this.strm,x.level,x.method,x.windowBits,x.memLevel,x.strategy);if(w!==m)throw new Error(c[w]);if(x.header&&r.deflateSetHeader(this.strm,x.header),x.dictionary){var P;if(P=typeof x.dictionary=="string"?l.string2buf(x.dictionary):u.call(x.dictionary)==="[object ArrayBuffer]"?new Uint8Array(x.dictionary):x.dictionary,(w=r.deflateSetDictionary(this.strm,P))!==m)throw new Error(c[w]);this._dict_set=!0}}function b(y,x){var w=new f(x);if(w.push(y,!0),w.err)throw w.msg||c[w.err];return w.result}f.prototype.push=function(y,x){var w,P,E=this.strm,k=this.options.chunkSize;if(this.ended)return!1;P=x===~~x?x:x===!0?4:0,typeof y=="string"?E.input=l.string2buf(y):u.call(y)==="[object ArrayBuffer]"?E.input=new Uint8Array(y):E.input=y,E.next_in=0,E.avail_in=E.input.length;do{if(E.avail_out===0&&(E.output=new s.Buf8(k),E.next_out=0,E.avail_out=k),(w=r.deflate(E,P))!==1&&w!==m)return this.onEnd(w),!(this.ended=!0);E.avail_out!==0&&(E.avail_in!==0||P!==4&&P!==2)||(this.options.to==="string"?this.onData(l.buf2binstring(s.shrinkBuf(E.output,E.next_out))):this.onData(s.shrinkBuf(E.output,E.next_out)))}while((0<E.avail_in||E.avail_out===0)&&w!==1);return P===4?(w=r.deflateEnd(this.strm),this.onEnd(w),this.ended=!0,w===m):P!==2||(this.onEnd(m),!(E.avail_out=0))},f.prototype.onData=function(y){this.chunks.push(y)},f.prototype.onEnd=function(y){y===m&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=y,this.msg=this.strm.msg},n.Deflate=f,n.deflate=b,n.deflateRaw=function(y,x){return(x=x||{}).raw=!0,b(y,x)},n.gzip=function(y,x){return(x=x||{}).gzip=!0,b(y,x)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(a,o,n){var r=a("./zlib/inflate"),s=a("./utils/common"),l=a("./utils/strings"),c=a("./zlib/constants"),d=a("./zlib/messages"),u=a("./zlib/zstream"),m=a("./zlib/gzheader"),h=Object.prototype.toString;function p(f){if(!(this instanceof p))return new p(f);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},f||{});var b=this.options;b.raw&&0<=b.windowBits&&b.windowBits<16&&(b.windowBits=-b.windowBits,b.windowBits===0&&(b.windowBits=-15)),!(0<=b.windowBits&&b.windowBits<16)||f&&f.windowBits||(b.windowBits+=32),15<b.windowBits&&b.windowBits<48&&!(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new u,this.strm.avail_out=0;var y=r.inflateInit2(this.strm,b.windowBits);if(y!==c.Z_OK)throw new Error(d[y]);this.header=new m,r.inflateGetHeader(this.strm,this.header)}function v(f,b){var y=new p(b);if(y.push(f,!0),y.err)throw y.msg||d[y.err];return y.result}p.prototype.push=function(f,b){var y,x,w,P,E,k,S=this.strm,R=this.options.chunkSize,I=this.options.dictionary,M=!1;if(this.ended)return!1;x=b===~~b?b:b===!0?c.Z_FINISH:c.Z_NO_FLUSH,typeof f=="string"?S.input=l.binstring2buf(f):h.call(f)==="[object ArrayBuffer]"?S.input=new Uint8Array(f):S.input=f,S.next_in=0,S.avail_in=S.input.length;do{if(S.avail_out===0&&(S.output=new s.Buf8(R),S.next_out=0,S.avail_out=R),(y=r.inflate(S,c.Z_NO_FLUSH))===c.Z_NEED_DICT&&I&&(k=typeof I=="string"?l.string2buf(I):h.call(I)==="[object ArrayBuffer]"?new Uint8Array(I):I,y=r.inflateSetDictionary(this.strm,k)),y===c.Z_BUF_ERROR&&M===!0&&(y=c.Z_OK,M=!1),y!==c.Z_STREAM_END&&y!==c.Z_OK)return this.onEnd(y),!(this.ended=!0);S.next_out&&(S.avail_out!==0&&y!==c.Z_STREAM_END&&(S.avail_in!==0||x!==c.Z_FINISH&&x!==c.Z_SYNC_FLUSH)||(this.options.to==="string"?(w=l.utf8border(S.output,S.next_out),P=S.next_out-w,E=l.buf2string(S.output,w),S.next_out=P,S.avail_out=R-P,P&&s.arraySet(S.output,S.output,w,P,0),this.onData(E)):this.onData(s.shrinkBuf(S.output,S.next_out)))),S.avail_in===0&&S.avail_out===0&&(M=!0)}while((0<S.avail_in||S.avail_out===0)&&y!==c.Z_STREAM_END);return y===c.Z_STREAM_END&&(x=c.Z_FINISH),x===c.Z_FINISH?(y=r.inflateEnd(this.strm),this.onEnd(y),this.ended=!0,y===c.Z_OK):x!==c.Z_SYNC_FLUSH||(this.onEnd(c.Z_OK),!(S.avail_out=0))},p.prototype.onData=function(f){this.chunks.push(f)},p.prototype.onEnd=function(f){f===c.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=f,this.msg=this.strm.msg},n.Inflate=p,n.inflate=v,n.inflateRaw=function(f,b){return(b=b||{}).raw=!0,v(f,b)},n.ungzip=v},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(a,o,n){var r=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";n.assign=function(c){for(var d=Array.prototype.slice.call(arguments,1);d.length;){var u=d.shift();if(u){if(typeof u!="object")throw new TypeError(u+"must be non-object");for(var m in u)u.hasOwnProperty(m)&&(c[m]=u[m])}}return c},n.shrinkBuf=function(c,d){return c.length===d?c:c.subarray?c.subarray(0,d):(c.length=d,c)};var s={arraySet:function(c,d,u,m,h){if(d.subarray&&c.subarray)c.set(d.subarray(u,u+m),h);else for(var p=0;p<m;p++)c[h+p]=d[u+p]},flattenChunks:function(c){var d,u,m,h,p,v;for(d=m=0,u=c.length;d<u;d++)m+=c[d].length;for(v=new Uint8Array(m),d=h=0,u=c.length;d<u;d++)p=c[d],v.set(p,h),h+=p.length;return v}},l={arraySet:function(c,d,u,m,h){for(var p=0;p<m;p++)c[h+p]=d[u+p]},flattenChunks:function(c){return[].concat.apply([],c)}};n.setTyped=function(c){c?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,s)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,l))},n.setTyped(r)},{}],42:[function(a,o,n){var r=a("./common"),s=!0,l=!0;try{String.fromCharCode.apply(null,[0])}catch{s=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{l=!1}for(var c=new r.Buf8(256),d=0;d<256;d++)c[d]=252<=d?6:248<=d?5:240<=d?4:224<=d?3:192<=d?2:1;function u(m,h){if(h<65537&&(m.subarray&&l||!m.subarray&&s))return String.fromCharCode.apply(null,r.shrinkBuf(m,h));for(var p="",v=0;v<h;v++)p+=String.fromCharCode(m[v]);return p}c[254]=c[254]=1,n.string2buf=function(m){var h,p,v,f,b,y=m.length,x=0;for(f=0;f<y;f++)(64512&(p=m.charCodeAt(f)))==55296&&f+1<y&&(64512&(v=m.charCodeAt(f+1)))==56320&&(p=65536+(p-55296<<10)+(v-56320),f++),x+=p<128?1:p<2048?2:p<65536?3:4;for(h=new r.Buf8(x),f=b=0;b<x;f++)(64512&(p=m.charCodeAt(f)))==55296&&f+1<y&&(64512&(v=m.charCodeAt(f+1)))==56320&&(p=65536+(p-55296<<10)+(v-56320),f++),p<128?h[b++]=p:(p<2048?h[b++]=192|p>>>6:(p<65536?h[b++]=224|p>>>12:(h[b++]=240|p>>>18,h[b++]=128|p>>>12&63),h[b++]=128|p>>>6&63),h[b++]=128|63&p);return h},n.buf2binstring=function(m){return u(m,m.length)},n.binstring2buf=function(m){for(var h=new r.Buf8(m.length),p=0,v=h.length;p<v;p++)h[p]=m.charCodeAt(p);return h},n.buf2string=function(m,h){var p,v,f,b,y=h||m.length,x=new Array(2*y);for(p=v=0;p<y;)if((f=m[p++])<128)x[v++]=f;else if(4<(b=c[f]))x[v++]=65533,p+=b-1;else{for(f&=b===2?31:b===3?15:7;1<b&&p<y;)f=f<<6|63&m[p++],b--;1<b?x[v++]=65533:f<65536?x[v++]=f:(f-=65536,x[v++]=55296|f>>10&1023,x[v++]=56320|1023&f)}return u(x,v)},n.utf8border=function(m,h){var p;for((h=h||m.length)>m.length&&(h=m.length),p=h-1;0<=p&&(192&m[p])==128;)p--;return p<0||p===0?h:p+c[m[p]]>h?p:h}},{"./common":41}],43:[function(a,o,n){o.exports=function(r,s,l,c){for(var d=65535&r|0,u=r>>>16&65535|0,m=0;l!==0;){for(l-=m=2e3<l?2e3:l;u=u+(d=d+s[c++]|0)|0,--m;);d%=65521,u%=65521}return d|u<<16|0}},{}],44:[function(a,o,n){o.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(a,o,n){var r=function(){for(var s,l=[],c=0;c<256;c++){s=c;for(var d=0;d<8;d++)s=1&s?3988292384^s>>>1:s>>>1;l[c]=s}return l}();o.exports=function(s,l,c,d){var u=r,m=d+c;s^=-1;for(var h=d;h<m;h++)s=s>>>8^u[255&(s^l[h])];return-1^s}},{}],46:[function(a,o,n){var r,s=a("../utils/common"),l=a("./trees"),c=a("./adler32"),d=a("./crc32"),u=a("./messages"),m=0,h=4,p=0,v=-2,f=-1,b=4,y=2,x=8,w=9,P=286,E=30,k=19,S=2*P+1,R=15,I=3,M=258,q=M+I+1,N=42,F=113,A=1,_=2,K=3,V=4;function H(C,z){return C.msg=u[z],z}function B(C){return(C<<1)-(4<C?9:0)}function te(C){for(var z=C.length;0<=--z;)C[z]=0}function j(C){var z=C.state,U=z.pending;U>C.avail_out&&(U=C.avail_out),U!==0&&(s.arraySet(C.output,z.pending_buf,z.pending_out,U,C.next_out),C.next_out+=U,z.pending_out+=U,C.total_out+=U,C.avail_out-=U,z.pending-=U,z.pending===0&&(z.pending_out=0))}function L(C,z){l._tr_flush_block(C,0<=C.block_start?C.block_start:-1,C.strstart-C.block_start,z),C.block_start=C.strstart,j(C.strm)}function Q(C,z){C.pending_buf[C.pending++]=z}function $(C,z){C.pending_buf[C.pending++]=z>>>8&255,C.pending_buf[C.pending++]=255&z}function X(C,z){var U,T,D=C.max_chain_length,O=C.strstart,Y=C.prev_length,ae=C.nice_match,G=C.strstart>C.w_size-q?C.strstart-(C.w_size-q):0,re=C.window,de=C.w_mask,se=C.prev,ue=C.strstart+M,Ee=re[O+Y-1],Te=re[O+Y];C.prev_length>=C.good_match&&(D>>=2),ae>C.lookahead&&(ae=C.lookahead);do if(re[(U=z)+Y]===Te&&re[U+Y-1]===Ee&&re[U]===re[O]&&re[++U]===re[O+1]){O+=2,U++;do;while(re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&re[++O]===re[++U]&&O<ue);if(T=M-(ue-O),O=ue-M,Y<T){if(C.match_start=z,ae<=(Y=T))break;Ee=re[O+Y-1],Te=re[O+Y]}}while((z=se[z&de])>G&&--D!=0);return Y<=C.lookahead?Y:C.lookahead}function fe(C){var z,U,T,D,O,Y,ae,G,re,de,se=C.w_size;do{if(D=C.window_size-C.lookahead-C.strstart,C.strstart>=se+(se-q)){for(s.arraySet(C.window,C.window,se,se,0),C.match_start-=se,C.strstart-=se,C.block_start-=se,z=U=C.hash_size;T=C.head[--z],C.head[z]=se<=T?T-se:0,--U;);for(z=U=se;T=C.prev[--z],C.prev[z]=se<=T?T-se:0,--U;);D+=se}if(C.strm.avail_in===0)break;if(Y=C.strm,ae=C.window,G=C.strstart+C.lookahead,re=D,de=void 0,de=Y.avail_in,re<de&&(de=re),U=de===0?0:(Y.avail_in-=de,s.arraySet(ae,Y.input,Y.next_in,de,G),Y.state.wrap===1?Y.adler=c(Y.adler,ae,de,G):Y.state.wrap===2&&(Y.adler=d(Y.adler,ae,de,G)),Y.next_in+=de,Y.total_in+=de,de),C.lookahead+=U,C.lookahead+C.insert>=I)for(O=C.strstart-C.insert,C.ins_h=C.window[O],C.ins_h=(C.ins_h<<C.hash_shift^C.window[O+1])&C.hash_mask;C.insert&&(C.ins_h=(C.ins_h<<C.hash_shift^C.window[O+I-1])&C.hash_mask,C.prev[O&C.w_mask]=C.head[C.ins_h],C.head[C.ins_h]=O,O++,C.insert--,!(C.lookahead+C.insert<I)););}while(C.lookahead<q&&C.strm.avail_in!==0)}function J(C,z){for(var U,T;;){if(C.lookahead<q){if(fe(C),C.lookahead<q&&z===m)return A;if(C.lookahead===0)break}if(U=0,C.lookahead>=I&&(C.ins_h=(C.ins_h<<C.hash_shift^C.window[C.strstart+I-1])&C.hash_mask,U=C.prev[C.strstart&C.w_mask]=C.head[C.ins_h],C.head[C.ins_h]=C.strstart),U!==0&&C.strstart-U<=C.w_size-q&&(C.match_length=X(C,U)),C.match_length>=I)if(T=l._tr_tally(C,C.strstart-C.match_start,C.match_length-I),C.lookahead-=C.match_length,C.match_length<=C.max_lazy_match&&C.lookahead>=I){for(C.match_length--;C.strstart++,C.ins_h=(C.ins_h<<C.hash_shift^C.window[C.strstart+I-1])&C.hash_mask,U=C.prev[C.strstart&C.w_mask]=C.head[C.ins_h],C.head[C.ins_h]=C.strstart,--C.match_length!=0;);C.strstart++}else C.strstart+=C.match_length,C.match_length=0,C.ins_h=C.window[C.strstart],C.ins_h=(C.ins_h<<C.hash_shift^C.window[C.strstart+1])&C.hash_mask;else T=l._tr_tally(C,0,C.window[C.strstart]),C.lookahead--,C.strstart++;if(T&&(L(C,!1),C.strm.avail_out===0))return A}return C.insert=C.strstart<I-1?C.strstart:I-1,z===h?(L(C,!0),C.strm.avail_out===0?K:V):C.last_lit&&(L(C,!1),C.strm.avail_out===0)?A:_}function ie(C,z){for(var U,T,D;;){if(C.lookahead<q){if(fe(C),C.lookahead<q&&z===m)return A;if(C.lookahead===0)break}if(U=0,C.lookahead>=I&&(C.ins_h=(C.ins_h<<C.hash_shift^C.window[C.strstart+I-1])&C.hash_mask,U=C.prev[C.strstart&C.w_mask]=C.head[C.ins_h],C.head[C.ins_h]=C.strstart),C.prev_length=C.match_length,C.prev_match=C.match_start,C.match_length=I-1,U!==0&&C.prev_length<C.max_lazy_match&&C.strstart-U<=C.w_size-q&&(C.match_length=X(C,U),C.match_length<=5&&(C.strategy===1||C.match_length===I&&4096<C.strstart-C.match_start)&&(C.match_length=I-1)),C.prev_length>=I&&C.match_length<=C.prev_length){for(D=C.strstart+C.lookahead-I,T=l._tr_tally(C,C.strstart-1-C.prev_match,C.prev_length-I),C.lookahead-=C.prev_length-1,C.prev_length-=2;++C.strstart<=D&&(C.ins_h=(C.ins_h<<C.hash_shift^C.window[C.strstart+I-1])&C.hash_mask,U=C.prev[C.strstart&C.w_mask]=C.head[C.ins_h],C.head[C.ins_h]=C.strstart),--C.prev_length!=0;);if(C.match_available=0,C.match_length=I-1,C.strstart++,T&&(L(C,!1),C.strm.avail_out===0))return A}else if(C.match_available){if((T=l._tr_tally(C,0,C.window[C.strstart-1]))&&L(C,!1),C.strstart++,C.lookahead--,C.strm.avail_out===0)return A}else C.match_available=1,C.strstart++,C.lookahead--}return C.match_available&&(T=l._tr_tally(C,0,C.window[C.strstart-1]),C.match_available=0),C.insert=C.strstart<I-1?C.strstart:I-1,z===h?(L(C,!0),C.strm.avail_out===0?K:V):C.last_lit&&(L(C,!1),C.strm.avail_out===0)?A:_}function le(C,z,U,T,D){this.good_length=C,this.max_lazy=z,this.nice_length=U,this.max_chain=T,this.func=D}function pe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=x,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new s.Buf16(2*S),this.dyn_dtree=new s.Buf16(2*(2*E+1)),this.bl_tree=new s.Buf16(2*(2*k+1)),te(this.dyn_ltree),te(this.dyn_dtree),te(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new s.Buf16(R+1),this.heap=new s.Buf16(2*P+1),te(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new s.Buf16(2*P+1),te(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ce(C){var z;return C&&C.state?(C.total_in=C.total_out=0,C.data_type=y,(z=C.state).pending=0,z.pending_out=0,z.wrap<0&&(z.wrap=-z.wrap),z.status=z.wrap?N:F,C.adler=z.wrap===2?0:1,z.last_flush=m,l._tr_init(z),p):H(C,v)}function oe(C){var z=ce(C);return z===p&&function(U){U.window_size=2*U.w_size,te(U.head),U.max_lazy_match=r[U.level].max_lazy,U.good_match=r[U.level].good_length,U.nice_match=r[U.level].nice_length,U.max_chain_length=r[U.level].max_chain,U.strstart=0,U.block_start=0,U.lookahead=0,U.insert=0,U.match_length=U.prev_length=I-1,U.match_available=0,U.ins_h=0}(C.state),z}function ye(C,z,U,T,D,O){if(!C)return v;var Y=1;if(z===f&&(z=6),T<0?(Y=0,T=-T):15<T&&(Y=2,T-=16),D<1||w<D||U!==x||T<8||15<T||z<0||9<z||O<0||b<O)return H(C,v);T===8&&(T=9);var ae=new pe;return(C.state=ae).strm=C,ae.wrap=Y,ae.gzhead=null,ae.w_bits=T,ae.w_size=1<<ae.w_bits,ae.w_mask=ae.w_size-1,ae.hash_bits=D+7,ae.hash_size=1<<ae.hash_bits,ae.hash_mask=ae.hash_size-1,ae.hash_shift=~~((ae.hash_bits+I-1)/I),ae.window=new s.Buf8(2*ae.w_size),ae.head=new s.Buf16(ae.hash_size),ae.prev=new s.Buf16(ae.w_size),ae.lit_bufsize=1<<D+6,ae.pending_buf_size=4*ae.lit_bufsize,ae.pending_buf=new s.Buf8(ae.pending_buf_size),ae.d_buf=1*ae.lit_bufsize,ae.l_buf=3*ae.lit_bufsize,ae.level=z,ae.strategy=O,ae.method=U,oe(C)}r=[new le(0,0,0,0,function(C,z){var U=65535;for(U>C.pending_buf_size-5&&(U=C.pending_buf_size-5);;){if(C.lookahead<=1){if(fe(C),C.lookahead===0&&z===m)return A;if(C.lookahead===0)break}C.strstart+=C.lookahead,C.lookahead=0;var T=C.block_start+U;if((C.strstart===0||C.strstart>=T)&&(C.lookahead=C.strstart-T,C.strstart=T,L(C,!1),C.strm.avail_out===0)||C.strstart-C.block_start>=C.w_size-q&&(L(C,!1),C.strm.avail_out===0))return A}return C.insert=0,z===h?(L(C,!0),C.strm.avail_out===0?K:V):(C.strstart>C.block_start&&(L(C,!1),C.strm.avail_out),A)}),new le(4,4,8,4,J),new le(4,5,16,8,J),new le(4,6,32,32,J),new le(4,4,16,16,ie),new le(8,16,32,32,ie),new le(8,16,128,128,ie),new le(8,32,128,256,ie),new le(32,128,258,1024,ie),new le(32,258,258,4096,ie)],n.deflateInit=function(C,z){return ye(C,z,x,15,8,0)},n.deflateInit2=ye,n.deflateReset=oe,n.deflateResetKeep=ce,n.deflateSetHeader=function(C,z){return C&&C.state?C.state.wrap!==2?v:(C.state.gzhead=z,p):v},n.deflate=function(C,z){var U,T,D,O;if(!C||!C.state||5<z||z<0)return C?H(C,v):v;if(T=C.state,!C.output||!C.input&&C.avail_in!==0||T.status===666&&z!==h)return H(C,C.avail_out===0?-5:v);if(T.strm=C,U=T.last_flush,T.last_flush=z,T.status===N)if(T.wrap===2)C.adler=0,Q(T,31),Q(T,139),Q(T,8),T.gzhead?(Q(T,(T.gzhead.text?1:0)+(T.gzhead.hcrc?2:0)+(T.gzhead.extra?4:0)+(T.gzhead.name?8:0)+(T.gzhead.comment?16:0)),Q(T,255&T.gzhead.time),Q(T,T.gzhead.time>>8&255),Q(T,T.gzhead.time>>16&255),Q(T,T.gzhead.time>>24&255),Q(T,T.level===9?2:2<=T.strategy||T.level<2?4:0),Q(T,255&T.gzhead.os),T.gzhead.extra&&T.gzhead.extra.length&&(Q(T,255&T.gzhead.extra.length),Q(T,T.gzhead.extra.length>>8&255)),T.gzhead.hcrc&&(C.adler=d(C.adler,T.pending_buf,T.pending,0)),T.gzindex=0,T.status=69):(Q(T,0),Q(T,0),Q(T,0),Q(T,0),Q(T,0),Q(T,T.level===9?2:2<=T.strategy||T.level<2?4:0),Q(T,3),T.status=F);else{var Y=x+(T.w_bits-8<<4)<<8;Y|=(2<=T.strategy||T.level<2?0:T.level<6?1:T.level===6?2:3)<<6,T.strstart!==0&&(Y|=32),Y+=31-Y%31,T.status=F,$(T,Y),T.strstart!==0&&($(T,C.adler>>>16),$(T,65535&C.adler)),C.adler=1}if(T.status===69)if(T.gzhead.extra){for(D=T.pending;T.gzindex<(65535&T.gzhead.extra.length)&&(T.pending!==T.pending_buf_size||(T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),j(C),D=T.pending,T.pending!==T.pending_buf_size));)Q(T,255&T.gzhead.extra[T.gzindex]),T.gzindex++;T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),T.gzindex===T.gzhead.extra.length&&(T.gzindex=0,T.status=73)}else T.status=73;if(T.status===73)if(T.gzhead.name){D=T.pending;do{if(T.pending===T.pending_buf_size&&(T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),j(C),D=T.pending,T.pending===T.pending_buf_size)){O=1;break}O=T.gzindex<T.gzhead.name.length?255&T.gzhead.name.charCodeAt(T.gzindex++):0,Q(T,O)}while(O!==0);T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),O===0&&(T.gzindex=0,T.status=91)}else T.status=91;if(T.status===91)if(T.gzhead.comment){D=T.pending;do{if(T.pending===T.pending_buf_size&&(T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),j(C),D=T.pending,T.pending===T.pending_buf_size)){O=1;break}O=T.gzindex<T.gzhead.comment.length?255&T.gzhead.comment.charCodeAt(T.gzindex++):0,Q(T,O)}while(O!==0);T.gzhead.hcrc&&T.pending>D&&(C.adler=d(C.adler,T.pending_buf,T.pending-D,D)),O===0&&(T.status=103)}else T.status=103;if(T.status===103&&(T.gzhead.hcrc?(T.pending+2>T.pending_buf_size&&j(C),T.pending+2<=T.pending_buf_size&&(Q(T,255&C.adler),Q(T,C.adler>>8&255),C.adler=0,T.status=F)):T.status=F),T.pending!==0){if(j(C),C.avail_out===0)return T.last_flush=-1,p}else if(C.avail_in===0&&B(z)<=B(U)&&z!==h)return H(C,-5);if(T.status===666&&C.avail_in!==0)return H(C,-5);if(C.avail_in!==0||T.lookahead!==0||z!==m&&T.status!==666){var ae=T.strategy===2?function(G,re){for(var de;;){if(G.lookahead===0&&(fe(G),G.lookahead===0)){if(re===m)return A;break}if(G.match_length=0,de=l._tr_tally(G,0,G.window[G.strstart]),G.lookahead--,G.strstart++,de&&(L(G,!1),G.strm.avail_out===0))return A}return G.insert=0,re===h?(L(G,!0),G.strm.avail_out===0?K:V):G.last_lit&&(L(G,!1),G.strm.avail_out===0)?A:_}(T,z):T.strategy===3?function(G,re){for(var de,se,ue,Ee,Te=G.window;;){if(G.lookahead<=M){if(fe(G),G.lookahead<=M&&re===m)return A;if(G.lookahead===0)break}if(G.match_length=0,G.lookahead>=I&&0<G.strstart&&(se=Te[ue=G.strstart-1])===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]){Ee=G.strstart+M;do;while(se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&se===Te[++ue]&&ue<Ee);G.match_length=M-(Ee-ue),G.match_length>G.lookahead&&(G.match_length=G.lookahead)}if(G.match_length>=I?(de=l._tr_tally(G,1,G.match_length-I),G.lookahead-=G.match_length,G.strstart+=G.match_length,G.match_length=0):(de=l._tr_tally(G,0,G.window[G.strstart]),G.lookahead--,G.strstart++),de&&(L(G,!1),G.strm.avail_out===0))return A}return G.insert=0,re===h?(L(G,!0),G.strm.avail_out===0?K:V):G.last_lit&&(L(G,!1),G.strm.avail_out===0)?A:_}(T,z):r[T.level].func(T,z);if(ae!==K&&ae!==V||(T.status=666),ae===A||ae===K)return C.avail_out===0&&(T.last_flush=-1),p;if(ae===_&&(z===1?l._tr_align(T):z!==5&&(l._tr_stored_block(T,0,0,!1),z===3&&(te(T.head),T.lookahead===0&&(T.strstart=0,T.block_start=0,T.insert=0))),j(C),C.avail_out===0))return T.last_flush=-1,p}return z!==h?p:T.wrap<=0?1:(T.wrap===2?(Q(T,255&C.adler),Q(T,C.adler>>8&255),Q(T,C.adler>>16&255),Q(T,C.adler>>24&255),Q(T,255&C.total_in),Q(T,C.total_in>>8&255),Q(T,C.total_in>>16&255),Q(T,C.total_in>>24&255)):($(T,C.adler>>>16),$(T,65535&C.adler)),j(C),0<T.wrap&&(T.wrap=-T.wrap),T.pending!==0?p:1)},n.deflateEnd=function(C){var z;return C&&C.state?(z=C.state.status)!==N&&z!==69&&z!==73&&z!==91&&z!==103&&z!==F&&z!==666?H(C,v):(C.state=null,z===F?H(C,-3):p):v},n.deflateSetDictionary=function(C,z){var U,T,D,O,Y,ae,G,re,de=z.length;if(!C||!C.state||(O=(U=C.state).wrap)===2||O===1&&U.status!==N||U.lookahead)return v;for(O===1&&(C.adler=c(C.adler,z,de,0)),U.wrap=0,de>=U.w_size&&(O===0&&(te(U.head),U.strstart=0,U.block_start=0,U.insert=0),re=new s.Buf8(U.w_size),s.arraySet(re,z,de-U.w_size,U.w_size,0),z=re,de=U.w_size),Y=C.avail_in,ae=C.next_in,G=C.input,C.avail_in=de,C.next_in=0,C.input=z,fe(U);U.lookahead>=I;){for(T=U.strstart,D=U.lookahead-(I-1);U.ins_h=(U.ins_h<<U.hash_shift^U.window[T+I-1])&U.hash_mask,U.prev[T&U.w_mask]=U.head[U.ins_h],U.head[U.ins_h]=T,T++,--D;);U.strstart=T,U.lookahead=I-1,fe(U)}return U.strstart+=U.lookahead,U.block_start=U.strstart,U.insert=U.lookahead,U.lookahead=0,U.match_length=U.prev_length=I-1,U.match_available=0,C.next_in=ae,C.input=G,C.avail_in=Y,U.wrap=O,p},n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(a,o,n){o.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(a,o,n){o.exports=function(r,s){var l,c,d,u,m,h,p,v,f,b,y,x,w,P,E,k,S,R,I,M,q,N,F,A,_;l=r.state,c=r.next_in,A=r.input,d=c+(r.avail_in-5),u=r.next_out,_=r.output,m=u-(s-r.avail_out),h=u+(r.avail_out-257),p=l.dmax,v=l.wsize,f=l.whave,b=l.wnext,y=l.window,x=l.hold,w=l.bits,P=l.lencode,E=l.distcode,k=(1<<l.lenbits)-1,S=(1<<l.distbits)-1;e:do{w<15&&(x+=A[c++]<<w,w+=8,x+=A[c++]<<w,w+=8),R=P[x&k];t:for(;;){if(x>>>=I=R>>>24,w-=I,(I=R>>>16&255)===0)_[u++]=65535&R;else{if(!(16&I)){if(!(64&I)){R=P[(65535&R)+(x&(1<<I)-1)];continue t}if(32&I){l.mode=12;break e}r.msg="invalid literal/length code",l.mode=30;break e}M=65535&R,(I&=15)&&(w<I&&(x+=A[c++]<<w,w+=8),M+=x&(1<<I)-1,x>>>=I,w-=I),w<15&&(x+=A[c++]<<w,w+=8,x+=A[c++]<<w,w+=8),R=E[x&S];a:for(;;){if(x>>>=I=R>>>24,w-=I,!(16&(I=R>>>16&255))){if(!(64&I)){R=E[(65535&R)+(x&(1<<I)-1)];continue a}r.msg="invalid distance code",l.mode=30;break e}if(q=65535&R,w<(I&=15)&&(x+=A[c++]<<w,(w+=8)<I&&(x+=A[c++]<<w,w+=8)),p<(q+=x&(1<<I)-1)){r.msg="invalid distance too far back",l.mode=30;break e}if(x>>>=I,w-=I,(I=u-m)<q){if(f<(I=q-I)&&l.sane){r.msg="invalid distance too far back",l.mode=30;break e}if(F=y,(N=0)===b){if(N+=v-I,I<M){for(M-=I;_[u++]=y[N++],--I;);N=u-q,F=_}}else if(b<I){if(N+=v+b-I,(I-=b)<M){for(M-=I;_[u++]=y[N++],--I;);if(N=0,b<M){for(M-=I=b;_[u++]=y[N++],--I;);N=u-q,F=_}}}else if(N+=b-I,I<M){for(M-=I;_[u++]=y[N++],--I;);N=u-q,F=_}for(;2<M;)_[u++]=F[N++],_[u++]=F[N++],_[u++]=F[N++],M-=3;M&&(_[u++]=F[N++],1<M&&(_[u++]=F[N++]))}else{for(N=u-q;_[u++]=_[N++],_[u++]=_[N++],_[u++]=_[N++],2<(M-=3););M&&(_[u++]=_[N++],1<M&&(_[u++]=_[N++]))}break}}break}}while(c<d&&u<h);c-=M=w>>3,x&=(1<<(w-=M<<3))-1,r.next_in=c,r.next_out=u,r.avail_in=c<d?d-c+5:5-(c-d),r.avail_out=u<h?h-u+257:257-(u-h),l.hold=x,l.bits=w}},{}],49:[function(a,o,n){var r=a("../utils/common"),s=a("./adler32"),l=a("./crc32"),c=a("./inffast"),d=a("./inftrees"),u=1,m=2,h=0,p=-2,v=1,f=852,b=592;function y(N){return(N>>>24&255)+(N>>>8&65280)+((65280&N)<<8)+((255&N)<<24)}function x(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function w(N){var F;return N&&N.state?(F=N.state,N.total_in=N.total_out=F.total=0,N.msg="",F.wrap&&(N.adler=1&F.wrap),F.mode=v,F.last=0,F.havedict=0,F.dmax=32768,F.head=null,F.hold=0,F.bits=0,F.lencode=F.lendyn=new r.Buf32(f),F.distcode=F.distdyn=new r.Buf32(b),F.sane=1,F.back=-1,h):p}function P(N){var F;return N&&N.state?((F=N.state).wsize=0,F.whave=0,F.wnext=0,w(N)):p}function E(N,F){var A,_;return N&&N.state?(_=N.state,F<0?(A=0,F=-F):(A=1+(F>>4),F<48&&(F&=15)),F&&(F<8||15<F)?p:(_.window!==null&&_.wbits!==F&&(_.window=null),_.wrap=A,_.wbits=F,P(N))):p}function k(N,F){var A,_;return N?(_=new x,(N.state=_).window=null,(A=E(N,F))!==h&&(N.state=null),A):p}var S,R,I=!0;function M(N){if(I){var F;for(S=new r.Buf32(512),R=new r.Buf32(32),F=0;F<144;)N.lens[F++]=8;for(;F<256;)N.lens[F++]=9;for(;F<280;)N.lens[F++]=7;for(;F<288;)N.lens[F++]=8;for(d(u,N.lens,0,288,S,0,N.work,{bits:9}),F=0;F<32;)N.lens[F++]=5;d(m,N.lens,0,32,R,0,N.work,{bits:5}),I=!1}N.lencode=S,N.lenbits=9,N.distcode=R,N.distbits=5}function q(N,F,A,_){var K,V=N.state;return V.window===null&&(V.wsize=1<<V.wbits,V.wnext=0,V.whave=0,V.window=new r.Buf8(V.wsize)),_>=V.wsize?(r.arraySet(V.window,F,A-V.wsize,V.wsize,0),V.wnext=0,V.whave=V.wsize):(_<(K=V.wsize-V.wnext)&&(K=_),r.arraySet(V.window,F,A-_,K,V.wnext),(_-=K)?(r.arraySet(V.window,F,A-_,_,0),V.wnext=_,V.whave=V.wsize):(V.wnext+=K,V.wnext===V.wsize&&(V.wnext=0),V.whave<V.wsize&&(V.whave+=K))),0}n.inflateReset=P,n.inflateReset2=E,n.inflateResetKeep=w,n.inflateInit=function(N){return k(N,15)},n.inflateInit2=k,n.inflate=function(N,F){var A,_,K,V,H,B,te,j,L,Q,$,X,fe,J,ie,le,pe,ce,oe,ye,C,z,U,T,D=0,O=new r.Buf8(4),Y=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!N||!N.state||!N.output||!N.input&&N.avail_in!==0)return p;(A=N.state).mode===12&&(A.mode=13),H=N.next_out,K=N.output,te=N.avail_out,V=N.next_in,_=N.input,B=N.avail_in,j=A.hold,L=A.bits,Q=B,$=te,z=h;e:for(;;)switch(A.mode){case v:if(A.wrap===0){A.mode=13;break}for(;L<16;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(2&A.wrap&&j===35615){O[A.check=0]=255&j,O[1]=j>>>8&255,A.check=l(A.check,O,2,0),L=j=0,A.mode=2;break}if(A.flags=0,A.head&&(A.head.done=!1),!(1&A.wrap)||(((255&j)<<8)+(j>>8))%31){N.msg="incorrect header check",A.mode=30;break}if((15&j)!=8){N.msg="unknown compression method",A.mode=30;break}if(L-=4,C=8+(15&(j>>>=4)),A.wbits===0)A.wbits=C;else if(C>A.wbits){N.msg="invalid window size",A.mode=30;break}A.dmax=1<<C,N.adler=A.check=1,A.mode=512&j?10:12,L=j=0;break;case 2:for(;L<16;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(A.flags=j,(255&A.flags)!=8){N.msg="unknown compression method",A.mode=30;break}if(57344&A.flags){N.msg="unknown header flags set",A.mode=30;break}A.head&&(A.head.text=j>>8&1),512&A.flags&&(O[0]=255&j,O[1]=j>>>8&255,A.check=l(A.check,O,2,0)),L=j=0,A.mode=3;case 3:for(;L<32;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.head&&(A.head.time=j),512&A.flags&&(O[0]=255&j,O[1]=j>>>8&255,O[2]=j>>>16&255,O[3]=j>>>24&255,A.check=l(A.check,O,4,0)),L=j=0,A.mode=4;case 4:for(;L<16;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.head&&(A.head.xflags=255&j,A.head.os=j>>8),512&A.flags&&(O[0]=255&j,O[1]=j>>>8&255,A.check=l(A.check,O,2,0)),L=j=0,A.mode=5;case 5:if(1024&A.flags){for(;L<16;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.length=j,A.head&&(A.head.extra_len=j),512&A.flags&&(O[0]=255&j,O[1]=j>>>8&255,A.check=l(A.check,O,2,0)),L=j=0}else A.head&&(A.head.extra=null);A.mode=6;case 6:if(1024&A.flags&&(B<(X=A.length)&&(X=B),X&&(A.head&&(C=A.head.extra_len-A.length,A.head.extra||(A.head.extra=new Array(A.head.extra_len)),r.arraySet(A.head.extra,_,V,X,C)),512&A.flags&&(A.check=l(A.check,_,X,V)),B-=X,V+=X,A.length-=X),A.length))break e;A.length=0,A.mode=7;case 7:if(2048&A.flags){if(B===0)break e;for(X=0;C=_[V+X++],A.head&&C&&A.length<65536&&(A.head.name+=String.fromCharCode(C)),C&&X<B;);if(512&A.flags&&(A.check=l(A.check,_,X,V)),B-=X,V+=X,C)break e}else A.head&&(A.head.name=null);A.length=0,A.mode=8;case 8:if(4096&A.flags){if(B===0)break e;for(X=0;C=_[V+X++],A.head&&C&&A.length<65536&&(A.head.comment+=String.fromCharCode(C)),C&&X<B;);if(512&A.flags&&(A.check=l(A.check,_,X,V)),B-=X,V+=X,C)break e}else A.head&&(A.head.comment=null);A.mode=9;case 9:if(512&A.flags){for(;L<16;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(j!==(65535&A.check)){N.msg="header crc mismatch",A.mode=30;break}L=j=0}A.head&&(A.head.hcrc=A.flags>>9&1,A.head.done=!0),N.adler=A.check=0,A.mode=12;break;case 10:for(;L<32;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}N.adler=A.check=y(j),L=j=0,A.mode=11;case 11:if(A.havedict===0)return N.next_out=H,N.avail_out=te,N.next_in=V,N.avail_in=B,A.hold=j,A.bits=L,2;N.adler=A.check=1,A.mode=12;case 12:if(F===5||F===6)break e;case 13:if(A.last){j>>>=7&L,L-=7&L,A.mode=27;break}for(;L<3;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}switch(A.last=1&j,L-=1,3&(j>>>=1)){case 0:A.mode=14;break;case 1:if(M(A),A.mode=20,F!==6)break;j>>>=2,L-=2;break e;case 2:A.mode=17;break;case 3:N.msg="invalid block type",A.mode=30}j>>>=2,L-=2;break;case 14:for(j>>>=7&L,L-=7&L;L<32;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if((65535&j)!=(j>>>16^65535)){N.msg="invalid stored block lengths",A.mode=30;break}if(A.length=65535&j,L=j=0,A.mode=15,F===6)break e;case 15:A.mode=16;case 16:if(X=A.length){if(B<X&&(X=B),te<X&&(X=te),X===0)break e;r.arraySet(K,_,V,X,H),B-=X,V+=X,te-=X,H+=X,A.length-=X;break}A.mode=12;break;case 17:for(;L<14;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(A.nlen=257+(31&j),j>>>=5,L-=5,A.ndist=1+(31&j),j>>>=5,L-=5,A.ncode=4+(15&j),j>>>=4,L-=4,286<A.nlen||30<A.ndist){N.msg="too many length or distance symbols",A.mode=30;break}A.have=0,A.mode=18;case 18:for(;A.have<A.ncode;){for(;L<3;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.lens[Y[A.have++]]=7&j,j>>>=3,L-=3}for(;A.have<19;)A.lens[Y[A.have++]]=0;if(A.lencode=A.lendyn,A.lenbits=7,U={bits:A.lenbits},z=d(0,A.lens,0,19,A.lencode,0,A.work,U),A.lenbits=U.bits,z){N.msg="invalid code lengths set",A.mode=30;break}A.have=0,A.mode=19;case 19:for(;A.have<A.nlen+A.ndist;){for(;le=(D=A.lencode[j&(1<<A.lenbits)-1])>>>16&255,pe=65535&D,!((ie=D>>>24)<=L);){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(pe<16)j>>>=ie,L-=ie,A.lens[A.have++]=pe;else{if(pe===16){for(T=ie+2;L<T;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(j>>>=ie,L-=ie,A.have===0){N.msg="invalid bit length repeat",A.mode=30;break}C=A.lens[A.have-1],X=3+(3&j),j>>>=2,L-=2}else if(pe===17){for(T=ie+3;L<T;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}L-=ie,C=0,X=3+(7&(j>>>=ie)),j>>>=3,L-=3}else{for(T=ie+7;L<T;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}L-=ie,C=0,X=11+(127&(j>>>=ie)),j>>>=7,L-=7}if(A.have+X>A.nlen+A.ndist){N.msg="invalid bit length repeat",A.mode=30;break}for(;X--;)A.lens[A.have++]=C}}if(A.mode===30)break;if(A.lens[256]===0){N.msg="invalid code -- missing end-of-block",A.mode=30;break}if(A.lenbits=9,U={bits:A.lenbits},z=d(u,A.lens,0,A.nlen,A.lencode,0,A.work,U),A.lenbits=U.bits,z){N.msg="invalid literal/lengths set",A.mode=30;break}if(A.distbits=6,A.distcode=A.distdyn,U={bits:A.distbits},z=d(m,A.lens,A.nlen,A.ndist,A.distcode,0,A.work,U),A.distbits=U.bits,z){N.msg="invalid distances set",A.mode=30;break}if(A.mode=20,F===6)break e;case 20:A.mode=21;case 21:if(6<=B&&258<=te){N.next_out=H,N.avail_out=te,N.next_in=V,N.avail_in=B,A.hold=j,A.bits=L,c(N,$),H=N.next_out,K=N.output,te=N.avail_out,V=N.next_in,_=N.input,B=N.avail_in,j=A.hold,L=A.bits,A.mode===12&&(A.back=-1);break}for(A.back=0;le=(D=A.lencode[j&(1<<A.lenbits)-1])>>>16&255,pe=65535&D,!((ie=D>>>24)<=L);){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(le&&!(240&le)){for(ce=ie,oe=le,ye=pe;le=(D=A.lencode[ye+((j&(1<<ce+oe)-1)>>ce)])>>>16&255,pe=65535&D,!(ce+(ie=D>>>24)<=L);){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}j>>>=ce,L-=ce,A.back+=ce}if(j>>>=ie,L-=ie,A.back+=ie,A.length=pe,le===0){A.mode=26;break}if(32&le){A.back=-1,A.mode=12;break}if(64&le){N.msg="invalid literal/length code",A.mode=30;break}A.extra=15&le,A.mode=22;case 22:if(A.extra){for(T=A.extra;L<T;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.length+=j&(1<<A.extra)-1,j>>>=A.extra,L-=A.extra,A.back+=A.extra}A.was=A.length,A.mode=23;case 23:for(;le=(D=A.distcode[j&(1<<A.distbits)-1])>>>16&255,pe=65535&D,!((ie=D>>>24)<=L);){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(!(240&le)){for(ce=ie,oe=le,ye=pe;le=(D=A.distcode[ye+((j&(1<<ce+oe)-1)>>ce)])>>>16&255,pe=65535&D,!(ce+(ie=D>>>24)<=L);){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}j>>>=ce,L-=ce,A.back+=ce}if(j>>>=ie,L-=ie,A.back+=ie,64&le){N.msg="invalid distance code",A.mode=30;break}A.offset=pe,A.extra=15&le,A.mode=24;case 24:if(A.extra){for(T=A.extra;L<T;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}A.offset+=j&(1<<A.extra)-1,j>>>=A.extra,L-=A.extra,A.back+=A.extra}if(A.offset>A.dmax){N.msg="invalid distance too far back",A.mode=30;break}A.mode=25;case 25:if(te===0)break e;if(X=$-te,A.offset>X){if((X=A.offset-X)>A.whave&&A.sane){N.msg="invalid distance too far back",A.mode=30;break}fe=X>A.wnext?(X-=A.wnext,A.wsize-X):A.wnext-X,X>A.length&&(X=A.length),J=A.window}else J=K,fe=H-A.offset,X=A.length;for(te<X&&(X=te),te-=X,A.length-=X;K[H++]=J[fe++],--X;);A.length===0&&(A.mode=21);break;case 26:if(te===0)break e;K[H++]=A.length,te--,A.mode=21;break;case 27:if(A.wrap){for(;L<32;){if(B===0)break e;B--,j|=_[V++]<<L,L+=8}if($-=te,N.total_out+=$,A.total+=$,$&&(N.adler=A.check=A.flags?l(A.check,K,$,H-$):s(A.check,K,$,H-$)),$=te,(A.flags?j:y(j))!==A.check){N.msg="incorrect data check",A.mode=30;break}L=j=0}A.mode=28;case 28:if(A.wrap&&A.flags){for(;L<32;){if(B===0)break e;B--,j+=_[V++]<<L,L+=8}if(j!==(4294967295&A.total)){N.msg="incorrect length check",A.mode=30;break}L=j=0}A.mode=29;case 29:z=1;break e;case 30:z=-3;break e;case 31:return-4;case 32:default:return p}return N.next_out=H,N.avail_out=te,N.next_in=V,N.avail_in=B,A.hold=j,A.bits=L,(A.wsize||$!==N.avail_out&&A.mode<30&&(A.mode<27||F!==4))&&q(N,N.output,N.next_out,$-N.avail_out)?(A.mode=31,-4):(Q-=N.avail_in,$-=N.avail_out,N.total_in+=Q,N.total_out+=$,A.total+=$,A.wrap&&$&&(N.adler=A.check=A.flags?l(A.check,K,$,N.next_out-$):s(A.check,K,$,N.next_out-$)),N.data_type=A.bits+(A.last?64:0)+(A.mode===12?128:0)+(A.mode===20||A.mode===15?256:0),(Q==0&&$===0||F===4)&&z===h&&(z=-5),z)},n.inflateEnd=function(N){if(!N||!N.state)return p;var F=N.state;return F.window&&(F.window=null),N.state=null,h},n.inflateGetHeader=function(N,F){var A;return N&&N.state&&2&(A=N.state).wrap?((A.head=F).done=!1,h):p},n.inflateSetDictionary=function(N,F){var A,_=F.length;return N&&N.state?(A=N.state).wrap!==0&&A.mode!==11?p:A.mode===11&&s(1,F,_,0)!==A.check?-3:q(N,F,_,_)?(A.mode=31,-4):(A.havedict=1,h):p},n.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(a,o,n){var r=a("../utils/common"),s=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],l=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],c=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],d=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];o.exports=function(u,m,h,p,v,f,b,y){var x,w,P,E,k,S,R,I,M,q=y.bits,N=0,F=0,A=0,_=0,K=0,V=0,H=0,B=0,te=0,j=0,L=null,Q=0,$=new r.Buf16(16),X=new r.Buf16(16),fe=null,J=0;for(N=0;N<=15;N++)$[N]=0;for(F=0;F<p;F++)$[m[h+F]]++;for(K=q,_=15;1<=_&&$[_]===0;_--);if(_<K&&(K=_),_===0)return v[f++]=20971520,v[f++]=20971520,y.bits=1,0;for(A=1;A<_&&$[A]===0;A++);for(K<A&&(K=A),N=B=1;N<=15;N++)if(B<<=1,(B-=$[N])<0)return-1;if(0<B&&(u===0||_!==1))return-1;for(X[1]=0,N=1;N<15;N++)X[N+1]=X[N]+$[N];for(F=0;F<p;F++)m[h+F]!==0&&(b[X[m[h+F]]++]=F);if(S=u===0?(L=fe=b,19):u===1?(L=s,Q-=257,fe=l,J-=257,256):(L=c,fe=d,-1),N=A,k=f,H=F=j=0,P=-1,E=(te=1<<(V=K))-1,u===1&&852<te||u===2&&592<te)return 1;for(;;){for(R=N-H,M=b[F]<S?(I=0,b[F]):b[F]>S?(I=fe[J+b[F]],L[Q+b[F]]):(I=96,0),x=1<<N-H,A=w=1<<V;v[k+(j>>H)+(w-=x)]=R<<24|I<<16|M|0,w!==0;);for(x=1<<N-1;j&x;)x>>=1;if(x!==0?(j&=x-1,j+=x):j=0,F++,--$[N]==0){if(N===_)break;N=m[h+b[F]]}if(K<N&&(j&E)!==P){for(H===0&&(H=K),k+=A,B=1<<(V=N-H);V+H<_&&!((B-=$[V+H])<=0);)V++,B<<=1;if(te+=1<<V,u===1&&852<te||u===2&&592<te)return 1;v[P=j&E]=K<<24|V<<16|k-f|0}}return j!==0&&(v[k+j]=N-H<<24|64<<16|0),y.bits=K,0}},{"../utils/common":41}],51:[function(a,o,n){o.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(a,o,n){var r=a("../utils/common"),s=0,l=1;function c(D){for(var O=D.length;0<=--O;)D[O]=0}var d=0,u=29,m=256,h=m+1+u,p=30,v=19,f=2*h+1,b=15,y=16,x=7,w=256,P=16,E=17,k=18,S=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],R=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],I=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],M=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],q=new Array(2*(h+2));c(q);var N=new Array(2*p);c(N);var F=new Array(512);c(F);var A=new Array(256);c(A);var _=new Array(u);c(_);var K,V,H,B=new Array(p);function te(D,O,Y,ae,G){this.static_tree=D,this.extra_bits=O,this.extra_base=Y,this.elems=ae,this.max_length=G,this.has_stree=D&&D.length}function j(D,O){this.dyn_tree=D,this.max_code=0,this.stat_desc=O}function L(D){return D<256?F[D]:F[256+(D>>>7)]}function Q(D,O){D.pending_buf[D.pending++]=255&O,D.pending_buf[D.pending++]=O>>>8&255}function $(D,O,Y){D.bi_valid>y-Y?(D.bi_buf|=O<<D.bi_valid&65535,Q(D,D.bi_buf),D.bi_buf=O>>y-D.bi_valid,D.bi_valid+=Y-y):(D.bi_buf|=O<<D.bi_valid&65535,D.bi_valid+=Y)}function X(D,O,Y){$(D,Y[2*O],Y[2*O+1])}function fe(D,O){for(var Y=0;Y|=1&D,D>>>=1,Y<<=1,0<--O;);return Y>>>1}function J(D,O,Y){var ae,G,re=new Array(b+1),de=0;for(ae=1;ae<=b;ae++)re[ae]=de=de+Y[ae-1]<<1;for(G=0;G<=O;G++){var se=D[2*G+1];se!==0&&(D[2*G]=fe(re[se]++,se))}}function ie(D){var O;for(O=0;O<h;O++)D.dyn_ltree[2*O]=0;for(O=0;O<p;O++)D.dyn_dtree[2*O]=0;for(O=0;O<v;O++)D.bl_tree[2*O]=0;D.dyn_ltree[2*w]=1,D.opt_len=D.static_len=0,D.last_lit=D.matches=0}function le(D){8<D.bi_valid?Q(D,D.bi_buf):0<D.bi_valid&&(D.pending_buf[D.pending++]=D.bi_buf),D.bi_buf=0,D.bi_valid=0}function pe(D,O,Y,ae){var G=2*O,re=2*Y;return D[G]<D[re]||D[G]===D[re]&&ae[O]<=ae[Y]}function ce(D,O,Y){for(var ae=D.heap[Y],G=Y<<1;G<=D.heap_len&&(G<D.heap_len&&pe(O,D.heap[G+1],D.heap[G],D.depth)&&G++,!pe(O,ae,D.heap[G],D.depth));)D.heap[Y]=D.heap[G],Y=G,G<<=1;D.heap[Y]=ae}function oe(D,O,Y){var ae,G,re,de,se=0;if(D.last_lit!==0)for(;ae=D.pending_buf[D.d_buf+2*se]<<8|D.pending_buf[D.d_buf+2*se+1],G=D.pending_buf[D.l_buf+se],se++,ae===0?X(D,G,O):(X(D,(re=A[G])+m+1,O),(de=S[re])!==0&&$(D,G-=_[re],de),X(D,re=L(--ae),Y),(de=R[re])!==0&&$(D,ae-=B[re],de)),se<D.last_lit;);X(D,w,O)}function ye(D,O){var Y,ae,G,re=O.dyn_tree,de=O.stat_desc.static_tree,se=O.stat_desc.has_stree,ue=O.stat_desc.elems,Ee=-1;for(D.heap_len=0,D.heap_max=f,Y=0;Y<ue;Y++)re[2*Y]!==0?(D.heap[++D.heap_len]=Ee=Y,D.depth[Y]=0):re[2*Y+1]=0;for(;D.heap_len<2;)re[2*(G=D.heap[++D.heap_len]=Ee<2?++Ee:0)]=1,D.depth[G]=0,D.opt_len--,se&&(D.static_len-=de[2*G+1]);for(O.max_code=Ee,Y=D.heap_len>>1;1<=Y;Y--)ce(D,re,Y);for(G=ue;Y=D.heap[1],D.heap[1]=D.heap[D.heap_len--],ce(D,re,1),ae=D.heap[1],D.heap[--D.heap_max]=Y,D.heap[--D.heap_max]=ae,re[2*G]=re[2*Y]+re[2*ae],D.depth[G]=(D.depth[Y]>=D.depth[ae]?D.depth[Y]:D.depth[ae])+1,re[2*Y+1]=re[2*ae+1]=G,D.heap[1]=G++,ce(D,re,1),2<=D.heap_len;);D.heap[--D.heap_max]=D.heap[1],function(Te,Ke){var at,he,Ie,be,je,$e,Le=Ke.dyn_tree,ot=Ke.max_code,At=Ke.stat_desc.static_tree,Nt=Ke.stat_desc.has_stree,st=Ke.stat_desc.extra_bits,zt=Ke.stat_desc.extra_base,kt=Ke.stat_desc.max_length,wt=0;for(be=0;be<=b;be++)Te.bl_count[be]=0;for(Le[2*Te.heap[Te.heap_max]+1]=0,at=Te.heap_max+1;at<f;at++)kt<(be=Le[2*Le[2*(he=Te.heap[at])+1]+1]+1)&&(be=kt,wt++),Le[2*he+1]=be,ot<he||(Te.bl_count[be]++,je=0,zt<=he&&(je=st[he-zt]),$e=Le[2*he],Te.opt_len+=$e*(be+je),Nt&&(Te.static_len+=$e*(At[2*he+1]+je)));if(wt!==0){do{for(be=kt-1;Te.bl_count[be]===0;)be--;Te.bl_count[be]--,Te.bl_count[be+1]+=2,Te.bl_count[kt]--,wt-=2}while(0<wt);for(be=kt;be!==0;be--)for(he=Te.bl_count[be];he!==0;)ot<(Ie=Te.heap[--at])||(Le[2*Ie+1]!==be&&(Te.opt_len+=(be-Le[2*Ie+1])*Le[2*Ie],Le[2*Ie+1]=be),he--)}}(D,O),J(re,Ee,D.bl_count)}function C(D,O,Y){var ae,G,re=-1,de=O[1],se=0,ue=7,Ee=4;for(de===0&&(ue=138,Ee=3),O[2*(Y+1)+1]=65535,ae=0;ae<=Y;ae++)G=de,de=O[2*(ae+1)+1],++se<ue&&G===de||(se<Ee?D.bl_tree[2*G]+=se:G!==0?(G!==re&&D.bl_tree[2*G]++,D.bl_tree[2*P]++):se<=10?D.bl_tree[2*E]++:D.bl_tree[2*k]++,re=G,Ee=(se=0)===de?(ue=138,3):G===de?(ue=6,3):(ue=7,4))}function z(D,O,Y){var ae,G,re=-1,de=O[1],se=0,ue=7,Ee=4;for(de===0&&(ue=138,Ee=3),ae=0;ae<=Y;ae++)if(G=de,de=O[2*(ae+1)+1],!(++se<ue&&G===de)){if(se<Ee)for(;X(D,G,D.bl_tree),--se!=0;);else G!==0?(G!==re&&(X(D,G,D.bl_tree),se--),X(D,P,D.bl_tree),$(D,se-3,2)):se<=10?(X(D,E,D.bl_tree),$(D,se-3,3)):(X(D,k,D.bl_tree),$(D,se-11,7));re=G,Ee=(se=0)===de?(ue=138,3):G===de?(ue=6,3):(ue=7,4)}}c(B);var U=!1;function T(D,O,Y,ae){$(D,(d<<1)+(ae?1:0),3),function(G,re,de,se){le(G),Q(G,de),Q(G,~de),r.arraySet(G.pending_buf,G.window,re,de,G.pending),G.pending+=de}(D,O,Y)}n._tr_init=function(D){U||(function(){var O,Y,ae,G,re,de=new Array(b+1);for(G=ae=0;G<u-1;G++)for(_[G]=ae,O=0;O<1<<S[G];O++)A[ae++]=G;for(A[ae-1]=G,G=re=0;G<16;G++)for(B[G]=re,O=0;O<1<<R[G];O++)F[re++]=G;for(re>>=7;G<p;G++)for(B[G]=re<<7,O=0;O<1<<R[G]-7;O++)F[256+re++]=G;for(Y=0;Y<=b;Y++)de[Y]=0;for(O=0;O<=143;)q[2*O+1]=8,O++,de[8]++;for(;O<=255;)q[2*O+1]=9,O++,de[9]++;for(;O<=279;)q[2*O+1]=7,O++,de[7]++;for(;O<=287;)q[2*O+1]=8,O++,de[8]++;for(J(q,h+1,de),O=0;O<p;O++)N[2*O+1]=5,N[2*O]=fe(O,5);K=new te(q,S,m+1,h,b),V=new te(N,R,0,p,b),H=new te(new Array(0),I,0,v,x)}(),U=!0),D.l_desc=new j(D.dyn_ltree,K),D.d_desc=new j(D.dyn_dtree,V),D.bl_desc=new j(D.bl_tree,H),D.bi_buf=0,D.bi_valid=0,ie(D)},n._tr_stored_block=T,n._tr_flush_block=function(D,O,Y,ae){var G,re,de=0;0<D.level?(D.strm.data_type===2&&(D.strm.data_type=function(se){var ue,Ee=4093624447;for(ue=0;ue<=31;ue++,Ee>>>=1)if(1&Ee&&se.dyn_ltree[2*ue]!==0)return s;if(se.dyn_ltree[18]!==0||se.dyn_ltree[20]!==0||se.dyn_ltree[26]!==0)return l;for(ue=32;ue<m;ue++)if(se.dyn_ltree[2*ue]!==0)return l;return s}(D)),ye(D,D.l_desc),ye(D,D.d_desc),de=function(se){var ue;for(C(se,se.dyn_ltree,se.l_desc.max_code),C(se,se.dyn_dtree,se.d_desc.max_code),ye(se,se.bl_desc),ue=v-1;3<=ue&&se.bl_tree[2*M[ue]+1]===0;ue--);return se.opt_len+=3*(ue+1)+5+5+4,ue}(D),G=D.opt_len+3+7>>>3,(re=D.static_len+3+7>>>3)<=G&&(G=re)):G=re=Y+5,Y+4<=G&&O!==-1?T(D,O,Y,ae):D.strategy===4||re===G?($(D,2+(ae?1:0),3),oe(D,q,N)):($(D,4+(ae?1:0),3),function(se,ue,Ee,Te){var Ke;for($(se,ue-257,5),$(se,Ee-1,5),$(se,Te-4,4),Ke=0;Ke<Te;Ke++)$(se,se.bl_tree[2*M[Ke]+1],3);z(se,se.dyn_ltree,ue-1),z(se,se.dyn_dtree,Ee-1)}(D,D.l_desc.max_code+1,D.d_desc.max_code+1,de+1),oe(D,D.dyn_ltree,D.dyn_dtree)),ie(D),ae&&le(D)},n._tr_tally=function(D,O,Y){return D.pending_buf[D.d_buf+2*D.last_lit]=O>>>8&255,D.pending_buf[D.d_buf+2*D.last_lit+1]=255&O,D.pending_buf[D.l_buf+D.last_lit]=255&Y,D.last_lit++,O===0?D.dyn_ltree[2*Y]++:(D.matches++,O--,D.dyn_ltree[2*(A[Y]+m+1)]++,D.dyn_dtree[2*L(O)]++),D.last_lit===D.lit_bufsize-1},n._tr_align=function(D){$(D,2,3),X(D,w,q),function(O){O.bi_valid===16?(Q(O,O.bi_buf),O.bi_buf=0,O.bi_valid=0):8<=O.bi_valid&&(O.pending_buf[O.pending++]=255&O.bi_buf,O.bi_buf>>=8,O.bi_valid-=8)}(D)}},{"../utils/common":41}],53:[function(a,o,n){o.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(a,o,n){(function(r){(function(s,l){if(!s.setImmediate){var c,d,u,m,h=1,p={},v=!1,f=s.document,b=Object.getPrototypeOf&&Object.getPrototypeOf(s);b=b&&b.setTimeout?b:s,c={}.toString.call(s.process)==="[object process]"?function(P){process.nextTick(function(){x(P)})}:function(){if(s.postMessage&&!s.importScripts){var P=!0,E=s.onmessage;return s.onmessage=function(){P=!1},s.postMessage("","*"),s.onmessage=E,P}}()?(m="setImmediate$"+Math.random()+"$",s.addEventListener?s.addEventListener("message",w,!1):s.attachEvent("onmessage",w),function(P){s.postMessage(m+P,"*")}):s.MessageChannel?((u=new MessageChannel).port1.onmessage=function(P){x(P.data)},function(P){u.port2.postMessage(P)}):f&&"onreadystatechange"in f.createElement("script")?(d=f.documentElement,function(P){var E=f.createElement("script");E.onreadystatechange=function(){x(P),E.onreadystatechange=null,d.removeChild(E),E=null},d.appendChild(E)}):function(P){setTimeout(x,0,P)},b.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var E=new Array(arguments.length-1),k=0;k<E.length;k++)E[k]=arguments[k+1];var S={callback:P,args:E};return p[h]=S,c(h),h++},b.clearImmediate=y}function y(P){delete p[P]}function x(P){if(v)setTimeout(x,0,P);else{var E=p[P];if(E){v=!0;try{(function(k){var S=k.callback,R=k.args;switch(R.length){case 0:S();break;case 1:S(R[0]);break;case 2:S(R[0],R[1]);break;case 3:S(R[0],R[1],R[2]);break;default:S.apply(l,R)}})(E)}finally{y(P),v=!1}}}}function w(P){P.source===s&&typeof P.data=="string"&&P.data.indexOf(m)===0&&x(+P.data.slice(m.length))}})(typeof self>"u"?r===void 0?this:r:self)}).call(this,typeof Ai<"u"?Ai:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})})(fP);var GX=fP.exports;const HX=kg(GX),KX=tl("flex gap-2 items-center justify-center",{variants:{messagePlacement:{bottom:"flex-col",top:"flex-col-reverse",right:"flex-row",left:"flex-row-reverse"}},defaultVariants:{messagePlacement:"bottom"}});function Zf({className:e,message:t,messagePlacement:a,...o}){return i.jsxs("div",{className:ve(KX({messagePlacement:a}),e),...o,children:[i.jsxs("div",{className:"relative flex size-12 items-center justify-center",children:[i.jsx(Ze.span,{className:"absolute inline-flex h-full w-full rounded-full border-2 border-t-primary border-r-transparent border-b-transparent border-l-transparent",animate:{rotate:360},transition:{duration:1,repeat:1/0,ease:"linear"}}),i.jsx(Ze.span,{className:"absolute inline-flex h-3/4 w-3/4 rounded-full border-2 border-t-transparent border-r-primary border-b-transparent border-l-transparent",animate:{rotate:-360},transition:{duration:1.5,repeat:1/0,ease:"linear"}}),i.jsx(Ze.span,{className:"absolute inline-flex h-1/2 w-1/2 roun
580ded-full border-2 border-t-transparent border-r-transparent border-b-primary border-l-transparent",animate:{rotate:360},transition:{duration:2,repeat:1/0,ease:"linear"}})]}),t&&i.jsx("p",{className:"text-muted-foreground text-sm",children:t})]})}const XX=e=>{const t=e.length;let a=0;for(let o=0;o<Math.min(1e3,t);o++)a=(a<<5)-a+e[o],a=a&a;for(let o=Math.max(0,t-1e3);o<t;o++)a=(a<<5)-a+e[o],a=a&a;return Math.abs(a).toString(16).padStart(8,"0")+t.toString(16).padStart(8,"0")},Jf=async e=>{const t=new Uint8Array(e);return XX(t)},YX=e=>{const t=[];let a=0;for(e[0]===255&&e[1]===216&&(t.push(255,216),a=2);a<e.length-1;)if(e[a]===255){const o=e[a+1];if(o>=225&&o<=239||o===254){const n=e[a+2]<<8|e[a+3];a+=2+n;continue}if(o===224){const n=e[a+2]<<8|e[a+3];for(let r=0;r<2+n&&a+r<e.length;r++)t.push(e[a+r]);a+=2+n;continue}if(o===218){for(;a<e.length;)t.push(e[a++]);break}if(o>=192&&o<=223&&o!==216&&o!==217){t.push(e[a],e[a+1]);const n=e[a+2]<<8|e[a+3];for(let r=0;r<n&&a+2+r<e.length;r++)t.push(e[a+2+r]);a+=2+n;continue}t.push(e[a],e[a+1]),a+=2}else t.push(e[a++]);return new Uint8Array(t)},QX=e=>{const t=[];for(let o=0;o<8;o++)t.push(e[o]);let a=8;for(;a<e.length-4;){const o=e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3],n=String.fromCharCode(e[a+4],e[a+5],e[a+6],e[a+7]);if(["tEXt","zTXt","iTXt","eXIf","iCCP","sRGB","gAMA","cHRM","tIME"].includes(n)){a+=12+o;continue}for(let s=0;s<12+o&&a+s<e.length;s++)t.push(e[a+s]);if(a+=12+o,n==="IEND")break}return new Uint8Array(t)},ZX=async e=>new Promise(t=>{const a=new Image,o=URL.createObjectURL(e);a.onload=()=>{const n=document.createElement("canvas");n.width=a.width,n.height=a.height;const r=n.getContext("2d");r.drawImage(a,0,0);const s=r.getImageData(0,0,n.width,n.height),l=s.data,c=Math.min(100,Math.floor(l.length/4e3));for(let u=0;u<c;u++){const m=Math.floor(Math.random()*(l.length/4))*4,h=Math.random()>.5?1:-1,p=Math.floor(Math.random()*3);l[m+p]=Math.max(0,Math.min(255,l[m+p]+h))}r.putImageData(s,0,0);const d=e.type==="image/png"?"image/png":"image/jpeg";n.toBlob(u=>{URL.revokeObjectURL(o),t(u||e)},d,d==="image/jpeg"?.95:void 0)},a.onerror=()=>{URL.revokeObjectURL(o),t(e)},a.src=o}),JX=e=>{const t=new Uint8Array(16+Math.floor(Math.random()*48));crypto.getRandomValues(t);const a=new Uint8Array(8+t.length),o=8+t.length;a[0]=o>>24&255,a[1]=o>>16&255,a[2]=o>>8&255,a[3]=o&255,a[4]=102,a[5]=114,a[6]=101,a[7]=101,a.set(t,8);const n=new Uint8Array(e.length+a.length);return n.set(e),n.set(a,e.length),n},eY=e=>{let t=new Uint8Array(e);for(let a=0;a<e.length-8;a++)if(e[a]===109&&e[a+1]===118&&e[a+2]===104&&e[a+3]===100){const n=e[a+4]===1?8:4;a+4+n+4<t.length&&(t[a+4+n+3]=Math.floor(Math.random()*256));break}return t},tY={removeExif:!0,removeXmp:!0,removeIptc:!0,modifyPixels:!0,addRandomBytes:!0,changeCreationDate:!0},aY=async(e,t)=>{const a=await e.arrayBuffer();let o=new Uint8Array(a),n;const r=e.type.startsWith("image/"),s=e.type.startsWith("video/");return r?(e.type==="image/jpeg"||e.type==="image/jpg"?o=YX(o):e.type==="image/png"&&(o=QX(o)),n=new Blob([o],{type:e.type}),n=await ZX(n)):s?(o=eY(o),o=JX(o),n=new Blob([o],{type:e.type})):n=new Blob([o],{type:e.type}),n},oY=()=>{const{t:e}=tt(["tools","common"]),[t,a]=g.useState([]),[o,n]=g.useState(!1),[r,s]=g.useState(!1),[l,c]=g.useState(0),[d,u]=g.useState(!1),m=g.useRef(null),h=g.useCallback(async P=>{if(!P)return;const E=["image/jpeg","image/jpg","image/png","image/webp","video/mp4","video/webm","video/quicktime"],k=[];for(const S of Array.from(P)){if(!E.includes(S.type)){rt.error(e("hashCleaner.toastUnsupportedFormat",{fileName:S.name}));continue}const R=await S.arrayBuffer(),I=await Jf(R);k.push({id:crypto.randomUUID(),originalFile:S,originalName:S.name,processedBlob:null,status:"pending",originalHash:I,newHash:"",type:S.type.startsWith("image/")?"image":"video",originalSize:S.size,newSize:0})}a(S=>[...S,...k]),rt.success(e("hashCleaner.toastFilesAdded",{count:k.length}))},[]),p=async()=>{if(t.length===0){rt.error(e("hashCleaner.toastAddFilesFirst"));return}n(!0),s(!0),c(0),await new Promise(S=>setTimeout(S,5e3));const P=t.length;let E=0;const k=[...t];for(let S=0;S<k.length;S++){const R=k[S];if(R.status==="done"){E++;continue}k[S]={...R,status:"processing"},a([...k]);try{const I=await aY(R.originalFile,tY),M=await I.arrayBuffer(),q=await Jf(M);k[S]={...R,status:"done",processedBlob:I,newHash:q,newSize:I.size}}catch(I){console.error("Error processing file:",I),k[S]={...R,status:"error"},rt.error(e("hashCleaner.toastProcessError",{fileName:R.originalName}))}E++,c(E/P*100),a([...k])}s(!1),n(!1),rt.success(e("hashCleaner.toastProcessingComplete"))},v=P=>{if(!P.processedBlob)return;const E=URL.createObjectURL(P.processedBlob),k=document.createElement("a");k.href=E;const S=P.originalName.split("."),R=S.pop(),I=S.join(".");k.download=`${I}_limpo.${R}`,document.body.appendChild(k),k.click(),document.body.removeChild(k),URL.revokeObjectURL(E)},f=async()=>{const P=t.filter(I=>I.status==="done"&&I.processedBlob);if(P.length===0){rt.error(e("hashCleaner.toastNoProcessedFiles"));return}if(P.length===1){v(P[0]);return}const E=new HX;for(const I of P){if(!I.processedBlob)continue;const M=I.originalName.split("."),q=M.pop(),F=`${M.join(".")}_limpo.${q}`;E.file(F,I.processedBlob)}const k=await E.generateAsync({type:"blob"}),S=URL.createObjectURL(k),R=document.createElement("a");R.href=S,R.download=`midias_limpas_${Date.now()}.zip`,document.body.appendChild(R),R.click(),document.body.removeChild(R),URL.revokeObjectURL(S),rt.success(e("hashCleaner.toastZipDownloaded"))},b=P=>{a(E=>E.filter(k=>k.id!==P))},y=()=>{a([]),c(0)},x=P=>P<1024?`${P} B`:P<1024*1024?`${(P/1024).toFixed(1)} KB`:`${(P/(1024*1024)).toFixed(2)} MB`,w=t.filter(P=>P.status==="done").length;return i.jsxs("div",{className:"min-h-screen bg-background",children:[i.jsx(Os,{onSidebarToggle:()=>u(!d)}),i.jsx(WC,{isOpen:d,onToggle:()=>u(!d)}),i.jsxs("main",{className:`container max-w-4xl mx-auto px-4 py-8 pt-20 transition-all duration-300 ${d?"lg:ml-64":""}`,children:[i.jsxs("div",{className:"mb-8",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[i.jsx("div",{className:"p-2 rounded-lg bg-accent/20",children:i.jsx(Pm,{className:"w-6 h-6 text-accent"})}),i.jsx("h1",{className:"text-2xl font-bold",children:e("hashCleaner.pageTitle")})]}),i.jsx("p",{className:"text-muted-foreground ml-12",children:e("hashCleaner.pageDescription")})]}),r&&i.jsx("div",{className:"fixed inset-0 bg-background/80 backdrop-blur-sm z-50 flex items-center justify-center",children:i.jsxs("div",{className:"flex flex-col items-center gap-4",children:[i.jsx(Zf,{}),i.jsx("p",{className:"text-muted-foreground animate-pulse",children:e("hashCleaner.loaderText")})]})}),i.jsxs(cn,{children:[i.jsx(zC,{children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{children:[i.jsxs(VC,{className:"text-lg flex items-center gap-2",children:[i.jsx(Un,{className:"w-5 h-5 text-accent"}),e("hashCleaner.filesCardTitle")]}),i.jsx(qC,{children:e("hashCleaner.filesCardDescription")})]}),t.length>0&&i.jsxs(we,{variant:"outline",size:"sm",onClick:y,children:[i.jsx(fc,{className:"w-4 h-4 mr-2"}),e("hashCleaner.clearAllButton")]})]})}),i.jsxs(ei,{children:[i.jsxs("div",{className:"border-2 border-dashed border-border rounded-lg p-8 text-center hover:border-accent/50 transition-colors cursor-pointer mb-4",onClick:()=>{var P;return(P=m.current)==null?void 0:P.click()},onDrop:P=>{P.preventDefault(),h(P.dataTransfer.files)},onDragOver:P=>P.preventDefault(),children:[i.jsx("input",{ref:m,type:"file",accept:"image/jpeg,image/png,image/webp,video/mp4,video/webm,video/quicktime",multiple:!0,className:"hidden",onChange:P=>h(P.target.files)}),i.jsx(eA,{className:"w-10 h-10 mx-auto mb-3 text-muted-foreground"}),i.jsx("p",{className:"text-sm text-muted-foreground mb-1",children:e("hashCleaner.dropZonePrompt")}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("hashCleaner.dropZoneFormats")})]}),o&&!r&&i.jsxs("div",{className:"mb-4",children:[i.jsxs("div",{className:"flex items-center justify-between text-sm mb-2",children:[i.jsx("span",{className:"text-muted-foreground",children:e("hashCleaner.processingLabel")}),i.jsxs("span",{className:"font-medium",children:[Math.round(l),"%"]})]}),i.jsx(hP,{value:l,className:"h-2"})]}),t.length>0&&i.jsx("div",{className:"space-y-2 max-h-[400px] overflow-y-auto",children:t.map(P=>i.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-secondary/50 border border-border",children:[i.jsx("div",{className:"flex-shrink-0",children:P.type==="image"?i.jsx(D0,{className:"w-8 h-8 text-accent"}):i.jsx(oA,{className:"w-8 h-8 text-pink-500"})}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("p",{className:"text-sm font-medium truncate",children:P.originalName}),i.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[i.jsx("span",{children:x(P.originalSize)}),P.status==="done"&&P.newSize!==P.originalSize&&i.jsxs(i.Fragment,{children:[i.jsx("span",{children:"â"}),i.jsx("span",{children:x(P.newSize)})]})]}),P.status==="done"&&i.jsxs("div",{className:"flex items-center gap-2 mt-1 text-xs",children:[i.jsx("span",{className:"text-muted-foreground",children:e("hashCleaner.hashLabel")}),i.jsxs("code",{className:"text-red-400 line-through",children:[P.originalHash.substring(0,8),"..."]}),i.jsx("span",{children:"â"}),i.jsxs("code",{className:"text-green-400",children:[P.newHash.substring(0,8),"..."]})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[P.status==="pending"&&i.jsx(na,{variant:"secondary",children:e("hashCleaner.statusPending")}),P.status==="processing"&&i.jsxs(na,{variant:"secondary",className:"gap-1",children:[i.jsx(Zf,{className:"w-3 h-3"}),e("hashCleaner.statusProcessing")]}),P.status==="done"&&i.jsxs(i.Fragment,{children:[i.jsxs(na,{variant:"default",className:"bg-green-500/20 text-green-500 gap-1",children:[i.jsx(Cm,{className:"w-3 h-3"}),e("hashCleaner.statusReady")]}),i.jsx(we,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>v(P),children:i.jsx(N0,{className:"w-4 h-4"})})]}),P.status==="error"&&i.jsx(na,{variant:"destructive",children:e("hashCleaner.statusError")}),i.jsx(we,{variant:"ghost",size:"icon",className:"h-8 w-8 text-muted-foreground hover:text-destructive",onClick:()=>b(P.id),children:i.jsx(Ma,{className:"w-4 h-4"})})]})]},P.id))}),t.length>0&&i.jsxs("div",{className:"flex items-center justify-between mt-4 pt-4 border-t",children:[i.jsx("div",{className:"text-sm text-muted-foreground",children:e("hashCleaner.processedCount",{processed:w,total:t.length})}),i.jsxs("div",{className:"flex gap-2",children:[i.jsxs(we,{onClick:p,disabled:o||t.every(P=>P.status==="done"),children:[i.jsx(Un,{className:"w-4 h-4 mr-2"}),e("hashCleaner.cleanHashButton")]}),w>0&&i.jsxs(we,{variant:"outline",onClick:f,children:[i.jsx(O0,{className:"w-4 h-4 mr-2"}),e("hashCleaner.downloadAllButton",{count:w})]})]})]}),t.length===0&&i.jsx("div",{className:"text-center py-8",children:i.jsx("p",{className:"text-sm text-muted-foreground",children:e("hashCleaner.emptyState")})})]})]}),i.jsx(cn,{className:"mt-6",children:i.jsx(ei,{className:"pt-6",children:i.jsxs("div",{className:"grid gap-4 md:grid-cols-3",children:[i.jsxs("div",{className:"flex gap-3",children:[i.jsx("div",{className:"p-2 rounded-lg bg-accent/10 h-fit",children:i.jsx(qs,{className:"w-5 h-5 text-accent"})}),i.jsxs("div",{children:[i.jsx("h4",{className:"font-medium text-sm",children:e("hashCleaner.infoMetadataTitle")}),i.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e("hashCleaner.infoMetadataDescription")})]})]}),i.jsxs("div",{className:"flex gap-3",children:[i.jsx("div",{className:"p-2 rounded-lg bg-accent/10 h-fit",children:i.jsx(Pm,{className:"w-5 h-5 text-accent"})}),i.jsxs("div",{children:[i.jsx("h4",{className:"font-medium text-sm",children:e("hashCleaner.infoHashTitle")}),i.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e("hashCleaner.infoHashDescription")})]})]}),i.jsxs("div",{className:"flex gap-3",children:[i.jsx("div",{className:"p-2 rounded-lg bg-green-500/10 h-fit",children:i.jsx(Cm,{className:"w-5 h-5 text-green-500"})}),i.jsxs("div",{children:[i.jsx("h4",{className:"font-medium text-sm",children:e("hashCleaner.infoClientSideTitle")}),i.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e("hashCleaner.infoClientSideDescription")})]})]})]})})})]})]})};function nY(){const{t:e}=tt(["dashboard","common"]),[t]=Tg(),a=t.get("token")??"",[o,n]=g.useState("loading");g.useEffect(()=>{if(!a){n("invalid");return}(async()=>{try{const s=`https://jevbzxxgwsbbxzwwszag.supabase.co/functions/v1/handle-email-unsubscribe?token=${encodeURIComponent(a)}`,c=await(await fetch(s,{headers:{apikey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpldmJ6eHhnd3NiYnh6d3dzemFnIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODM2OTYwMzQsImV4cCI6MjA5OTI3MjAzNH0.hOFQSgGE04I7fhEbiIIF4E2AtOOciicNOL37bCfBJtc"}})).json();c.valid?n("valid"):c.reason==="already_unsubscribed"?n("already"):n("invalid")}catch{n("invalid")}})()},[a]);const r=async()=>{n("submitting");const{data:s,error:l}=await ne.functions.invoke("handle-email-unsubscribe",{body:{token:a}});l||!(s!=null&&s.success)?n("error"):n("success")};return i.jsx("main",{className:"min-h-screen flex items-center justify-center bg-background p-6",children:i.jsxs(cn,{className:"max-w-md w-full p-8 text-center space-y-4",children:[i.jsx("h1",{className:"text-2xl font-semibold",children:e("unsubscribe.title")}),o==="loading"&&i.jsx("p",{className:"text-muted-foreground",children:e("unsubscribe.checking")}),o==="valid"&&i.jsxs(i.Fragment,{children:[i.jsx("p",{className:"text-muted-foreground",children:e("unsubscribe.confirmMessage")}),i.jsx(we,{onClick:r,className:"w-full",children:e("unsubscribe.confirmButton")})]}),o==="submitting"&&i.jsx("p",{className:"text-muted-foreground",children:e("unsubscribe.submitting")}),o==="success"&&i.jsx("p",{className:"text-green-600",children:e("unsubscribe.success")}),o==="already"&&i.jsx("p",{className:"text-muted-foreground",children:e("unsubscribe.alreadyUnsubscribed")}),o==="invalid"&&i.jsx("p",{className:"text-destructive",children:e("unsubscribe.invali
580dLink")}),o==="error"&&i.jsx("p",{className:"text-destructive",children:e("unsubscribe.error")})]})})}function rY(){const{t:e}=tt(["dashboard","common"]),t=Rt(),[a,o]=g.useState("checking"),[n,r]=g.useState(""),[s,l]=g.useState(""),[c,d]=g.useState(!1);g.useEffect(()=>{const{data:m}=ne.auth.onAuthStateChange((b,y)=>{(b==="PASSWORD_RECOVERY"||b==="SIGNED_IN"&&y)&&o("ready")}),h=new URLSearchParams(window.location.search),p=h.get("token_hash"),v=h.get("type");if(p&&v==="recovery")return ne.auth.verifyOtp({token_hash:p,type:"recovery"}).then(({data:b,error:y})=>{o(x=>x==="checking"?y||!b.session?"invalid":"ready":x)}),()=>{m.subscription.unsubscribe()};ne.auth.getSession().then(({data:b})=>{o(y=>y==="checking"?b.session?"ready":"invalid":y)});const f=setTimeout(()=>o(b=>b==="checking"?"invalid":b),5e3);return()=>{m.subscription.unsubscribe(),clearTimeout(f)}},[]);const u=async()=>{var h,p;if(n.length<6){We.error(e("resetPassword.shortPasswordTitle"),e("resetPassword.shortPasswordDesc"));return}if(n!==s){We.error(e("resetPassword.mismatchTitle"),e("resetPassword.mismatchDesc"));return}o("saving");const{error:m}=await ne.auth.updateUser({password:n});if(m){const v=((h=m.message)==null?void 0:h.includes("leaked"))||((p=m.message)==null?void 0:p.includes("compromised"));We.error(e("resetPassword.errorTitle"),v?e("resetPassword.leakedPassword"):m.message||e("resetPassword.genericError")),o("ready");return}o("done"),We.success(e("resetPassword.successTitle"),e("resetPassword.successDesc")),await ne.auth.signOut(),setTimeout(()=>t("/auth"),1600)};return i.jsx("main",{className:"min-h-screen flex items-center justify-center bg-background p-6",children:i.jsxs(cn,{className:"max-w-md w-full p-8 space-y-5",children:[i.jsxs("div",{className:"text-center space-y-2",children:[i.jsx("div",{className:"mx-auto w-12 h-12 rounded-xl bg-primary/10 flex items-center justify-center",children:i.jsx(Nr,{className:"h-6 w-6 text-primary"})}),i.jsx("h1",{className:"text-2xl font-semibold",children:e("resetPassword.title")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:e("resetPassword.subtitle")})]}),a==="checking"&&i.jsx("div",{className:"flex justify-center py-6",children:i.jsx(xt,{className:"h-6 w-6 animate-spin text-muted-foreground"})}),a==="invalid"&&i.jsxs("div",{className:"text-center space-y-3",children:[i.jsx("p",{className:"text-sm text-muted-foreground",children:e("resetPassword.invalidLink")}),i.jsx(we,{className:"w-full",onClick:()=>t("/auth"),children:e("resetPassword.backToLogin")})]}),(a==="ready"||a==="saving")&&i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"np",children:e("resetPassword.newPasswordLabel")}),i.jsxs("div",{className:"relative",children:[i.jsx(it,{id:"np",type:c?"text":"password",value:n,onChange:m=>r(m.target.value),placeholder:e("resetPassword.newPasswordPlaceholder"),autoComplete:"new-password"}),i.jsx("button",{type:"button",onClick:()=>d(!c),className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground","aria-label":e(c?"resetPassword.hidePassword":"resetPassword.showPassword"),children:c?i.jsx(pc,{className:"h-4 w-4"}):i.jsx(hc,{className:"h-4 w-4"})})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{htmlFor:"cp",children:e("resetPassword.confirmPasswordLabel")}),i.jsx(it,{id:"cp",type:c?"text":"password",value:s,onChange:m=>l(m.target.value),placeholder:e("resetPassword.confirmPasswordPlaceholder"),autoComplete:"new-password",onKeyDown:m=>m.key==="Enter"&&u()})]}),i.jsxs(we,{className:"w-full",onClick:u,disabled:a==="saving",children:[a==="saving"?i.jsx(xt,{className:"h-4 w-4 animate-spin mr-2"}):null,e("resetPassword.submitButton")]})]}),a==="done"&&i.jsx("p",{className:"text-center text-sm text-emerald-500",children:e("resetPassword.doneMessage")})]})})}const gP=()=>{const{t:e}=tt(["dashboard","common"]),{slug:t}=Ig(),[a,o]=g.useState(null),[n,r]=g.useState(!0),[s,l]=g.useState(!1);return g.useEffect(()=>{(async()=>{if(!t){l(!0),r(!1);return}const{data:d,error:u}=await ne.from("published_sites").select("html_content").eq("slug",t).maybeSingle();u||!d?l(!0):o(d.html_content),r(!1)})()},[t]),n?i.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100vh",background:"#000",color:"#fff"},children:i.jsx("p",{children:e("publishedSite.loading")})}):s||!a?i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",background:"#111",color:"#fff",fontFamily:"system-ui"},children:[i.jsx("h1",{style:{fontSize:"2rem",marginBottom:"0.5rem"},children:"404"}),i.jsx("p",{style:{color:"#888"},children:e("publishedSite.notFoundTitle")})]}):i.jsx("iframe",{srcDoc:a,title:e("publishedSite.iframeTitle"),style:{width:"100vw",height:"100vh",border:"none"},sandbox:"allow-scripts allow-same-origin allow-popups allow-forms",allow:"clipboard-write"})};var vP="AlertDialog",[iY,wJ]=La(vP,[Pb]),Ya=Pb(),bP=e=>{const{__scopeAlertDialog:t,...a}=e,o=Ya(t);return i.jsx(Bb,{...o,...a,modal:!0})};bP.displayName=vP;var sY="AlertDialogTrigger",yP=g.forwardRef((e,t)=>
580{const{__scopeAlertDialog:a,...o}=e,n=Ya(a);return i.jsx(zb,{...n,...o,ref:t})});yP.displayName=sY;var lY="AlertDialogPortal",xP=e=>{const{__scopeAlertDialog:t,...a}=e,o=Ya(t);return i.jsx(Vb,{...o,...a})};xP.displayName=lY;var cY="AlertDialogOverlay",wP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,...o}=e,n=Ya(a);return i.jsx(vu,{...n,...o,ref:t})});wP.displayName=cY;var In="AlertDialogContent",[dY,uY]=iY(In),mY=Xg("AlertDialogContent"),CP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,children:o,...n}=e,r=Ya(a),s=g.useRef(null),l=Qe(t,s),c=g.useRef(null);return i.jsx(KT,{contentName:In,titleName:PP,docsSlug:"alert-dialog",children:i.jsx(dY,{scope:a,cancelRef:c,children:i.jsxs(bu,{role:"alertdialog",...r,...n,ref:l,onOpenAutoFocus:qe(n.onOpenAutoFocus,d=>{var u;d.preventDefault(),(u=c.current)==null||u.focus({preventScroll:!0})}),onPointerDownOutside:d=>d.preventDefault(),onInteractOutside:d=>d.preventDefault(),children:[i.jsx(mY,{children:o}),i.jsx(hY,{contentRef:s})]})})})});CP.displayName=In;var PP="AlertDialogTitle",AP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,...o}=e,n=Ya(a);return i.jsx(yu,{...n,...o,ref:t})});AP.displayName=PP;var EP="AlertDialogDescription",SP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,...o}=e,n=Ya(a);return i.jsx(xu,{...n,...o,ref:t})});SP.displayName=EP;var pY="AlertDialogAction",NP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,...o}=e,n=Ya(a);return i.jsx(el,{...n,...o,ref:t})});NP.displayName=pY;var kP="AlertDialogCancel",TP=g.forwardRef((e,t)=>{const{__scopeAlertDialog:a,...o}=e,{cancelRef:n}=uY(kP,a),r=Ya(a),s=Qe(t,n);return i.jsx(el,{...r,...o,ref:s})});TP.displayName=kP;var hY=({contentRef:e})=>{const t=`\`${In}\` requires a description for the component to be accessible for screen reader users. 581 582You can add a description to the \`${In}\` by passing a \`${EP}\` component as a child, which also benefits sighted users by adding visible context to the dialog. 583 584Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${In}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. 585 586For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return g.useEffect(()=>{var o;document.getElementById((o=e.current)==null?void 0:o.getAttribute("aria-describedby"))||console.warn(t)},[t,e]),null},fY=bP,gY=yP,vY=xP,IP=wP,RP=CP,DP=NP,MP=TP,FP=AP,LP=SP;const bY=fY,CJ=gY,yY=vY,jP=g.forwardRef(({className:e,...t},a)=>i.jsx(IP,{className:ve("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t,ref:a}));jP.displayName=IP.displayName;const _P=g.forwardRef(({className:e,...t},a)=>i.jsxs(yY,{children:[i.jsx(jP,{}),i.jsx(RP,{ref:a,className:ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...t})]}));_P.displayName=RP.displayName;const OP=({className:e,...t})=>i.jsx("div",{className:ve("flex flex-col space-y-2 text-center sm:text-left",e),...t});OP.displayName="AlertDialogHeader";const BP=({className:e,...t})=>i.jsx("div",{className:ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t});BP.displayName="AlertDialogFooter";const zP=g.forwardRef(({className:e,...t},a)=>i.jsx(FP,{ref:a,className:ve("text-lg font-semibold",e),...t}));zP.displayName=FP.displayName;const VP=g.forwardRef(({className:e,...t},a)=>i.jsx(LP,{ref:a,className:ve("text-sm text-muted-foreground",e),...t}));VP.displayName=LP.displayName;const qP=g.forwardRef(({className:e,...t},a)=>i.jsx(DP,{ref:a,className:ve(ys(),e),...t}));qP.displayName=DP.displayName;const xY=g.forwardRef(({className:e,...t},a)=>i.jsx(MP,{ref:a,className:ve(ys({variant:"outline"}),"mt-2 sm:mt-0",e),...t}));
586xY.displayName=MP.displayName;const ls=g.forwardRef(({className:e,...t},a)=>i.jsx("textarea",{className:ve("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:a,...t}));ls.displayName="Textarea";const eg=["sale","pix_detected"],wY="sale-flow-conflicts";function CY(e,t={}){const{effectiveUserId:a}=dm(),o=t.enabled??!0,{data:n=[],isLoading:r}=LN({queryKey:[wY,a],enabled:o&&!!a,staleTime:60*1e3,queryFn:async()=>{if(!a)return[];const{data:d,error:u}=await ne.from("inbox_flows").select("id, name, assigned_instances, trigger_type").eq("user_id",a).is("deleted_at",null).in("trigger_type",eg);return u?(console.error("[useSaleFlowInstanceConflicts] error",u),[]):d||[]}}),s=g.useMemo(()=>n.filter(d=>d.id!==e),[n,e]),l=(d,u)=>{const m=u?new Set(u):null;for(const h of s){const p=h.assigned_instances||[],v=m?p.filter(f=>m.has(f)):p;if(v.length===0||v.includes(d))return h}return null};return{isLoading:r,otherSaleFlows:s,getConflictForInstance:l,getSelectionConflicts:(d,u,m)=>{if(u&&!eg.includes(u))return[];if(s.length===0)return[];const h=m?new Set(m):null,p=h?d.filter(b=>h.has(b)):d;if(p.length===0)return s;const v=new Set,f=[];for(const b of p){const y=l(b,m);y&&!v.has(y.id)&&(v.add(y.id),f.push(y))}return f}}}function PY(e){const t=(e==null?void 0:e.message)||"";return typeof t=="string"&&t.includes("sale_flow_conflict")}function UP(e){return e==="zernio"?"official":"unofficial"}function AY(e){return e==="official"?"official":"unofficial"}function EY(e,t){return e.filter(a=>UP(a.api_provider)===t)}function SY(e,t,a){const o=new Map(t.map(n=>[n.id,n]));for(const n of e){const r=o.get(n);if(r&&UP(r.api_provider)!==a)return r}return null}function NY(e){const t=(e==null?void 0:e.message)??(typeof e=="string"?e:"");return typeof t=="string"&&t.includes("flow_channel_instance_mismatch")}const kY=["openai","gemini","anthropic","deepseek"];function TY(e){const[t,a]=g.useState(null),[o,n]=g.useState(0),r=g.useRef(void 0),s=g.useCallback(()=>n(l=>l+1),[]);return g.useEffect(()=>{let l=!1;if(e!==r.current&&a(null),r.current=e,!!e)return(async()=>{const{data:c,error:d}=await ne.rpc("list_platform_ai_keys",{p_owner_user_id:e});if(l)return;if(d){console.error("[usePlatformAIIntegrationKeys] lookup error:",d.message),a([]);return}const u=Array.isArray(c)?c:[];a(u.filter(m=>kY.includes(m==null?void 0:m.provider)).map(m=>({id:m.id,provider:m.provider,label:m.label||"",isDefault:!!m.is_default,connectedAt:m.connected_at})))})(),()=>{l=!0}},[e,o]),t===null?null:{keys:t,defaultKey:t.find(l=>l.isDefault)??t[0]??null,refetch:s}}const tg={openai:"OpenAI",gemini:"Gemini",anthropic:"Anthropic (Claude)",deepseek:"DeepSeek"};function IY({keys:e,mode:t,onModeChange:a,selectedKeyId:o,onSelectedKeyIdChange:n,apiKey:r,onApiKeyChange:s,apiKeyPlaceholder:l="sk-xxxxxxxxxxxxx",requiredHelpText:c,disconnectedHelpText:d,compact:u=!1}){const{t:m}=tt(["flowBuilder","common"]),h=c??m("platformAIKeySourceField.defaultRequiredHelp"),p=d??m("platformAIKeySourceField.defaultDisconnectedHelp"),v=u?"text-[11px]":"text-xs",f=e?e.keys.find(b=>b.id===o)??e.defaultKey:null;return i.jsxs("div",{className:"space-y-2",children:[i.jsxs("div",{className:"inline-flex rounded-md border border-border p-0.5 gap-0.5",children:[i.jsx("button",{type:"button",onClick:()=>a("own"),className:`rounded px-2 py-1 ${v} font-medium transition-colors ${t==="own"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"}`,children:m("platformAIKeySourceField.myKey")}),i.jsx("button",{type:"button",onClick:()=>a("integration"),className:`rounded px-2 py-1 ${v} font-medium transition-colors ${t==="integration"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"}`,children:m("platformAIKeySourceField.integrationKey")})]}),t==="own"?i.jsxs(i.Fragment,{children:[i.jsx(it,{type:"password",autoComplete:"off",className:u?"h-8 text-xs":void 0,placeholder:l,value:r,onChange:b=>s(b.target.value)}),!r.trim()&&i.jsx("p",{className:"text-xs text-rose-400",children:h})]}):e===null?i.jsx("p",{className:"text-xs text-muted-foreground",children:m("platformAIKeySourceField.loadingIntegrationStatus")}):f?i.jsxs("div",{className:"space-y-1.5",children:[i.jsxs("div",{className:"p-2 rounded bg-emerald-500/10 border border-emerald-500/30 text-xs text-emerald-400 flex items-center justify-between gap-2 flex-wrap",children:[i.jsxs("span",{className:"flex items-center gap-1.5",children:[i.jsx(ri,{className:"h-3.5 w-3.5 shrink-0"}),m("platformAIKeySourceField.usingKey",{keyName:f.label?`"${f.label}"`:m("platformAIKeySourceField.yourKey"),provider:tg[f.provider]})]}),i.jsxs(ds,{to:"/integrations?tab=platform-ai",className:"underline underline-offset-2 shrink-0 hover:text-emerald-300",children:[m("platformAIKeySourceField.manage")," â"]})]}),e.keys.length>1&&i.jsxs(Cn,{value:f.id,onValueChange:b=>{var y;return n(b===((y=e.defaultKey)==null?void 0:y.id)?void 0:b)},children:[i.jsx(Oo,{className:u?"h-8 text-xs":void 0,children:i.jsx(Pn,{})}),i.jsx(Bo,{children:e.keys.map(b=>i.jsxs(jt,{value:b.id,children:[b.label||m("platformAIKeySourceField.noNickname")," â ",tg[b.provider],b.isDefault?` ${m("platformAIKeySourceField.defaultSuffix")}`:""]},b.id))})]})]}):i.jsxs("div",{className:"p-2 rounded bg-amber-500/10 border border-amber-500/30 text-xs text-amber-400 space-y-1",children:[i.jsxs("p",{className:"flex items-start gap-2",children:[i.jsx(Wa,{className:"h-3.5 w-3.5 shrink-0 mt-0.5"}),i.jsx("span",{children:p})]}),i.jsxs(ds,{to:"/integrations?tab=platform-ai",className:"font-medium underline underline-offset-2 hover:text-amber-300",children:[m("platformAIKeySourceField.connectNow")," â"]})]})]})}const RY=[{provider:"openai",id:"gpt-5.4-nano",label:"GPT-5.4 Nano",tier:"economico",inputPricePerM:.2,outputPricePerM:1.25,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,recommendedFor:"classificação simples, respostas curtas, alto volume"},{provider:"openai",id:"gpt-5.4-mini",label:"GPT-5.4 Mini",tier:"equilibrado",inputPricePerM:.75,outputPricePerM:4.5,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,recommendedFor:"atendimento geral, custo-benefÃcio"},{provider:"openai",id:"gpt-5.4",label:"GPT-5.4",tier:"equilibrado",inputPricePerM:2.5,outputPricePerM:15,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,recommendedFor:"tarefas complexas, raciocÃnio"},{provider:"openai",id:"gpt-5.6-luna",label:"GPT-5.6 Luna",tier:"economico",inputPricePerM:1,outputPricePerM:6,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,recommendedFor:"flagship barato, bom equilÃbrio"},{provider:"openai",id:"gpt-5.6-terra",label:"GPT-5.6 Terra",tier:"equilibrado",inputPricePerM:2.5,outputPricePerM:15,supportsVision:!0,supportsPdf:!1,supportsAudio:!1},{provider:"openai",id:"gpt-5.6-sol",label:"GPT-5.6 Sol",tier:"poderoso",inputPricePerM:5,outputPricePerM:30,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,recommendedFor:"máxima qualidade"},{provider:"openai",id:"gpt-4o",label:"GPT-4o (legado)",tier:"equilibrado",inputPricePerM:2.5,outputPricePerM:10,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,legacy:!0},{provider:"openai",id:"gpt-4o-mini",label:"GPT-4o Mini (legado)",tier:"economico",inputPricePerM:.15,outputPricePerM:.6,supportsVision:!0,supportsPdf:!1,supportsAudio:!1,legacy:!0}],DY=[{provider:"gemini",id:"gemini-2.5-flash-lite",label:"Gemini 2.5 Flash-Lite (legado)",tier:"economico",inputPricePerM:.1,outputPricePerM:.4,supportsVision:!0,supportsPdf:!0,supportsAudio:!0,legacy:!0,recommendedFor:"mais barato, alto volume, classificação"},{provider:"gemini",id:"gemini-2.5-flash",label:"Gemini 2.5 Flash",tier:"equilibrado",inputPricePerM:.3,outputPricePerM:2.5,supportsVision:!0,supportsPdf:!0,supportsAudio:!0,recommendedFor:"uso geral, recomendado"},{provider:"gemini",id:"gemini-2.5-pro",label:"Gemini 2.5 Pro",tier:"poderoso",inputPricePerM:1.25,outputPricePerM:10,supportsVision:!0,supportsPdf:!0,supportsAudio:!0},{provider:"gemini",id:"gemini-3.1-flash-lite",label:"Gemini 3.1 Flash-Lite",tier:"economico",inputPricePerM:.25,outputPricePerM:1.5,supportsVision:!0,supportsPdf:!0,supportsAudio:!0},{provider:"gemini",id:"gemini-3.5-flash",label:"Gemini 3.5 Flash",tier:"equilibrado",inputPricePerM:1.5,outputPricePerM:9,supportsVision:!0,supportsPdf:!0,supportsAudio:!0,recommendedFor:"novo default recomendado"},{provider:"gemini",id:"gemini-3.1-pro-preview",label:"Gemini 3.1 Pro (preview)",tier:"poderoso",inputPricePerM:2,outputPricePerM:12,supp
586ortsVision:!0,supportsPdf:!0,supportsAudio:!0}],MY=[{provider:"anthropic",id:"claude-haiku-4-5",label:"Claude Haiku 4.5",tier:"economico",inputPricePerM:1,outputPricePerM:5,supportsVision:!0,supportsPdf:!0,supportsAudio:!1,recommendedFor:"mais rápido e barato da Anthropic"},{provider:"anthropic",id:"claude-sonnet-5",label:"Claude Sonnet 5",tier:"equilibrado",inputPricePerM:3,outputPricePerM:15,supportsVision:!0,supportsPdf:!0,supportsAudio:!1,recommendedFor:"recomendado, melhor custo-benefÃcio"},{provider:"anthropic",id:"claude-opus-4-8",label:"Claude Opus 4.8",tier:"poderoso",inputPricePerM:5,outputPricePerM:25,supportsVision:!0,supportsPdf:!0,supportsAudio:!1,recommendedFor:"mais capaz, tarefas complexas"}],FY=[{provider:"deepseek",id:"deepseek-v4-flash",label:"DeepSeek V4 Flash",tier:"economico",inputPricePerM:.14,outputPricePerM:.28,supportsVision:!1,supportsPdf:!1,supportsAudio:!1,recommendedFor:"extremamente barato, alto volume"},{provider:"deepseek",id:"deepseek-v4-pro",label:"DeepSeek V4 Pro",tier:"equilibrado",inputPricePerM:.435,outputPricePerM:.87,supportsVision:!1,supportsPdf:!1,supportsAudio:!1}],pm=[...RY,...DY,...MY,...FY];function LY(e){return pm.filter(t=>t.provider===e)}function jY(e,t){return pm.find(a=>a.provider===e&&a.id===t)}function _Y(e){return pm.filter(t=>!(e.vision!==void 0&&t.supportsVision!==e.vision||e.pdf!==void 0&&t.supportsPdf!==e.pdf||e.audio!==void 0&&t.supportsAudio!==e.audio))}function OY(e){const t=a=>Number.isInteger(a)?a.toFixed(2):a.toString();return`$${t(e.inputPricePerM)} / $${t(e.outputPricePerM)} por 1M tokens`}const BY={economico:{icon:"ð°",label:"Econômico",classes:"border-emerald-500/50 bg-emerald-500/10 text-emerald-500 hover:bg-emerald-500/15"},equilibrado:{icon:"âï¸",label:"Equilibrado",classes:"border-blue-500/50 bg-blue-500/10 text-blue-500 hover:bg-blue-500/15"},poderoso:{icon:"ð§ ",label:"Mais capaz",classes:"border-violet-500/50 bg-violet-500/10 text-violet-500 hover:bg-violet-500/15"}};function zY({provider:e,modelId:t,model:a,className:o}){const n=a??(e&&t?jY(e,t):void 0);if(!n)return null;const r=BY[n.tier];return i.jsx(Jd,{children:i.jsxs(zv,{children:[i.jsx(Vv,{asChild:!0,children:i.jsxs(na,{variant:"outline",className:ve("gap-1 cursor-default text-xs font-medium",r.classes,o),children:[i.jsx("span",{"aria-hidden":"true",children:r.icon}),r.label]})}),i.jsxs(eu,{side:"top",className:"max-w-[240px]",children:[i.jsxs("p",{className:"text-xs",children:[OY(n)," (entrada/saÃda)"]}),n.recommendedFor&&i.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:["Melhor para: ",n.recommendedFor]})]})]})})}const VY={keyword:"triggerLabels.keyword",all:"triggerLabels.all",sale:"triggerLabels.sale",tag:"triggerLabels.tag",webhook:"triggerLabels.webhook"},qY=VY.sale;function WP(e,t){const a=new Map;if(!e||e.length===0)return a;const o=new Map;for(const c of t||[])!(c!=null&&c.source)||!(c!=null&&c.target)||(o.has(c.source)||o.set(c.source,[]),o.get(c.source).push(c.target));const n=e.filter(c=>c.type==="start").map(c=>c.id);n.length===0&&e.length>0&&n.push(e[0].id);let r=1;const s=[...n],l=new Set;for(;s.length>0;){const c=s.shift();if(l.has(c))continue;l.add(c),a.set(c,r++);const d=o.get(c)||[];for(const u of d)l.has(u)||s.push(u)}for(const c of e)l.has(c.id)||a.set(c.id,r++);return a}function PJ(e,t){return g.useMemo(()=>WP(e,t),[e,t])}const Dd={pix:"BR",spei:"MX",cop_breb:"CO",cop_breb_llave:"CO",cop_pse:"CO",cop_nequi:"CO",mx_oxxo:"MX",mx_codi:"MX",pe_yape:"PE",pe_plin:"PE",pe_cash:"PE",pe_bank_transfer:"PE",ars_transfer:"AR",in_upi:"IN",ph_gcash:"PH",ph_maya:"PH"},hm={BR:["pix"],MX:["spei","mx_oxxo","mx_codi"],CO:["cop_pse","cop_breb_llave","cop_breb","cop_nequi"],PE:["pe_yape","pe_plin","pe_cash","pe_bank_transfer"],AR:["ars_transfer"],IN:["in_upi"],PH:["ph_gcash","ph_maya"]},UY=hm.PE,WY=hm.PH;function ag(e){return UY.includes(e)}function og(e){return WY.includes(e)}const $Y={pix:1,spei:2e3,cop_breb:1e6,cop_breb_llave:1e6,cop_pse:1e6,cop_nequi:1e6,mx_oxxo:2e3,mx_codi:2e3,pe_yape:1,pe_plin:1,pe_cash:1,pe_bank_transfer:1,ars_transfer:1,in_upi:2e4,ph_gcash:3e4,ph_maya:3e4},ng={pix:"R$",spei:"MX$",cop_breb:"COP$",cop_breb_llave:"COP$",cop_pse:"COP$",cop_nequi:"COP$",mx_oxxo:"MX$",mx_codi:"MX$",pe_yape:"S/",pe_plin:"S/",pe_cash:"S/",pe_bank_transfer:"S/",ars_transfer:"AR$",in_upi:"â¹",ph_gcash:"â±",ph_maya:"â±"},AJ={pix:"ð§ð· PIX",spei:"ð²ð½ SPEI",mx_oxxo:"ð²ð½ OXXO",mx_codi:"ð²ð½ CoDi",cop_pse:"ð¨ð´ PSE",cop_breb:"ð¨ð´ Bre-B",cop_breb_llave:"ð¨ð´ Bre-B (link)",cop_nequi:"ð¨ð´ Nequi",pe_yape:"ðµðª Yape",pe_plin:"ðµðª Plin",pe_cash:"ðµðª Efectivo",pe_bank_transfer:"ðµðª Transferencia",ars_transfer:"ð¦ð· CBU",in_upi:"ð®ð³ UPI",ph_gcash:"ðµð GCash",ph_maya:"ðµð Maya"},GY={pix:["none","qr","custom"],spei:["none","custom"],mx_oxxo:["none","voucher","custom"],mx_codi:["qr"],cop_breb:["none","qr","custom"],cop_pse:["none","custom"],cop_nequi:["none","custom"],cop_breb_llave:["none","custom"],pe_yape:["none","custom"],pe_plin:["none","custom"],pe_cash:["none","custom"],pe_bank_transfer:["none","custom"],ars_transfer:["none","custom"],in_upi:["none","custom"],ph_gcash:["none","custom"],ph_maya:["none","custom"]}
586,HY={pix:!0,spei:!0,cop_breb:!0,cop_breb_llave:!0,cop_pse:!0,cop_nequi:!0,mx_oxxo:!1,mx_codi:!0,pe_yape:!0,pe_plin:!0,pe_cash:!0,pe_bank_transfer:!0,ars_transfer:!0,in_upi:!0,ph_gcash:!0,ph_maya:!0};function yl(e,t){const a=String((e==null?void 0:e.method)??"").trim();if(Object.prototype.hasOwnProperty.call(Dd,a))return a;if(String((e==null?void 0:e.country)??"").trim().toUpperCase()==="MX"||t==="speiApi")return"spei";const o=hm[String((e==null?void 0:e.country)??"").trim().toUpperCase()];return o&&o.length===1?o[0]:"pix"}function KY(e){const t=String(e??"").toUpperCase().replace(/[^0-9A-ZÃ&]/g,"");return t.length>=10&&t.length<=18}function $P(e){return String((e==null?void 0:e.caption)??"").trim()||String((e==null?void 0:e.text)??"").trim()}function Md(e){const t=String((e==null?void 0:e.copyButtonText)??"").trim();if(t)return t;const a=Array.isArray(e==null?void 0:e.choices)?e==null?void 0:e.choices:[];for(const o of a){const n=String(o??""),r=n.indexOf("|");if(r<0||!n.slice(r+1).startsWith("copy:"))continue;const s=n.slice(0,r).trim();if(s)return s}return""}function XY(e){return(e==null?void 0:e.sendCopyButton)!==!1}const Fd={pix:"Copiar código PIX",spei:"Copiar CLABE",cop_breb:"Copiar código QR",cop_breb_llave:"Pagar",cop_pse:"Pagar",cop_nequi:"Pagar con Nequi",mx_oxxo:"Copiar referencia",mx_codi:"Copiar código CoDi",pe_yape:"Pagar",pe_plin:"Pagar",pe_cash:"Pagar",pe_bank_transfer:"Copiar cuenta",ars_transfer:"Copiar CBU",in_upi:"Pagar",ph_gcash:"Pagar",ph_maya:"Pagar"},YY=["Copiar código UPI"];function EJ(e,t){const a=Fd[e],o=String(t??"").trim();return o?o===a?o:new Set([...Object.values(Fd),...YY]).has(o)?a:o:a}const QY=["none","qr","custom","voucher"];function GP(e,t){const a=GY[yl(e,t)],o=a.includes("qr")?"qr":a.includes("voucher")?"voucher":"none",n=l=>a.includes(l)?l:a.length===1?a[0]:o,r=String((e==null?void 0:e.imageMode)??"").trim();if(QY.includes(r))return n(r);const s=String((e==null?void 0:e.messageType)??"");return n(s==="imageText"||s==="imageTextButton"?String((e==null?void 0:e.mediaUrl)??"").trim()?"custom":"none":(e==null?void 0:e.sendQrImage)===!1?"none":"qr")}function ZY(e,t){return e==="kairos"||e==="zenith"&&t==="pix"}function rg(e,t){const a=String((e==null?void 0:e.provider)??"").trim();if(ZY(a,yl(e,t)))return!1;const o=r=>String((e==null?void 0:e[r])??"").trim(),n=["payerName","payerNameFallback","payerDocument","payerDocumentFallback","payerEmail","payerEmailFallback"].some(r=>o(r)!=="");return(e==null?void 0:e.autoPayerData)===!0||(e==null?void 0:e.autoPayerData)===void 0&&!n}function JY(e,t){return String((e==null?void 0:e.provider)??"").trim()!=="xpag"||yl(e,t)!=="spei"?!1:(e==null?void 0:e.openValue)===!0}function SJ(e){return String((e==null?void 0:e.credentialId)??"").trim()===""}function eQ(e){const t=e.replace(/[^\d.,-]/g,"").trim();if(!t)return NaN;const a=t.startsWith("-"),o=t.replace(/-/g,""),n=o.lastIndexOf(","),r=o.lastIndexOf(".");let s;if(n>=0&&r>=0){const c=n>r?",":".",d=c===","?".":",";s=o.split(d).join("").replace(c,".")}else if(n>=0)s=o.replace(/,/g,".");else if(r>=0){const c=o.split("."),d=c[c.length-1];s=c.length>1&&d.length===3&&c.slice(0,-1).every(m=>m.length>0&&m.length<=3)&&!(c.length===2&&c[0]==="0")?c.join(""):o}else s=o;const l=Number(s);return a?-l:l}const NJ=[{label:"Copiar cuenta",action:"copy",valueTemplate:"{{accountNumber}}"},{label:"Copiar referencia",action:"copy",valueTemplate:"{{reference}}"}],ig="_zenithPeAvailableMethods",tQ="_zenithPeCapabilitiesKnown",kJ="_zenithPeCapabilityCredentialId",sg="_zenithPhAvailableMethods",TJ="_zenithPhCapabilitiesKnown",IJ="_zenithPhCapabilityCredentialId";function aQ(e){return Array.isArray(e==null?void 0:e.paymentButtons)?e.paymentButtons.map(t=>{const a=t&&typeof t=="object"?t:{};return{label:String(a.label??""),action:a.action==="url"?"url":a.action==="copy"?"copy":a.action,valueTemplate:String(a.valueTemplate??"")}}):[]}const oQ=["zuckpay","kairos","kiwify","xpag","zenith","nexuspag","skalepay"],RJ=["zuckpay","xpag","zenith"],nQ={zuckpay:["pix","spei"],kairos:["pix"],kiwify:["pix"],nexuspag:["pix"],skalepay:["pix"],xpag:["pix","spei","mx_oxxo","cop_breb","cop_nequi","ars_transfer"],zenith:["spei","mx_oxxo","mx_codi","pix","cop_pse","cop_breb_llave","cop_nequi","pe_yape","pe_plin","pe_cash","pe_bank_transfer","in_upi","ph_gcash","ph_maya","ars_transfer"]};function rQ(e,t){return(nQ[e]??["pix"]).includes(t)}const iQ={pix:!1,spei:!1,cop_breb:!1,cop_breb_llave:!1,cop_pse:!1,cop_nequi:!1,mx_oxxo:!1,mx_codi:!1,pe_yape:!1,pe_plin:!1,pe_cash:!1,pe_bank_transfer:!1,ars_transfer:!1,in_upi:!1,ph_gcash:!1,ph_maya:!1},sQ=[];function HP(e,t){return iQ[e]===!0&&sQ.includes(t)}function lQ(e,t){return HY[e]===!0&&!HP(e,t)}
586const cQ={pix:!1,spei:!1,cop_breb:!1,cop_breb_llave:!0,cop_pse:!0,cop_nequi:!0,mx_oxxo:!1,mx_codi:!1,pe_yape:!0,pe_plin:!0,pe_cash:!0,pe_bank_transfer:!0,ars_transfer:!1,in_upi:!0,ph_gcash:!0,ph_maya:!0};function DJ(e,t){return cQ[e]===!0&&!HP(e,t)}const dQ="{{telefone}}";function uQ(e){const t=e==null?void 0:e.nequiPhone;return t==null?dQ:String(t)}function mQ(e){return String(e??"").replace(/\D/g,"").length===11}function pQ(e){const t=String(e??"").replace(/\D/g,"");return t.length>=5&&t.length<=15}function hQ(e){const t=String(e??"").replace(/\D/g,""),a=t.length===12&&t.startsWith("57")?t.slice(2):t;return a.length===10&&a.startsWith("3")}const fQ="{{telefone}}";function gQ(e){const t=e==null?void 0:e.phPhone;return t==null?fQ:String(t)}function vQ(e){const t=String(e??"").replace(/\D/g,""),a=t.length===12&&t.startsWith("63")?t.slice(2):t.length===11&&t.startsWith("0")?t.slice(1):t;return/^9\d{9}$/.test(a)}const bQ=["zuckpay","kairos","zenith","skalepay"],yQ=["zenith","nexuspag"];function xQ(e,t){return t==="ars_transfer"?!1:e==="zenith"?t==="pix":!yQ.includes(e)}function KP(e){const t=String(e??"").replace(/\D/g,"");if(t.length!==11||/^(\d)\1{10}$/.test(t))return!1;const a=(o,n)=>{let r=0;for(let l=0;l<o.length;l++)r+=Number(o[l])*(n-l);const s=r*10%11;return s===10?0:s};return a(t.slice(0,9),10)===Number(t[9])&&a(t.slice(0,10),11)===Number(t[10])}function wQ(e){const t=String(e??"").replace(/\D/g,"");if(t.length!==14||/^(\d)\1{13}$/.test(t))return!1;const a=o=>{let n=o.length-7,r=0;for(let l=0;l<o.length;l++)r+=Number(o[l])*n,n=n-1<2?9:n-1;const s=r%11;return s<2?0:11-s};return a(t.slice(0,12))===Number(t[12])&&a(t.slice(0,13))===Number(t[13])}function CQ(e){return KP(e)||wQ(e)}const PQ=500,lg=6e4;function AQ(e,t){const a=e??{},o=f=>String(a[f]??"").trim(),n=[],r=o("provider"),s=yl(a,t),l=s==="spei",c=Dd[s]==="CO",d=Dd[s]==="AR",u=ag(s),m=og(s);if(oQ.includes(r)?rQ(r,s)||n.push({field:"provider",message:d?Ae.t("flowBuilder:pixApiValidation.gatewayNoArgentina"):c?Ae.t("flowBuilder:pixApiValidation.gatewayNoColombia"):u?Ae.t("flowBuilder:pixApiValidation.gatewayNoPeru"):m?Ae.t("flowBuilder:pixApiValidation.gatewayNoPhilippines"):Ae.t("flowBuilder:pixApiValidation.gatewayNoMexico")}):n.push({field:"provider",message:Ae.t("flowBuilder:pixApiValidation.chooseGateway")}),u){const f=a[tQ]===!0,b=Array.isArray(a[ig])?a[ig].filter(ag):[];f?b.includes(s)||n.push({field:"method",message:Ae.t("flowBuilder:pixApiValidation.methodUnavailableForCredential")}):n.push({field:"credentialCapabilities",message:Ae.t("flowBuilder:pixApiValidation.revalidateZenithCredential")})}if(m){const f=Array.isArray(a[sg])?a[sg].filter(og):[];f.length>0&&!f.includes(s)&&n.push({field:"method",message:Ae.t("flowBuilder:pixApiValidation.methodUnavailableForCredentialPh")})}if(!JY(a,t)){const f=o("amount");if(!f)n.push({field:"amount",message:Ae.t("flowBuilder:pixApiValidation.enterAmount")});else if(!f.includes("{{")){const b=eQ(f);if(!b||Number.isNaN(b)||b<=0)n.push({field:"amount",message:Ae.t("flowBuilder:pixApiValidation.invalidAmount",{amount:f})});else{const y=Math.round(b*100),x=r==="skalepay"?PQ:$Y[s];if(y<x){const w=(x/100).toFixed(2).replace(".",",");n.push({field:"amount",message:Ae.t("flowBuilder:pixApiValidation.belowMinimum",{symbol:ng[s],min:w})})}else if(r==="skalepay"&&y>lg){const w=(lg/100).toFixed(2).replace(".",",");n.push({field:"amount",message:Ae.t("flowBuilder:pixApiValidation.aboveMaximum",{symbol:ng[s],max:w})})}}}}if($P(a)||n.push({field:"caption",message:Ae.t("flowBuilder:pixApiValidation.writeMessage")}),s!=="pe_bank_transfer"&&lQ(s,r)&&XY(a)&&!Md(a)&&n.push({field:"copyButtonText",message:Ae.t("flowBuilder:pixApiValidation.enterButtonText")}),s==="pe_bank_transfer"){const f=a.paymentButtons,b=aQ(a);!Array.isArray(f)||b.length<1||b.length>3?n.push({field:"paymentButtons",message:Ae.t("flowBuilder:pixApiValidation.bankButtonsCount")}):b.forEach((y,x)=>{const w=y.label.trim(),P=y.valueTemplate.trim();(w.length<1||w.length>20)&&n.push({field:"paymentButtons",message:Ae.t("flowBuilder:pixApiValidation.bankButtonLabel",{number:x+1})}
586),y.action!=="copy"&&y.action!=="url"&&n.push({field:"paymentButtons",message:Ae.t("flowBuilder:pixApiValidation.bankButtonAction",{number:x+1})}),P?y.action==="url"&&!P.includes("{{")&&!/^https?:\/\//i.test(P)&&n.push({field:"paymentButtons",message:Ae.t("flowBuilder:pixApiValidation.bankButtonUrl",{number:x+1})}):n.push({field:"paymentButtons",message:Ae.t("flowBuilder:pixApiValidation.bankButtonValue",{number:x+1})})})}GP(a,t)==="custom"&&!o("mediaUrl")&&n.push({field:"mediaUrl",message:Ae.t("flowBuilder:pixApiValidation.chooseCustomImage")});const h=(f,b)=>o(f)!==""||o(b)!=="",p=r==="zenith"&&s==="pix",v=r==="skalepay";if(r==="kairos"||p){if(h("payerName","payerNameFallback")||n.push({field:"payerName",message:Ae.t("flowBuilder:pixApiValidation.enterPayerName")}),!h("payerDocument","payerDocumentFallback"))n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.enterPayerCpf")});else if(p){const f=o("payerDocument")||o("payerDocumentFallback");f&&!f.includes("{{")&&!KP(f)&&n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.invalidPayerCpf")}
586)}!p&&!h("payerEmail","payerEmailFallback")&&n.push({field:"payerEmail",message:Ae.t("flowBuilder:pixApiValidation.enterPayerEmail")})}else if(v){const f=o("payerDocument")||o("payerDocumentFallback");f?!f.includes("{{")&&!CQ(f)&&n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.invalidPayerCpf")}):n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.enterPayerCpf")}),!rg(a,t)&&!h("payerEmail","payerEmailFallback")&&n.push({field:"payerEmail",message:Ae.t("flowBuilder:pixApiValidation.enterPayerEmail")})}else if(!rg(a,t)){const f=o("payerDocument")||o("payerDocumentFallback"),b=xQ(r,s);!f&&b?n.push({field:"payerDocument",message:l?Ae.t("flowBuilder:pixApiValidation.enterPayerRfcCurp"):Ae.t("flowBuilder:pixApiValidation.enterPayerCpf")}):f&&l&&b&&!f.includes("{{")&&!KY(f)?n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.invalidRfcCurp")}):d&&f&&!f.includes("{{")&&!mQ(f)?n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.invalidArDocument")}):c&&!f.includes("{{")&&!pQ(f)&&n.push({field:"payerDocument",message:Ae.t("flowBuilder:pixApiValidation.invalidCoDocument")}),(c||bQ.includes(r))&&!h("payerEmail","payerEmailFallback")&&n.push({field:"payerEmail",message:Ae.t("flowBuilder:pixApiValidation.enterPayerEmail")})}if(s==="cop_nequi"){const f=uQ(a).trim();f?!f.includes("{{")&&!hQ(f)&&n.push({field:"nequiPhone",message:Ae.t("flowBuilder:pixApiValidation.invalidNequiPhone")}):n.push({field:"nequiPhone",message:Ae.t("flowBuilder:pixApiValidation.enterNequiPhone")})}if(m){const f=gQ(a).trim();f?!f.includes("{{")&&!vQ(f)&&n.push({field:"phPhone",message:Ae.t("flowBuilder:pixApiValidation.invalidPhPhone")}):n.push({field:"phPhone",message:Ae.t("flowBuilder:pixApiValidation.enterPhPhone")})}return n}const EQ=[["Para completar tu pago, abre la app de tu banco y transfiere a esta llave Bre-B:","","{{cop_llave}}","","Monto a enviar: COP$ {{cop_valor}}","","Escribe tú mismo el monto â la llave no lo lleva guardado."].join(` 587`),["Ya enviamos el cobro a tu app Nequi. Ãbrela y confirma el pago de COP$ {{cop_valor}}.","","Si no te llegó la notificación, entra a Nequi de todos modos: el cobro queda pendiente ahÃ."].join(` 588`),["Ya enviamos el cobro a tu app Nequi. Ãbrela y confirma el pago de COP$ {{cop_valor}}.","","Si no te llegó la notificación, toca el botón de abajo."].join(` 589`)];function fm(e,t){return t==="zenith"&&(e==="cop_breb_llave"||e==="cop_nequi")}function SQ(e){return[e==="cop_nequi"?"Para completar tu pago con Nequi, abre el enlace:":"Para completar tu pago con Bre-B, abre el enlace:","{{cop_link}}","","Monto: COP$ {{cop_valor}}"].join(` 590`)}function NQ(e,t,a){return fm(t,a)?!e.trim()||EQ.includes(e.trim())?SQ(t):e.replace(/\{\{\s*cop_llave\s*\}\}/g,"{{cop_link}}"):e}function kQ(e,t,a){return fm(t,a)&&(!e.trim()||e.trim()==="Copiar llave")?t==="cop_nequi"?"Pagar con Nequi":"Pagar":e}const MJ=["Para concluir, faça uma transferência SPEI:","","CLABE: {{spei_clabe}}","Valor: MX$ {{spei_valor}}","","Transfira o valor EXATO â valores diferentes não são confirmados automaticamente."].join(` 591`),TQ=["Para completar tu pago, haz una transferencia SPEI:","","CLABE: {{spei_clabe}}","Monto: MX$ {{spei_valor}}","","Transfiere el monto EXACTO â otros valores no se confirman automáticamente."].join(` 592`);function IQ(e){var a,o;if((e==null?void 0:e.type)==="pixApi"&&fm(String((a=e.data)==null?void 0:a.method),String((o=e.data)==null?void 0:o.provider))){const n=e.data??{},r=String(n.method),s=String(n.provider),l=NQ(String(n.caption||n.text||""),r,s),c=kQ(Md(n),r,s);return n.caption===l&&n.copyButtonText===c?e:{...e,data:{...n,caption:l,copyButtonText:c}}}if((e==null?void 0:e.type)!=="speiApi")return e;const t=e.data??{};return{...e,data:{...t,country:"MX",method:"spei",caption:$P(t)||TQ,copyButtonText:Md(t)||Fd.spei,imageMode:GP(t,e.type),sendQrImage:!1}}}function RQ(e){if(!Array.isArray(e))return e;const t=e.map(IQ);return t.some((a,o)=>a!==e[o])?t:e}const uc="__auto__",mc=1500,cg={gemini:"Google Gemini",openai:"OpenAI (GPT)",anthropic:"Anthropic (Claude)",deepseek:"DeepSeek"},Gi=Array.from(new Set(_Y({vision:!0}).map(e=>e.provider))),DQ={gemini:"AIza...",openai:"sk-...",anthropic:"sk-ant-...",deepseek:"sk-..."};function MQ(e,t){return e.map(a=>{if(a.type!=="start")return a;const o={...a.data||{}};return delete o.onUpdateFlowSettings,delete o.undefinedVariables,{...a,data:{...o,triggerType:t.triggerType,triggerKeywords:t.triggerKeywords,triggerTags:t.triggerTags,keywordMatchType:t.keywordMatchType}}})}const XP=()=>ge(()=>import("./FlowCanvas-BKXHnaym.js"),__vite__mapDeps([147,1,85,42,86,69,54,12,51,87,37,58,57,33,61,62,88,60,71,21,20,73,18,38,89,19,90,91,92,93,94,30,148,72,64,124,140,84,48,2,56,13,15,16,3,4,55,11,82,95,96,97,98,99,149,44,143,59,53])),FQ=g.lazy(()=>XP().then(e=>({default:e.FlowCanvas}))),LQ=g.lazy(()=>ge(()=>import("./PassageMetricsDialog-Cgq4wYtW.js"),__vite__mapDeps([150,1,149,41,42,43,48])).then(e=>({default:e.PassageMetricsDialog}
592))),cs=()=>{const{t:e}=tt(["flowBuilder","common"]),{id:t}=Ig(),a=Rt(),o=Ao(),{user:n}=ut(),{effectiveUserId:r}=dm(),s=r||(n==null?void 0:n.id),[l,c]=g.useState(null),[d,u]=g.useState(!0),[m,h]=g.useState(!1),[p,v]=g.useState(""),[f,b]=g.useState(""),[y,x]=g.useState("keyword"),[w,P]=g.useState(""),[E,k]=g.useState(""),[S,R]=g.useState("contains"),[I,M]=g.useState(!1),[q,N]=g.useState(!1),[F,A]=g.useState(!1),[_,K]=g.useState("00:00"),[V,H]=g.useState("06:00"),[B,te]=g.useState([]),[j,L]=g.useState([]),[Q,$]=g.useState(!1),[X,fe]=g.useState("own"),[J,ie]=g.useState("gemini"),[le,pe]=g.useState(""),[ce,oe]=g.useState(void 0),ye=TY(s),C=ye?ye.keys.find(Z=>Z.id===ce)??ye.defaultKey:null,[z,U]=g.useState(""),[T,D]=g.useState(!1),[O,Y]=g.useState(null),[ae,G]=g.useState(null),[re,de]=g.useState(!1),[se,ue]=g.useState(!1),[Ee,Te]=g.useState(""),[Ke,at]=g.useState(!1),[he,Ie]=g.useState(!1),[be,je]=g.useState(!1),[$e,Le]=g.useState(!1),ot=g.useRef(!0),At=g.useRef(null),Nt=g.useRef(null),st=g.useRef(null),zt=g.useRef(()=>{}),[kt,wt]=g.useState(!1),[sr,Se]=g.useState(!1),[Me,Xe]=g.useState([]),[vt,Vt]=g.useState([]),[Jt,la]=g.useState(""),Ft="https://webhook.zapdata.co/functions/v1",Ue=y==="sale"||y==="pix_detected",{getSelectionConflicts:gm,isLoading:ZP}=CY(t,{enabled:Ue}),yi=B.map(Z=>Z.id),xi=AY(l==null?void 0:l.flow_channel),vm=EY(B,xi),JP=g.useCallback((Z,De)=>{Xe(Z),Vt(De)},[]);g.useEffect(()=>{if(y!=="webhook"||Jt||!t||!s)return;(async()=>{try{const{data:De}=await ne.from("global_webhooks").select("id, webhook_token").eq("user_id",s).eq("flow_id",t).limit(1).maybeSingle();if(De!=null&&De.webhook_token){la(`${Ft}/webhook-global?token=${De.webhook_token}`);return}const{data:lt}=await ne.from("global_webhooks").insert({user_id:s,name:`Webhook - ${p||e("editor.flowFallbackName")}`,flow_id:t,is_active:!0}).select("webhook_token").single();lt!=null&<.webhook_token&&la(`${Ft}/webhook-global?token=${lt.webhook_token}`)}catch(De){console.error("Error generating webhook URL:",De)}})()},[y,Jt,t,s,p]);const e0=o.pathname.startsWith("/inbox");g.useEffect(()=>{XP()},[]),g.useEffect(()=>{(async()=>{if(!s)return;const{data:De}=await ne.from("maturador_instances").select("id, instance_name, label, phone_number, status, api_provider").eq("user_id",s).is("deletion_requested_at",null);De&&te(De)})()},[s]);const xl=()=>o.pathname.startsWith("/inbox")?"/inbox/flows":"/disparador";g.useEffect(()=>{(async()=>{var De,lt;if(s){if(!t||t==="novo")try{const{data:Pe,error:ko}=await ne.from("inbox_flows").insert({user_id:s,name:e("editor.defaultFlowName"),description:"",nodes:[],edges:[],trigger_type:"keyword",trigger_keywords:[],assigned_instances:[],is_active:!1}).select().single();if(ko)throw ko;const Qa=o.pathname.startsWith("/inbox")?"/inbox/flows":"/disparazap/fluxos";a(`${Qa}/${Pe.id}`,{replace:!0});return}catch(Pe){console.error("Error creating flow:",Pe),rt.error(e("editor.toasts.createFlowError")),a(xl());return}try{const{data:Pe,error:ko}=await ne.from("inbox_flows").select("*").eq("id",t).eq("user_id",s).single();if(ko)throw ko;const Qa={...Pe,nodes:RQ(Pe.nodes||[]),edges:Pe.edges||[],trigger_type:Pe.trigger_type,trigger_keywords:Pe.trigger_keywords||[],assigned_instances:Pe.assigned_instances||[],reply_mode:Pe.reply_mode||"all",reply_interval:Pe.reply_interval||3,pause_other_flows:Pe.pause_other_flows||!1};c(Qa),v(Pe.name),b(Pe.description||""),x(Pe.trigger_type),P(((De=Pe.trigger_keywords)==null?void 0:De.join(", "))||""),k(((lt=Pe.trigger_tags)==null?void 0:lt.join(", "))||""),R(Pe.keyword_match_type||"contains"),M(Pe.is_active),N(Pe.pause_on_media||!1),A(Pe.pause_schedule_enabled||!1),K(Pe.pause_schedule_start||"00:00"),H(Pe.pause_schedule_end||"06:00"),L(Pe.assigned_instances||[]),$(Pe.pause_other_flows||!1),fe(Pe.pix_ai_mode==="integration"?"integration":"own");{const ca=Pe.pix_ai_provider;ie(Gi.includes(ca)?ca:"gemini")}pe(Pe.pix_ai_api_key||""),oe(Pe.pix_ai_key_id||void 0),U(Pe.pix_ai_model||""),D(Pe.pix_value_filter_enabled||!1),Y(Pe.pix_min_value!=null?Number(Pe.pix_min_value):null),G(Pe.pix_max_value!=null?Number(Pe.pix_max_value):null),de(Pe.pix_fake_branch_enabled||!1),ue(Pe.pix_duplicate_branch_enabled||!1),Te(Pe.pix_custom_prompt||""),at(Pe.pix_accept_non_pix||!1),Ie(Pe.pix_gateway_auto_trigger||!1),Pe.trigger_type==="webhook"&&(async()=>{const{data:ca}=await ne.from("global_webhooks").select("webhook_token").eq("user_id",s).eq("flow_id",t).limit(1).maybeSingle();ca!=null&&ca.webhook_token&&la(`${Ft}/webhook-global?token=${ca.webhook_token}`)})()}catch(Pe){console.error("Error fetching flow:",Pe),rt.error(e("editor.toasts.loadFlowError")),a(xl())}finally{u(!1)}}})()},[t,s,a,o.pathname]);const lr=async(Z,De,lt=!1)=>
592{if(!t||!s)return!1;Xe(Z),Vt(De);const Pe=(l==null?void 0:l.flow_kind)==="group",ko=new Set(yi),Qa=B.length>0?j.filter(Et=>ko.has(Et)):j;if(!lt&&I){const Et=WP(Z,De),_a=Z.filter(St=>St.type==="pixApi"||St.type==="speiApi").map(St=>({id:St.id,problemas:AQ(St.data,St.type)})).filter(St=>St.problemas.length>0).sort((St,Oa)=>(Et.get(St.id)??0)-(Et.get(Oa.id)??0));if(_a.length>0){const St=_a[0],Oa=Et.get(St.id),To=_a.length-1,wl=To>0?e("editor.toasts.moreBlocksSameSituation",{count:To}):"";return rt.error(e("editor.toasts.incompleteBlockTitle",{numPrefix:Oa?`#${Oa} `:"",issues:St.problemas.map(wi=>wi.message).join("; ")}),{description:e("editor.toasts.incompleteBlockDescription",{extra:wl}),duration:12e3}),!1}}if(!Pe&&Ue){if(ZP)return rt.message(e("editor.toasts.verifyingPixConflicts")),!1;if(Qa.length===0)return rt.error(e("editor.toasts.selectAtLeastOneInstance")),!1;const Et=gm(Qa,y,yi);if(Et.length>0)return rt.error(e("editor.toasts.pixConflictWithFlow",{name:Et[0].name||e("editor.toasts.unnamedFlow")})),!1}const ca=SY(Qa,B,xi);if(ca)return rt.error(e("channelInstanceMismatch.toast",{flowChannel:e(`channelInstanceMismatch.${xi}`),instanceChannel:e(`channelInstanceMismatch.${xi==="official"?"unofficial":"official"}`),instanceName:ca.label||ca.instance_name})),!1;h(!0);try{const Et=new Set(Z.map(Kt=>Kt.id)),_a=De.filter(Kt=>{const Za=Et.has(Kt.source),Ci=Et.has(Kt.target);return Za&&Ci}),St=Pe?[]:w.split(",").map(Kt=>Kt.trim()).filter(Boolean),Oa=Pe?[]:E.split(",").map(Kt=>Kt.trim()).filter(Boolean),To=Pe?"contains":S,wl=MQ(Z,{triggerType:Pe?"manual":y,triggerKeywords:St,triggerTags:Oa,keywordMatchType:To}),{error:wi}=await ne.from("inbox_flows").update({name:p,description:f,nodes:JSON.parse(JSON.stringify(wl)),edges:JSON.parse(JSON.stringify(_a)),trigger_type:Pe?"manual":y,trigger_keywords:St,trigger_tags:Oa,keyword_match_type:To,assigned_instances:Qa,is_active:I,pause_on_media:q,pause_schedule_enabled:F,pause_schedule_start:F?_:null,pause_schedule_end:F?V:null,pause_other_flows:Pe?!1:Ue||y==="tag"?Q:!1,pix_ai_mode:Ue?X:"native",pix_ai_provider:Ue?J:null,pix_ai_api_key:Ue?le.trim():null,pix_ai_key_id:Ue&&X==="integration"?ce??null:null,pix_ai_model:Ue&&z.trim()||null,pix_value_filter_enabled:Ue?T:!1,pix_min_value:Ue&&T?O:null,pix_max_value:Ue&&T?ae:null,pix_fake_branch_enabled:Ue?re:!1,pix_duplicate_branch_enabled:Ue?se:!1,pix_custom_prompt:Ue&&Ee.trim()||null,pix_accept_non_pix:Ue?Ke:!1,pix_gateway_auto_trigger:Ue?he:!1,updated_at:new Date().toISOString()}).eq("id",t).eq("user_id",s);if(wi)throw wi;const ym=Z.filter(Kt=>{var Za,Ci;return Kt.type==="tag"&&((Ci=(Za=Kt.data)==null?void 0:Za.tagName)==null?void 0:Ci.trim())});if(ym.length>0){const Kt=[...new Set(ym.map(Za=>Za.data.tagName.trim()))];for(const Za of Kt)await ne.from("inbox_tags").upsert({user_id:s,name:Za},{onConflict:"user_id,name",ignoreDuplicates:!0})}return lt||rt.success(e("editor.toasts.flowSavedSuccess"),{className:"bg-black border border-orange-500 text-white [&_[data-icon]]:text-green-500",style:{background:"#000000",border:"1px solid hsl(24 95% 53%)",color:"#ffffff","--success-text-color":"#22c55e","--success-bg":"#000000","--success-border":"hsl(24 95% 53%)"}}),!0}catch(Et){console.error("Error saving flow:",Et);const _a=PY(Et),St=NY(Et),Oa=_a?e("editor.toasts.pixConflictTitle"):St?Et==null?void 0:Et.message:e("editor.toasts.saveFlowErrorTitle"),To=_a?e("editor.toasts.pixConflictDescription"):void 0;return rt.error(Oa,{description:To,duration:_a?1e4:4e3,className:"bg-black border border-orange-500 text-white",style:{background:"#000000",border:"1px solid hsl(24 95% 53%)",color:"#ffffff"}}),!1}finally{h(!1)}};g.useEffect(()=>{if(!d){if(ot.current){ot.current=!1;return}return je(!0),Le(!1),At.current&&clearTimeout(At.current),At.current=setTimeout(async()=>{const Z=Me.length>0?Me:(l==null?void 0:l.nodes)||[],De=vt.length>0?vt:(l==null?void 0:l.edges)||[];await lr(Z,De,!0)?(je(!1),Le(!1)):Le(!0)},1500),()=>{At.current&&clearTimeout(At.current)}}},[d,X,J,le,z,T,O,ae,re,se,Ee,Ke,he]),zt.current=()=>{if(!t||!s)return;const Z=Me.length>0?Me:(l==null?void 0:l.nodes)||[],De=vt.length>0?vt:(l==null?void 0:l.edges)||[];lr(Z,De,!0)},g.useEffect(()=>
592{if(!(d||!t)){if(Nt.current!==t){Nt.current=t;return}if(y==="keyword")return st.current&&clearTimeout(st.current),st.current=setTimeout(()=>{st.current=null,zt.current()},800),()=>{st.current&&clearTimeout(st.current)}}},[d,t,y,w,E,S]),g.useEffect(()=>()=>{st.current&&(clearTimeout(st.current),st.current=null,zt.current())},[]),g.useEffect(()=>{if(!be)return;const Z=De=>{De.preventDefault(),De.returnValue=""};return window.addEventListener("beforeunload",Z),()=>window.removeEventListener("beforeunload",Z)},[be]);const bm=Z=>{L(De=>De.includes(Z)?De.filter(lt=>lt!==Z):[...De,Z])};return d?i.jsxs("div",{className:"min-h-screen bg-background",children:[i.jsx(Os,{}),i.jsx("div",{className:"flex items-center justify-center h-[calc(100vh-4rem)]",children:i.jsx("div",{className:"animate-pulse text-muted-foreground",children:e("common:states.loading")})})]}):i.jsxs("div",{className:"h-[calc(100vh-var(--app-banner-offset,0px))] bg-background flex flex-col overflow-hidden",children:[i.jsx(Os,{useBannerOffsetVar:!0}),i.jsx("div",{className:"shrink-0",style:{height:"calc(var(--app-banner-offset, 0px) + 3.5rem)"}})," ",i.jsxs("div",{className:"border-b border-border px-4 py-2 flex items-center justify-between bg-card shrink-0",children:[i.jsxs("div",{className:"flex items-center gap-4",children:[i.jsx(we,{variant:"ghost",size:"icon",onClick:()=>a(xl()),title:e(e0?"editor.backToAutomatiZap":"editor.backToDisparaZap"),children:i.jsx(_r,{className:"h-5 w-5"})}),i.jsx(it,{value:p,onChange:Z=>v(Z.target.value),className:"w-64 font-medium"})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsxs("div",{className:"flex items-center gap-2 mr-4",children:[i.jsx(Yt,{checked:I,onCheckedChange:M,id:"flow-active",className:I?"data-[state=checked]:bg-green-500":"data-[state=unchecked]:bg-red-500"}),i.jsx(Be,{htmlFor:"flow-active",className:"text-sm",children:e(I?"editor.active":"editor.inactive")})]}),i.jsxs(ya,{children:[i.jsx(ZT,{asChild:!0,children:i.jsxs(we,{variant:"outline",size:"sm",children:[i.jsx(Od,{className:"h-4 w-4 mr-1"}),e("editor.settingsButton")]})}),i.jsxs(sa,{className:"max-w-lg max-h-[85vh] flex flex-col p-0 gap-0",children:[i.jsx(xa,{className:"px-6 pt-6 pb-2 flex-shrink-0",children:i.jsx(wa,{children:e("editor.settingsDialogTitle")})}),i.jsx("div",{className:"flex-1 overflow-y-auto scrollbar-none px-6",children:i.jsxs("div",{className:"space-y-4 pb-20",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:e("editor.flowNameLabel")}),i.jsx(it,{value:p,onChange:Z=>v(Z.target.value)})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:e("common:fields.description")}),i.jsx(ls,{value:f,onChange:Z=>b(Z.target.value),rows:3})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:e("editor.triggerTypeLabel")}),i.jsxs(Cn,{value:y,onValueChange:Z=>x(Z),children:[i.jsx(Oo,{children:i.jsx(Pn,{})}),i.jsxs(Bo,{children:[i.jsx(jt,{value:"keyword",children:e("editor.triggerTypes.keyword")}),i.jsx(jt,{value:"all",children:e("editor.triggerTypes.all")}),i.jsx(jt,{value:"schedule",children:e("editor.triggerTypes.schedule")}),i.jsx(jt,{value:"sale",children:e(qY)}),i.jsx(jt,{value:"webhook",children:e("editor.triggerTypes.webhook")})]})]})]}),Ue&&(()=>{const Z=j.filter(lt=>yi.includes(lt)),De=gm(Z,y,yi);return De.length===0&&Z.length>0?null:i.jsxs("div",{className:"rounded-md border border-red-500/40 bg-red-500/10 p-3 text-xs text-red-600 dark:text-red-400 space-y-1",children:[i.jsx("p",{className:"font-semibold",children:e("editor.pixConflictWarning.title")}),Z.length===0?i.jsx("p",{children:e("editor.pixConflictWarning.emptySelection")}):i.jsxs(i.Fragment,{children:[i.jsx("p",{children:e("editor.pixConflictWarning.alreadyInUse")}),i.jsx("ul",{className:"list-disc list-inside",children:De.slice(0,5).map(lt=>i.jsx("li",{children:lt.name||e("editor.pixConflictWarning.unnamedFlow")},lt.id))}),i.jsx("p",{children:e("editor.pixConflictWarning.chooseDifferent")})]})]})})(),Ue&&i.jsxs("div",{className:"flex items-center justify-between p-3 border rounded-md bg-amber-500/10 border-amber-500/30",children:[i.jsxs("div",{children:[i.jsxs(Be,{className:"flex items-center gap-2",children:[i.jsx("span",{className:"text-amber-500",children:"â¡"}),e("editor.pauseOtherFlows.label")]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.pauseOtherFlows.description")})]}),i.jsx(Yt,{checked:Q,onCheckedChange:$,className:Q?"data-[state=checked]:bg-green-500":"data-[state=unchecked]:bg-red-500"})]}),Ue&&i.jsxs("div",{className:"space-y-2 p-3 border rounded-md",children:[i.jsx(Be,{children:e("editor.pixAi.sectionLabel")}),i.jsxs("div",{className:"space-y-2",children:[X==="own"&&i.jsxs(i.Fragment,{children:[i.jsxs(Cn,{value:J,onValueChange:Z=>{ie(Z),U("")},children:[i.jsx(Oo,{children:i.jsx(Pn,{})}),i.jsx(Bo,{children:Gi.map(Z=>i.jsx(jt,{value:Z,children:cg[Z]},Z))})]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.pixAi.visionOnlyHint")})]}),i.jsx(IY,{keys:ye,mode:X,onModeChange:Z=>{fe(Z),Z==="integration"&&C&&Gi.includes(C.provider)&&ie(C.provider)},selectedKeyId:ce,onSelectedKeyIdChange:oe,apiKey:le,onApiKeyChange:pe,apiKeyPlaceholder:DQ[J]||"AIza...",requiredHelpText:e("editor.pixAi.requiredHelpText")}),X==="integration"&&C&&!Gi.includes(C.provider)&&i.jsx("p",{className:"text-xs text-amber-400",children:e("editor.pixAi.wrongProviderWarning",{provider:cg[C.provider]})}),X==="own"&&i.jsxs("p",{className:"text-xs text-muted-foreground",children:[e("editor.pixAi.storedInFlowOnly")," ",e(J==="openai"?"editor.pixAi.getKeyOpenAI":J==="anthropic"?"editor.pixAi.getKeyAnthropic":"editor.pixAi.getKeyGoogle"),"."]}),(()=>{const Z=X==="integration"&&C?C.provider:J,De=LY(Z).filter(Pe=>Pe.supportsVision);if(De.length===0)return null;const lt=De.some(Pe=>Pe.id===z);return i.jsxs("div",{className:"space-y-1 pt-1",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx(Be,{className:"text-xs",children:e("editor.pixAi.modelLabel")}),z&<&&i.jsx(zY,{provider:Z,modelId:z})]}),i.jsxs(Cn,{value:z||uc,onValueChange:Pe=>
592U(Pe===uc?"":Pe),children:[i.jsx(Oo,{children:i.jsx(Pn,{})}),i.jsxs(Bo,{children:[i.jsx(jt,{value:uc,children:e("editor.pixAi.modelAuto")}),!lt&&z&&i.jsx(jt,{value:z,children:e("editor.pixAi.modelSavedNotInCatalog",{model:z})}),De.map(Pe=>i.jsxs(jt,{value:Pe.id,children:[Pe.label,Pe.legacy?e("editor.pixAi.modelLegacySuffix"):""]},Pe.id))]})]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.pixAi.modelAutoHint")})]})})()]})]}),Ue&&i.jsxs("div",{className:"space-y-2 p-3 border rounded-md",children:[i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx(Yt,{checked:Ke,onCheckedChange:at}),i.jsx("span",{className:"text-xs font-medium flex-1",children:e("editor.acceptNonPix.label")})]}),Ke&&i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.acceptNonPix.description")}),i.jsxs("div",{className:"space-y-1",children:[i.jsx(Be,{className:"text-xs",children:e("editor.customPrompt.label",{count:Ee.length,max:mc})}),i.jsx(ls,{value:Ee,onChange:Z=>Te(Z.target.value.slice(0,mc)),placeholder:e("editor.customPrompt.placeholder"),rows:3,maxLength:mc}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.customPrompt.hint")})]})]}),Ue&&i.jsxs("div",{className:"space-y-2 p-3 border rounded-md",children:[i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx(Yt,{checked:he,onCheckedChange:Ie}),i.jsx("span",{className:"text-xs font-medium flex-1",children:e("editor.gatewayAutoTrigger.label")})]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.gatewayAutoTrigger.description")})]}),Ue&&i.jsxs("div",{className:"space-y-2 p-3 border rounded-md",children:[i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx(Yt,{checked:T,onCheckedChange:D}),i.jsx("span",{className:"text-xs font-medium flex-1",children:e("editor.valueFilter.label")})]}),T&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[i.jsxs("div",{className:"space-y-1",children:[i.jsx(Be,{className:"text-xs",children:e("editor.valueFilter.minLabel")}),i.jsx(it,{type:"number",inputMode:"decimal",step:"0.01",min:"0",placeholder:e("editor.valueFilter.minPlaceholder"),value:O??"",onChange:Z=>Y(Z.target.value===""?null:Number(Z.target.value))})]}),i.jsxs("div",{className:"space-y-1",children:[i.jsx(Be,{className:"text-xs",children:e("editor.valueFilter.maxLabel")}),i.jsx(it,{type:"number",inputMode:"decimal",step:"0.01",min:"0",placeholder:e("editor.valueFilter.maxPlaceholder"),value:ae??"",onChange:Z=>G(Z.target.value===""?null:Number(Z.target.value))})]})]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.valueFilter.hint")})]})]}),Ue&&i.jsxs("div",{className:"space-y-2 p-3 border rounded-md",children:[i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx(Yt,{checked:re,onCheckedChange:de}),i.jsx("span",{className:"text-xs font-medium flex-1",children:e("editor.fakeDuplicateBranch.fakeLabel")})]}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx(Yt,{checked:se,onCheckedChange:ue}),i.jsx("span",{className:"text-xs font-medium flex-1",children:e("editor.fakeDuplicateBranch.duplicateLabel")})]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.fakeDuplicateBranch.hint")})]}),y==="keyword"&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:e("editor.keywordMatch.label")}),i.jsxs(Cn,{value:S,onValueChange:Z=>R(Z),children:[i.jsx(Oo,{children:i.jsx(Pn,{})}),i.jsxs(Bo,{children:[i.jsx(jt,{value:"exact",children:e("editor.keywordMatch.exact")}),i.jsx(jt,{value:"contains",children:e("editor.keywordMatch.contains")}),i.jsx(jt,{value:"not_contains",children:e("editor.keywordMatch.notContains")})]})]}),i.jsxs("p",{className:"text-xs text-muted-foreground",children:[S==="exact"&&e("editor.keywordMatch.exactHint"),S==="contains"&&e("editor.keywordMatch.containsHint"),S==="not_contains"&&e("editor.keywordMatch.notContainsHint")]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{children:e("editor.keywordsLabel")}),i.jsx(ls,{value:w,onChange:Z=>P(Z.target.value),placeholder:e("editor.keywordsPlaceholder"),rows:2})]})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsxs(Be,{className:"flex items-center gap-2",children:[i.jsx(G0,{className:"h-4 w-4"}),e("editor.instancesLabel")]}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.instancesHint")}),i.jsx("div",{className:"space-y-2 mt-2 max-h-48 overflow-y-auto",children:vm.length===0?i.jsx("p",{className:"text-sm text-muted-foreground",children:e("editor.noInstancesFound")}):vm.map(Z=>i.jsxs("div",{className:"flex items-center gap-2 p-2 rounded-md hover:bg-accent cursor-pointer",onClick:()=>bm(Z.id),children:[i.jsx(vl,{checked:j.includes(Z.id),onCheckedChange:()=>bm(Z.id)}),i.jsxs("div",{className:"flex-1",children:[i.jsx("span",{className:"text-sm font-medium",children:Z.label||Z.instance_name}),Z.phone_number&&i.jsx("span",{className:"text-xs text-muted-foreground ml-2",children:Z.phone_number})]}),i.jsx(na,{variant:"outline",className:Z.status==="connected"||Z.status==="open"?"bg-green-500/20 text-green-500 border-green-500":"bg-red-500/20 text-red-500 border-red-500",children:Z.status==="connected"||Z.status==="open"?e("editor.instanceOnline"):e("editor.instanceOffline")})]}
592,Z.id))}),j.length>0&&i.jsx("div",{className:"flex flex-wrap gap-1 mt-2",children:j.map(Z=>{const De=B.find(lt=>lt.id===Z);return De?i.jsx(na,{variant:"secondary",className:"text-xs",children:De.label||De.instance_name},Z):null})})]}),i.jsxs("div",{className:"flex items-center justify-between py-2",children:[i.jsxs("div",{children:[i.jsx(Be,{children:e("editor.pauseOnMedia.label")}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.pauseOnMedia.description")})]}),i.jsx(Yt,{checked:q,onCheckedChange:N,className:q?"data-[state=checked]:bg-green-500":"data-[state=unchecked]:bg-red-500"})]}),i.jsxs("div",{className:"space-y-4 border rounded-md p-3",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(_d,{className:"h-4 w-4 text-muted-foreground"}),i.jsxs("div",{children:[i.jsx(Be,{children:e("editor.pauseSchedule.label")}),i.jsx("p",{className:"text-xs text-muted-foreground",children:e("editor.pauseSchedule.description")})]})]}),i.jsx(Yt,{checked:F,onCheckedChange:A,className:F?"data-[state=checked]:bg-green-500":"data-[state=unchecked]:bg-red-500"})]}),F&&i.jsxs("div",{className:"space-y-3 pt-2",children:[i.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{className:"text-xs",children:e("editor.pauseSchedule.startLabel")}),i.jsx(it,{type:"time",value:_,onChange:Z=>K(Z.target.value)})]}),i.jsxs("div",{className:"space-y-2",children:[i.jsx(Be,{className:"text-xs",children:e("editor.pauseSchedule.endLabel")}),i.jsx(it,{type:"time",value:V,onChange:Z=>H(Z.target.value)})]})]}),i.jsx("p",{className:"text-xs text-muted-foreground bg-muted p-2 rounded",children:e("editor.pauseSchedule.timezoneHint")})]})]}),i.jsxs("div",{className:"flex items-center justify-between py-2",children:[i.jsx(Be,{children:e("editor.flowActiveLabel")}),i.jsx(Yt,{checked:I,onCheckedChange:M,className:I?"data-[state=checked]:bg-green-500":"data-[state=unchecked]:bg-red-500"})]})]})}),i.jsx("div",{className:"flex-shrink-0 border-t border-border px-6 py-4 flex justify-end",children:i.jsx(we,{onClick:()=>{const Z=Me.length>0?Me:(l==null?void 0:l.nodes)||[],De=vt.length>0?vt:(l==null?void 0:l.edges)||[];lr(Z,De)},disabled:m,className:"bg-green-600 hover:bg-green-700 text-white",children:e(m?"common:states.saving":"common:actions.save")})})]})]}),i.jsxs(we,{variant:"outline",size:"sm",onClick:()=>{(Me.length>0?Me:(l==null?void 0:l.nodes)||[]).some(lt=>lt.type==="passageTracker")?wt(!0):Se(!0)},children:[i.jsx(I0,{className:"h-4 w-4 mr-1"}),e("editor.funnelMetricsButton")]}),Ue&&$e&&i.jsx("span",{className:"text-xs text-destructive",children:e("editor.triggerSettingsSaveFailed")}),Ue&&be&&!$e&&i.jsx("span",{className:"text-xs text-muted-foreground animate-pulse",children:e("editor.triggerSettingsSaving")}),i.jsxs(we,{size:"sm",onClick:()=>{const Z=Me.length>0?Me:(l==null?void 0:l.nodes)||[],De=vt.length>0?vt:(l==null?void 0:l.edges)||[];lr(Z,De)},disabled:m,className:"bg-green-600 hover:bg-green-700 text-white",children:[i.jsx(W0,{className:"h-4 w-4 mr-1"}),e(m?"common:states.saving":"common:actions.save")]})]})]}),i.jsx("div",{className:"flex-1 min-h-0",children:l&&i.jsx(g.Suspense,{fallback:i.jsx("div",{className:"h-full w-full bg-muted/20 animate-pulse"}),children:i.jsx(FQ,{initialNodes:l.nodes,initialEdges:l.edges,onSave:lr,triggerType:y,triggerKeywords:w.split(",").map(Z=>Z.trim()).filter(Boolean),triggerTags:E.split(",").map(Z=>Z.trim()).filter(Boolean),keywordMatchType:S,pauseOtherFlows:Q,pixAiMode:X,pixAiProvider:J,pixAiApiKey:le,pixAiKeyId:ce,pixAiModel:z,pixValueFilterEnabled:T,pixMinValue:O,pixMaxValue:ae,pixFakeBranchEnabled:re,pixDuplicateBranchEnabled:se,pixCustomPrompt:Ee,pixAcceptNonPix:Ke,pixGatewayAutoTrigger:he,webhookUrl:Jt,pauseScheduleEnabled:F,pauseScheduleStart:_,pauseScheduleEnd:V,onUpdateFlowSettings:Z=>{Z.triggerType&&x(Z.triggerType),Z.triggerKeywords&&P(Z.triggerKeywords.join(", ")),Z.triggerTags&&k(Z.triggerTags.join(", ")),Z.keywordMatchType&&R(Z.keywordMatchType),Z.pauseOtherFlows!==void 0&&$(Z.pauseOtherFlows),Z.pixAiMode!==void 0&&fe(Z.pixAiMode==="integration"?"integration":"own"),Z.pixAiProvider!==void 0&&ie(Z.pixAiProvider),Z.pixAiApiKey!==void 0&&pe(Z.pixAiApiKey),Z.pixAiKeyId!==void 0&&oe(Z.pixAiKeyId),Z.pixAiModel!==void 0&&U(Z.pixAiModel),Z.pixValueFilterEnabled!==void 0&&D(!!Z.pixValueFilterEnabled),Z.pixMinValue!==void 0&&Y(Z.pixMinValue),Z.pixMaxValue!==void 0&&G(Z.pixMaxValue),Z.pixFakeBranchEnabled!==void 0&&de(!!Z.pixFakeBranchEnabled),Z.pixDuplicateBranchEnabled!==void 0&&ue(!!Z.pixDuplicateBranchEnabled),Z.pixCustomPrompt!==void 0&&Te(Z.pixCustomPrompt),Z.pixAcceptNonPix!==void 0&&at(!!Z.pixAcceptNonPix),Z.pixGatewayAutoTrigger!==void 0&&Ie(!!Z.pixGatewayAutoTrigger),Z.pauseScheduleEnabled!==void 0&&A(Z.pauseScheduleEnabled),Z.pauseScheduleStart!==void 0&&K(Z.pauseScheduleStart),Z.pauseScheduleEnd!==void 0&&H(Z.pauseScheduleEnd)},flowId:t,flowKind:(l==null?void 0:l.flow_kind)==="group"?"group":"contact",flowChannel:(l==null?void 0:l.flow_channel)==="official"?"official":"unofficial",assignedInstances:j,onStateChange:JP})})}),kt&&t&&l&&i.jsx(g.Suspense,{fallback:null,children:i.jsx(LQ,{open:kt,onClose:()=>wt(!1),flowId:t,nodes:Me.length>0?Me:l.nodes})}),i.jsx(bY,{open:sr,onOpenChange:Se,children:i.jsxs(_P,{children:[i.jsxs(OP,{children:[i.jsx(zP,{children:e("editor.noLeadCountDialog.title")}),i.jsx(VP,{children:e("editor.noLeadCountDialog.description")})]}),i.jsx(BP,{children:i.jsx(qP,{children:e("editor.noLeadCountDialog.gotIt")})})]})})]})},jQ=Object.freeze(Object.defineProperty({__proto__:null,default:cs},Symbol.toStringTag,{value:"Module"}));function _Q({children:e}){const{init:t,config:a}=om();return g.useEffect(()=>{a!=null&&a.enabled&&t()},[a==null?void 0:a.enabled,t]),i.jsx(i.Fragment,{children:e})}const OQ=[{to:"/inbox",label:"Automatizap",icon:Wg,match:e=>e==="/inbox"||e.startsWith("/inbox/")},{to:"/ads",label:"Ads",icon:Y0,match:e=>e==="/ads"||e.startsWith("/ads/")},{to:"/settings",label:"Configurações",icon:Od,match:e=>e==="/settings"||e.startsWith("/settings/")}],BQ=["/inbox/chat","/auth","/login","/lp","/flow-preview","/s","/tutorial","/privacidade","/termos"],zQ=()=>{const{pathname:e}=Ao(),[t]=Tg();return BQ.some(a=>e===a||e.startsWith(a+"/"))||e==="/inbox"&&t.get("contact")||e.startsWith("/inbox/flows/")&&e!=="/inbox/flows"?null:i.jsx("nav",{className:"md:hidden fixed bottom-0 left-0 right-0 z-40 bg-card/95 backdrop-blur border-t border-border",style:{paddingBottom:"env(safe-area-inset-bottom)"},children:i.jsx("ul",{className:"grid grid-cols-3",children:OQ.map(({to:a,label:o,icon:n,match:r})=>{const s=r(e);return i.jsx("li",{children:i.jsxs(t0,{to:a,className:ve("flex flex-col items-center justify-center gap-1 py-2.5 text-[11px] font-medium transition-colors",s?"text-accent":"text-muted-foreground hover:text-foreground"),children:[i.jsx(n,{className:ve("w-5 h-5",s&&"text-accent")}),i.jsx("span",{className:"truncate",children:o})]})},a)})})})},VQ=g.lazy(()=>ge(()=>import("./Index-D0rh-7DT.js"),__vite__mapDeps([122,1,11,12,123,2,5,6,7,8,40,124,101,25,125,120,20,30,41,42,126,43,48]))),qQ=g.lazy(()=>ge(()=>import("./LandingPage-DMYzLNLN.js"),__vite__mapDeps([151,1,10,108,4,28,24,134,48]))),UQ=g.lazy(()=>ge(()=>import("./StatusPage-CMKVFBVt.js"),__vite__mapDeps([152,1,48]))),WQ=g.lazy(()=>ge(()=>import("./ProductMetrics-lHkjUCca.js"),__vite__mapDeps([153,1,26,27,2,123,29,41,42,144,120,30,154,20,48]))),$Q=g.lazy(()=>ge(()=>
592import("./ZapdataConverter-CEOZwYck.js"),__vite__mapDeps([141,1,21,48]))),GQ=g.lazy(()=>ge(()=>import("./GeradorPalavrasChaves-B7GVV2HV.js"),__vite__mapDeps([155,1,156,157,111,35,11,12,27,158,159,48]))),HQ=g.lazy(()=>ge(()=>import("./ProductAnalysis-BT6eRVW4.js"),__vite__mapDeps([160,1,123,161,21,48]))),KQ=g.lazy(()=>ge(()=>import("./NumberOrganizer-Bei8J3IY.js"),__vite__mapDeps([162,1,120,47,21,20,27,30,159,163,154,48]))),XQ=g.lazy(()=>ge(()=>import("./TrackOfertas-Db0D9pwE.js"),__vite__mapDeps([142,1,20,79,143,21,41,42,144,97,7,48]))),YQ=g.lazy(()=>ge(()=>import("./AudioGenerator-yxIJxIht.js"),__vite__mapDeps([137,1,62,63,58,20,105,33,61,48]))),QQ=g.lazy(()=>ge(()=>import("./AudioTranscriber-fEXvGWhh.js"),__vite__mapDeps([138,1,48]))),ZQ=g.lazy(()=>ge(()=>import("./ExtensaoAdsWhatsApp-Rjnug-PO.js"),__vite__mapDeps([145,1,11,12,108,4,39,103,105,48]))),JQ=g.lazy(()=>ge(()=>import("./VideoDownloader-BRd16IAH.js"),__vite__mapDeps([139,1,140,48]))),eZ=g.lazy(()=>ge(()=>import("./SMSBot-B8tqngy2.js"),__vite__mapDeps([164,1,113,13,115,27,35,21,47,48]))),tZ=g.lazy(()=>ge(()=>import("./SMMPanel-Dr8MsNBu.js"),__vite__mapDeps([165,1,113,13,114,115,27,47,25,21,48]))),aZ=g.lazy(()=>ge(()=>import("./AdminPanelNew-ClKHzzY1.js"),__vite__mapDeps([166,1,120,2,118,98,13,113,100,20,70,60,30,116,11,12,101,27,40,95,21,47,39,154,117,76,128,31,53,159,163,44,25,125,75,64,10,41,42,126,32,97,5,6,7,8,54,51,132,73,26,78,158,37,55,61,121,103,167,46,93,109,124,90,48]))),oZ=g.lazy(()=>ge(()=>import("./InboxPage-C0MA1Gyw.js"),__vite__mapDeps([49,1,2,50,12,51,52,14,36,9,10,11,13,15,16,17,18,19,20,21,53,39,8,26,27,29,37,47,54,6,55,7,56,57,35,58,59,28,44,60,33,61,62,48,63,64,65,66,67,68,69,70,71,72,73,74,40,75,76,77,30,78,79,80]))),dg=g.lazy(()=>ge(()=>import("./FlowListPage-DyjBHoJP.js"),__vite__mapDeps([81,1,54,12,51,82,14,83,84,85,42,86,87,37,58,57,33,61,62,88,60,71,21,20,73,18,38,89,19,90,91,92,93,94,30,48,2,56,13,15,16,3,4,55,11,95,96,97,98,99,100,52,36,27,67,53,101,76,77,39,102,34,80,103]))),nZ=g.lazy(()=>ge(()=>import("./GroupFlowsPage-CspvTbEj.js"),__vite__mapDeps([146,1,77,20,48]))),rZ=g.lazy(()=>ge(()=>import("./InboxDashboard-B9Coke4P.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48]))),iZ=g.lazy(()=>ge(()=>import("./MessageBlaster-DvYn9Z0S.js"),__vite__mapDeps([127,1,11,12,20,37,105,47,128,61,21,33,71,48]))),sZ=g.lazy(()=>ge(()=>import("./DisparaZapOficial-AxWETfqm.js"),__vite__mapDeps([168,1,161,11,12,120,20,21,105,37,90,133,33,61,60,48]))),lZ=g.lazy(()=>ge(()=>import("./SiteCloner-DNCnE8a8.js"),__vite__mapDeps([169,1,11,12,156,157,111,35,90,118,60,70,27,75,48]))),cZ=g.lazy(()=>ge(()=>import("./AdsLayout-CDh_2jLs.js"),__vite__mapDeps([131,1,2,12,5,6,7,8,132,74,20,30,120,37,40,41,42,43,126,82,27,99,61,33,101,94,44,45,47,21,133,3,4,134,48]))),dZ=g.lazy(()=>ge(()=>import("./ZernioCallback-C3B5avqH.js"),__vite__mapDeps([170,1,48]))),uZ=g.lazy(()=>ge(()=>import("./PaymentThankYou-BX6fCeyW.js"),__vite__mapDeps([171,1,48]))),mZ=g.lazy(()=>ge(()=>import("./PaymentCancelled-CrxTGcNI.js"),__vite__mapDeps([172,1,48]))),pZ=g.lazy(()=>ge(()=>import("./ZernioBroadcast-cS_8iBHT.js"),__vite__mapDeps([173,1,11,12,120,35,15,18,60,21,47,48]))),hZ=g.lazy(()=>ge(()=>import("./NotifyAdminPage-DgmdxSxC.js"),__vite__mapDeps([174,1,17,18,21,20,44,95,30,128,31,109,48]))),fZ=g.lazy(()=>ge(()=>import("./NotifyAdminAddNumber-BI4JUaf9.js"),__vite__mapDeps([175,1,17,18,22,23,24,21,25,11,12,2,26,27,28,29,30,31,32,33,20,46,48]))),gZ=g.lazy(()=>ge(()=>import("./QuickRepliesPage-W_0kTw6B.js"),__vite__mapDeps([106,1,2,65,68,66,20,37,76,48]))),vZ=g.lazy(()=>ge(()=>import("./GlobalSettingsPage-BC8W1xtA.js"),__vite__mapDeps([176,1,68,37,105,20,76,48]))),bZ=g.lazy(()=>ge(()=>import("./InboxKanbanPage-JBzS9APP.js"),__vite__mapDeps([104,1,13,54,12,51,17,18,15,16,82,27,40,44,21,20,99,53,19,37,105,100,48]))),yZ=g.lazy(()=>ge(()=>import("./ContactsPage-Djo_S8VL.js"),__vite__mapDeps([177,1,2,54,12,51,15,36,11,20,19,21,39,27,80,37,121,48]))),xZ=g.lazy(()=>ge(()=>import("./Settings-CCnuPf1H.js"),__vite__mapDeps([107,1,13,32,108,4,2,20,3,27,53,66,30,109,100,89,8,48]))),wZ=g.lazy(()=>ge(()=>import("./Marketplace-asxSQE4P.js"),__vite__mapDeps([112,1,113,11,12,35,114,115,27,116,3,4,2,26,90,29,21,30,31,117,60,118,109,20,95,97,48]))),CZ=g.lazy(()=>ge(()=>import("./SaleNotificationSettings-Bw2S8OtO.js"),__vite__mapDeps([178,1,32,8,91,53,20,99,179,48]))
592),PZ=g.lazy(()=>ge(()=>import("./LogzzNotificationSettings-DLIqNjjU.js"),__vite__mapDeps([180,1,32,8,100,20,99,179,48]))),AZ=g.lazy(()=>ge(()=>import("./AffiliateDashboard-C3PConFt.js"),__vite__mapDeps([119,1,120,2,5,6,7,8,41,42,121,95,101,98,40,64,43,48]))),EZ=g.lazy(()=>ge(()=>import("./SubscriptionPage-yoSUMmq5.js"),__vite__mapDeps([110,1,83,111,35,11,12,40,48]))),ug=g.lazy(()=>ge(()=>import("./IntegrationsPage-Cz8gG3Ad.js"),__vite__mapDeps([181,1,20,76,32,2,100,47,21,75,88,167,53,92,30,182,96,48,103,59]))),SZ=g.lazy(()=>ge(()=>import("./FlowPreviewPage-C0ozdPOS.js"),__vite__mapDeps([183,1,85,42,86,83,87,37,58,57,33,61,62,88,60,71,21,20,73,18,38,89,19,90,91,92,93,94,30,148,72,64,124,140,48]))),NZ=g.lazy(()=>ge(()=>import("./CreativeCanvas-COy__SzP.js"),__vite__mapDeps([184,1,85,42,86,140,53,143,20,156,111,35,11,12,105,48]))),kZ=g.lazy(()=>ge(()=>import("./CreativeCanvasProjects-B59S_efy.js"),__vite__mapDeps([129,1,11,12,54,51,130,103,102,20,94,67,80,30,48]))),TZ=g.lazy(()=>ge(()=>import("./CreativeShareImport-SinIM-Qv.js"),__vite__mapDeps([185,1,130,48]))),IZ=g.lazy(()=>ge(()=>import("./Tutoriais-B4nUSoFd.js"),__vite__mapDeps([135,1,136,27,103,48]))),RZ=g.lazy(()=>ge(()=>import("./TutorialPublic-BzqS3qfD.js"),__vite__mapDeps([186,1,136,48]))),DZ=g.lazy(()=>ge(()=>import("./AdminProviders-DW5MjTW2.js"),__vite__mapDeps([187,1,50,12,51,117,47,21,158,53,48]))),MZ=g.lazy(()=>ge(()=>import("./PrivacyPolicy-zzhi7uc7.js"),__vite__mapDeps([188,1,48]))),FZ=g.lazy(()=>ge(()=>import("./McpAuthorize-B2skLVAq.js"),__vite__mapDeps([189,1,182,92,105,48]))),LZ=g.lazy(()=>ge(()=>import("./ZenithOAuthConnect-BaoHHHPg.js"),__vite__mapDeps([190,1,48]))),jZ=g.lazy(()=>ge(()=>import("./ZenithOAuthCallback-Dop89M6p.js"),__vite__mapDeps([191,1,48]))),_Z=g.lazy(()=>ge(()=>import("./TermsOfService-CmiTWrrV.js"),__vite__mapDeps([192,1,60,48]))),OZ=g.lazy(()=>ge(()=>import("./DataDeletion-yRt8sV8j.js"),__vite__mapDeps([193,1,59,48]))),BZ=g.lazy(()=>ge(()=>import("./Ferramentas-DMpIhDy3.js"),__vite__mapDeps([194,1,95,44,58,60,79,101,23,48]))),zZ=new bN({defaultOptions:{queries:{staleTime:6e4,gcTime:10*6e4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!0,retry:1}}}),VZ=()=>{const{isImpersonating:e,impersonatedEmail:t,stopImpersonation:a}=di();return!e||!t?null:i.jsx(U7,{userEmail:t,onExit:a})},qZ=()=>{const[e]=g.useState(()=>{var t;return du(window.location)&&(((t=new URLSearchParams(window.location.search).get("state"))==null?void 0:t.startsWith("fb_"))??!1)});return uX(),g.useEffect(()=>{e||uA()},[e]),e?i.jsx(lp,{}):i.jsxs(i.Fragment,{children:[i.jsx(lp,{}),i.jsx(z7,{children:i.jsx(q7,{})}),i.jsx(VZ,{}),i.jsx(W7,{}),i.jsx(H7,{}),i.jsx(G7,{}),i.jsx($7,{}),i.jsx(zQ,{}),i.jsx(g.Suspense,{fallback:i.jsx(cA,{}),children:i.jsxs(Rg,{children:[i.jsx(xe,{path:"/lp",element:i.jsx(_Q,{children:i.jsx(qQ,{})})}),i.jsx(xe,{path:"/auth",element:i.jsx(_X,{})}),i.jsx(xe,{path:"/flow-preview",element:i.jsx(SZ,{})}),i.jsx(xe,{path:"/s/:slug",element:i.jsx(gP,{})}),i.jsx(xe,{path:"/tutorial",element:i.jsx(RZ,{})}),i.jsx(xe,{path:"/authorize",element:i.jsx(FZ,{})}),i.jsx(xe,{path:"/integrations/zenith/connect",element:i.jsx(LZ,{})}),i.jsx(xe,{path:"/integrations/zenith/callback",element:i.jsx(jZ,{})}),i.jsx(xe,{path:"/privacidade",element:i.jsx(MZ,{})}),i.jsx(xe,{path:"/termos",element:i.jsx(_Z,{})}),i.jsx(xe,{path:"/exclusao-de-dados",element:i.jsx(OZ,{})}),i.jsx(xe,{path:"/data-deletion",element:i.jsx(wm,{to:"/exclusao-de-dados",replace:!0})}),i.jsx(xe,{path:"/status",element:i.jsx(UQ,{})}),i.jsx(xe,{path:"/unsubscribe",element:i.jsx(nY,{})}),i.jsx(xe,{path:"/zernio/callback",element:i.jsx(dZ,{})}),i.jsx(xe,{path:"/pagamento/obrigado",element:i.jsx(uZ,{})}),i.jsx(xe,{path:"/pagamento/cancelado",element:i.jsx(mZ,{})}),i.jsx(xe,{path:"/reset-password",element:i.jsx(rY,{})}),i.jsx(xe,{path:"/",element:i.jsx(nt,{children:i.jsx(wm,{to:"/inbox",replace:!0})})}),i.jsx(xe,{path:"/marketplace",element:i.jsx(nt,{children:i.jsx(wZ,{onModeChange:()=>{},currentMode:"marketplace"})})}),i.jsx(xe,{path:"/zap-converter",element:i.jsx(nt,{children:i.jsx($Q,{})})}),i.jsx(xe,{path:"/gerador-palavras-chaves",element:i.jsx(nt,{children:i.jsx(GQ,{})})}),i.jsx(xe,{path:"/metricas",element:i.jsx(nt,{children:i.jsx(VQ,{})})}),i.jsx(xe,{path:"/organizador-numeros",element:i.jsx(nt,{children:i.jsx(KQ,{})})}),i.jsx(xe,{path:"/track-ofertas",element:i.jsx(nt,{children:i.jsx(XQ,{})})}),i.jsx(xe,{path:"/sms-bot",element:i.jsx(nt,{children:i.jsx(eZ,{})})}),i.jsx(xe,{path:"/smm-panel",element:i.jsx(nt,{children:i.jsx(tZ,{})})}),i.jsx(xe,{path:"/produto/:productId",element:i.jsx(nt,{children:i.jsx(WQ,{})})}),i.jsx(xe,{path:"/produto/:productId/analise",element:i.jsx(nt,{children:i.jsx(HQ,{})})}),i.jsx(xe,{path:"/gerador-audio",element:i.jsx(bt,{featureName:"Gerador de Ãudio",children:i.jsx(YQ,{})})}),i.jsx(xe,{path:"/transcricao-audio",element:i.jsx(bt,{featureName:"Transcrição de Ãudio",children:i.jsx(QQ,{})})}),i.jsx(xe,{path:"/extensao-ads",element:i.jsx(nt,{children:i.jsx(ZQ,{})})}),i.jsx(xe,{path:"/video-downloader",element:i.jsx(nt,{children:i.jsx(JQ,{})})}),i.jsx(xe,{path:"/limpa-hash",element:i.jsx(nt,{children:i.jsx(oY,{})})}),i.jsx(xe,{path:"/inbox",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(rZ,{})})}),i.jsx(xe,{path:"/inbox/chat",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(oZ,{})})}),i.jsx(xe,{path:"/inbox/flows",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(dg,{})})}),i.jsx(xe,{path:"/inbox/flows/groups",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(nZ,{})})}),i.jsx(xe,{path:"/inbox/flows/:id",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(cs,{})})}),i.jsx(xe,{path:"/inbox/notify-admin",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(hZ,{})})}),i.jsx(xe,{path:"/inbox/notify-admin/add-number",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(fZ,{})})}),i.jsx(xe,{path:"/inbox/quick-replies",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(gZ,{})})}),i.jsx(xe,{path:"/inbox/global-settings",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(vZ,{})})}),i.jsx(xe,{path:"/inbox/kanban",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(bZ,{})})}),i.jsx(xe,{path:"/inbox/contacts",element:i.jsx(bt,{featureName:"Automati-Zap",children:i.jsx(yZ,{})})}),i.jsx(xe,{path:"/ferramentas",element:i.jsx(nt,{children:i.jsx(BZ,{})})}),i.jsx(xe,{path:"/disparador",element:i.jsx(bt,{featureName:"DisparaZap",children:i.jsx(iZ,{})})}),i.jsx(xe,{path:"/disparazap-oficial",element:i.jsx(j7,{children:i.jsx(sZ,{})})}),i.jsx(xe,{path:"/disparo-oficial",element:i.jsx(cc,{children:i.jsx(pZ,{})})}),i.jsx(xe,{path:"/disparazap/fluxos",element:i.jsx(bt,{featureName:"DisparaZap",children:i.jsx(dg,{})})}),i.jsx(xe,{path:"/disparazap/fluxos/novo",element:i.jsx(bt,{featureName:"DisparaZap",children:i.jsx(cs,{})})}),i.jsx(xe,{path:"/disparazap/fluxos/:id",element:i.jsx(bt,{featureName:"DisparaZap",children:i.jsx(cs,{})})}),i.jsx(xe,{path:"/clonador",element:i.jsx(bt,{featureName:"Clonador de Entregável",children:i.jsx(lZ,{})})}),i.jsx(xe,{path:"/criativos",element:i.jsx(bt,{featureName:"Canvas de Criativos",children:i.jsx(kZ,{})})}),i.jsx(xe,{path:"/criativos/importar/:code",element:i.jsx(nt,{children:i.jsx(TZ,{})})}),i.jsx(xe,{path:"/criativos/:flowId",element:i.jsx(bt,{featureName:"Canvas de Criativos",children:i.jsx(NZ,{})})}),i.jsx(xe,{path:"/settings",element:i.jsx(nt,{children:i.jsx(gr,{children:i.jsx(xZ,{})})})}),i.jsx(xe,{path:"/settings/sale-notifications",element:i.jsx(nt,{children:i.jsx(gr,{children:i.jsx(CZ,{})})})}),i.jsx(xe,{path:"/settings/logzz-notifications",element:i.jsx(nt,{children:i.jsx(gr,{children:i.jsx(PZ,{})})})}),i.jsx(xe,{path:"/integrations",element:i.jsx(nt,{children:i.jsx(gr,{children:i.jsx(ug,{})})})}),i.jsx(xe,{path:"/integrations/:tab",element:i.jsx(nt,{children:i.jsx(gr,{children:i.jsx(ug,{})})})}),i.jsx(xe,{path:"/affiliate",element:i.jsx(nt,{children:i.jsx(AZ,{})})}),i.jsx(xe,{path:"/subscription",element:i.jsx(nt,{children:i.jsx(E
592Z,{})})}),i.jsx(xe,{path:"/tutoriais",element:i.jsx(nt,{children:i.jsx(IZ,{})})}),i.jsx(xe,{path:"/ads/*",element:i.jsx(nt,{children:i.jsx(cZ,{})})}),i.jsx(xe,{path:"/admin-panel",element:i.jsx(cc,{children:i.jsx(aZ,{})})}),i.jsx(xe,{path:"/admin/providers",element:i.jsx(cc,{children:i.jsx(DZ,{})})}),i.jsx(xe,{path:"*",element:i.jsx(OX,{})})]})})]})},UZ=()=>i.jsx(wk,{children:i.jsx(qk,{children:i.jsx(Uk,{children:i.jsx(Nk,{children:i.jsx($k,{children:i.jsx(pk,{children:i.jsx(yk,{children:i.jsx(qZ,{})})})})})})})}),WZ=()=>{const e=g.useRef(null);return g.useEffect(()=>(e.current&&Bc(e.current),()=>{Bc(null)}),[]),i.jsx(PN,{client:zZ,children:i.jsx(s0,{children:i.jsxs(Jd,{children:[i.jsx(eP,{ref:e,defaultPosition:"bottom-right"}),i.jsx(eX,{}),i.jsx(sX,{}),i.jsxs(a0,{children:[i.jsx(iX,{}),i.jsxs(Rg,{children:[i.jsx(xe,{path:"/s/:slug",element:i.jsx(gP,{})}),i.jsx(xe,{path:"*",element:i.jsx(BN,{children:i.jsx(UZ,{})})})]})]})]})})})},$Z='"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif';function GZ(){const e=document.createElement("canvas");e.width=e.height=1;const t=e.getContext("2d",{willReadFrequently:!0});return t.textBaseline="top",t.font=`100px ${$Z}`,t.scale(.01,.01),t}function mg(e,t,a){return e.clearRect(0,0,100,100),e.fillStyle=a,e.fillText(t,0,0),e.getImageData(0,0,1,1).data.join(",")}function pg(e){const t=GZ(),a=mg(t,e,"#fff"),o=mg(t,e,"#000");return o===a&&!o.startsWith("0,0,0,")}function HZ(e="Twemoji Country Flags",t="https://cdn.jsdelivr.net/npm/[email protected]/dist/TwemojiCountryFlags.woff2"){if(typeof window<"u"&&pg("ð")&&!pg("ð¨ð")){const a=document.createElement("style");return a.textContent=`@font-face { 593 font-family: "${e}"; 594 unicode-range: U+1F1E6-1F1FF, U+1F3F4, U+E0062-E0063, U+E0065, U+E0067, 595 U+E006C, U+E006E, U+E0073-E0074, U+E0077, U+E007F; 596 src: url('${t}') format('woff2'); 597 font-display: swap; 598 }`,document.head.appendChild(a),!0}return!1}function hg(e){const t=e.invoke.bind(e);e.invoke=async(...a)=>{const o=await t(...a);if(o!=null&&o.error){const n=await tP(o.error,o.error.message);try{o.error.message=n}catch{}}return o}}const fg=Object.getPrototypeOf(ne),xr=fg?Object.getOwnPropertyDescriptor(fg,"functions"):void 0;if(xr!=null&&xr.get){const e=xr.get;Object.defineProperty(ne,"functions",{configurable:!0,enumerable:xr.enumerable??!0,get(){const t=e.call(this);return hg(t),t}})}else hg(ne.functions);nw();kH();HZ();const KZ=()=>{const t=localStorage.getItem("zapdata-theme")==="dark"?"dark":"light";document.documentElement.classList.add(t)};KZ();let gg=!1;const YP=[/Loading chunk [\d]+ failed/i,/Failed to fetch dynamically imported module/i,/error loading dynamically imported module/i,/Importing a module script failed/i];async function QP(e){if(!gg){gg=!0;try{const t="1790260439630",a=await fetch(`/version.json?t=${Date.now()}`,{cache:"no-store"});if(a.ok){const o=await a.json();if(o!=null&&o.buildId&&o.buildId!==t){await ss(e);return}}await ss(e)}catch{await ss(e)}}}window.addEventListener("error",e=>{var a;const t=String((e==null?void 0:e.message)||((a=e==null?void 0:e.error)==null?void 0:a.message)||"");YP.some(o=>o.test(t))&&QP("chunk-error")});window.addEventListener("unhandledrejection",e=>{var a;const t=String(((a=e==null?void 0:e.reason)==null?void 0:a.message)||(e==null?void 0:e.reason)||"");YP.some(o=>o.test(t))&&QP("chunk-rejection")});o0(document.getElementById("root")).render(i.jsx(ee.StrictMode,{children:i.jsx(WZ,{})}));const XZ=()=>{document.documentElement.classList.add("app-mounted")};typeof window<"u"&&setTimeout(XZ,450);export{jg as $,m0 as A,we as B,cn as C,N0 as D,ei as E,fc as F,M7 as G,me as H,it as I,T7 as J,Or as K,Be as L,Am as M,fn as N,zg as O,Wa as P,qs as Q,H0 as R,Un as S,Z0 as T,qg as U,U0 as V,X0 as W,Ma as X,us as Y,Wg as Z,R0 as _,tt as a,LY as a$,ar as a0,k4 as a1,Yo as a2,Pr as a3,Ro as a4,oy as a5,ny as a6,Ji as a7,na as a8,X8 as a9,_g as aA,Pm as aB,Og as aC,Os as aD,qC as aE,A0 as aF,G0 as aG,D9 as aH,We as aI,ZT as aJ,k0 as aK,W0 as aL,Hk as aM,Fv as aN,uu as aO,eA as aP,dJ as aQ,H8 as aR,bY as aS,_P as aT,OP as aU,zP as aV,VP as aW,BP as aX,xY as aY,qP as aZ,TY as a_,Ua as aa,ry as ab,iy as ac,Nr as ad,Mk as ae,Ei as af,ls as ag,xt as ah,$0 as ai,Ge as aj,om as ak,vl as al,Sm as am,tP as an,ut as ao,go as ap,yf as aq,gJ as ar,_r as as,jf as at,ri as au,Em as av,_f as aw,sl as ax,Ze as ay,y0 as az,Cn as b,qY as b$,j0 as b0,oA as b1,Nm as b2,hP as b3,D0 as b4,Yt as b5,sP as b6,lP as b7,Fo as b8,hc as b9,Od as bA,L0 as bB,CK as bC,Tn as bD,Sa as bE,wC as bF,Na as bG,tr as bH,h0 as bI,jC as bJ,_C as bK,OC as bL,x0 as bM,CC as bN,BC as bO,v7 as bP,WP as bQ,nA as bR,jd as bS,z0 as bT,tA as bU,ui as bV,mJ as bW,_Y as bX,AY as bY,EY as bZ,CY as b_,w0 as ba,ii as bb,CJ as bc,aA as bd,T0 as be,u0 as bf,fJ as bg,vJ as bh,Jr as bi,TK as bj,LN as bk,V0 as bl,J0 as bm,Pl as bn,CN as bo,ms as bp,Jd as bq,zv as br,Vv as bs,eu as bt,b0 as bu,aJ as bv,f0 as bw,di as bx,fC as by,V7 as bz,ve as c,Pt as c$,zY as c0,IY as c1,_d as c2,SY as c3,PY as c4,NY as c5,M0 as c6,g8 as c7,La as c8,Gn as c9,Xo as cA,Jn as cB,Je as cC,bo as cD,Hs as cE,xv as cF,wb as cG,pu as cH,pb as cI,mu as cJ,Us as cK,wv as cL,Cv as cM,yv as cN,Yd as cO,Wn as cP,Po as cQ,_s as cR,yC as cS,bi as cT,EK as cU,MK as cV,js as cW,m9 as cX,h9 as cY,PK as cZ,ys as c_,qe as ca,Qe as cb,b8 as cc,_e as cd,Hd as ce,rm as cf,Af as cg,wY as ch,Gg as ci,et as cj,xK as ck,C7 as cl,vu as cm,bu as cn,el as co,yu as cp,xu as cq,Bb as cr,zb as cs,Vb as ct,tl as cu,Qs as cv,F0 as cw,HX as cx,nm as cy,Cw as cz,Oo as d,SQ as d$,Hg as d0,eH as d1,tH as d2,Jx as d3,EH as d4,wH as d5,Ld as d6,pf as d7,SH as d8,NH as d9,IJ as dA,yl as dB,EJ as dC,MJ as dD,TQ as dE,hm as dF,rQ as dG,rg as dH,Dd as dI,lQ as dJ,DJ as dK,JY as dL,aQ as dM,AQ as dN,GP as dO,nQ as dP,HP as dQ,Fd as dR,dQ as dS,uQ as dT,fQ as dU,gQ as dV,RJ as dW,GY as dX,ng as dY,NJ as dZ,EQ as d_,sf as da,sb as db,iw as dc,ib as dd,Qi as de,T1 as df,Nn as dg,an as dh,w1 as di,P1 as dj,R1 as dk,N1 as dl,M1 as dm,JC as dn,rX as dp,hJ as dq,pJ as dr,xA as ds,ag as dt,og as du,ig as dv,sg as dw,tQ as dx,TJ as dy,kJ as dz,Pn as e,VY as e0,eQ as e1,AJ as e2,SJ as e3,Yb as e4,oJ as e5,tw as e6,C0 as e7,q6 as e8,pt as e9,nJ as ea,pi as eb,ef as ec,Mt as ed,hd as ee,Bg as ef,OY as eg,I0 as eh,Ug as ei,jr as ej,PJ as ek,tJ as el,Bo as f,jt as g,If as h,Ae as i,kK as j,Q0 as k,Y0 as l,ya as m,sa as n,xa as o,Lf as p,wa as q,wo as r,ne as s,T9 as t,dm as u,e1 as v,rt as w,UC as x,zC as y,VC as z};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.