PageSourceSearch

https://tradeintelx.com/assets/market-utils-DuYtgy2s.js

js tradeintelx.com collected 2026-09-24 14:54:57 UTC 194,338 bytes, 28 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chat-page-evUfHQgD.js","assets/chartjs-vendor-CJ58C3gX.js","assets/rolldown-runtime-ChpBd9eV.js","assets/chat-page-BXqTKTIP.css","assets/education-page-vD6yUpCZ.js","assets/community-page-CrngAMw5.js","assets/community-page-zj3fMWjX.css","assets/dashboard-page-CleTLBe1.js","assets/TradeLogger-DssKv1_B.js","assets/market-core-DitXLvJ-.js","assets/firebase-messaging-DppWBMgs.js","assets/firebase-core-C5QAqJW8.js","assets/markdown-vendor-kC-Y2lDD.js","assets/market-core-15RKgApK.css","assets/index-Bmdbwk2t.js","assets/icons-vendor-Td9zWZcy.js","assets/query-vendor-CO0MAT2b.js","assets/motion-vendor-D6UmbGXS.js","assets/react-icons-vendor-BRFUBoNn.js","assets/trading-charts-lGr1u8E1.js","assets/react-vendor-CQkKcmd6.js","assets/news-page-DagW7rtr.js","assets/lwcharts-vendor-C-uNSiLH.js","assets/news-page-DgF3EPhA.css","assets/index-Bd9q4Xg_.css","assets/EquityCurve-Dnz2u1jN.js","assets/recharts-vendor-CVfFyqZ4.js","assets/lodash-vendor-CQ1T4J8E.js","assets/RuleSuggestion-CZLVrvQo.js","assets/TradeLogger-Dixi-wDS.css","assets/TradeAnalytics-BhuadqLk.js","assets/EmptyStateCard-DQoZwMw_.js","assets/UserProfile-BFOE_bgG.js","assets/BrokerConnectionPanel-6zNYClJf.js","assets/esm-CEASdP_o.js","assets/ApiKeyManager-yW92SfUs.js","assets/FeedbackPage-BAa3lazE.js","assets/AdminPanel-BGcfmGDg.js","assets/ClassRsvpsPanel-Bt_hXz54.js","assets/PricingPage-IklOCXBQ.js","assets/ForPropFirms-BqmpH2A4.js","assets/SolutionPageShell-BeOJYl7J.js","assets/WaveBackground-DcZ5iAEA.js","assets/ForCoaches-BOfUGmTu.js","assets/TradingPage-yT8D2vgC.js"])))=>i.map(i=>d[i]);
2import{o as at,r as He}from"./rolldown-runtime-ChpBd9eV.js";import{Fa as y,La as it,ca as rt,xr as se}from"./chat-page-evUfHQgD.js";import{hu as nt,mu as st,pu as ot}from"./market-core-DitXLvJ-.js";var I=at(it(),1),g=t=>typeof t=="string",W=()=>{let t,e;const a=new Promise((r,i)=>{t=r,e=i});return a.resolve=t,a.reject=e,a},Te=t=>t==null?"":""+t,lt=(t,e,a)=>{t.forEach(r=>{e[r]&&(a[r]=e[r])})},ct=/###/g,we=t=>t&&t.indexOf("###")>-1?t.replace(ct,"."):t,Ee=t=>!t||g(t),$=(t,e,a)=>{const r=g(e)?e.split("."):e;let i=0;for(;i<r.length-1;){if(Ee(t))return{};const n=we(r[i]);!t[n]&&a&&(t[n]=new a),Object.prototype.hasOwnProperty.call(t,n)?t=t[n]:t={},++i}return Ee(t)?{}:{obj:t,k:we(r[i])}},Ae=(t,e,a)=>{const{obj:r,k:i}=$(t,e,Object);if(r!==void 0||e.length===1){r[i]=a;return}let n=e[e.length-1],o=e.slice(0,e.length-1),s=$(t,o,Object);for(;s.obj===void 0&&o.length;)n=`${o[o.length-1]}.${n}`,o=o.slice(0,o.length-1),s=$(t,o,Object),s?.obj&&typeof s.obj[`${s.k}.${n}`]<"u"&&(s.obj=void 0);s.obj[`${s.k}.${n}`]=a},dt=(t,e,a,r)=>{const{obj:i,k:n}=$(t,e,Object);i[n]=i[n]||[],i[n].push(a)},X=(t,e)=>{const{obj:a,k:r}=$(t,e);if(a&&Object.prototype.hasOwnProperty.call(a,r))return a[r]},ut=(t,e,a)=>{const r=X(t,a);return r!==void 0?r:X(e,a)},We=(t,e,a)=>{for(const r in e)r!=="__proto__"&&r!=="constructor"&&(r in t?g(t[r])||t[r]instanceof String||g(e[r])||e[r]instanceof String?a&&(t[r]=e[r]):We(t[r],e[r],a):t[r]=e[r]);return t},z=t=>t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),pt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},gt=t=>g(t)?t.replace(/[&<>"'\/]/g,e=>pt[e]):t,ht=class{constructor(t){this.capacity=t,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(t){const e=this.regExpMap.get(t);if(e!==void 0)return e;const a=new RegExp(t);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(t,a),this.regExpQueue.push(t),a}},ft=[" ",",","?","!",";"],mt=new ht(20),yt=(t,e,a)=>{e=e||"",a=a||"";const r=ft.filter(o=>e.indexOf(o)<0&&a.indexOf(o)<0);if(r.length===0)return!0;const i=mt.getRegExp(`(${r.map(o=>o==="?"?"\\?":o).join("|")})`);let n=!i.test(t);if(!n){const o=t.indexOf(a);o>0&&!i.test(t.substring(0,o))&&(n=!0)}return n},fe=(t,e,a=".")=>{if(!t)return;if(t[e])return Object.prototype.hasOwnProperty.call(t,e)?t[e]:void 0;const r=e.split(a);let i=t;for(let n=0;n<r.length;){if(!i||typeof i!="object")return;let o,s="";for(let c=n;c<r.length;++c)if(c!==n&&(s+=a),s+=r[c],o=i[s],o!==void 0){if(["string","number","boolean"].indexOf(typeof o)>-1&&c<r.length-1)continue;n+=c-n+1;break}i=o}return i},q=t=>t?.replace(/_/g,"-"),bt={type:"logger",log(t){this.output("log",t)},warn(t){this.output("warn",t)},error(t){this.output("error",t)},output(t,e){console?.[t]?.apply?.(console,e)}},vt=class me{constructor(e,a={}){this.init(e,a)}init(e,a={}){this.prefix=a.prefix||"i18next:",this.logger=e||bt,this.options=a,this.debug=a.debug}log(...e){return this.forward(e,"log","",!0)}warn(...e){return this.forward(e,"warn","",!0)}error(...e){return this.forward(e,"error","")}deprecate(...e){return this.forward(e,"warn","WARNING DEPRECATED: ",!0)}forward(e,a,r,i){return i&&!this.debug?null:(g(e[0])&&(e[0]=`${r}${this.prefix} ${e[0]}`),this.logger[a](e))}create(e){return new me(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new me(this.logger,e)}},O=new vt,ie=class{constructor(){this.observers={}}on(t,e){return t.split(" ").forEach(a=>{this.observers[a]||(this.observers[a]=new Map);const r=this.observers[a].get(e)||0;this.observers[a].set(e,r+1)}),this}off(t,e){if(this.observers[t]){if(!e){delete this.observers[t];return}this.observers[t].delete(e)}}emit(t,...e){this.observers[t]&&Array.from(this.observers[t].entries()).forEac
2h(([a,r])=>{for(let i=0;i<r;i++)a(...e)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([a,r])=>{for(let i=0;i<r;i++)a.apply(a,[t,...e])})}},Re=class extends ie{constructor(t,e={ns:["translation"],defaultNS:"translation"}){super(),this.data=t||{},this.options=e,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(t){this.options.ns.indexOf(t)<0&&this.options.ns.push(t)}removeNamespaces(t){const e=this.options.ns.indexOf(t);e>-1&&this.options.ns.splice(e,1)}getResource(t,e,a,r={}){const i=r.keySeparator!==void 0?r.keySeparator:this.options.keySeparator,n=r.ignoreJSONStructure!==void 0?r.ignoreJSONStructure:this.options.ignoreJSONStructure;let o;t.indexOf(".")>-1?o=t.split("."):(o=[t,e],a&&(Array.isArray(a)?o.push(...a):g(a)&&i?o.push(...a.split(i)):o.push(a)));const s=X(this.data,o);return!s&&!e&&!a&&t.indexOf(".")>-1&&(t=o[0],e=o[1],a=o.slice(2).join(".")),s||!n||!g(a)?s:fe(this.data?.[t]?.[e],a,i)}addResource(t,e,a,r,i={silent:!1}){const n=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator;let o=[t,e];a&&(o=o.concat(n?a.split(n):a)),t.indexOf(".")>-1&&(o=t.split("."),r=e,e=o[1]),this.addNamespaces(e),Ae(this.data,o,r),i.silent||this.emit("added",t,e,a,r)}addResources(t,e,a,r={silent:!1}){for(const i in a)(g(a[i])||Array.isArray(a[i]))&&this.addResource(t,e,i,a[i],{silent:!0});r.silent||this.emit("added",t,e,a)}addResourceBundle(t,e,a,r,i,n={silent:!1,skipCopy:!1}){let o=[t,e];t.indexOf(".")>-1&&(o=t.split("."),r=a,a=e,e=o[1]),this.addNamespaces(e);let s=X(this.data,o)||{};n.skipCopy||(a=JSON.parse(JSON.stringify(a))),r?We(s,a,i):s={...s,...a},Ae(this.data,o,s),n.silent||this.emit("added",t,e,a)}removeResourceBundle(t,e){this.hasResourceBundle(t,e)&&delete this.data[t][e],this.removeNamespaces(e),this.emit("removed",t,e)}hasResourceBundle(t,e){return this.getResource(t,e)!==void 0}getResourceBundle(t,e){return e||(e=this.options.defaultNS),this.getResource(t,e)}getDataByLanguage(t){return this.data[t]}hasLanguageSomeTranslations(t){const e=this.getDataByLanguage(t);return!!(e&&Object.keys(e)||[]).find(a=>e[a]&&Object.keys(e[a]).length>0)}toJSON(){return this.data}},Ke={processors:{},addPostProcessor(t){this.processors[t.name]=t},handle(t,e,a,r,i){return t.forEach(n=>{e=this.processors[n]?.process(e,a,r,i)??e}),e}},$e=Symbol("i18next/PATH_KEY");function kt(){const t=[],e=Object.create(null);let a;return e.get=(r,i)=>(a?.revoke?.(),i===$e?t:(t.push(i),a=Proxy.revocable(r,e),a.proxy)),Proxy.revocable(Object.create(null),e).proxy}function G(t,e){const{[$e]:a}=t(kt()),r=e?.keySeparator??".",i=e?.nsSeparator??":";if(a.length>1&&i){const n=e?.ns,o=Array.isArray(n)?n:null;if(o&&o.length>1&&o.slice(1).includes(a[0]))return`${a[0]}${i}${a.slice(1).join(r)}`}return a.join(r)}var Le={},oe=t=>!g(t)&&typeof t!="boolean"&&typeof t!="number",xe=class qe extends ie{constructor(e,a={}){super(),lt(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","
2i18nFormat","utils"],e,this),this.options=a,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=O.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e,a={interpolation:{}}){const r={...a};if(e==null)return!1;const i=this.resolve(e,r);if(i?.res===void 0)return!1;const n=oe(i.res);return!(r.returnObjects===!1&&n)}extractFromKey(e,a){let r=a.nsSeparator!==void 0?a.nsSeparator:this.options.nsSeparator;r===void 0&&(r=":");const i=a.keySeparator!==void 0?a.keySeparator:this.options.keySeparator;let n=a.ns||this.options.defaultNS||[];const o=r&&e.indexOf(r)>-1,s=!this.options.userDefinedKeySeparator&&!a.keySeparator&&!this.options.userDefinedNsSeparator&&!a.nsSeparator&&!yt(e,r,i);if(o&&!s){const c=e.match(this.interpolator.nestingRegexp);if(c&&c.length>0)return{key:e,namespaces:g(n)?[n]:n};const l=e.split(r);(r!==i||r===i&&this.options.ns.indexOf(l[0])>-1)&&(n=l.shift()),e=l.join(i)}return{key:e,namespaces:g(n)?[n]:n}}translate(e,a,r){let i=typeof a=="object"?{...a}:a;if(typeof i!="object"&&this.options.overloadTranslationOptionHandler&&(i=this.options.overloadTranslationOptionHandler(arguments)),typeof i=="object"&&(i={...i}),i||(i={}),e==null)return"";typeof e=="function"&&(e=G(e,{...this.options,...i})),Array.isArray(e)||(e=[String(e)]),e=e.map(E=>typeof E=="function"?G(E,{...this.options,...i}):String(E));const n=i.returnDetails!==void 0?i.returnDetails:this.options.returnDetails,o=i.keySeparator!==void 0?i.keySeparator:this.options.keySeparator,{key:s,namespaces:c}=this.extractFromKey(e[e.length-1],i),l=c[c.length-1];let u=i.nsSeparator!==void 0?i.nsSeparator:this.options.nsSeparator;u===void 0&&(u=":");const d=i.lng||this.language,h=i.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(d?.toLowerCase()==="cimode")return h?n?{res:`${l}${u}${s}`,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:`${l}${u}${s}`:n?{res:s,usedKey:s,exactUsedKey:s,usedLng:d,usedNS:l,usedParams:this.getUsedParamsDetails(i)}:s;const f=this.resolve(e,i);let p=f?.res;const v=f?.usedKey||s,m=f?.exactUsedKey||s,k=["[object Number]","[object Function]","[object RegExp]"],P=i.joinArrays!==void 0?i.joinArrays:this.options.joinArrays,D=!this.i18nFormat||this.i18nFormat.handleAsObject,w=i.count!==void 0&&!g(i.count),F=qe.hasDefaultValue(i),B=w?this.pluralResolver.getSuffix(d,i.count,i):"",U=i.ordinal&&w?this.pluralResolver.getSuffix(d,i.count,{ordinal:!1}):"",ke=w&&!i.ordinal&&i.count===0,M=ke&&i[`defaultValue${this.options.pluralSeparator}zero`]||i[`defaultValue${B}`]||i[`defaultValue${U}`]||i.defaultValue;let _=p;D&&!p&&F&&(_=M);const et=oe(_),tt=Object.prototype.toString.apply(_);if(D&&_&&et&&k.indexOf(tt)<0&&!(g(P)&&Array.isArray(_))){if(!i.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const E=this.options.returnedObjectHandler?this.options.returnedObjectHandler(v,_,{...i,ns:c}):`key '${s} (${this.language})' returned an object instead of string.`;return n?(f.res=E,f.usedParams=this.getUsedParamsDetails(i),f):E}if(o){const E=Array.isArray(_),C=E?[]:{},ne=E?m:v;for(const A in _)if(Object.prototype.hasOwnProperty.call(_,A)){const N=`${ne}${o}${A}`;F&&!p?C[A]=this.translate(N,{...i,defaultValue:oe(M)?M[A]:void 0,joinArrays:!1,ns:c}):C[A]=this.translate(N,{...i,joinArrays:!1,ns:c}),C[A]===N&&(C[A]=_[A])}p=C}}else if(D&&g(P)&&Array.isArray(p))p=p.join(P),p&&(p=this.extendTranslation(p,e,i,r));else{let E=!1,C=!1;!this.isValidLookup(p)&&F&&(E=!0,p=M),this.isValidLookup(p)||(C=!0,p=s);const ne=(i.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&C?void 0:p,A=F&&M!==p&&this.options.updateMissing;if(C||E||A){if(this.logger.log(A?"updateKey":"missingKey",d,l,s,A?M:p),o){const R=this.resolve(s,{...i,keySeparator:!1});R&&R.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 N=[];const Y=this.languageUtils.getFallbackCodes(this.options.fallbackLng,i.lng||this.language);if(this.options.saveMissingTo==="fallback"&&Y&&Y[0])for(let R=0;R<Y.length;R++)N.push(Y[R]);else this.options.saveMissingTo==="all"?N=this.languageUtils.toResolveHierarchy(i.lng||this.language):N.push(i.lng||this.language);const Pe=(R,V,H)=>{const Se=F&&H!==p?H:ne;this.options.missingKeyHandler?this.options.missingKeyHandler(R,l,V,Se,A,i):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(R,l,V,Se,A,i),this.emit
2("missingKey",R,l,V,p)};this.options.saveMissing&&(this.options.saveMissingPlurals&&w?N.forEach(R=>{const V=this.pluralResolver.getSuffixes(R,i);ke&&i[`defaultValue${this.options.pluralSeparator}zero`]&&V.indexOf(`${this.options.pluralSeparator}zero`)<0&&V.push(`${this.options.pluralSeparator}zero`),V.forEach(H=>{Pe([R],s+H,i[`defaultValue${H}`]||M)})}):Pe(N,s,M))}p=this.extendTranslation(p,e,i,f,r),C&&p===s&&this.options.appendNamespaceToMissingKey&&(p=`${l}${u}${s}`),(C||E)&&this.options.parseMissingKeyHandler&&(p=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}${u}${s}`:s,E?p:void 0,i))}return n?(f.res=p,f.usedParams=this.getUsedParamsDetails(i),f):p}extendTranslation(e,a,r,i,n){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...r},r.lng||this.language||i.usedLng,i.usedNS,i.usedKey,{resolved:i});else if(!r.skipInterpolation){r.interpolation&&this.interpolator.init({...r,interpolation:{...this.options.interpolation,...r.interpolation}});const c=g(e)&&(r?.interpolation?.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let l;if(c){const d=e.match(this.interpolator.nestingRegexp);l=d&&d.length}let u=r.replace&&!g(r.replace)?r.replace:r;if(this.options.interpolation.defaultVariables&&(u={...this.options.interpolation.defaultVariables,...u}),e=this.interpolator.interpolate(e,u,r.lng||this.language||i.usedLng,r),c){const d=e.match(this.interpolator.nestingRegexp),h=d&&d.length;l<h&&(r.nest=!1)}!r.lng&&i&&i.res&&(r.lng=this.language||i.usedLng),r.nest!==!1&&(e=this.interpolator.nest(e,(...d)=>n?.[0]===d[0]&&!r.context?(this.logger.warn(`It seems you are nesting recursively key: ${d[0]} in key: ${a[0]}`),null):this.translate(...d,a),r)),r.interpolation&&this.interpolator.reset()}const o=r.postProcess||this.options.postProcess,s=g(o)?[o]:o;return e!=null&&s?.length&&r.applyPostProcessor!==!1&&(e=Ke.handle(s,e,a,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...i,usedParams:this.getUsedParamsDetails(r)},...r}:r,this)),e}resolve(e,a={}){let r,i,n,o,s;return g(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(c=>typeof c=="function"?G(c,{...this.options,...a}):c)),e.forEach(c=>{if(this.isValidLookup(r))return;const l=this.extractFromKey(c,a),u=l.key;i=u;let d=l.namespaces;this.options.fallbackNS&&(d=d.concat(this.options.fallbackNS));const h=a.count!==void 0&&!g(a.count),f=h&&!a.ordinal&&a.count===0,p=a.context!==void 0&&(g(a.context)||typeof a.context=="number")&&a.context!=="",v=a.lngs?a.lngs:this.languageUtils.toResolveHierarchy(a.lng||this.language,a.fallbackLng);d.forEach(m=>{this.isValidLookup(r)||(s=m,!Le[`${v[0]}-${m}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(s)&&(Le[`${v[0]}-${m}`]=!0,this.logger.warn(`key "${i}" for languages "${v.join(", ")}" won't get resolved as namespace "${s}" 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!!!")),v.forEach(k=>{if(this.isValidLookup(r))return;o=k;const P=[u];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(P,u,k,m,a);else{let w;h&&(w=this.pluralResolver.getSuffix(k,a.count,a));const F=`${this.options.pluralSeparator}zero`,B=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(h&&(a.ordinal&&w.indexOf(B)===0&&P.push(u+w.replace(B,this.options.pluralSeparator)),P.push(u+w),f&&P.push(u+F)),p){const U=`${u}${this.options.contextSeparator||"_"}${a.context}`;P.push(U),h&&(a.ordinal&&w.indexOf(B)===0&&P.push(U+w.replace(B,this.options.pluralSeparator)),P.push(U+w),f&&P.push(U+F))}}let D;for(;D=P.pop();)this.isValidLookup(r)||(n=D,r=this.getResource(k,m,D,a))}))})}),{res:r,usedKey:i,exactUsedKey:n,usedLng:o,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,a,r,i={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,a,r,i):this.resourceStore.getResource(e,a,r,i)}
2getUsedParamsDetails(e={}){const a=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],r=e.replace&&!g(e.replace);let i=r?e.replace:e;if(r&&typeof e.count<"u"&&(i.count=e.count),this.options.interpolation.defaultVariables&&(i={...this.options.interpolation.defaultVariables,...i}),!r){i={...i};for(const n of a)delete i[n]}return i}static hasDefaultValue(e){const a="defaultValue";for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&a===r.substring(0,12)&&e[r]!==void 0)return!0;return!1}},Ce=class{constructor(t){this.options=t,this.supportedLngs=this.options.supportedLngs||!1,this.logger=O.create("languageUtils")}getScriptPartFromCode(t){if(t=q(t),!t||t.indexOf("-")<0)return null;const e=t.split("-");return e.length===2||(e.pop(),e[e.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(e.join("-"))}getLanguagePartFromCode(t){if(t=q(t),!t||t.indexOf("-")<0)return t;const e=t.split("-");return this.formatLanguageCode(e[0])}formatLanguageCode(t){if(g(t)&&t.indexOf("-")>-1){let e;try{e=Intl.getCanonicalLocales(t)[0]}catch{}return e&&this.options.lowerCaseLng&&(e=e.toLowerCase()),e||(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.indexOf(t)>-1}getBestMatchFromCodes(t){if(!t)return null;let e;return t.forEach(a=>{if(e)return;const r=this.formatLanguageCode(a);(!this.options.supportedLngs||this.isSupportedCode(r))&&(e=r)}),!e&&this.options.supportedLngs&&t.forEach(a=>{if(e)return;const r=this.getScriptPartFromCode(a);if(this.isSupportedCode(r))return e=r;const i=this.getLanguagePartFromCode(a);if(this.isSupportedCode(i))return e=i;e=this.options.supportedLngs.find(n=>{if(n===i)return n;if(!(n.indexOf("-")<0&&i.indexOf("-")<0)&&(n.indexOf("-")>0&&i.indexOf("-")<0&&n.substring(0,n.indexOf("-"))===i||n.indexOf(i)===0&&i.length>1))return n})}),e||(e=this.getFallbackCodes(this.options.fallbackLng)[0]),e}getFallbackCodes(t,e){if(!t)return[];if(typeof t=="function"&&(t=t(e)),g(t)&&(t=[t]),Array.isArray(t))return t;if(!e)return t.default||[];let a=t[e];return a||(a=t[this.getScriptPartFromCode(e)]),a||(a=t[this.formatLanguageCode(e)]),a||(a=t[this.getLanguagePartFromCode(e)]),a||(a=t.default),a||[]}toResolveHierarchy(t,e){const a=this.getFallbackCodes((e===!1?[]:e)||this.options.fallbackLng||[],t),r=[],i=n=>{n&&(this.isSupportedCode(n)?r.push(n):this.logger.warn(`rejecting language code not found in supportedLngs: ${n}`))};return g(t)&&(t.indexOf("-")>-1||t.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&i(this.formatLanguageCode(t)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&i(this.getScriptPartFromCode(t)),this.options.load!=="currentOnly"&&i(this.getLanguagePartFromCode(t))):g(t)&&i(this.formatLanguageCode(t)),a.forEach(n=>{r.indexOf(n)<0&&i(this.formatLanguageCode(n))}),r}},Ie={zero:0,one:1,two:2,few:3,many:4,other:5},_e={select:t=>t===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})},Pt=class{constructor(t,e={}){this.languageUtils=t,this.options=e,this.logger=O.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(t,e={}){const a=q(t==="dev"?"en":t),r=e.ordinal?"ordinal":"cardinal",i=JSON.stringify({cleanedCode:a,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let n;try{n=new Intl.PluralRules(a,{type:r})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),_e;if(!t.match(/-|_/))return _e;const s=this.languageUtils.getLanguagePartFromCode(t);n=this.getRule(s,e)}return this.pluralRulesCache[i]=n,n}needsPlural(t,e={}){let a=this.getRule(t,e);return a||(a=this.getRule("dev",e)),a?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(t,e,a={}
2){return this.getSuffixes(t,a).map(r=>`${e}${r}`)}getSuffixes(t,e={}){let a=this.getRule(t,e);return a||(a=this.getRule("dev",e)),a?a.resolvedOptions().pluralCategories.sort((r,i)=>Ie[r]-Ie[i]).map(r=>`${this.options.prepend}${e.ordinal?`ordinal${this.options.prepend}`:""}${r}`):[]}getSuffix(t,e,a={}){const r=this.getRule(t,a);return r?`${this.options.prepend}${a.ordinal?`ordinal${this.options.prepend}`:""}${r.select(e)}`:(this.logger.warn(`no plural rule found for: ${t}`),this.getSuffix("dev",e,a))}},Oe=(t,e,a,r=".",i=!0)=>{let n=ut(t,e,a);return!n&&i&&g(a)&&(n=fe(t,a,r),n===void 0&&(n=fe(e,a,r))),n},le=t=>t.replace(/\$/g,"$$$$"),De=class{constructor(t={}){this.logger=O.create("interpolator"),this.options=t,this.format=t?.interpolation?.format||(e=>e),this.init(t)}init(t={}){t.interpolation||(t.interpolation={escapeValue:!0});const{escape:e,escapeValue:a,useRawValueToEscape:r,prefix:i,prefixEscaped:n,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:h,nestingSuffix:f,nestingSuffixEscaped:p,nestingOptionsSeparator:v,maxReplaces:m,alwaysFormat:k}=t.interpolation;this.escape=e!==void 0?e:gt,this.escapeValue=a!==void 0?a:!0,this.useRawValueToEscape=r!==void 0?r:!1,this.prefix=i?z(i):n||"{{",this.suffix=o?z(o):s||"}}",this.formatSeparator=c||",",this.unescapePrefix=l?"":u||"-",this.unescapeSuffix=this.unescapePrefix?"":l||"",this.nestingPrefix=d?z(d):h||z("$t("),this.nestingSuffix=f?z(f):p||z(")"),this.nestingOptionsSeparator=v||",",this.maxReplaces=m||1e3,this.alwaysFormat=k!==void 0?k:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const t=(e,a)=>e?.source===a?(e.lastIndex=0,e):new RegExp(a,"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,e,a,r){let i,n,o;const s=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},c=d=>{if(d.indexOf(this.formatSeparator)<0){const v=Oe(e,s,d,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(v,void 0,a,{...r,...e,interpolationkey:d}):v}const h=d.split(this.formatSeparator),f=h.shift().trim(),p=h.join(this.formatSeparator).trim();return this.format(Oe(e,s,f,this.options.keySeparator,this.options.ignoreJSONStructure),p,a,{...r,...e,interpolationkey:f})};this.resetRegExp();const l=r?.missingInterpolationHandler||this.options.missingInterpolationHandler,u=r?.interpolation?.skipOnVariables!==void 0?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:d=>le(d)},{regex:this.regexp,safeValue:d=>this.escapeValue?le(this.escape(d)):le(d)}].forEach(d=>{for(o=0;i=d.regex.exec(t);){const h=i[1].trim();if(n=c(h),n===void 0)if(typeof l=="function"){const p=l(t,i,r);n=g(p)?p:""}else if(r&&Object.prototype.hasOwnProperty.call(r,h))n="";else if(u){n=i[0];continue}else this.logger.warn(`missed to pass in variable ${h} for interpolating ${t}`),n="";else!g(n)&&!this.useRawValueToEscape&&(n=Te(n));const f=d.safeValue(n);if(t=t.replace(i[0],f),u?(d.regex.lastIndex+=n.length,d.regex.lastIndex-=i[0].length):d.regex.lastIndex=0,o++,o>=this.maxReplaces)break}}),t}nest(t,e,a={}){let r,i,n;const o=(s,c)=>{const l=this.nestingOptionsSeparator;if(s.indexOf(l)<0)return s;const u=s.split(new RegExp(`${z(l)}[ ]*{`));let d=`{${u[1]}`;s=u[0],d=this.interpolate(d,n);const h=d.match(/'/g),f=d.match(/"/g);((h?.length??0)%2===0&&!f||(f?.length??0)%2!==0)&&(d=d.replace(/'/g,'"'));try{n=JSON.parse(d),c&&(n={...c,...n})}catch(p){return this.logger.warn(`failed parsing options string in nesting for key ${s}`,p),`${s}${l}${d}`}return n.defaultValue&&n.defaultValue.indexOf(this.prefix)>-1&&delete n.defaultValue,s};for(;r=this.nestingRegexp.exec(t);){let s=[];n={...a},n=n.replace&&!g(n.replace)?n.replace:n,n.applyPostProcessor=!1,delete n.defaultValue;const c=/{.*}/.test(r[1])?r[1].lastIndexOf("}")+1:r[1].indexOf(this.formatSeparator);if(c!==-1&&(s=r[1].slice(c).split(this.formatSeparator).map(l=>
2l.trim()).filter(Boolean),r[1]=r[1].slice(0,c)),i=e(o.call(this,r[1].trim(),n),n),i&&r[0]===t&&!g(i))return i;g(i)||(i=Te(i)),i||(this.logger.warn(`missed to resolve ${r[1]} for nesting ${t}`),i=""),s.length&&(i=s.reduce((l,u)=>this.format(l,u,a.lng,{...a,interpolationkey:r[1].trim()}),i.trim())),t=t.replace(r[0],i),this.regexp.lastIndex=0}return t}},St=t=>{let e=t.toLowerCase().trim();const a={};if(t.indexOf("(")>-1){const r=t.split("(");e=r[0].toLowerCase().trim();const i=r[1].substring(0,r[1].length-1);e==="currency"&&i.indexOf(":")<0?a.currency||(a.currency=i.trim()):e==="relativetime"&&i.indexOf(":")<0?a.range||(a.range=i.trim()):i.split(";").forEach(n=>{if(n){const[o,...s]=n.split(":"),c=s.join(":").trim().replace(/^'+|'+$/g,""),l=o.trim();a[l]||(a[l]=c),c==="false"&&(a[l]=!1),c==="true"&&(a[l]=!0),isNaN(c)||(a[l]=parseInt(c,10))}})}return{formatName:e,formatOptions:a}},Ne=t=>{const e={};return(a,r,i)=>{let n=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(n={...n,[i.interpolationkey]:void 0});const o=r+JSON.stringify(n);let s=e[o];return s||(s=t(q(r),i),e[o]=s),s(a)}},Tt=t=>(e,a,r)=>t(q(a),r)(e),wt=class{constructor(t={}){this.logger=O.create("formatter"),this.options=t,this.init(t)}init(t,e={interpolation:{}}){this.formatSeparator=e.interpolation.formatSeparator||",";const a=e.cacheInBuiltFormats?Ne:Tt;this.formats={number:a((r,i)=>{const n=new Intl.NumberFormat(r,{...i});return o=>n.format(o)}),currency:a((r,i)=>{const n=new Intl.NumberFormat(r,{...i,style:"currency"});return o=>n.format(o)}),datetime:a((r,i)=>{const n=new Intl.DateTimeFormat(r,{...i});return o=>n.format(o)}),relativetime:a((r,i)=>{const n=new Intl.RelativeTimeFormat(r,{...i});return o=>n.format(o,i.range||"day")}),list:a((r,i)=>{const n=new Intl.ListFormat(r,{...i});return o=>n.format(o)})}}add(t,e){this.formats[t.toLowerCase().trim()]=e}addCached(t,e){this.formats[t.toLowerCase().trim()]=Ne(e)}format(t,e,a,r={}){const i=e.split(this.formatSeparator);if(i.length>1&&i[0].indexOf("(")>1&&i[0].indexOf(")")<0&&i.find(n=>n.indexOf(")")>-1)){const n=i.findIndex(o=>o.indexOf(")")>-1);i[0]=[i[0],...i.splice(1,n)].join(this.formatSeparator)}return i.reduce((n,o)=>{const{formatName:s,formatOptions:c}=St(o);if(this.formats[s]){let l=n;try{const u=r?.formatParams?.[r.interpolationkey]||{},d=u.locale||u.lng||r.locale||r.lng||a;l=this.formats[s](n,d,{...c,...r,...u})}catch(u){this.logger.warn(u)}return l}else this.logger.warn(`there was no format function for ${s}`);return n},t)}},Et=(t,e)=>{t.pending[e]!==void 0&&(delete t.pending[e],t.pendingCount--)},At=class extends ie{constructor(t,e,a,r={}){super(),this.backend=t,this.store=e,this.services=a,this.languageUtils=a.languageUtils,this.options=r,this.logger=O.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(a,r.backend,r)}queueLoad(t,e,a,r){const i={},n={},o={},s={};return t.forEach(c=>{let l=!0;e.forEach(u=>{const d=`${c}|${u}`;!a.reload&&this.store.hasResourceBundle(c,u)?this.state[d]=2:this.state[d]<0||(this.state[d]===1?n[d]===void 0&&(n[d]=!0):(this.state[d]=1,l=!1,n[d]===void 0&&(n[d]=!0),i[d]===void 0&&(i[d]=!0),s[u]===void 0&&(s[u]=!0)))}),l||(o[c]=!0)}),(Object.keys(i).length||Object.keys(n).length)&&this.queue.push({pending:n,pendingCount:Object.keys(n).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(n),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(t,e,a){const r=t.split("|"),i=r[0],n=r[1];e&&this.emit("failedLoading",i,n,e),!e&&a&&this.store.addResourceBundle(i,n,a,void 0,void 0,{skipCopy:!0}),this.state[t]=e?-1:2,e&&a&&(this.state[t]=0);const o={};this.queue.forEach(s=>{dt(s.loaded,[i],n),Et(s,t),e&&s.errors.push(e),s.pendingCount===0&&!s.done&&(Object.keys(s.loaded).forEach(c=>{o[c]||(o[c]={});const l=s.loaded[c];l.length&&l.forEach(u=>{o[c][u]===void 0&&(o[c][u]=!0)})}),s.done=!0,s.errors.length?s.callback(s.errors):s.callback())}
2),this.emit("loaded",o),this.queue=this.queue.filter(s=>!s.done)}read(t,e,a,r=0,i=this.retryTimeout,n){if(!t.length)return n(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:t,ns:e,fcName:a,tried:r,wait:i,callback:n});return}this.readingCalls++;const o=(c,l)=>{if(this.readingCalls--,this.waitingReads.length>0){const u=this.waitingReads.shift();this.read(u.lng,u.ns,u.fcName,u.tried,u.wait,u.callback)}if(c&&l&&r<this.maxRetries){setTimeout(()=>{this.read.call(this,t,e,a,r+1,i*2,n)},i);return}n(c,l)},s=this.backend[a].bind(this.backend);if(s.length===2){try{const c=s(t,e);c&&typeof c.then=="function"?c.then(l=>o(null,l)).catch(o):o(null,c)}catch(c){o(c)}return}return s(t,e,o)}prepareLoading(t,e,a={},r){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),r&&r();g(t)&&(t=this.languageUtils.toResolveHierarchy(t)),g(e)&&(e=[e]);const i=this.queueLoad(t,e,a,r);if(!i.toLoad.length)return i.pending.length||r(),null;i.toLoad.forEach(n=>{this.loadOne(n)})}load(t,e,a){this.prepareLoading(t,e,{},a)}reload(t,e,a){this.prepareLoading(t,e,{reload:!0},a)}loadOne(t,e=""){const a=t.split("|"),r=a[0],i=a[1];this.read(r,i,"read",void 0,void 0,(n,o)=>{n&&this.logger.warn(`${e}loading namespace ${i} for language ${r} failed`,n),!n&&o&&this.logger.log(`${e}loaded namespace ${i} for language ${r}`,o),this.loaded(t,n,o)})}saveMissing(t,e,a,r,i,n={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(e)){this.logger.warn(`did not save key "${a}" as the namespace "${e}" 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(!(a==null||a==="")){if(this.backend?.create){const s={...n,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let l;c.length===5?l=c(t,e,a,r,s):l=c(t,e,a,r),l&&typeof l.then=="function"?l.then(u=>o(null,u)).catch(o):o(null,l)}catch(l){o(l)}else c(t,e,a,r,o,s)}!t||!t[0]||this.store.addResource(t[0],e,a,r)}}},ce=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",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:t=>{let e={};if(typeof t[1]=="object"&&(e=t[1]),g(t[1])&&(e.defaultValue=t[1]),g(t[2])&&(e.tDescription=t[2]),typeof t[2]=="object"||typeof t[3]=="object"){const a=t[3]||t[2];Object.keys(a).forEach(r=>{e[r]=a[r]})}return e},interpolation:{escapeValue:!0,format:t=>t,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),Fe=t=>(g(t.ns)&&(t.ns=[t.ns]),g(t.fallbackLng)&&(t.fallbackLng=[t.fallbackLng]),g(t.fallbackNS)&&(t.fallbackNS=[t.fallbackNS]),t.supportedLngs?.indexOf?.("cimode")<0&&(t.supportedLngs=t.supportedLngs.concat(["cimode"])),typeof t.initImmediate=="boolean"&&(t.initAsync=t.initImmediate),t),J=()=>{},Rt=t=>{Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(e=>{typeof t[e]=="function"&&(t[e]=t[e].bind(t))})},Ye="__i18next_supportNoticeShown",Lt=()=>!!(typeof globalThis<"u"&&globalThis[Ye]||typeof process<"u"&&{}.I18NEXT_NO_SUPPORT_NOTICE||typeof process<"u"),xt=()=>{typeof globalThis<"u"&&(globalThis[Ye]=!0)},Ct=t=>!!(t?.modules?.backend?.name?.indexOf("Locize")>0||t?.modules?.backend?.constructor?.name?.indexOf("Locize")>0||t?.options?.backend?.backends&&t.options.backend.backends.some(e=>e?.name?.indexOf("Locize")>0||e?.constructor?.name?.indexOf("Locize")>0)||t?.options?.backend?.projectId||t?.options?.backend?.backendOptions&&t.options.backend.backendOptions.some(e=>e?.projectId)),It=class Z extends ie{constructor(e={},a){if(super(),this.options=Fe(e),this.services={},this.logger=O,this.modules={external:[]},Rt(this),a&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,a),this;setTimeout(()=>{this.init(e,a)},0)}}init(e={},a){this.isInitializing=!0,typeof e=="function"&&(a=e,e={}),e.defaultNS==null&&e.ns&&(g(e.ns)?e.defaultNS=e.ns:e.ns.indexOf("translation")<0&&(e.defaultNS=e.ns[0]));const r=ce();this.options={...r,...this.options,...Fe(e)},this.options.interpolation={...r.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=r.overloadTranslationOptionHandler),this.options.showSupportNotice!==!1&&!Ct(this)&&!Lt()&&(typeof console<"u"&&typeof console.info<"u"&&console.info("ðŸŒ
2 i18next is made possible by our own product, Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙"),xt());const i=s=>s?typeof s=="function"?new s:s:null;if(!this.options.isClone){this.modules.logger?O.init(i(this.modules.logger),this.options):O.init(null,this.options);let s;this.modules.formatter?s=this.modules.formatter:s=wt;const c=new Ce(this.options);this.store=new Re(this.options.resources,this.options);const l=this.services;l.logger=O,l.resourceStore=this.store,l.languageUtils=c,l.pluralResolver=new Pt(c,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),this.options.interpolation.format&&this.options.interpolation.format!==r.interpolation.format&&this.logger.deprecate("init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting"),s&&(!this.options.interpolation.format||this.options.interpolation.format===r.interpolation.format)&&(l.formatter=i(s),l.formatter.init&&l.formatter.init(l,this.options),this.options.interpolation.format=l.formatter.format.bind(l.formatter)),l.interpolator=new De(this.options),l.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},l.backendConnector=new At(i(this.modules.backend),l.resourceStore,l,this.options),l.backendConnector.on("*",(u,...d)=>{this.emit(u,...d)}),this.modules.languageDetector&&(l.languageDetector=i(this.modules.languageDetector),l.languageDetector.init&&l.languageDetector.init(l,this.options.detection,this.options)),this.modules.i18nFormat&&(l.i18nFormat=i(this.modules.i18nFormat),l.i18nFormat.init&&l.i18nFormat.init(this)),this.translator=new xe(this.services,this.options),this.translator.on("*",(u,...d)=>{this.emit(u,...d)}),this.modules.external.forEach(u=>{u.init&&u.init(this)})}if(this.format=this.options.interpolation.format,a||(a=J),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const s=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);s.length>0&&s[0]!=="dev"&&(this.options.lng=s[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(s=>{this[s]=(...c)=>this.store[s](...c)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(s=>{this[s]=(...c)=>(this.store[s](...c),this)});const n=W(),o=()=>{const s=(c,l)=>{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),n.resolve(l),a(c,l)};if(this.languages&&!this.isInitialized)return s(null,this.t.bind(this));this.changeLanguage(this.options.lng,s)};return this.options.resources||!this.options.initAsync?o():setTimeout(o,0),n}loadResources(e,a=J){let r=a;const i=g(e)?e:this.language;if(typeof e=="function"&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(i?.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return r();const n=[],o=s=>{s&&s!=="cimode"&&this.services.languageUtils.toResolveHierarchy(s).forEach(c=>{c!=="cimode"&&n.indexOf(c)<0&&n.push(c)})};i?o(i):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(s=>o(s)),this.options.preload?.forEach?.(s=>o(s)),this.services.backendConnector.load(n,this.options.ns,s=>{!s&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),r(s)})}else r(null)}reloadResources(e,a,r){const i=W();return typeof e=="function"&&(r=e,e=void 0),typeof a=="function"&&(r=a,a=void 0),e||(e=this.languages),a||(a=this.options.ns),r||(r=J),this.services.backendConnector.reload(e,a,n=>{i.resolve(),r(n)}),i}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&Ke.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1)){for(let a=0;a<this.languages.length;a++){const r=this.languages[a];if(!(["cimode","dev"].indexOf(r)>-1)&&this.store.hasLanguageSomeTranslations(r)){this.resolvedLanguage=r;break}}!this.resolvedLanguage&&this.languages.indexOf(e)<0&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,a){this.isLanguageChangingTo=e;const r=W();
2this.emit("languageChanging",e);const i=s=>{this.language=s,this.languages=this.services.languageUtils.toResolveHierarchy(s),this.resolvedLanguage=void 0,this.setResolvedLanguage(s)},n=(s,c)=>{c?this.isLanguageChangingTo===e&&(i(c),this.translator.changeLanguage(c),this.isLanguageChangingTo=void 0,this.emit("languageChanged",c),this.logger.log("languageChanged",c)):this.isLanguageChangingTo=void 0,r.resolve((...l)=>this.t(...l)),a&&a(s,(...l)=>this.t(...l))},o=s=>{!e&&!s&&this.services.languageDetector&&(s=[]);const c=g(s)?s:s&&s[0],l=this.store.hasLanguageSomeTranslations(c)?c:this.services.languageUtils.getBestMatchFromCodes(g(s)?[s]:s);l&&(this.language||i(l),this.translator.language||this.translator.changeLanguage(l),this.services.languageDetector?.cacheUserLanguage?.(l)),this.loadResources(l,u=>{n(u,l)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?o(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(o):this.services.languageDetector.detect(o):o(e),r}getFixedT(e,a,r){const i=(n,o,...s)=>{let c;typeof o!="object"?c=this.options.overloadTranslationOptionHandler([n,o].concat(s)):c={...o},c.lng=c.lng||i.lng,c.lngs=c.lngs||i.lngs,c.ns=c.ns||i.ns,c.keyPrefix!==""&&(c.keyPrefix=c.keyPrefix||r||i.keyPrefix);const l={...this.options,...c};typeof c.keyPrefix=="function"&&(c.keyPrefix=G(c.keyPrefix,l));const u=this.options.keySeparator||".";let d;return c.keyPrefix&&Array.isArray(n)?d=n.map(h=>(typeof h=="function"&&(h=G(h,l)),`${c.keyPrefix}${u}${h}`)):(typeof n=="function"&&(n=G(n,l)),d=c.keyPrefix?`${c.keyPrefix}${u}${n}`:n),this.t(d,c)};return g(e)?i.lng=e:i.lngs=e,i.ns=a,i.keyPrefix=r,i}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,a={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;
2if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const r=a.lng||this.resolvedLanguage||this.languages[0],i=this.options?this.options.fallbackLng:!1,n=this.languages[this.languages.length-1];if(r.toLowerCase()==="cimode")return!0;const o=(s,c)=>{const l=this.services.backendConnector.state[`${s}|${c}`];return l===-1||l===0||l===2};if(a.precheck){const s=a.precheck(this,o);if(s!==void 0)return s}return!!(this.hasResourceBundle(r,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||o(r,e)&&(!i||o(n,e)))}loadNamespaces(e,a){const r=W();return this.options.ns?(g(e)&&(e=[e]),e.forEach(i=>{this.options.ns.indexOf(i)<0&&this.options.ns.push(i)}),this.loadResources(i=>{r.resolve(),a&&a(i)}),r):(a&&a(),Promise.resolve())}loadLanguages(e,a){const r=W();g(e)&&(e=[e]);const i=this.options.preload||[],n=e.filter(o=>i.indexOf(o)<0&&this.services.languageUtils.isSupportedCode(o));return n.length?(this.options.preload=i.concat(n),this.loadResources(o=>{r.resolve(),a&&a(o)}),r):(a&&a(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language)),!e)return"rtl";try{const i=new Intl.Locale(e);if(i&&i.getTextInfo){const n=i.getTextInfo();if(n&&n.direction)return n.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"],r=this.services?.languageUtils||new Ce(ce());return e.toLowerCase().indexOf("-latn")>1?"ltr":a.indexOf(r.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(e={},a){const r=new Z(e,a);return r.createInstance=Z.createInstance,r}cloneInstance(e={},a=J){const r=e.forkResourceStore;r&&delete e.forkResourceStore;const i={...this.options,...e,isClone:!0},n=new Z(i);if((e.debug!==void 0||e.prefix!==void 0)&&(n.logger=n.logger.clone(e)),["store","services","language"].forEach(o=>{n[o]=this[o]}),n.services={...this.services},n.services.utils={hasLoadedNamespace:n.hasLoadedNamespace.bind(n)},r&&(n.store=new Re(Object.keys(this.store.data).reduce((o,s)=>(o[s]={...this.store.data[s]},o[s]=Object.keys(o[s]).reduce((c,l)=>(c[l]={...o[s][l]},c),o[s]),o),{}),i),n.services.resourceStore=n.store),e.interpolation){const o={...ce().interpolation,...this.options.interpolation,...e.interpolation},s={...i,interpolation:o};n.services.interpolator=new De(s)}return n.translator=new xe(n.services,i),n.translator.on("*",(o,...s)=>{n.emit(o,...s)}),n.init(i,a),n.translator.options=i,n.translator.backendConnector.services.utils={hasLoadedNamespace:n.hasLoadedNamespace.bind(n)},n}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}},S=It.createInstance(),Pa=S.createInstance,Sa=S.dir,Ta=S.init,wa=S.loadResources,Ea=S.reloadResources,Aa=S.use,Ra=S.changeLanguage,La=S.getFixedT,xa=S.t,Ca=S.exists,Ia=S.setDefaultNamespace,_a=S.hasLoadedNamespace,Oa=S.loadNamespaces,Da=S.loadLanguages,Je=(()=>{try{return localStorage.getItem("appLanguage")||"en"}catch{return"en"}})(),_t={en:{translation:{nav:{home:"Home",today:"Today",ledger:"Ledger",anal
2ytics:"Analytics",agent:"Agent",agentStudio:"Agent Studio",strategyLab:"Strategy Lab",lab:"Lab",learn:"Learn",chat:"Chat",more:"More",notifications:"Notifications",tradingContext:"Trading Context",community:"Community",feedback:"Feedback",browseFirms:"Browse Firms",upgrade:"Upgrade"},common:{save:"Save",cancel:"Cancel",confirm:"Confirm",edit:"Edit",delete:"Delete",close:"Close",back:"Back",next:"Next",done:"Done",skip:"Skip",continue:"Continue",letsGo:"Let's go",loading:"Loading…",error:"Error",success:"Success",apply:"Apply",reset:"Reset",search:"Search",yes:"Yes",no:"No"},settings:{title:"Settings",subtitle:"Manage your trading preferences and account security",appearance:"Appearance",language:"Language",languageDesc:"Choose your preferred display language. Applied instantly — works on mobile and iOS app with no reload.",theme:"Theme",themePreference:"Production-Grade Theme System",themeDesc:"Our theme system is designed for professional traders with seamless transitions, accessibility compliance, and optimized performance for all UI elements including modals, charts, and text.",lightMode:"Light Mode",darkMode:"Dark Mode",notifications:"Notifications",account:"Account",applyLanguage:"Ap
2ply Language",resetToEnglish:"Reset to English",currentLanguage:"Current language",searchLanguage:"Search language…",changesAutosaved:"Changes are saved automatically",tabs:{appearance:"Appearance",riskRules:"Risk Rules",integrations:"Integrations",notifications:"Notifications",security:"Security",support:"Support",referral:"Referral"}},market:{open:"Open",closed:"Closed",premarket:"Pre-market",afterhours:"After-hours",weekend:"Weekend",regular:"Regular"},trading:{trade:"Trade",trades:"Trades",profit:"Profit",loss:"Loss",winRate:"Win Rate",pnl:"P&L",entry:"Entry",exit:"Exit",size:"Size",setup:"Setup",notes:"Notes"},today:{goodMorning:"Good Morning",goodAfternoon:"Good Afternoon",goodEvening:"Good Evening",todaysFocus:"Today's Focus",confirmFocus:"Confirm Focus",yesFocused:"Yes, I'm focused",noActiveIssues:"No active issues.",stayDisciplined:"Stay disciplined"},enforcement:{cooldown:"Cooldown",locked:"Locked",warn:"Warning",cooldownActive:"Cooldown Active",remaining:"remaining",tradingPaused:"Trading paused"},dashboard:{welcome:"Welcome, {{name}}",quickActions:"Quick Actions",loadingDashboard:"Loading dashboard…",actions:{startSession:"Start Session",ledger:"Ledger",watchlist:"Watchlist",analytics:"Analytics",learn:"Learn",ideaHub:"Idea Hub",chat:"Chat",agent:"Agent"},stats:{todaysPnl:"Today's P&L",thisWeek:"This Week",totalPnl:"Total P&L",winRate:"Win Rate",profitFactor:"Profit Factor",winStreak:"Win Streak",noTradesToday:"No trades today",tradesCount:"{{count}} trades",totalTrades:"{{count}} total trades",consecutiveWins:"Consecutive wins",consecutiveLosses:"Consecutive losses",excellent:"Excellent",profitable:"Profitable",needsWork:"Needs work",logTradesToSee:"Log trades to see"}},onboarding:{progress:{personalize:"Personalize",connect:"Connect",activate:"Activate"},steps:{language:{title:"Choose your language",subtitle:"Redline will use this everywhere — you can change it later in Settings."},welcome:{title:"Welcome to Redline",subtitle:"Two minutes to personalize your discipline system."},profile:{title:"About you",subtitle:"Pick the path that matches how you trade."},goal:{title:"What are you here for?",subtitle:"Your goal shapes which rules we recommend."},propfirm:{title:"Which firm are you with?",subtitle:"We mirror their published rules into your guardrails."},risk:{title:"Set your guardrails",subtitle:"These are the rules Redline enforces automatically."},broker:{title:"Connect a broker",subtitle:"Auto-imports your trades so journaling is effortless."},appLock:{title:"Lock your broker apps",subtitle:"Optional — iOS only. Block broker apps when a rule breaks."},plan:{title:"Choose your plan",subtitle:"Pick the plan that fits how you trade."},orgJoin:{title:"Join your desk",subtitle:"Use the invite code your mentor sent you."},orgCreate:{title:"Spin up your desk",subtitle:"You can invite mentees right after this."},firstAction:{title:"Take your first action",subtitle:"A real or paper trade — either works."}},v3:{steps:{aboutYou:{title:"About you",subtitle:"Four quick picks — they tune your guardrails and coaching."},journey:{title:"Your unlock journey",subtitle:"Ten trades open the full toolkit. Here is the road."},firstAction:{title:"Log trade 1 of 10",subtitle:"Real or paper — either starts your unlock counter."}},welcome:{headline:"Trade with discipline.",sub:"Redline enforces your rules so one bad day never becomes a blown account. Two minutes to set up.",pathLabel:"How do you trade?"}}},analytics:{totalPnl:"Total P/L",winRate:"Win Rate",trades:"Trades",profitFactor:"Profit Factor",discipline:"Discipline",tradeDna:"Trade DNA",tradeDnaSubtitle:"Your unique trading fingerprint",traderLabel:"{{level}} Trader",analysisWindow:"Analysis window:",tabs:{overview:"Overview",performance:"Performance",patterns:"Patterns",execution:"Execution",risk:"Risk",psychology:"Psychology"},levels:{beginner:"Beginner",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert"}},agent:{studio:"Agent Studio",liveCount:"{{count}} live",tagline:"Study your style. Trade like you.",onboarding:"Onboarding",apiDocs:"API Docs",apiKeys:"API Keys",council:"Council",councilAll:"All three, together",myBots:"My Bots",fromBacktests:"From your backtests",provisioning:"Provisioning your agents…",settingUp:"Setting up agent…",chat:"Chat",agentInfo:"Agent Info",pipeline:"Pipeline",shareChart:"Ctrl+V to share a chart"},education:{sections:{dashboard:"Dashboard",videos:"Videos",courses:"Courses",books:"Books",glossary:"Glossary",strategies:"Strategies",psychology:"Psychology"},descriptions:{},yourProgress:"Your Progress",dayStreak:"{{count}} day streak",videos:"Videos",learned:"Learned",courses:"Courses",hours:"Hours",streak:"Streak",searchPlaceholder:"Search…"},chat:{tabs:{direct:"Direct",groups:"Groups",mentors:"Mentors"},searchPlaceholder:"Search messages...",nav:{messages:"Messages",tickerX:"TickerX",rooms:"Rooms"},selectConversation:"Select a conversation to start chatting"},community:{title:"Trading Community",subtitle:"Share insights • Learn from traders • Grow together",marketOpen:"Market Open",marketClosed:"Market Closed",finishCoachingToPost:"Finish coaching to post",shareYourTrade:"Share Your Trade",leaderboard:"Leaderboard",rankedByPnl:"Ranked by P&L",tabs:{feed:"Feed"}},feedback:{titlePart1:"Feedback",titlePart2:"Loop",subtitle:"Shape the future of Redline",liveRoadmap:"Live roadmap · We read every submission",stats:{submitted:"Submitted",implemented:"Implemented",upvotes:"Upvotes",rank:"Rank"},moreToNext:"{{count}} more to {{next}}",tabs:{submit:"Submit",browse:"Browse & Vote",browseShort:"Browse",roadmap:"Roadmap",admin:"Admin",adminPanel:"Admin Panel"},shareTitle:"Share Your Feedback",shareSubtitle:"Your ideas help shape Redline",typeQuestion:"What type of feedback?"},news:{title:"News",searchTickerPlaceholder:"Search ticker...",askJeffAnything:"Ask Jeff Anything",multiAiPowered:"Multi-AI Powered",chatAboutTrades:"Chat with Jeff about your trades, opportunities, and market context",chatPersonalMentor:"Your personal trading mentor with complete access to your profile",liveMarketData:"Live Market Data"},profile:{traderRank:"Trader Rank",next:"Next:",traderSubtitle:"{{level}} Trader",profitable:"PROFITABLE",developing:"DEVELOPING",totalPnl:"Total P&L",totalProfitGenerated:"Total Profit Generated",totalLossIncurred:"Total Loss Incurred",traderLevel:"Trader Level",tiers:{rookie:"Rookie",silver:"Silver",gold:"Gold",platinum:"Platinum",diamond:"Diamond",legend:"Legend"}}}},es:{translation:{nav:{home:"Inicio",today:"Hoy",ledger:"Registro",analytics:"Análisis",agent:"Agente",agentStudio:"Estudio del Agente",learn:"Aprender",chat:"Chat",more:"Más",notifications:"Notificaciones",tradingContext:"Contexto de Trading",community:"Comunidad",feedback:"Comentarios",browseFirms:"Explorar Firmas",upgrade:"Mejorar"},common:{save:"Guardar",cancel:"Cancelar",confirm:"Confirmar",edit:"Editar",delete:"Eliminar",close:"Cerrar",back:"Atrás",
2next:"Siguiente",done:"Listo",skip:"Omitir",continue:"Continuar",letsGo:"Vamos",loading:"Cargando…",error:"Error",success:"Éxito",apply:"Aplicar",reset:"Restablecer",search:"Buscar",yes:"Sí",no:"No"},settings:{title:"Configuración",subtitle:"Gestiona tus preferencias de trading y seguridad de la cuenta",appearance:"Apariencia",language:"Idioma",languageDesc:"Elige tu idioma preferido. Se aplica al instante — funciona en móvil e iOS sin recargar.",theme:"Tema",themePreference:"Sistema de Temas Profesional",themeDesc:"Nuestro sistema de temas está diseñado para traders profesionales con transiciones fluidas, cumplimiento de accesibilidad y rendimiento optimizado para todos los elementos.",lightMode:"Modo Claro",darkMode:"Modo Oscuro",notifications:"Notificaciones",account:"Cuenta",applyLanguage:"Aplicar idioma",resetToEnglish:"Restablecer a inglés",currentLanguage:"Idioma actual",searchLanguage:"Buscar idioma…",changesAutosaved:"Los cambios se guardan automáticamente",tabs:{appearance:"Apariencia",riskRules:"Reglas de Riesgo",integrations:"Integraciones",notifications:"Notificaciones",security:"Seguridad",support:"Soporte",referral:"Referidos"}},market:{open:"Abierto",closed:"Cerrado",premarket:"Pre-mercado",afterhours:"Fuera de horario",weekend:"Fin de semana",regular:"Regular"},trading:{trade:"Operación",trades:"Operaciones",profit:"Ganancia",loss:"Pérdida",winRate:"Tasa de éxito",pnl:"G/P",entry:"Entrada",exit:"Salida",size:"Tamaño",setup:"Configuración",notes:"Notas"},today:{goodMorning:"Buenos días",goodAfternoon:"Buenas tardes",goodEvening:"Buenas noches",todaysFocus:"Enfoque del día",confirmFocus:"Confirmar enfoque",yesFocused:"Sí, estoy enfocado",noActiveIssues:"Sin problemas activos.",stayDisciplined:"Mantén la disciplina"},enforcement:{cooldown:"Enfriamiento",locked:"Bloqueado",warn:"Advertencia",cooldownActive:"Enfriamiento activo",remaining:"restante",tradingPaused:"Trading en pausa"},dashboard:{welcome:"Bienvenido, {{name}}",quickActions:"Acciones rápidas",loadingDashboard:"Cargando panel…",actions:{startSession:"Iniciar sesión",ledger:"Registro",watchlist:"Lista de seguimiento",analytics:"Análisis",learn:"Aprender",ideaHub:"Centro de ideas",chat:"Chat",agent:"Agente"},stats:{todaysPnl:"P&G de hoy",thisWeek:"Esta semana",totalPnl:"P&G total",winRate:"Tasa de aciertos",profitFactor:"Factor de beneficio",winStreak:"Racha ganadora",noTradesToday:"Sin operaciones hoy",tradesCount:"{{count}} operaciones",totalTrades:"{{count}} operaciones totales",consecutiveWins:"Victorias consecutivas",consecutiveLosses:"Pérdidas consecutivas",excellent:"Excelente",profitable:"Rentable",needsWork:"Necesita mejorar",logTradesToSee:"Registra operaciones para ver"}},onboarding:{progress:{personalize:"Personalizar",connect:"Conectar",activate:"Activar"},steps:{language:{title:"Elige tu idioma",subtitle:"Redline lo usará en todas partes — puedes cambiarlo más tarde en Configuración."},welcome:{title:"Bienvenido a Redline",subtitle:"Dos minutos para personalizar tu sistema de disciplina."},profile:{title:"Sobre ti",subtitle:"Elige el camino que se ajusta a cómo operas."},goal:{title:"¿Para qué estás aquí?",subtitle:"Tu objetivo determina qué reglas recomendamos."},propfirm:{title:"¿Con qué firma operas?",subtitle:"Reflejamos sus reglas publicadas en tus límites."},risk:{title:"Define tus límites",subtitle:"Estas son las reglas que Redline aplica automáticamente."},broker:{title:"Conecta un bróker",subtitle:"Importa automáticamente tus operaciones para un journaling sin esfuerzo."},appLock:{title:"Bloquea apps de tu bróker",subtitle:"Opcional — solo iOS. Bloquea las apps cuando rompas una regla."},plan:{title:"Elige tu plan",subtitle:"Empieza gratis o desbloquea el coach completo."},orgJoin:{title:"Únete a tu equipo",subtitle:"Usa el código de invitación que te envió tu mentor."},orgCreate:{title:"Crea tu equipo",subtitle:"Podrás invitar mentees justo después."},firstAction:{title:"Realiza tu primera acción",subtitle:"Una operación real o en papel — ambas funcionan."}},v3:{steps:{aboutYou:{title:"Sobre ti",subtitle:"Cuatro selecciones rápidas — ajustan tus límites y coaching."},journey:{title:"Tu camino de desbloqueo",subtitle:"Diez operaciones abren el kit completo. Este es el camino."},firstAction:{title:"Registra la operación 1 de 10",subtitle:"Real o en papel — ambas inician tu contador."}},welcome:{headline:"Opera con disciplina.",sub:"Redline aplica tus reglas para que un mal día nunca arruine tu cuenta. Dos minutos para configurar.",pathLabel:"¿Cómo operas?"}}},analytics:{totalPnl:"G/P Total",winRate:"Tasa de éxito",trades:"Operaciones",profitFactor:"Factor de beneficio",discipline:"Disciplina",tradeDna:"ADN de Trading",tradeDnaSubtitle:"Tu huella única de trading",traderLabel:"Trader {{level}}",analysisWindow:"Ventana de análisis:",tabs:{overview:"Resumen",performance:"Ren
2dimiento",patterns:"Patrones",execution:"Ejecución",risk:"Riesgo",psychology:"Psicología"},levels:{beginner:"Principiante",intermediate:"Intermedio",advanced:"Avanzado",expert:"Experto"}},agent:{studio:"Estudio del Agente",liveCount:"{{count}} activos",tagline:"Estudia tu estilo. Opera como tú.",onboarding:"Inducción",apiDocs:"Documentación API",apiKeys:"Claves API",council:"Consejo",councilAll:"Los tres juntos",myBots:"Mis Bots",fromBacktests:"De tus backtests",provisioning:"Aprovisionando tus agentes…",settingUp:"Configurando agente…",chat:"Chat",agentInfo:"Info del Agente",pipeline:"Tubería",shareChart:"Ctrl+V para compartir un gráfico"},education:{sections:{dashboard:"Panel",videos:"Videos",courses:"Cursos",books:"Libros",glossary:"Glosario",strategies:"Estrategias",psychology:"Psicología"},descriptions:{},yourProgress:"Tu progreso",dayStreak:"Racha de {{count}} días",videos:"Videos",learned:"Aprendido",courses:"Cursos",hours:"Horas",streak:"Racha",searchPlaceholder:"Buscar…"},chat:{tabs:{direct:"Directos",groups:"Grupos",mentors:"Mentores"},searchPlaceholder:"Buscar mensajes...",nav:{messages:"Mensajes",tickerX:"TickerX",rooms:"Salas"},selectConversation:"Selecciona una conversación para empezar a chatear"},community:{title:"Comunidad de Trading",subtitle:"Comparte insights • Aprende de traders • Crece juntos",marketOpen:"Mercado Abierto",marketClosed:"Mercado Cerrado",finishCoachingToPost:"Termina el coaching para publicar",shareYourTrade:"Comparte tu operación",leaderboard:"Clasificación",rankedByPnl:"Ordenado por G&P",tabs:{feed:"Feed"}},feedback:{titlePart1:"Bucle de",titlePart2:"Feedback",subtitle:"Da forma al futuro de Redline",liveRoadmap:"Roadmap en vivo · Leemos cada propuesta",stats:{submitted:"Enviados",implemented:"Implementados",upvotes:"Votos",rank:"Rango"},moreToNext:"{{count}} más para {{next}}",tabs:{submit:"Enviar",browse:"Explorar y Votar",browseShort:"Explorar",roadmap:"Roadmap",admin:"Admin",adminPanel:"Panel de Admin"},shareTitle:"Comparte tu Feedback",shareSubtitle:"Tus ideas ayudan a moldear Redline",typeQuestion:"¿Qué tipo de feedback?"},news:{title:"Noticias",searchTickerPlaceholder:"Buscar ticker...",askJeffAnything:"Pregúntale a Jeff",multiAiPowered:"Multi-IA",chatAboutTrades:"Chatea con Jeff sobre tus operaciones, oportunidades y contexto del mercado",chatPersonalMentor:"Tu mentor personal de trading con acceso completo a tu perfil",liveMarketData:"Datos del Mercado en Vivo"},profile:{traderRank:"Rango de Trader",next:"Siguiente:",traderSubtitle:"Trader {{level}}",profitable:"RENTABLE",developing:"EN DESARROLLO",totalPnl:"G&P Total",totalProfitGenerated:"Beneficio Total Generado",totalLossIncurred:"Pérdida Total Incurrida",traderLevel:"Nivel de Trader",tiers:{rookie:"Novato",silver:"Plata",gold:"Oro",platinum:"Platino",diamond:"Diamante",legend:"Leyenda"}}}},pt:{translation:{nav:{home:"Início",today:"Hoje",ledger:"Diário",analytics:"Análises",agent:"Agente",agentStudio:"Estúdio do Agente",learn:"Aprender",chat:"Chat",more:"Mais",notifications:"Notificações",tradingContext:"Contexto de Trading",community:"Comunidade",feedback:"Feedback",browseFirms:"Explorar Firmas",upgrade:"Upgrade"},common:{save:"Salvar",cancel:"Cancelar",confirm:"Confirmar",edit:"Editar",delete:"Excluir",close:"Fechar",back:"Voltar",next:"Próximo",done:"Concluído",skip:"Pular",continue:"Continuar",letsGo:"Vamos lá",loading:"Carregando…",error:"Erro",success:"Sucesso",apply:"Aplicar",reset:"Redefinir",search:"Pesquisar",yes:"Sim",no:"Não"},settings:{title:"Configurações",subtitle:"Gerencie suas preferências de trading e segurança da conta",appearance:"Aparência",language:"Idioma",languageDesc:"Escolha seu idioma preferido. Aplicado instantaneamente — funciona em mobile e iOS sem recarregar.",theme:"Tema",themePreference:"Sistema de Temas Profissional",themeDesc:"Nosso sistema de temas foi projetado para traders profissionais com transições suaves, conformidade de acessibilidade e desempenho otimizado para todos os elementos.",lightMode:"Modo Claro",darkMode:"Modo Escuro",notifications:"Notificações",account:"Conta",applyLanguage:"Aplicar idioma",resetToEnglish:"Redefinir para inglês",currentLanguage:"Idioma atual",searchLanguage:"Pesquisar idioma…",changesAutosaved:"As alterações são salvas automaticamente",tabs:{appearance:"Aparência",riskRules:"Regras de Risco",integrations:"Integrações",notifications:"Notificações",security:"Segurança",support:"Suporte",referral:"Indicações"}}
2,market:{open:"Aberto",closed:"Fechado",premarket:"Pré-mercado",afterhours:"Após o expediente",weekend:"Fim de semana",regular:"Regular"},trading:{trade:"Operação",trades:"Operações",profit:"Lucro",loss:"Perda",winRate:"Taxa de acerto",pnl:"L/P",entry:"Entrada",exit:"Saída",size:"Tamanho",setup:"Configuração",notes:"Notas"},today:{goodMorning:"Bom dia",goodAfternoon:"Boa tarde",goodEvening:"Boa noite",todaysFocus:"Foco de hoje",confirmFocus:"Confirmar foco",yesFocused:"Sim, estou focado",noActiveIssues:"Sem problemas ativos.",stayDisciplined:"Mantenha a disciplina"},enforcement:{cooldown:"Resfriamento",locked:"Bloqueado",warn:"Aviso",cooldownActive:"Resfriamento ativo",remaining:"restante",tradingPaused:"Trading pausado"},dashboard:{welcome:"Bem-vindo, {{name}}",quickActions:"Ações rápidas",loadingDashboard:"Carregando painel…",actions:{startSession:"Iniciar sessão",ledger:"Diário",watchlist:"Lista de observação",analytics:"Análises",learn:"Aprender",ideaHub:"Central de ideias",chat:"Chat",agent:"Agente"},stats:{todaysPnl:"L&P de hoje",thisWeek:"Esta semana",totalPnl:"L&P total",winRate:"Taxa de acertos",profitFactor:"Fator de lucro",winStreak:"Sequência de vitórias",noTradesToday:"Sem operações hoje",tradesCount:"{{count}} operações",totalTrades:"{{count}} operações no total",consecutiveWins:"Vitórias consecutivas",consecutiveLosses:"Derrotas consecutivas",excellent:"Excelente",profitable:"Lucrativo",needsWork:"Precisa melhorar",logTradesToSee:"Registre operações para ver"}},onboarding:{progress:{personalize:"Personalizar",connect:"Conectar",activate:"Ativar"},steps:{language:{title:"Escolha seu idioma",subtitle:"O Redline o usará em todos os lugares — você pode alterá-lo mais tarde nas Configurações."},welcome:{title:"Bem-vindo ao Redline",subtitle:"Dois minutos para personalizar seu sistema de disciplina."},profile:{title:"Sobre você",subtitle:"Escolha o caminho que corresponde a como você opera."},goal:{title:"Para que você está aqui?",subtitle:"Seu objetivo molda quais regras recomendamos."},propfirm:{title:"Com qual firma você opera?",subtitle:"Espelhamos as regras publicadas deles em seus limites."},risk:{title:"Defina seus limites",subtitle:"Estas são as regras que o Redline aplica automaticamente."},broker:{title:"Conecte uma corretora",subtitle:"Importa automaticamente suas operações para um journaling sem esforço."},appLock:{title:"Bloqueie apps da corretora",subtitle:"Opcional — apenas iOS. Bloqueia apps quando uma regra é quebrada."},plan:{title:"Escolha seu plano",subtitle:"Comece grátis ou desbloqueie o coach completo."},orgJoin:{title:"Entre na sua mesa",subtitle:"Use o código de convite que seu mentor enviou."},orgCreate:{title:"Crie sua mesa",subtitle:"Você poderá convidar mentees logo após isto."},firstAction:{title:"Faça sua primeira ação",subtitle:"Uma operação real ou em papel — ambas funcionam."}},v3:{steps:{aboutYou:{title:"Sobre você",subtitle:"Quatro escolhas rápidas — ajustam seus limites e coaching."},journey:{title:"Sua jornada de desbloqueio",subtitle:"Dez operações abrem o kit completo. Este é o caminho."},firstAction:{title:"Registre a operação 1 de 10",subtitle:"Real ou em papel — ambas iniciam seu contador."}},welcome:{headline:"Opere com disciplina.",sub:"O Redline aplica suas regras para que um dia ruim nunca destrua sua conta. Dois minutos para configurar.",pathLabel:"Como você opera?"}}},analytics:{totalPnl:"L/P Total",winRate:"Taxa de acerto",trades:"Operações",profitFactor:"Fator de lucro",discipline:"Disciplina",tradeDna:"DNA de Trading",tradeDnaSubtitle:"Sua impressão digital única de trading",traderLabel:"Trader {{level}}",analysisWindow:"Janela de análise:",tabs:{overview:"Visão geral",performance:"Desempenho",patterns:"Padrões",execution:"Execução",risk:"Risco",psychology:"Psicologia"},levels:{beginner:"Iniciante",intermediate:"Intermediário",advanced:"Avançado",expert:"Especialista"}},agent:{studio:"Estúdio do Agente",liveCount:"{{count}} ativos",tagline:"Estude seu estilo. Opere como você.",onboarding:"Integração",apiDocs:"Documentação API",apiKeys:"Chaves API",council:"Conselho",councilAll:"Os três juntos",myBots:"Meus Bots",fromBacktests:"Dos seus backtests",provisioning:"Provisionando seus agentes…",settingUp:"Configurando agente…",chat:"Chat",agentInfo:"Info do Agente",pipeline:"Pipeline",shareChart:"Ctrl+V para compartilhar um gráfico"},education:{sections:{dashboard:"Painel",videos:"Vídeos",courses:"Cursos",books:"Livros",glossary:"Glossário",strategies:"Estratégias",psychology:"Psicologia"},descriptions:{},yourProgress:"Seu progresso",dayStreak:"Sequência de {{count}} dias",videos:"Vídeos",learned:"Aprendido",courses:"Cursos",hours:"Horas",streak:"Sequência",searchPlaceholder:"Pesquisar…"},chat:{tabs:{direct:"Direto",groups:"Grupos",mentors:"Mentores"},searchPlaceholder:"Pesquisar mensagens...",nav:{messages:"Mensagens",tickerX:"TickerX",rooms:"Salas"},selectConversation:"Selecione uma conversa para começar a conversar"}
2,community:{title:"Comunidade de Trading",subtitle:"Compartilhe insights • Aprenda com traders • Cresça junto",marketOpen:"Mercado Aberto",marketClosed:"Mercado Fechado",finishCoachingToPost:"Termine o coaching para postar",shareYourTrade:"Compartilhe sua operação",leaderboard:"Classificação",rankedByPnl:"Classificado por L&P",tabs:{feed:"Feed"}},feedback:{titlePart1:"Ciclo de",titlePart2:"Feedback",subtitle:"Molde o futuro do Redline",liveRoadmap:"Roadmap ao vivo · Lemos cada envio",stats:{submitted:"Enviados",implemented:"Implementados",upvotes:"Votos",rank:"Rank"},moreToNext:"{{count}} mais para {{next}}",tabs:{submit:"Enviar",browse:"Explorar e Votar",browseShort:"Explorar",roadmap:"Roadmap",admin:"Admin",adminPanel:"Painel de Admin"},shareTitle:"Compartilhe seu feedback",shareSubtitle:"Suas ideias ajudam a moldar o Redline",typeQuestion:"Que tipo de feedback?"},news:{title:"Notícias",searchTickerPlaceholder:"Buscar ticker...",askJeffAnything:"Pergunte ao Jeff",multiAiPowered:"Multi-IA",chatAboutTrades:"Converse com Jeff sobre suas operações, oportunidades e contexto do mercado",chatPersonalMentor:"Seu mentor pessoal de trading com acesso completo ao seu perfil",liveMarketData:"Dados de Mercado ao Vivo"},profile:{traderRank:"Rank do Trader",next:"Próximo:",traderSubtitle:"Trader {{level}}",profitable:"LUCRATIVO",developing:"EM DESENVOLVIMENTO",totalPnl:"L&P Total",totalProfitGenerated:"Lucro Total Gerado",totalLossIncurred:"Perda Total Incorrida",traderLevel:"Nível de Trader",tiers:{rookie:"Iniciante",silver:"Prata",gold:"Ouro",platinum:"Platina",diamond:"Diamante",legend:"Lenda"}}}},fr:{translation:{nav:{home:"Accueil",today:"Aujourd'hui",ledger:"Registre",analytics:"Analyses",agent:"Agent",agentStudio:"Studio d'Agent",learn:"Apprendre",chat:"Messagerie",more:"Plus",notifications:"Notifications",tradingContext:"Contexte de Trading",community:"Communauté",feedback:"Retours",browseFirms:"Parcourir les Firmes",upgrade:"Améliorer"},common:{save:"Enregistrer",cancel:"Annuler",confirm:"Confirmer",edit:"Modifier",delete:"Supprimer",close:"Fermer",back:"Retour",next:"Suivant",done:"Terminé",skip:"Ignorer",continue:"Continuer",letsGo:"C'est parti",loading:"Chargement…",error:"Erreur",success:"Succès",apply:"Appliquer",reset:"Réinitialiser",search:"Rechercher",yes:"Oui",no:"Non"},settings:{title:"Paramètres",subtitle:"Gérez vos préférences de trading et la sécurité de votre compte",appearance:"Apparence",language:"Langue",languageDesc:"Choisissez votre langue préférée. Appliquée instantanément — fonctionne sur mobile et iOS sans rechargement.",theme:"Thème",themePreference:"Système de Thème Professionnel",themeDesc:"Notre système de thème est conçu pour les traders professionnels avec des transitions fluides, la conformité d'accessibilité et des performances optimisées pour tous les éléments.",lightMode:"Mode Clair",darkMode:"Mode Sombre",notifications:"Notifications",account:"Compte",applyLanguage:"Ap
2pliquer la langue",resetToEnglish:"Réinitialiser en anglais",currentLanguage:"Langue actuelle",searchLanguage:"Rechercher une langue…",changesAutosaved:"Les modifications sont enregistrées automatiquement",tabs:{appearance:"Apparence",riskRules:"Règles de Risque",integrations:"Intégrations",notifications:"Notifications",security:"Sécurité",support:"Support",referral:"Parrainage"}},market:{open:"Ouvert",closed:"Fermé",premarket:"Pré-marché",afterhours:"Après-heures",weekend:"Week-end",regular:"Régulier"},trading:{trade:"Trade",trades:"Trades",profit:"Profit",loss:"Perte",winRate:"Taux de réussite",pnl:"G/P",entry:"Entrée",exit:"Sortie",size:"Taille",setup:"Stratégie",notes:"Notes"},today:{goodMorning:"Bonjour",goodAfternoon:"Bon après-midi",goodEvening:"Bonsoir",todaysFocus:"Objectif du jour",confirmFocus:"Confirmer l'objectif",yesFocused:"Oui, je suis concentré",noActiveIssues:"Aucun problème actif.",stayDisciplined:"Restez discipliné"},enforcement:{cooldown:"Refroidissement",locked:"Verrouillé",warn:"Avertissement",cooldownActive:"Refroidissement actif",remaining:"restant",tradingPaused:"Trading en pause"},dashboard:{welcome:"Bienvenue, {{name}}",quickActions:"Actions rapides",loadingDashboard:"Chargement du tableau de bord…",actions:{startSession:"Démarrer la session",ledger:"Registre",watchlist:"Liste de suivi",analytics:"Analyses",learn:"Apprendre",ideaHub:"Centre d'idées",chat:"Chat",agent:"Agent"},stats:{todaysPnl:"P&P d'aujourd'hui",thisWeek:"Cette semaine",totalPnl:"P&P total",winRate:"Taux de réussite",profitFactor:"Facteur de profit",winStreak:"Série gagnante",noTradesToday:"Aucun trade aujourd'hui",tradesCount:"{{count}} trades",totalTrades:"{{count}} trades au total",consecutiveWins:"Victoires consécutives",consecutiveLosses:"Pertes consécutives",excellent:"Excellent",profitable:"Rentable",needsWork:"À améliorer",logTradesToSee:"Enregistrez des trades pour voir"}},onboarding:{progress:{personalize:"Personnaliser",connect:"Connecter",activate:"Activer"},steps:{language:{title:"Choisissez votre langue",subtitle:"Redline l'utilisera partout — vous pourrez la changer plus tard dans Paramètres."},welcome:{title:"Bienvenue sur Redline",subtitle:"Deux minutes pour personnaliser votre système de discipline."},profile:{title:"À propos de vous",subtitle:"Choisissez le parcours qui correspond à votre style."},goal:{title:"Pourquoi êtes-vous ici ?",subtitle:"Votre objectif détermine les règles que nous recommandons."},propfirm:{title:"Avec quelle firme tradez-vous ?",subtitle:"Nous reflétons leurs règles publiées dans vos garde-fous."},risk:{title:"Définissez vos garde-fous",subtitle:"Ce sont les règles que Redline applique automatiquement."},broker:{title:"Connectez un courtier",subtitle:"Importe automatiquement vos trades pour un journal sans effort."},appLock:{title:"Verrouillez les apps de courtier",subtitle:"Optionnel — iOS uniquement. Bloque les apps en cas de violation."},plan:{title:"Choisissez votre plan",subtitle:"Commencez gratuitement ou débloquez le coach complet."},orgJoin:{title:"Rejoignez votre desk",subtitle:"Utilisez le code d'invitation envoyé par votre mentor."},orgCreate:{title:"Créez votre desk",subtitle:"Vous pourrez inviter des mentees juste après."},firstAction:{title:"Faites votre première action",subtitle:"Un trade réel ou papier — les deux fonctionnent."}},v3:{steps:{aboutYou:{title:"À propos de vous",subtitle:"Quatre choix rapides — ils ajustent vos garde-fous et votre coaching."},journey:{title:"Votre parcours de déblocage",subtitle:"Dix trades ouvrent la boîte à outils complète. Voici la route."},firstAction:{title:"Enregistrez le trade 1 sur 10",subtitle:"Réel ou papier — les deux lancent votre compteur."}},welcome:{headline:"Tradez avec discipline.",sub:"Redline applique vos règles pour qu'une mauvaise journée ne détruise jamais votre compte. Deux minutes pour configurer.",pathLabel:"Comment tradez-vous ?"}}},analytics:{totalPnl:"G/P Total",winRate:"Taux de réussite",trades:"Trades",profitFactor:"Facteur de profit",discipline:"Discipline",tradeDna:"ADN de Trading",tradeDnaSubtitle:"Votre empreinte de trading unique",traderLabel:"Trader {{level}}",analysisWindow:"Fenêtre d'analyse :",tabs:{overview:"Aperçu",performance:"Performance",patterns:"Motifs",execution:"Exécution",risk:"Risque",psychology:"Psychologie"},levels:{beginner:"Débutant",intermediate:"Intermédiaire",advanced:"Avancé",expert:"Expert"}},agent:{studio:"Studio d'Agent",liveCount:"{{count}} en direct",tagline:"Étudiez votre style. Tradez comme vous.",onboarding:"Intégration",apiDocs:"Docs API",apiKeys:"Clés API",council:"Conseil",councilAll:"Les trois ensemble",myBots:"Mes Bots",fromBacktests:"De vos backtests",provisioning:"Provisionnement de vos agents…",settingUp:"Configuration de l'agent…",chat:"Chat",agentInfo:"Infos de l'agent",pipeline:"Pipeline",shareChart:"Ctrl+V pour partager un graphique"},education:{sections:{dashboard:"Tableau de bord",videos:"Vidéos",courses:"Cours",books:"Livres",glossary:"Glossaire",strategies:"Stratég
2ies",psychology:"Psychologie"},descriptions:{},yourProgress:"Votre progression",dayStreak:"Série de {{count}} jours",videos:"Vidéos",learned:"Appris",courses:"Cours",hours:"Heures",streak:"Série",searchPlaceholder:"Rechercher…"},chat:{tabs:{direct:"Direct",groups:"Groupes",mentors:"Mentors"},searchPlaceholder:"Rechercher des messages...",nav:{messages:"Messages",tickerX:"TickerX",rooms:"Salles"},selectConversation:"Sélectionnez une conversation pour commencer à discuter"},community:{title:"Communauté de Trading",subtitle:"Partagez des insights • Apprenez des traders • Grandissez ensemble",marketOpen:"Marché Ouvert",marketClosed:"Marché Fermé",finishCoachingToPost:"Terminez le coaching pour publier",shareYourTrade:"Partagez votre trade",leaderboard:"Classement",rankedByPnl:"Classé par G&P",tabs:{feed:"Fil"}},feedback:{titlePart1:"Boucle de",titlePart2:"Feedback",subtitle:"Façonnez l'avenir de Redline",liveRoadmap:"Roadmap en direct · Nous lisons chaque soumission",stats:{submitted:"Soumis",implemented:"Implémentés",upvotes:"Votes",rank:"Rang"},moreToNext:"{{count}} de plus pour {{next}}",tabs:{submit:"Soumettre",browse:"Parcourir et Voter",browseShort:"Parcourir",roadmap:"Roadmap",admin:"Admin",adminPanel:"Panneau d'admin"},shareTitle:"Partagez vos retours",shareSubtitle:"Vos idées aident à façonner Redline",typeQuestion:"Quel type de feedback ?"},news:{title:"Actualités",searchTickerPlaceholder:"Rechercher un ticker...",askJeffAnything:"Demandez à Jeff",multiAiPowered:"Multi-IA",chatAboutTrades:"Discutez avec Jeff de vos trades, opportunités et contexte de marché",chatPersonalMentor:"Votre mentor de trading personnel avec accès complet à votre profil",liveMarketData:"Données de Marché en Direct"},profile:{traderRank:"Rang de Trader",next:"Suivant :",traderSubtitle:"Trader {{level}}",profitable:"RENTABLE",developing:"EN DÉVELOPPEMENT",totalPnl:"G&P Total",totalProfitGenerated:"Profit Total Généré",totalLossIncurred:"Perte Totale Subie",traderLevel:"Niveau de Trader",tiers:{rookie:"Recrue",silver:"Argent",gold:"Or",platinum:"Platine",diamond:"Diamant",legend:"Légende"}}}},de:{translation:{nav:{home:"Start",today:"Heute",ledger:"Handelsbuch",analytics:"Analysen",agent:"Agent",agentStudio:"Agent Studio",learn:"Lernen",chat:"Chat",more:"Mehr",notifications:"Benachrichtigungen",tradingContext:"Trading-Kontext",community:"Community",feedback:"Feedback",browseFirms:"Firmen durchsuchen",upgrade:"Upgrade"},common:{save:"Speichern",cancel:"Abbrechen",confirm:"Bestätigen",edit:"Bearbeiten",delete:"Löschen",close:"Schließen",back:"Zurück",next:"Weiter",done:"Fertig",skip:"Überspringen",continue:"Weiter",letsGo:"Los geht’s",loading:"Lädt…",error:"Fehler",success:"Erfolg",apply:"Anwenden",reset:"Zurücksetzen",search:"Suchen",yes:"Ja",no:"Nein"},settings:{title:"Einstellungen",subtitle:"Verwalten Sie Ihre Trading-Präferenzen und Kontosicherheit",appearance:"Erscheinungsbild",language:"Sprache",languageDesc:"Wählen Sie Ihre bevorzugte Sprache. Sofort angewendet — funktioniert auf Mobil und iOS ohne Neuladen.",theme:"Thema",themePreference:"Professionelles Theme-System",themeDesc:"Unser Theme-System ist für professionelle Trader konzipiert mit nahtlosen Übergängen, Barrierefreiheit und optimierter Leistung für alle Elemente.",lightMode:"Heller Modus",darkMode:"Dunkler Modus",notifications:"Benachrichtigungen",account:"Konto",applyLanguage:"Sprache anwenden",resetToEnglish:"Auf Englisch zurücksetzen",currentLanguage:"Aktuelle Sprache",searchLanguage:"Sprache suchen…",changesAutosaved:"Änderungen werden automatisch gespeichert",tabs:{appearance:"Erscheinungsbild",riskRules:"Risiko-Regeln",integrations:"Integrationen",notifications:"Benachrichtigungen",security:"Sicherheit",support:"Support",referral:"Empfehlungen"}},market:{open:"Offen",closed:"Geschlossen",premarket:"Vormarkt",afterhours:"Nachbörslich",weekend:"Wochenende",regular:"Regulär"},trading:{trade:"Trade",trades:"Trades",profit:"Gewinn",loss:"Verlust",winRate:"Gewinnrate",pnl:"G/V",entry:"Einstieg",exit:"Ausstieg",size:"Größe",setup:"Setup",notes:"Notizen"},today:{goodMorning:"Guten Morgen",goodAfternoon:"Guten Tag",goodEvening:"Guten Abend",todaysFocus:"Tagesziel",confirmFocus:"Ziel bestätigen",yesFocused:"Ja, ich bin fokussiert",noActiveIssues:"Keine aktiven Probleme.",stayDisciplined:"Bleib diszipliniert"},enforcement:{cooldown:"Abkühlphase",locked:"Gesperrt",warn:"Warnung",cooldownActive:"Abkühlphase aktiv",remaining:"verbleibend",tradingPaused:"Trading pausiert"},dashboard:{welcome:"Willkommen, {{name}}",quickActions:"Schnellaktionen",loadingDashboard:"Dashboard wird geladen…",actions:{startSession:"Sitzung starten",ledger:"Handelsbuch",watchlist:"Watchlist",analytics:"Analysen",learn:"Lernen",ideaHub:"Ideen-Hub",chat:"Chat",agent:"Agent"},stats:{todaysPnl:"G&V heute",thisWeek:"Diese Woche",totalPnl:"Gesamt-G&V",winRate:"Trefferquote",profitFactor:"Profit-Faktor",winStreak:"Gewinnserie",noTradesToday:"Heute keine Trades",tradesCount:"{{count}} Trades",totalTrades:"{{count}} Trades insgesamt",consecutiveWins:"Gewinne in Folge",consecutiveLosses:"Verluste in Folge",excellent:"Ausgezeichnet",profitable:"Profitabel",needsWork:"Verbesserungsbedarf",logTradesToSee:"Trades erfassen, um zu sehen"}},onboarding:{progress:{personalize:"Personalisieren",connect:"Verbinden",activate:"Aktivieren"},steps:{language:{title:"Wählen Sie Ihre Sprache",subtitle:"Redline verwendet sie überall — Sie können sie später in den Einstellungen ändern."},welcome:{title:"Willkommen bei Redline",subtitle:"Zwei Minuten, um Ihr Disziplinsystem zu personalisieren."},profile:{title:"Über Sie",subtitle:"Wählen Sie den Weg, der zu Ihrem Trading-Stil passt."},goal:{title:"Warum sind Sie hier?",subtitle:"Ihr Ziel bestimmt, welche Regeln wir empfehlen."},propfirm:{title:"Mit welcher Firma traden Sie?",subtitle:"Wir spiegeln deren veröffentlichte Regeln in Ihre Leitplanken."},risk:{title:"Legen Sie Ihre Leitplanken fest",subtitle:"Das sind die Regeln, die Redline automatisch durchsetzt."},broker:{title:"Broker verbinden",subtitle:"Importiert Ihre Trades automatisch für müheloses Journaling."},appLock:{title:"Broker-Apps sperren",subtitle:"Optional — nur iOS. Sperrt Broker-Apps bei Regelverstoß."},plan:{title:"Wählen Sie Ihren Plan",subtitle:"Kostenlos starten oder den vollen Co
2ach freischalten."},orgJoin:{title:"Treten Sie Ihrem Desk bei",subtitle:"Verwenden Sie den Einladungscode Ihres Mentors."},orgCreate:{title:"Erstellen Sie Ihr Desk",subtitle:"Mentees können Sie direkt danach einladen."},firstAction:{title:"Machen Sie Ihre erste Aktion",subtitle:"Ein echter oder Papier-Trade — beides funktioniert."}},v3:{steps:{aboutYou:{title:"Über Sie",subtitle:"Vier schnelle Auswahlen — sie kalibrieren Ihre Leitplanken und Ihr Coaching."},journey:{title:"Ihre Freischalt-Reise",subtitle:"Zehn Trades öffnen das volle Toolkit. Hier ist der Weg."},firstAction:{title:"Trade 1 von 10 protokollieren",subtitle:"Echt oder Papier — beides startet Ihren Zähler."}},welcome:{headline:"Handeln Sie mit Disziplin.",sub:"Redline setzt Ihre Regeln durch, damit ein schlechter Tag nie das Konto sprengt. Zwei Minuten Einrichtung.",pathLabel:"Wie handeln Sie?"}}},analytics:{totalPnl:"G/V Gesamt",winRate:"Trefferquote",trades:"Trades",profitFactor:"Profit-Faktor",discipline:"Disziplin",tradeDna:"Trade-DNA",tradeDnaSubtitle:"Ihr einzigartiger Trading-Fingerabdruck",traderLabel:"{{level}} Trader",analysisWindow:"Analysefenster:",tabs:{overview:"Übersicht",performance:"Leistung",patterns:"Muster",execution:"Ausführung",risk:"Risiko",psychology:"Psychologie"},levels:{beginner:"Anfänger",intermediate:"Fortgeschritten",advanced:"Profi",expert:"Experte"}},agent:{studio:"Agent Studio",liveCount:"{{count}} live",tagline:"Studiere deinen Stil. Trade wie du.",onboarding:"Einführung",apiDocs:"API-Dokumente",apiKeys:"API-Schlüssel",council:"Rat",councilAll:"Alle drei zusammen",myBots:"Meine Bots",fromBacktests:"Aus deinen Backtests",provisioning:"Bereitstellung deiner Agenten…",settingUp:"Agent wird eingerichtet…",chat:"Chat",agentInfo:"Agent-Info",pipeline:"Pipeline",shareChart:"Strg+V, um einen Chart zu teilen"},education:{sections:{dashboard:"Dashboard",videos:"Videos",courses:"Kurse",books:"Bücher",glossary:"Glossar",strategies:"Strategien",psychology:"Psychologie"},descriptions:{},yourProgress:"Dein Fortschritt",dayStreak:"{{count}}-Tage-Serie",videos:"Videos",learned:"Gelernt",courses:"Kurse",hours:"Stunden",streak:"Serie",searchPlaceholder:"Suchen…"},chat:{tabs:{direct:"Direkt",groups:"Gruppen",mentors:"Mentoren"},searchPlaceholder:"Nachrichten suchen...",nav:{messages:"Nachrichten",tickerX:"TickerX",rooms:"Räume"},selectConversation:"Wähle eine Konversation, um zu chatten"},community:{title:"Trading-Community",subtitle:"Teile Insights • Lerne von Tradern • Wachse zusammen",marketOpen:"Markt geöffnet",marketClosed:"Markt geschlossen",finishCoachingToPost:"Coaching beenden, um zu posten",shareYourTrade:"Teile deinen Trade",leaderboard:"Bestenliste",rankedByPnl:"Sortiert nach G&V",tabs:{feed:"Feed"}},feedback:{titlePart1:"Feedback-",titlePart2:"Schleife",subtitle:"Gestalte die Zukunft von Redline",liveRoadmap:"Live-Roadmap · Wir lesen jede Einreichung",stats:{submitted:"Eingereicht",implemented:"Umgesetzt",upvotes:"Upvotes",rank:"Rang"},moreToNext:"{{count}} mehr bis {{next}}",tabs:{submit:"Einreichen",browse:"Durchsuchen & Abstimmen",browseShort:"Durchsuchen",roadmap:"Roadmap",admin:"Admin",adminPanel:"Admin-Panel"},shareTitle:"Teile dein Feedback",shareSubtitle:"Deine Ideen prägen Redline",typeQuestion:"Welche Art von Feedback?"},news:{title:"Nachrichten",searchTickerPlaceholder:"Ticker suchen...",askJeffAnything:"Frag Jeff alles",multiAiPowered:"Multi-KI-betrieben",chatAboutTrades:"Chatte mit Jeff über deine Trades, Chancen und Marktkontext",chatPersonalMentor:"Dein persönlicher Trading-Mentor mit vollem Zugriff auf dein Profil",liveMarketData:"Live-Marktdaten"},profile:{traderRank:"Trader-Rang",next:"Nächster:",traderSubtitle:"{{level}} Trader",profitable:"PROFITABEL",developing:"IN ENTWICKLUNG",totalPnl:"Gesamt-G&V",totalProfitGenerated:"Erzeugter Gesamtgewinn",totalLossIncurred:"Erlittener Gesamtverlust",traderLevel:"Trader-Level",tiers:{rookie:"Anfänger",silver:"Silber",gold:"Gold",platinum:"Platin",diamond:"Diamant",legend:"Legende"}}}},ar:{translation:{nav:{home:"الرئيسية",today:"اليوم",ledger:"السجل",analytics:"التحليلات",agent:"الوكيل",agentStudio:"استوديو الوكيل",learn:"تعلم",chat:"الدردشة",more:"المزيد",notifications:"الإشعارات",tradingContext:"سياق التداول",community:"المجتمع",feedback:"الملاحظات",browseFirms:"تصفح الشركات",upgrade:"ترقية"},common:{save:"حفظ",cancel:"إلغاء",confirm:"تأكيد",edit:"تعديل",delete:"حذف",close:"إغلاق",back:"رجوع",next:"التالي",done:"تم",skip:"تخطّي",continue:"متابعة",letsGo:"هيا بنا",loading:"جاري التحميل…",error:"خطأ",success:"نجاح",apply:"تطبيق",reset:"إعادة تعيين",search:"بحث",yes:"نعم",no:"لا"},settings:{title:"الإعدادات",subtitle:"إدارة تفضيلات التداول وأمان الحساب",appearance:"المظهر",language:"اللغة",languageDesc:"اختر لغتك المفضلة. يُطبَّق فوراً — يعمل على الجوال و iOS دون إعادة تحميل.",theme:"السمة",themePreference:"نظام السمات الاحترافي",themeDesc:"تم تصميم نظام السمات لدينا للمتداولين المحترفين مع انتقالات سلسة وتوافق إمكانية الوصول وأداء محسّن لجميع العناصر.",lightMode:"الوضع الفاتح",darkMode:"الوضع الداكن",notifications:"الإشعارات",account:"الحساب",applyLanguage:"تطبيق اللغة",resetToEnglish:"إعادة التعيين إلى الإنجليزية",currentLanguage:"اللغة الحالية",searchLanguage:"ابحث عن لغة…",changesAutosaved:"يتم حفظ التغييرات تلقائياً",tabs:{appearance:"المظهر",riskRules:"قواعد المخاطر",integrations:"التكاملات",notifications:"الإشعارات",security:"الأمان",support:"الدعم",referral:"الإحالات"}},market:{open:"مفتوح",closed:"مغلق",premarket:"ما قبل السوق",afterhours:"ما بعد الدوام",weekend:"عطلة نهاية الأسبوع",regular:"عادي"},trading:{trade:"صفقة",trades:"الصفقات",profit:"ربح",loss:"خسارة",winRate:"نسبة الفوز",pnl:"الربح/الخسارة",entry:"الدخول",exit:"الخروج",size:"الحجم",setup:"الإعداد",notes:"ملاحظات"},today:{goodMorning:"صباح الخير",goodAfternoon:"مساء الخير",goodEvening:"مساء النور",todaysFocus:"تركيز اليوم",confirmFocus:"تأكيد التركيز",yesFocused:"نعم، أنا مركّز",noActiveIssues:"لا توجد مشكلات Ù
2†Ø´Ø·Ø©.",stayDisciplined:"ابقَ منضبطاً"},enforcement:{cooldown:"فترة تهدئة",locked:"مقفل",warn:"تحذير",cooldownActive:"فترة التهدئة نشطة",remaining:"متبقي",tradingPaused:"التداول متوقف مؤقتاً"},dashboard:{welcome:"مرحبًا، {{name}}",quickActions:"إجراءات سريعة",loadingDashboard:"جارٍ تحميل لوحة التحكم…",actions:{startSession:"بدء الجلسة",ledger:"السجل",watchlist:"قائمة المتابعة",analytics:"التحليلات",learn:"تعلم",ideaHub:"مركز الأفكار",chat:"الدردشة",agent:"الوكيل"},stats:{todaysPnl:"ربح/خسارة اليوم",thisWeek:"هذا الأسبوع",totalPnl:"إجمالي الربح/الخسارة",winRate:"نسبة الفوز",profitFactor:"عامل الربح",winStreak:"سلسلة الانتصارات",noTradesToday:"لا توجد صفقات اليوم",tradesCount:"{{count}} صفقات",totalTrades:"{{count}} إجمالي الصفقات",consecutiveWins:"انتصارات متتالية",consecutiveLosses:"خسائر متتالية",excellent:"ممتاز",profitable:"مربح",needsWork:"يحتاج إلى تحسين",logTradesToSee:"سجل صفقات لرؤية البيانات"}},onboarding:{progress:{personalize:"التخصيص",connect:"الربط",activate:"التفعيل"},steps:{language:{title:"اختر لغتك",subtitle:"سيستخدمها Redline في كل مكان — يمكنك تغييرها لاحقاً من الإعدادات."},welcome:{title:"مرحباً بك في Redline",subtitle:"دقيقتان لتخصيص نظام الانضباط الخاص بك."},profile:{title:"عنك",subtitle:"اختر المسار الذي يطابق أسلوب تداولك."},goal:{title:"لماذا أنت هنا؟",subtitle:"هدفك يحدد القواعد التي نوصي بها."},propfirm:{title:"مع أي شركة تتداول؟",subtitle:"نعكس قواعدهم المنشورة في حدود الحماية الخاصة بك."},risk:{title:"حدد حدودك",subtitle:"هذه هي القواعد التي يطبّقها Redline تلقائياً."},broker:{title:"اربط وسيطاً",subtitle:"يستورد صفقاتك تلقائياً ليصبح التدوين سهلاً."},appLock:{title:"اقفل تطبيقات الوسيط",subtitle:"اختياري — iOS فقط. يحجب تطبيقات الوسيط عند خرق القاعدة."},plan:{title:"اختر خطتك",subtitle:"ابدأ مجاناً أو افتح كامل المدرّب."},orgJoin:{title:"انضم إلى فريقك",subtitle:"استخدم رمز الدعوة الذي أرسله مرشدك."},orgCreate:{title:"أنشئ فريقك",subtitle:"يمكنك دعوة المتدربين مباشرة بعد ذلك."},firstAction:{title:"قم بأول إجراء لك",subtitle:"صفقة حقيقية أو ورقية — كلاهما يصلح."}}},analytics:{totalPnl:"إجمالي الربح/الخسارة",winRate:"نسبة الفوز",trades:"الصفقات",profitFactor:"عامل الربح",discipline:"الانضباط",tradeDna:"حمض نووي للتداول",tradeDnaSubtitle:"بصمتك الفريدة في التداول",traderLabel:"متداول {{level}}",analysisWindow:"نافذة التحليل:",tabs:{overview:"نظرة عامة",performance:"الأداء",patterns:"الأنماط",execution:"التنفيذ",risk:"المخاطر",psychology:"علم النفس"},levels:{beginner:"مبتدئ",intermediate:"متوسط",advanced:"متقدم",expert:"خبير"}},agent:{studio:"استوديو الوكيل",liveCount:"{{count}} نشط",tagline:"ادرس أسلوبك. تداول مثلك.",onboarding:"الإعداد",apiDocs:"وثائق API",apiKeys:"مفاتيح API",council:"المجلس",councilAll:"الثلاثة معًا",myBots:"روبوتاتي",fromBacktests:"من اختباراتك الرجعية",provisioning:"جارٍ توفير الوكلاء…",settingUp:"جارٍ إعداد الوكيل…",chat:"الدردشة",agentInfo:"معلومات الوكيل",pipeline:"خط الأنابيب",shareChart:"Ctrl+V لمشاركة الرسم البياني"},education:{sections:{dashboard:"لوحة التحكم",videos:"فيديوهات",courses:"الدورات",books:"الكتب",glossary:"المسرد",strategies:"الاستراتيجيات",psychology:"علم النفس"},descriptions:{},yourProgress:"تقدمك",dayStreak:"سلسلة {{count}} أيام",videos:"فيديوهات",learned:"مُتعلَّم",courses:"دورات",hours:"ساعات",streak:"سلسلة",searchPlaceholder:"بحث…"},chat:{tabs:{direct:"مباشر",groups:"مجموعات",mentors:"مرشدون"},searchPlaceholder:"بحث في الرسائل...",nav:{messages:"الرسائل",tickerX:"TickerX",rooms:"الغرف"},selectConversation:"اختر محادثة لبدء الدردشة"}
2,community:{title:"مجتمع التداول",subtitle:"شارك الرؤى • تعلم من المتداولين • انمُ معًا",marketOpen:"السوق مفتوح",marketClosed:"السوق مغلق",finishCoachingToPost:"أنهِ التدريب للنشر",shareYourTrade:"شارك صفقتك",leaderboard:"المتصدرون",rankedByPnl:"مرتبة حسب الربح/الخسارة",tabs:{feed:"الموجز"}},feedback:{titlePart1:"حلقة",titlePart2:"الملاحظات",subtitle:"شكّل مستقبل Redline",liveRoadmap:"خارطة طريق حية · نقرأ كل اقتراح",stats:{submitted:"المُرسَلة",implemented:"المُنفَّذة",upvotes:"التصويتات",rank:"الترتيب"},moreToNext:"{{count}} المزيد للوصول إلى {{next}}",tabs:{submit:"إرسال",browse:"تصفح وصوّت",browseShort:"تصفح",roadmap:"الخارطة",admin:"المسؤول",adminPanel:"لوحة المسؤول"},shareTitle:"شارك ملاحظاتك",shareSubtitle:"أفكارك تساعد في تشكيل Redline",typeQuestion:"ما نوع الملاحظات؟"},news:{title:"الأخبار",searchTickerPlaceholder:"ابحث عن رمز...",askJeffAnything:"اسأل جيف أي شيء",multiAiPowered:"مدعوم بالذكاء الاصطناعي المتعدد",chatAboutTrades:"دردش مع جيف حول صفقاتك وفرصك وسياق السوق",chatPersonalMentor:"مرشدك الشخصي للتداول مع وصول كامل إلى ملفك",liveMarketData:"بيانات السوق المباشرة"},profile:{traderRank:"رتبة المتداول",next:"التالي:",traderSubtitle:"متداول {{level}}",profitable:"مربح",developing:"قيد التطوير",totalPnl:"إجمالي الربح/الخسارة",totalProfitGenerated:"إجمالي الربح المُنشأ",totalLossIncurred:"إجمالي الخسارة المتكبدة",traderLevel:"مستوى المتداول",tiers:{rookie:"مبتدئ",silver:"فضي",gold:"ذهبي",platinum:"بلاتيني",diamond:"ماسي",legend:"أسطورة"}}}},zh:{translation:{nav:{home:"主页",today:"今日",ledger:"账本",analytics:"分析",agent:"助手",agentStudio:"助手工作室",learn:"学习",chat:"聊天",more:"更多",notifications:"通知",tradingContext:"交易背景",community:"社区",feedback:"反馈",browseFirms:"浏览公司",upgrade:"升级"},common:{save:"保存",cancel:"取消",confirm:"确认",edit:"编辑",delete:"删除",close:"关闭",back:"返回",next:"下一步",done:"完成",skip:"跳过",continue:"继续",letsGo:"开始",loading:"加载中…",error:"错误",success:"成功",apply:"应用",reset:"重置",search:"搜索",yes:"是",no:"否"},settings:{title:"设置",subtitle:"管理您的交易偏好和账户安全",appearance:"外观",language:"语言",languageDesc:"选择您的首选语言。即时生效——在移动端和 iOS 应用上无需重新加载。",theme:"主题",themePreference:"专业主题系统",themeDesc:"我们的主题系统专为专业交易者设计,提供无缝过渡、可访问性合规和针对所有元素的优化性能。",lightMode:"浅色模式",darkMode:"深色模式",notifications:"通知",account:"账户",applyLanguage:"应用语言",resetToEnglish:"重置为英语",currentLanguage:"当前语言",searchLanguage:"搜索语言…",changesAutosaved:"更改自动保存",tabs:{appearance:"外观",riskRules:"风险规则",integrations:"集成",notifications:"通知",security:"安全",support:"支持",referral:"推荐"}},market:{open:"开盘",closed:"收盘",premarket:"盘前",afterhours:"盘后",weekend:"周末",regular:"正常"},trading:{trade:"交易",trades:"交易记录",profit:"盈利",loss:"亏损",winRate:"胜率",pnl:"盈亏",entry:"入场",exit:"出场",size:"规模",setup:"策略",notes:"备注"},today:{goodMorning:"早上好",goodAfternoon:"下午好",goodEvening:"晚上好",todaysFocus:"今日重点",confirmFocus:"确认重点",yesFocused:"是的,我专注了",noActiveIssues:"没有活跃问题。",stayDisciplined:"保持纪律"},enforcement:{cooldown:"冷静期",locked:"已锁定",warn:"警告",cooldownActive:"冷静期进行中",remaining:"剩余",tradingPaused:"交易暂停"},dashboard:{welcome:"欢迎,{{name}}",quickActions:"快捷操作",loadingDashboard:"正在加载仪表板…",actions:{startSession:"开始交易",ledger:"账本",w
2atchlist:"自选股",analytics:"分析",learn:"学习",ideaHub:"灵感中心",chat:"聊天",agent:"助手"},stats:{todaysPnl:"今日盈亏",thisWeek:"本周",totalPnl:"总盈亏",winRate:"胜率",profitFactor:"盈利因子",winStreak:"连胜",noTradesToday:"今日无交易",tradesCount:"{{count}} 笔交易",totalTrades:"总计 {{count}} 笔交易",consecutiveWins:"连续盈利",consecutiveLosses:"连续亏损",excellent:"优秀",profitable:"盈利",needsWork:"需要改进",logTradesToSee:"记录交易以查看"}},onboarding:{progress:{personalize:"个性化",connect:"连接",activate:"激活"},steps:{language:{title:"选择您的语言",subtitle:'Redline 将在各处使用此语言——您可以稍后在"设置"中更改。'},welcome:{title:"欢迎来到 Redline",subtitle:"只需两分钟,个性化您的纪律系统。"},profile:{title:"关于您",subtitle:"选择与您的交易风格匹配的路径。"},goal:{title:"您来此目的?",subtitle:"您的目标决定我们推荐哪些规则。"},propfirm:{title:"您在哪家公司交易?",subtitle:"我们将他们公布的规则镜像为您的护栏。"},risk:{title:"设置您的护栏",subtitle:"这些是 Redline 自动执行的规则。"},broker:{title:"连接经纪商",subtitle:"自动导入您的交易,让记账毫不费力。"},appLock:{title:"锁定经纪商应用",subtitle:"可选——仅限 iOS。违反规则时阻止经纪商应用。"},plan:{title:"选择您的计划",subtitle:"免费开始或解锁完整教练。"},orgJoin:{title:"加入您的工作台",subtitle:"使用您导师发送的邀请码。"},orgCreate:{title:"创建您的工作台",subtitle:"完成后可立即邀请学员。"},firstAction:{title:"完成您的第一个动作",subtitle:"真实或模拟交易——任一种都可以。"}}},analytics:{totalPnl:"总盈亏",winRate:"胜率",trades:"交易",profitFactor:"盈利因子",discipline:"纪律",tradeDna:"交易DNA",tradeDnaSubtitle:"您独特的交易指纹",traderLabel:"{{level}}交易者",analysisWindow:"分析窗口:",tabs:{overview:"概览",performance:"业绩",patterns:"模式",execution:"执行",risk:"风险",psychology:"心理"},levels:{beginner:"新手",intermediate:"中级",advanced:"高级",expert:"专家"}},agent:{studio:"助手工作室",liveCount:"{{count}} 在线",tagline:"研究您的风格。像您一样交易。",onboarding:"入门",apiDocs:"API 文档",apiKeys:"API 密钥",council:"理事会",councilAll:"三者合一",myBots:"我的机器人",fromBacktests:"来自您的回测",provisioning:"正在配置您的助手…",settingUp:"正在设置助手…",chat:"聊天",agentInfo:"助手信息",pipeline:"管道",shareChart:"Ctrl+V 分享图表"},education:{sections:{dashboard:"仪表板",videos:"视频",courses:"课程",books:"书籍",glossary:"术语表",strategies:"策略",psychology:"心理"},descriptions:{},yourProgress:"您的进度",dayStreak:"连续 {{count}} 天",videos:"视频",learned:"已学",courses:"课程",hours:"小时",streak:"连胜",searchPlaceholder:"搜索…"},chat:{tabs:{direct:"私聊",groups:"群组",mentors:"导师"},searchPlaceholder:"搜索消息...",nav:{messages:"消息",tickerX:"TickerX",rooms:"房间"},selectConversation:"选择会话开始聊天"},community:{title:"交易社区",subtitle:"分享见解 • 向交易者学习 • 共同成长",marketOpen:"开盘",marketClosed:"收盘",finishCoachingToPost:"完成辅导后发布",shareYourTrade:"分享您的交易",leaderboard:"排行榜",rankedByPnl:"按盈亏排名",tabs:{feed:"动态"}},feedback:{titlePart1:"反馈",titlePart2:"回路",subtitle:"塑造 Redline 的未来",liveRoadmap:"实时路线图 · 我们阅读每个提交",stats:{submitted:"已提交",implemented:"已实现",upvotes:"点赞",rank:"排名"},moreToNext:"再 {{count}} 个升至 {{next}}",tabs:{submit:"提交",browse:"浏览和投票",browseShort:"浏览",roadmap:"路线图",admin:"管理员",adminPanel:"管理面板"},shareTitle:"分享您的反馈",shareSubtitle:"您的想法塑造 Redline",typeQuestion:"什么类型的反馈?"},news:{title:"新闻",searchTickerPlaceholder:"搜索代码...",askJeffAnything:"问 Jeff 任何事",multiAiPowered:"多 AI 驱动",chatAboutTrades:"与 Jeff 聊聊您的交易、机会和市场背景",chatPersonalMentor:"您的私人交易导师,完全访问您的个人资料",liveMarketData:"实时市场数据"},profile:{traderRank:"交易者等级",next:"下一个:",traderSubtitle:"{{level}}交易者",profitable:"盈利",developing:"发展中",totalPnl:"总盈亏",totalProfitGenerated:"总盈利",totalLossIncurred:"总亏损",traderLevel:"交易者级别",tiers:{rookie:"新手",silver:"白银",gold:"黄金",platinum:"白金",diamond:"钻石",legend:"传奇"}}}},ja:{translation:{nav:{home:"ホーム",today:"今日",ledger:"取引帳",analytics:"分析",agent:"エージェント",agentStudio:"エージェントスタジオ",learn:"学習",chat:"チャット",more:"その他",notifications:"通知",tradingContext:"取引コンテキスト",community:"コミュニティ",feedback:"フィードバック",browseFirms:"会社を探す",upgrade:"アップグレード"},common:{save:"保存",cancel:"キャンセル",confirm:"確認",edit:"編集",delete:"削除",close:"閉じる",back:"戻る",next:"次へ",done:"完了",skip:"スキップ",continue:"続行",letsGo:"はじめる",loading:"読み込み中…",error:"エラー",success:"成功",a
2pply:"適用",reset:"リセット",search:"検索",yes:"はい",no:"いいえ"},settings:{title:"設定",subtitle:"トレード設定とアカウントセキュリティを管理",appearance:"外観",language:"言語",languageDesc:"表示言語を選択します。即時適用 — モバイル/iOSで再読み込み不要。",theme:"テーマ",themePreference:"プロ仕様のテーマシステム",themeDesc:"当社のテーマシステムは、シームレスな遷移、アクセシビリティ準拠、すべての要素の最適化されたパフォーマンスでプロのトレーダー向けに設計されています。",lightMode:"ライトモード",darkMode:"ダークモード",notifications:"通知",account:"アカウント",applyLanguage:"言語を適用",resetToEnglish:"英語にリセット",currentLanguage:"現在の言語",searchLanguage:"言語を検索…",changesAutosaved:"変更は自動的に保存されます",tabs:{appearance:"外観",riskRules:"リスクルール",integrations:"連携",notifications:"通知",security:"セキュリティ",support:"サポート",referral:"紹介"}},market:{open:"開場",closed:"閉場",premarket:"プレマーケット",afterhours:"時間外取引",weekend:"週末",regular:"通常"},trading:{trade:"取引",trades:"取引一覧",profit:"利益",loss:"損失",winRate:"勝率",pnl:"損益",entry:"エントリー",exit:"イグジット",size:"サイズ",setup:"セットアップ",notes:"メモ"},today:{goodMorning:"おはようございます",goodAfternoon:"こんにちは",goodEvening:"こんばんは",todaysFocus:"今日のフォーカス",confirmFocus:"フォーカスを確認",yesFocused:"はい、集中しています",noActiveIssues:"問題はありません。",stayDisciplined:"規律を保ちましょう"},enforcement:{cooldown:"クールダウン",locked:"ロック中",warn:"警告",cooldownActive:"クールダウン中",remaining:"残り",tradingPaused:"トレード一時停止"},dashboard:{welcome:"ようこそ、{{name}}さん",quickActions:"クイックアクション",loadingDashboard:"ダッシュボードを読み込み中…",actions:{startSession:"セッション開始",ledger:"取引帳",watchlist:"ウォッチリスト",analytics:"分析",learn:"学習",ideaHub:"アイデアハブ",chat:"チャット",agent:"エージェント"},stats:{todaysPnl:"本日の損益",thisWeek:"今週",totalPnl:"総損益",winRate:"勝率",profitFactor:"プロフィットファクター",winStreak:"連勝",noTradesToday:"本日の取引なし",tradesCount:"{{count}} 件の取引",totalTrades:"合計 {{count}} 件の取引",consecutiveWins:"連勝中",consecutiveLosses:"連敗中",excellent:"優秀",profitable:"利益あり",needsWork:"要改善",logTradesToSee:"取引を記録して表示"}},onboarding:{progress:{personalize:"パーソナライズ",connect:"接続",activate:"アクティベート"},steps:{language:{title:"言語を選択",subtitle:"Redline はこの言語をすべてで使用します — 後で設定から変更できます。"},welcome:{title:"Redline へようこそ",subtitle:"2分で規律システムをパーソナライズ。"},profile:{title:"あなたについて",subtitle:"あなたのトレードスタイルに合う道を選んでください。"},goal:{title:"ここに来た目的は?",subtitle:"目標が推奨ルールを決定します。"},propfirm:{title:"どの会社でトレード?",subtitle:"公開ルールをガードレールに反映します。"},risk:{title:"ガードレールを設定",subtitle:"これらが Redline が自動で適用するルールです。"},broker:{title:"ブローカーを接続",subtitle:"トレードを自動インポート、ジャーナリングが楽に。"},appLock:{title:"ブローカーアプリをロック",subtitle:"任意 — iOSのみ。ルール違反時にアプリをブロック。"},plan:{title:"プランを選択",subtitle:"無料で開始、または完全なコーチを解除。"},orgJoin:{title:"デスクに参加",subtitle:"メンターから送られた招待コードを使用。"},orgCreate:{title:"デスクを作成",subtitle:"この直後にメンティーを招待できます。"},firstAction:{title:"最初のアクションを実行",subtitle:"実トレードでも紙トレードでもOK。"}}},analytics:{totalPnl:"総損益",winRate:"勝率",trades:"トレード",profitFactor:"プロフィットファクター",discipline:"規律",tradeDna:"トレードDNA",tradeDnaSubtitle:"あなた独自のトレーディング指紋",traderLabel:"{{level}}トレーダー",analysisWindow:"分析期間:",tabs:{overview:"概要",performance:"パフォーマンス",patterns:"パターン",execution:"執行",risk:"リスク",psychology:"心理"},levels:{beginner:"初心者",intermediate:"中級者",advanced:"上級者",expert
2:"エキスパート"}},agent:{studio:"エージェントスタジオ",liveCount:"{{count}} ライブ",tagline:"あなたのスタイルを学ぶ。あなたのようにトレード。",onboarding:"オンボーディング",apiDocs:"APIドキュメント",apiKeys:"APIキー",council:"カウンシル",councilAll:"3つ全て一緒に",myBots:"マイボット",fromBacktests:"バックテストから",provisioning:"エージェントを準備中…",settingUp:"エージェント設定中…",chat:"チャット",agentInfo:"エージェント情報",pipeline:"パイプライン",shareChart:"Ctrl+Vでチャート共有"},education:{sections:{dashboard:"ダッシュボード",videos:"動画",courses:"コース",books:"書籍",glossary:"用語集",strategies:"戦略",psychology:"心理"},descriptions:{},yourProgress:"あなたの進捗",dayStreak:"{{count}}日連続",videos:"動画",learned:"習得",courses:"コース",hours:"時間",streak:"連続",searchPlaceholder:"検索…"},chat:{tabs:{direct:"ダイレクト",groups:"グループ",mentors:"メンター"},searchPlaceholder:"メッセージを検索...",nav:{messages:"メッセージ",tickerX:"TickerX",rooms:"ルーム"},selectConversation:"チャットを始めるには会話を選択"},community:{title:"トレーディングコミュニティ",subt
2itle:"インサイトを共有 • トレーダーから学ぶ • 共に成長",marketOpen:"市場オープン",marketClosed:"市場クローズ",finishCoachingToPost:"投稿するにはコーチングを完了",shareYourTrade:"トレードを共有",leaderboard:"リーダーボード",rankedByPnl:"損益順",tabs:{feed:"フィード"}},feedback:{titlePart1:"フィードバック",titlePart2:"ループ",subtitle:"Redlineの未来を形作る",liveRoadmap:"ライブロードマップ · すべての提出を読みます",stats:{submitted:"送信済み",implemented:"実装済み",upvotes:"賛成",rank:"ランク"},moreToNext:"{{next}}まであと{{count}}",tabs:{submit:"送信",browse:"閲覧と投票",browseShort:"閲覧",roadmap:"ロードマップ",admin:"管理",adminPanel:"管理パネル"},shareTitle:"フィードバックを共有",shareSubtitle:"あなたのアイデアがRedlineを形作る",typeQuestion:"どのタイプのフィードバック?"},news:{title:"ニュース",searchTickerPlaceholder:"ティッカー検索...",askJeffAnything:"Jeffに何でも聞く",multiAiPowered:"マルチAI搭載",chatAboutTrades:"Jeffとあなたのトレード、機会、市場状況について話す",chatPersonalMentor:"プロフィールに完全アクセスできるパーソナルトレーディングメンター",liveMarketData:"ライブマーケットデータ"},profile:{traderRank:"トレーダーランク",next:"次:",traderSubtitle:"{{level}}トレーダー",profitable:"利益あり",developing:"発展中",totalPnl:"総損益",totalProfitGenerated:"総利益生成",totalLossIncurred:"総損失",traderLevel:"トレーダーレベル",tiers:{rookie:"ルーキー",silver:"シルバー",gold:"ゴールド",platinum:"プラチナ",diamond:"ダイヤモンド",legend:"レジェンド"}}}},ko:{translation:{nav:{home:"홈",today:"오늘",ledger:"거래장",analytics:"분석",agent:"에이전트",agentStudio:"에이전트 스튜디오",learn:"학습",chat:"채팅",more:"더 보기",notifications:"알림",tradingContext:"거래 컨텍스트",community:"커뮤니티",feedback:"피드백",browseFirms:"회사 탐색",upgrade:"업그레이드"},common:{save:"저장",cancel:"취소",confirm:"확인",edit:"편집",delete:"삭제",close:"닫기",back:"뒤로",next:"다음",done:"완료",skip:"건너뛰기",continue:"계속",letsGo:"시작",loading:"로딩 중…",error:"오류",success:"성공",apply:"적용",reset:"초기화",search:"검색",yes:"예",no:"아니오"}
2,settings:{title:"설정",subtitle:"트레이딩 환경 설정과 계정 보안 관리",appearance:"외관",language:"언어",languageDesc:"선호하는 언어를 선택하세요. 즉시 적용 — 모바일과 iOS 앱에서 새로고침 없이 작동.",theme:"테마",themePreference:"프로페셔널 테마 시스템",themeDesc:"저희 테마 시스템은 전문 트레이더를 위해 매끄러운 전환, 접근성 준수, 모든 요소에 대한 최적화된 성능으로 설계되었습니다.",lightMode:"라이트 모드",darkMode:"다크 모드",notifications:"알림",account:"계정",applyLanguage:"언어 적용",resetToEnglish:"영어로 초기화",currentLanguage:"현재 언어",searchLanguage:"언어 검색…",changesAutosaved:"변경 사항은 자동으로 저장됩니다",tabs:{appearance:"외관",riskRules:"리스크 규칙",integrations:"통합",notifications:"알림",security:"보안",support:"지원",referral:"추천"}},market:{open:"개장",closed:"휴장",premarket:"프리마켓",afterhours:"시간외 거래",weekend:"주말",regular:"정규"},trading:{trade:"거래",trades:"거래 내역",profit:"이익",loss:"손실",winRate:"승률",pnl:"손익",entry:"진입",exit:"청산",size:"수량",setup:"전략",notes:"메모"},today:{goodMorning:"좋은 아침",goodAfternoon:"안녕하세요",goodEvening:"안녕하세요",todaysFocus:"오늘의 집중",confirmFocus:"집중 확인",yesFocused:"네, 집중하고 있어요",noActiveIssues:"활성 문제 없음.",stayDisciplined:"규율을 유지하세요"},enforcement:{cooldown:"쿨다운",locked:"잠김",warn:"경고",cooldownActive:"쿨다운 중",remaining:"남음",tradingPaused:"거래 일시정지"},dashboard:{welcome:"환영합니다, {{name}}님",quickActions:"빠른 작업",loadingDashboard:"대시보드를 불러오는 중…",actions:{startSession:"세션 시작",ledger:"거래장",watchlist:"관심 종목",anal
2ytics:"분석",learn:"학습",ideaHub:"아이디어 허브",chat:"채팅",agent:"에이전트"},stats:{todaysPnl:"오늘의 손익",thisWeek:"이번 주",totalPnl:"총 손익",winRate:"승률",profitFactor:"수익 팩터",winStreak:"연승",noTradesToday:"오늘 거래 없음",tradesCount:"{{count}}건 거래",totalTrades:"총 {{count}}건 거래",consecutiveWins:"연속 승리",consecutiveLosses:"연속 패배",excellent:"훌륭함",profitable:"수익성 있음",needsWork:"개선 필요",logTradesToSee:"거래를 기록하여 확인"}},onboarding:{progress:{personalize:"개인화",connect:"연결",activate:"활성화"},steps:{language:{title:"언어 선택",subtitle:"Redline이 모든 곳에서 사용 — 나중에 설정에서 변경 가능합니다."},welcome:{title:"Redline에 오신 것을 환영합니다",subtitle:"규율 시스템을 2분 안에 개인화하세요."},profile:{title:"당신에 대해",subtitle:"거래 스타일에 맞는 경로를 선택하세요."},goal:{title:"여기 온 이유는?",subtitle:"목표가 추천 규칙을 결정합니다."},propfirm:{title:"어떤 회사에서 거래?",subtitle:"공개된 규칙을 가드레일로 반영합니다."}
2,risk:{title:"가드레일 설정",subtitle:"Redline이 자동으로 적용하는 규칙입니다."},broker:{title:"브로커 연결",subtitle:"거래를 자동 가져와 저널링이 쉬워집니다."},appLock:{title:"브로커 앱 잠금",subtitle:"선택 — iOS 전용. 규칙 위반 시 앱을 차단합니다."},plan:{title:"플랜 선택",subtitle:"무료로 시작하거나 전체 코치를 잠금 해제."},orgJoin:{title:"데스크 참여",subtitle:"멘토가 보낸 초대 코드를 사용하세요."},orgCreate:{title:"데스크 만들기",subtitle:"바로 후에 멘티를 초대할 수 있습니다."},firstAction:{title:"첫 번째 액션 수행",subtitle:"실거래 또는 페이퍼 거래 모두 가능."}}},analytics:{totalPnl:"총 손익",winRate:"승률",trades:"거래",profitFactor:"수익 팩터",discipline:"규율",tradeDna:"거래 DNA",tradeDnaSubtitle:"당신의 고유한 트레이딩 지문",traderLabel:"{{level}} 트레이더",analysisWindow:"분석 기간:",tabs:{overview:"개요",performance:"성과",patterns:"패턴",execution:"실행",risk:"리스크",psychology:"심리"},levels:{beginner:"초보자",intermediate:"중급자",advanced:"고급자",expert:"전문가"}},agent:{studio:"에이전트 스튜디오",liveCount:"{{count}} 활성",tagline:"당신의 스타일을 연구하세요. 당신처럼 거래하세요.",onboarding:"온보딩",apiDocs:"API 문서",apiKeys:"API 키",council:"카운슬",councilAll:"셋이 함께",myBots:"내 봇",fromBacktests:"백테스트에서",provisioning:"에이전트 프로비저닝 중…",settingUp:"에이전트 설정 중…",chat:"채팅",agentInfo:"에이전트 정보",pipeline:"파이프라인",shareChart:"Ctrl+V로 차트 공유"},education:{sections:{dashboard:"대시보드",videos:"비디오",courses:"강좌",books:"도서",glossary:"용어집",strategies:"전략",psychology:"심리"},descriptions:{},yourProgress:"당신의 진행",dayStreak:"{{count}}일 연속",videos:"비디오",learned:"학습",courses:"강좌",hours:"시간",streak:"연속",searchPlaceholder:"검색…"},chat:{tabs:{direct:"다이렉트",groups:"그룹",mentors:"멘토"},searchPlaceholder:"메시지 검색...",nav:{messages:"메시지",tickerX:"TickerX",rooms:"룸"},selectConversation:"대화를 선택하여 채팅 시작"}
2,community:{title:"트레이딩 커뮤니티",subtitle:"인사이트 공유 • 트레이더에게 배우기 • 함께 성장",marketOpen:"장 개장",marketClosed:"장 마감",finishCoachingToPost:"게시하려면 코칭 완료",shareYourTrade:"거래 공유",leaderboard:"리더보드",rankedByPnl:"손익 순위",tabs:{feed:"피드"}},feedback:{titlePart1:"피드백",titlePart2:"루프",subtitle:"Redline의 미래를 만들어가세요",liveRoadmap:"실시간 로드맵 · 모든 제출을 읽습니다",stats:{submitted:"제출됨",implemented:"구현됨",upvotes:"찬성",rank:"순위"},moreToNext:"{{next}}까지 {{count}}개 더",tabs:{submit:"제출",browse:"둘러보고 투표",browseShort:"둘러보기",roadmap:"로드맵",admin:"관리자",adminPanel:"관리자 패널"},shareTitle:"피드백 공유",shareSubtitle:"당신의 아이디어가 Redline을 만듭니다",typeQuestion:"어떤 종류의 피드백입니까?"},news:{title:"뉴스",searchTickerPlaceholder:"티커 검색...",askJeffAnything:"Jeff에게 물어보세요",multiAiPowered:"멀티 AI 기반",chatAboutTrades:"거래, 기회, 시장 상황에 대해 Jeff와 채팅",chatPersonalMentor:"프로필에 완전한 액세스 권한이 있는 개인 트레이딩 멘토",liveMarketData:"실시간 시장 데이터"},profile:{traderRank:"트레이더 등급",next:"다음:",traderSubtitle:"{{level}} 트레이더",profitable:"수익성",developing:"개발 중",totalPnl:"총 손익",totalProfitGenerated:"생성된 총 수익",totalLossIncurred:"발생한 총 손실",traderLevel:"트레이더 레벨",tiers:{rookie:"루키",silver:"실버",gold:"골드",platinum:"플래티넘",diamond:"다이아몬드",legend:"레전드"}}}},ru:{translation:{nav:{home:"Главная",today:"Сегодня",ledger:"Журнал",analytics:"Аналитика",agent:"Агент",agentStudio:"Студия агента",learn:"Обучение",chat:"Чат",more:"Ещё",notifications:"Уведомления",tradingContext:"Торговый контекст",community:"Сообщество",feedback:"Отзывы",browseFirms:"Обзор фирм",upgrade:"Улучшить"},common:{save:"Сохранить",cancel:"Отмена",confirm:"Подтвердить",edit:"Изменить",delete:"Удалить",close:"Закрыть",back:"Назад",next:"Далее",done:"Готово",skip:"Пропустить",continue:"Продолжить",letsGo:"Поехали",loading:"Загрузка…",error:"Ошибка",success:"Успешно",apply:"Применить",reset:"Сбросить",search:"Поиск",yes:"Да",no:"Нет"},settings:{title:"Настройки",subtitle:"Управляйте торговыми настройками и безопасностью аккаунта",appearance:"Внешний вид",language:"Язык",languageDesc:"Выберите предпочтительный язык. Применяется мгновенно — работает на мобильном и iOS без перезагрузки.",theme:"Тема",themePreference:"Профессиональная система тем",themeDesc:"Наша система тем разработана для профессиональных трейдеров с плавными переходами, соответствием доступности и оптимизированной производительностью для всех элементов.",lightMode:"Светлая тема",darkMode:"Тёмная тема",notifications:"Уведомления",account:"Аккаунт",applyLanguage:"Применить язык",resetToEnglish:"Сбросить на английский",currentLanguage:"Текущий язык",searchLanguage:"Найти язык…",changesAutosaved:"Изменения сохраняются автоматически",tabs:{appearance:"Внешний вид",riskRules:"Правила риска",integrations:"Интеграции",notifications:"Уведомления",security:"Безопасность",support:"Поддержка",referral:"Рефералы"}},market:{open:"Открыт",closed:"Закрыт",premarket:"Предбиржевой",afterhours:"После закрытия",weekend:"Выходные",regular:"Основная сессиÑ
2"},trading:{trade:"Сделка",trades:"Сделки",profit:"Прибыль",loss:"Убыток",winRate:"Процент успеха",pnl:"П/У",entry:"Вход",exit:"Выход",size:"Объём",setup:"Стратегия",notes:"Заметки"},today:{goodMorning:"Доброе утро",goodAfternoon:"Добрый день",goodEvening:"Добрый вечер",todaysFocus:"Фокус дня",confirmFocus:"Подтвердить фокус",yesFocused:"Да, я сосредоточен",noActiveIssues:"Нет активных проблем.",stayDisciplined:"Сохраняйте дисциплину"},enforcement:{cooldown:"Кулдаун",locked:"Заблокировано",warn:"Предупреждение",cooldownActive:"Кулдаун активен",remaining:"осталось",tradingPaused:"Торговля приостановлена"},dashboard:{welcome:"Добро пожаловать, {{name}}",quickActions:"Быстрые действия",loadingDashboard:"Загрузка панели…",actions:{startSession:"Начать сессию",ledger:"Журнал",watchlist:"Список наблюдения",analytics:"Аналитика",learn:"Обучение",ideaHub:"Центр идей",chat:"Чат",agent:"Агент"},stats:{todaysPnl:"П/У сегодня",thisWeek:"На этой неделе",totalPnl:"Общий П/У",winRate:"Процент побед",profitFactor:"Профит-фактор",winStreak:"Серия побед",noTradesToday:"Сегодня сделок нет",tradesCount:"{{count}} сделок",totalTrades:"Всего {{count}} сделок",consecutiveWins:"Побед подряд",consecutiveLosses:"Поражений подряд",excellent:"Отлично",profitable:"Прибыльно",needsWork:"Требует работы",logTradesToSee:"Записывайте сделки, чтобы увидеть"}},onboarding:{progress:{personalize:"Персонализация",connect:"Подключение",activate:"Активация"},steps:{language:{title:"Выберите язык",subtitle:"Redline будет использовать его везде — можно сменить позже в Настройках."},welcome:{title:"Добро пожаловать в Redline",subtitle:"Две минуты, чтобы персонализировать вашу систему дисциплины."},profile:{title:"О вас",subtitle:"Выберите путь, соответствующий вашему стилю торговли."},goal:{title:"Зачем вы здесь?",subtitle:"Ваша цель определяет, какие правила мы рекомендуем."},propfirm:{title:"С какой фирмой работаете?",subtitle:"Мы отражаем их опубликованные правила в ваших ограждениях."},risk:{title:"Настройте ограждения",subtitle:"Это правила, которые Redline применяет автоматически."},broker:{title:"Подключите брокера",subtitle:"Автоматический импорт сделок для удобного журналирования."},appLock:{title:"Блокировка приложений брокера",subtitle:"Необязательно — только iOS. Блокирует приложения при нарушении правила."},plan:{title:"Выберите план",subtitle:"Начните бесплатно или разблокируйте полного коуча."},orgJoin:{title:"Присоединиться к команде",subtitle:"Используйте код приглашения от вашего наставника."},orgCreate:{title:"Создайте свою команду",subtitle:"Вы сможете пригласить подопечных сразу после."},firstAction:{title:"Сделайте первый шаг",subtitle:"Реальная или бумажная сделка — подойдёт любая."}}},analytics:{totalPnl:"Общий П/У",winRate:"Процент успеха",trades:"Сделки",profitFactor:"Профит-фактор",discipline:"Дисциплина",tradeDna:"ДНК Трейдинга",tradeDnaSubtitle:"Ваш уникальный торговый отпечаток",traderLabel:"Трейдер уровня {{level}}",analysisWindow:"Окно анализа:",tabs:{overview:"Обзор",performance:"Результаты",patterns:"Паттерны",execution:"Исполнение",risk:"Риск",psychology:"Психология"},levels:{beginner:"Начинающий",intermediate:"Средний",advanced:"Продвинутый",expert:"Эксперт"}},agent:{studio:"Студия агента",liveCount:"{{count}} активных",tagline:"Изучайте свой стиль. Торгуйте как вы.",onboarding:"Введение",apiDocs:"Документация API",apiKeys:"Ключи API",council:"Совет",councilAll:"Все трое вместе",myBots:"Мои боты",fromBacktests:"Из ваших бэктестов",provisioning:"Подготовка ваших агентов…",settingUp:"Настройка агента…",chat:"Чат",agentInfo:"Инфо об агенте",pipeline:"Пайплайн",shareChart:"Ctrl+V чтобы поделиться графиком"},education:{sections:{dashboard:"Панель",videos:"Видео",courses:"Курсы",books:"Книги",glossary:"Глоссарий",strategies:"Стратегии",psychology:"Психология"},descriptions:{},yourProgress:"Ваш прогресс",dayStreak:"Серия {{count}} дн.",videos:"Видео",learned:"Изучено",courses:"Курсы",hours:"Часы",streak:"Серия",searchPlaceholder:"Поиск…"},chat:{tabs:{direct:"Личные",groups:"Группы",mentors:"Менторы"},searchPlaceholder:"Поиск сообщений...",nav:{messages:"Сообщения",tickerX:"TickerX",rooms:"Комнаты"},selectConversation:"Выберите диалог для начала чата"},community:{title:"Сообщество трейдеров",subtitle:"Делитесь инсайтами • Учитесь у трейдеров • Растите вместе",marketOpen:"Рынок открыт",marketClosed:"Рынок закрыт",finishCoachingToPost:"Завершите коучинг, чтобы опубликовать",shareYourTrade:"Поделиться сделкой",leaderboard:"Таблица лидеров",rankedByPnl:"Сортировка по П&У",tabs:{feed:"Лента"}},feedback:{titlePart1:"Цикл",titlePart2:"Обратной связи",subt
2itle:"Формируйте будущее Redline",liveRoadmap:"Живой роадмап · Мы читаем каждое предложение",stats:{submitted:"Отправлено",implemented:"Реализовано",upvotes:"Голоса",rank:"Ранг"},moreToNext:"Ещё {{count}} до {{next}}",tabs:{submit:"Отправить",browse:"Обзор и голосование",browseShort:"Обзор",roadmap:"Роадмап",admin:"Админ",adminPanel:"Админ-панель"},shareTitle:"Поделитесь отзывом",shareSubtitle:"Ваши идеи формируют Redline",typeQuestion:"Какой тип отзыва?"},news:{title:"Новости",searchTickerPlaceholder:"Поиск тикера...",askJeffAnything:"Спросите Джеффа",multiAiPowered:"Мульти-ИИ",chatAboutTrades:"Обсудите с Джеффом ваши сделки, возможности и контекст рынка",chatPersonalMentor:"Ваш личный торговый ментор с полным доступом к вашему профилю",liveMarketData:"Живые рыночные данные"},profile:{traderRank:"Ранг трейдера",next:"Далее:",traderSubtitle:"Трейдер уровня {{level}}",profitable:"ПРИБЫЛЬНЫЙ",developing:"РАЗВИВАЮЩИЙСЯ",totalPnl:"Общий П&У",totalProfitGenerated:"Общая полученная прибыль",totalLossIncurred:"Общий понесённый убыток",traderLevel:"Уровень трейдера",tiers:{rookie:"Новичок",silver:"Серебро",gold:"Золото",platinum:"Платина",diamond:"Бриллиант",legend:"Легенда"}}}},hi:{translation:{nav:{home:"होम",today:"आज",ledger:"लेजर",analytics:"विश्लेषण",agent:"एजेंट",agentStudio:"एजेंट स्टूडियो",learn:"सीखें",chat:"चैट",more:"और",notifications:"सूचनाएं",tradingContext:"ट्रेडिंग संदर्भ",community:"समुदाय",feedback:"फ़ीडबैक",browseFirms:"फर्म ब्राउज़ करें",upgrade:"अपग्रेड"},common:{save:"सहेजें",cancel:"रद्द करें",confirm:"पुष्टि करें",edit:"संपादित करें",delete:"हटाएं",close:"बंद करें",back:"वापस",next:"अगला",done:"पूर्ण",skip:"छोड़ें",continue:"जारी रखें",letsGo:"चलिए",loading:"लोड हो रहा है…",error:"त्रुटि",success:"सफलता",apply:"लागू करें",reset:"रीसेट",search:"खोजें",yes:"हाँ",no:"नहीं"},settings:{title:"सेटिंग्स",subtitle:"अपनी ट्रेडिंग प्राथमिकताएं और खाता सुरक्षा प्रबंधित करें",appearance:"दिखावट",language:"भाषा",languageDesc:"अपनी पसंदीदा भाषा चुनें। तुरंत लागू — मोबाइल और iOS पर बिना रीलोड के काम करता है।",theme:"थीम",themePreference:"प्रोडक्शन-ग्रेड थीम सिस्टम",themeDesc:"हमारा थीम सिस्टम पेशेवर ट्रेडर्स के लिए सहज ट्रांज़िशन, पहुंच अनुपालन और सभी तत्वों के लिए अनुकूलित प्रदर्शन के साथ डिज़ाइन किया गया है।",lightMode:"लाइट मोड",darkMode:"डार्क मोड",notifications:"सूचनाएं",account:"खाता",applyLanguage:"भाषा लागू करें",resetToEnglish:"अंग्रेज़ी पर रीसेट करें",currentLanguage:"वर्तमान भाषा",searchLanguage:"भाषा खोजें…",changesAutosaved:"परिवर्तन स्वचालित रूप से सहेजे जाते हैं",tabs:{appearance:"दिखावट",riskRules:"जोखिम नियम",integrations:"एकीकरण",notifications:"सूचनाएं",security:"सुरक्षा",support:"समर्थन",referral:"रेफरल"}},market:{open:"खुला",closed:"बंद",premarket:"प्री-मार्केट",afterhours:"आफ्टर-आवर्स",weekend:"सप्ताहांत",regular:"नियमित"},trading:{trade:"ट्रेड",trades:"ट्रेड",profit:"लाभ",loss:"हानि",winRate:"जीत दर",pnl:"लाभ/हाà
2¤¨à¤¿",entry:"प्रवेश",exit:"निकास",size:"आकार",setup:"सेटअप",notes:"नोट्स"},today:{goodMorning:"सुप्रभात",goodAfternoon:"नमस्ते",goodEvening:"शुभ संध्या",todaysFocus:"आज का फोकस",confirmFocus:"फोकस की पुष्टि करें",yesFocused:"हाँ, मैं केंद्रित हूँ",noActiveIssues:"कोई सक्रिय समस्या नहीं।",stayDisciplined:"अनुशासित रहें"},enforcement:{cooldown:"कूलडाउन",locked:"लॉक्ड",warn:"चेतावनी",cooldownActive:"कूलडाउन सक्रिय",remaining:"शेष",tradingPaused:"ट्रेडिंग रुकी हुई है"},dashboard:{welcome:"स्वागत है, {{name}}",quickActions:"त्वरित कार्य",loadingDashboard:"डैशबोर्ड लोड हो रहा है…",actions:{startSession:"सत्र शुरू करें",ledger:"लेजर",watchlist:"वॉचलिस्ट",analytics:"विश्लेषण",learn:"सीखें",ideaHub:"आइडिया हब",chat:"चैट",agent:"एजेंट"},stats:{todaysPnl:"आज का लाभ/हानि",thisWeek:"इस सप्ताह",totalPnl:"कुल लाभ/हानि",winRate:"जीत दर",profitFactor:"लाभ कारक",winStreak:"जीत की लकीर",noTradesToday:"आज कोई ट्रेड नहीं",tradesCount:"{{count}} ट्रेड",totalTrades:"कुल {{count}} ट्रेड",consecutiveWins:"लगातार जीत",consecutiveLosses:"लगातार हार",excellent:"उत्कृष्ट",profitable:"लाभदायक",needsWork:"सुधार आवश्यक",logTradesToSee:"देखने के लिए ट्रेड दर्ज करें"}},onboarding:{progress:{personalize:"व्यक्तिगत करें",connect:"कनेक्ट करें",activate:"सक्रिय करें"},steps:{language:{title:"अपनी भाषा चुनें",subtitle:"Redline इसे हर जगह उपयोग करेगा — आप इसे बाद में सेटिंग्स में बदल सकते हैं।"},welcome:{title:"Redline में आपका स्वागत है",subtitle:"अपने अनुशासन सिस्टम को व्यक्तिगत करने के लिए दो मिनट।"},profile:{title:"आपके बारे में",subtitle:"अपनी ट्रेडिंग शैली से मेल खाने वाला रास्ता चुनें।"},goal:{title:"आप यहाँ क्यों हैं?",subtitle:"आपका लक्ष्य तय करता है कि हम कौन से नियम सुझाएंगे।"},propfirm:{title:"किस फर्म के साथ ट्रेड करते हैं?",subtitle:"हम उनके प्रकाशित नियमों को आपके गार्डरेल्स में दर्शाते हैं।"},risk:{title:"अपने गार्डरेल्स सेट करें",subtitle:"ये वे नियम हैं जिन्हें Redline स्वचालित रूप से लागू करता है।"},broker:{title:"ब्रोकर कनेक्ट करें",subtitle:"आपके ट्रेड्स को स्वचालित रूप से आयात करता है ताकि जर्नलिंग आसान हो।"},appLock:{title:"ब्रोकर ऐप्स लॉक करें",subtitle:"वैकल्पिक — केवल iOS। नियम टूटने पर ब्रोकर ऐप्स ब्लॉक करता है।"},plan:{title:"अपनी योजना चुनें",subtitle:"मु
2फ़्त शुरू करें या पूर्ण कोच अनलॉक करें।"},orgJoin:{title:"अपने डेस्क से जुड़ें",subtitle:"अपने मेंटर द्वारा भेजा गया आमंत्रण कोड उपयोग करें।"},orgCreate:{title:"अपना डेस्क बनाएं",subtitle:"इसके तुरंत बाद आप मेंटीज़ को आमंत्रित कर सकते हैं।"},firstAction:{title:"अपनी पहली कार्रवाई करें",subtitle:"एक वास्तविक या पेपर ट्रेड — दोनों काम करते हैं।"}}},analytics:{totalPnl:"कुल लाभ/हानि",winRate:"जीत दर",trades:"ट्रेड",profitFactor:"लाभ कारक",discipline:"अनुशासन",tradeDna:"ट्रेड डीएनए",tradeDnaSubtitle:"आपकी अनूठी ट्रेडिंग छाप",traderLabel:"{{level}} ट्रेडर",analysisWindow:"विश्लेषण विंडो:",tabs:{overview:"अवलोकन",performance:"प्रदर्शन",patterns:"पैटर्न",execution:"निष्पादन",risk:"जोखिम",psychology:"मनोविज्ञान"},levels:{beginner:"शुरुआती",intermediate:"मध्यवर्ती",advanced:"उन्नत",expert:"विशेषज्ञ"}},agent:{studio:"एजेंट स्टूडियो",liveCount:"{{count}} सक्रिय",tagline:"अपनी शैली का अध्ययन करें। आप जैसी ट्रेड करें।",onboarding:"ऑनबोर्डिंग",apiDocs:"API दस्तावेज़",apiKeys:"API कुंजी",council:"काउंसिल",councilAll:"तीनों एक साथ",myBots:"मेरे बॉट",fromBacktests:"आपके बैकटेस्ट से",provisioning:"आपके एजेंट तैयार किए जा रहे हैं…",settingUp:"एजेंट सेट किया जा रहा है…",chat:"चैट",agentInfo:"एजेंट जानकारी",pipeline:"पाइपलाइन",shareChart:"चार्ट साझा करने के लिए Ctrl+V"},education:{sections:{dashboard:"डैशबोर्ड",videos:"वीडियो",courses:"पाठ्यक्रम",books:"पुस्तकें",glossary:"शब्दावली",strategies:"रणनीतियाँ",psychology:"मनोविज्ञान"},descriptions:{},yourProgress:"आपकी प्रगति",dayStreak:"{{count}} दिन की लकीर",videos:"वीडियो",learned:"सीखा",courses:"पाठ्यक्रम",hours:"घंटे",streak:"लकीर",searchPlaceholder:"खोजें…"},chat:{tabs:{direct:"सीधा",groups:"समूह",mentors:"à¤
2®à¥‡à¤‚टर"},searchPlaceholder:"संदेश खोजें...",nav:{messages:"संदेश",tickerX:"TickerX",rooms:"रूम"},selectConversation:"चैट शुरू करने के लिए वार्तालाप चुनें"},community:{title:"ट्रेडिंग समुदाय",subtitle:"अंतर्दृष्टि साझा करें • ट्रेडर्स से सीखें • साथ बढ़ें",marketOpen:"बाजार खुला",marketClosed:"बाजार बंद",finishCoachingToPost:"पोस्ट करने के लिए कोचिंग पूरी करें",shareYourTrade:"अपना ट्रेड साझा करें",leaderboard:"लीडरबोर्ड",rankedByPnl:"लाभ/हानि के अनुसार",tabs:{feed:"फ़ीड"}},feedback:{titlePart1:"फ़ीडबैक",titlePart2:"लूप",subtitle:"Redline का भविष्य आकार दें",liveRoadmap:"लाइव रोडमैप · हम हर सबमिशन पढ़ते हैं",stats:{submitted:"सबमिट किए गए",implemented:"लागू किए गए",upvotes:"अपवोट",rank:"रैंक"},moreToNext:"{{next}} तक {{count}} और",tabs:{submit:"सबमिट",browse:"ब्राउज़ और वोट",browseShort:"ब्राउज़",roadmap:"रोडमैप",admin:"व्यवस्थापक",adminPanel:"व्यवस्थापक पैनल"},shareTitle:"अपना फ़ीडबैक साझा करें",shareSubtitle:"आपके विचार Redline को आकार देते हैं",typeQuestion:"किस प्रकार का फ़ीडबैक?"},news:{title:"समाचार",searchTickerPlaceholder:"टिकर खोजें...",askJeffAnything:"Jeff से कुछ भी पूछें",multiAiPowered:"मल्टी-AI संचालित",chatAboutTrades:"Jeff से अपने ट्रेड, अवसरों और बाजार संदर्भ के बारे में बात करें",chatPersonalMentor:"आपकी प्रोफ़ाइल तक पूर्ण पहुंच वाला व्यक्तिगत ट्रेडिंग मेंटर",liveMarketData:"लाइव मार्केट डेटा"},profile:{traderRank:"ट्रेडर रैंक",next:"अगला:",traderSubtitle:"{{level}} ट्रेडर",profitable:"लाभदायक",developing:"विकासशील",totalPnl:"कुल लाभ/हानि",totalProfitGenerated:"कुल लाभ उत्पन्न",totalLossIncurred:"कुल हानि हुई",traderLevel:"ट्रेडर स्तर",tiers:{rookie:"नौसिखिया",silver:"सिल्वर",gold:"गोल्ड",platinum:"प्लेटिनम",diamond:"डायमंड",legend:"लीजेंड"}}}},tr:{translation:{nav:{home:"Ana Sayfa",today:"Bugün",ledger:"Defter",analytics:"Analitik",agent:"Ajan",agentStudio:"Ajan Stüdyosu",learn:"Öğren",chat:"Sohbet",more:"Daha fazla",notifications:"Bildirimler",tradingContext:"İşlem Bağlamı",community:"Topluluk",feedback:"Geri Bildirim",browseFirms:"Firmaları Keşfet",upgrade:"Yükselt"},common:{save:"Kaydet",cancel:"İptal",confirm:"Onayla",edit:"Düzenle",delete:"Sil",close:"Kapat",back:"Geri",next:"İleri",done:"Tamam",skip:"Atla",continue:"Devam",letsGo:"Başlayalım",loading:"Yükleniyor…",error:"Hata",success:"Başarılı",apply:"Uygula",reset:"Sıfırla",search:"Ara",yes:"Evet",no:"Hayır"},settings:{title:"Ayarlar",subtitle:"İşlem tercihlerinizi ve hesap güvenliğinizi yönetin",appearance:"Görünüm",language:"Dil",languageDesc:"Tercih ettiğiniz dili seçin. Anında uygulanır — mobil ve iOS uygulamasında yeniden yükleme gerekmez.",theme:"Tema",themePreference:"Üretim Sınıfı Tema Sistemi",themeDesc:"Tema sistemimiz, kesintisiz geçişler, erişilebilirlik uyumluluğu ve tüm öğeler için optimize edilmiş performansla profesyonel traderlar için tasarlandı.",lightMode:"Açık Mod",darkMode:"Koyu Mod",notifications:"Bildirimler",account:"Hesap",applyLanguage:"Dili Uygula",resetToEnglish:"İngilizce'ye Sıfırla",currentLanguage:"Mevcut dil",searchLanguage:"Dil ara…",changesAutosaved:"Değişiklikler otomatik olarak kaydedilir",tabs:{appearance:"Görünüm",riskRules:"Risk Kuralları",integrations:"Entegrasyonlar",notifications:"Bildirimler",security:"Güvenlik",supp
2ort:"Destek",referral:"Tavsiye"}},market:{open:"Açık",closed:"Kapalı",premarket:"Piyasa öncesi",afterhours:"Piyasa sonrası",weekend:"Hafta sonu",regular:"Normal"},trading:{trade:"İşlem",trades:"İşlemler",profit:"Kâr",loss:"Zarar",winRate:"Başarı oranı",pnl:"K/Z",entry:"Giriş",exit:"Çıkış",size:"Boyut",setup:"Kurulum",notes:"Notlar"},today:{goodMorning:"Günaydın",goodAfternoon:"İyi günler",goodEvening:"İyi akşamlar",todaysFocus:"Günün Odağı",confirmFocus:"Odağı Onayla",yesFocused:"Evet, odaklandım",noActiveIssues:"Aktif sorun yok.",stayDisciplined:"Disiplinli kalın"},enforcement:{cooldown:"Bekleme",locked:"Kilitli",warn:"Uyarı",cooldownActive:"Bekleme aktif",remaining:"kaldı",tradingPaused:"İşlem duraklatıldı"},dashboard:{welcome:"Hoş geldiniz, {{name}}",quickActions:"Hızlı işlemler",loadingDashboard:"Panel yükleniyor…",actions:{startSession:"Oturumu başlat",ledger:"Defter",watchlist:"İzleme listesi",analytics:"Analitik",learn:"Öğren",ideaHub:"Fikir merkezi",chat:"Sohbet",agent:"Ajan"},stats:{todaysPnl:"Bugünkü K&Z",thisWeek:"Bu hafta",totalPnl:"Toplam K&Z",winRate:"Kazanma oranı",profitFactor:"Kâr faktörü",winStreak:"Galibiyet serisi",noTradesToday:"Bugün işlem yok",tradesCount:"{{count}} işlem",totalTrades:"Toplam {{count}} işlem",consecutiveWins:"Üst üste galibiyet",consecutiveLosses:"Üst üste kayıp",excellent:"Mükemmel",profitable:"Kârlı",needsWork:"İyileştirme gerek",logTradesToSee:"Görmek için işlem kaydedin"}},onboarding:{progress:{personalize:"Kişiselleştir",connect:"Bağlan",activate:"Etkinleştir"},steps:{language:{title:"Dilinizi seçin",subtitle:"Redline bunu her yerde kullanacak — Ayarlardan sonra değiştirebilirsiniz."},welcome:{title:"Redline'a hoş geldiniz",subtitle:"Disiplin sisteminizi kişiselleştirmek için iki dakika."},profile:{title:"Sizin hakkınızda",subtitle:"İşlem stilinize uygun yolu seçin."},goal:{title:"Neden buradasınız?",subtitle:"Hedefiniz hangi kuralları önereceğimizi belirler."},propfirm:{title:"Hangi firmadasınız?",subtitle:"Yayımlanan kuralları korumalarınıza yansıtırız."},risk:{title:"Korumalarınızı belirleyin",subtitle:"Redline'ın otomatik uyguladığı kurallardır."},broker:{title:"Broker bağlayın",subtitle:"İşlemlerinizi otomatik içe aktarır, kayıt tutmayı kolaylaştırır."},appLock:{title:"Broker uygulamalarını kilitle",subtitle:"İsteğe bağlı — yalnızca iOS. Kural ihlalinde uygulamaları engeller."},plan:{title:"Planınızı seçin",subtitle:"Ücretsiz başlayın veya tam koçu açın."},orgJoin:{title:"Masanıza katılın",subtitle:"Mentörünüzün gönderdiği davet kodunu kullanın."},orgCreate:{title:"Masanızı oluşturun",subtitle:"Hemen ardından menteeleri davet edebilirsiniz."},firstAction:{title:"İlk işleminizi yapın",subtitle:"Gerçek veya kağıt işlem — her ikisi de olur."}}},analytics:{totalPnl:"Toplam K/Z",winRate:"Kazanma oranı",trades:"İşlemler",profitFactor:"Kâr faktörü",discipline:"Disiplin",tradeDna:"İşlem DNA",tradeDnaSubtitle:"Benzersiz işlem parmak iziniz",traderLabel:"{{level}} Trader",analysisWindow:"Analiz penceresi:",tabs:{overview:"Genel bakış",performance:"Performans",patterns:"Desenler",execution:"Yürütme",risk:"Risk",psychology:"Psikoloji"},levels:{beginner:"Başlangıç",intermediate:"Orta",advanced:"İleri",expert:"Uzman"}},agent:{studio:"Ajan Stüdyosu",liveCount:"{{count}} aktif",tagline:"Stilinizi inceleyin. Siz gibi işlem yapın.",onboarding:"Tanışma",apiDocs:"API Belgeleri",apiKeys:"API Anahtarları",council:"Konsey",councilAll:"Üçü birlikte",myBots:"Botlarım",fromBacktests:"Backtest'lerinizden",provisioning:"Ajanlarınız hazırlanıyor…",settingUp:"Ajan ayarlanıyor…",chat:"Sohbet",agentInfo:"Ajan Bilgisi",pipeline:"Hat",shareChart:"Grafik payla
2şmak için Ctrl+V"},education:{sections:{dashboard:"Panel",videos:"Videolar",courses:"Kurslar",books:"Kitaplar",glossary:"Sözlük",strategies:"Stratejiler",psychology:"Psikoloji"},descriptions:{},yourProgress:"İlerlemeniz",dayStreak:"{{count}} gün serisi",videos:"Videolar",learned:"Öğrenilen",courses:"Kurslar",hours:"Saatler",streak:"Seri",searchPlaceholder:"Ara…"},chat:{tabs:{direct:"Direkt",groups:"Gruplar",mentors:"Mentorlar"},searchPlaceholder:"Mesaj ara...",nav:{messages:"Mesajlar",tickerX:"TickerX",rooms:"Odalar"},selectConversation:"Sohbete başlamak için bir konuşma seçin"},community:{title:"Trading Topluluğu",subtitle:"İçgörü paylaşın • Traderlardan öğrenin • Birlikte büyüyün",marketOpen:"Piyasa Açık",marketClosed:"Piyasa Kapalı",finishCoachingToPost:"Paylaşmak için koçluğu tamamlayın",shareYourTrade:"İşleminizi Paylaşın",leaderboard:"Liderlik Tablosu",rankedByPnl:"K&Z'ye göre sıralandı",tabs:{feed:"Akış"}},feedback:{titlePart1:"Geri Bildirim",titlePart2:"Döngüsü",subtitle:"Redline'ın geleceğini şekillendirin",liveRoadmap:"Canlı yol haritası · Her gönderiyi okuyoruz",stats:{submitted:"Gönderildi",implemented:"Uygulandı",upvotes:"Oylar",rank:"Sıra"},moreToNext:"{{next}} için {{count}} daha",tabs:{submit:"Gönder",browse:"Gözat ve Oyla",browseShort:"Gözat",roadmap:"Yol Haritası",admin:"Yönetici",adminPanel:"Yönetici Paneli"},shareTitle:"Geri bildiriminizi paylaşın",shareSubtitle:"Fikirleriniz Redline'ı şekillendirir",typeQuestion:"Ne tür bir geri bildirim?"},news:{title:"Haberler",searchTickerPlaceholder:"Ticker ara...",askJeffAnything:"Jeff'e Her Şeyi Sor",multiAiPowered:"Çoklu-YZ Destekli",chatAboutTrades:"Jeff ile işlemleriniz, fırsatlarınız ve piyasa bağlamı hakkında sohbet edin",chatPersonalMentor:"Profilinize tam erişimi olan kişisel trading mentorunuz",liveMarketData:"Canlı Piyasa Verileri"},profile:{traderRank:"Trader Sıralaması",next:"Sonraki:",traderSubtitle:"{{level}} Trader",profitable:"KÂRLI",developing:"GELİŞMEKTE",totalPnl:"Toplam K&Z",totalProfitGenerated:"Toplam Üretilen Kâr",totalLossIncurred:"Toplam Uğranan Zarar",traderLevel:"Trader Seviyesi",tiers:{rookie:"Çaylak",silver:"Gümüş",gold:"Altın",platinum:"Platin",diamond:"Elmas",legend:"Efsane"}}}}},Ot=new Set(["ar","he","fa","ur"]);function be(t){try{if(typeof document>"u")return;const e=String(t||"en").split("-")[0].toLowerCase();document.documentElement.lang=e,document.documentElement.dir=Ot.has(e)?"rtl":"ltr"}catch{}}S.use(rt).init({resources:_t,lng:Je,fallbackLng:"en",defaultNS:"translation",interpolation:{escapeValue:!1},load:"languageOnly",react:{useSuspense:!1}});be(Je);S.on("languageChanged",be);function Dt(t){S.changeLanguage(t);try{localStorage.setItem("appLanguage",t)}catch{}be(t)}var Nt=()=>{const t=[],e=[],a=[];return t.forEach(r=>{const i={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1,VITE_BUNNY_STREAM_CDN_HOSTNAME:"",VITE_BUNNY_STREAM_LIBRARY_ID:"",VITE_CLOUDINARY_API_KEY:"792168997276235",VITE_CLOUDINARY_AUTO_CHAPTERS:"false",VITE_CLOUDINARY_AUTO_TRANSCRIPTION:"false",VITE_CLOUDINARY_CLOUD_NAME:"dcn9lwlnl",VITE_CLOUDINARY_CURRICULUM_FOLDER:"education/curriculum",VITE_CLOUDINARY_DEFAULT_QUALITY:"auto",VITE_CLOUDINARY_EDUCATION_FOLDER:"education",VITE_CLOUDINARY_FOLDER_PROTECTION:"true",VITE_CLOUDINARY_HD_SIZE:"1280x720",VITE_CLOUDINARY_MAX_FILE_SIZE:"104857600",VITE_CLOUDINARY_PATTERNS_FOLDER:"education/patterns",VITE_CLOUDINARY_PREVIEW_SIZE:"640x480",VITE_CLOUDINARY_RESOURCES_FOLDER:"education/resources",VITE_CLOUDINARY_SECURE_DELIVERY:"true",VITE_CLOUDINARY_SIGNED_UPLOADS:"true",VITE_CLOUDINARY_THUMBNAIL_SIZE:"400x300",VITE_CLOUDINARY_UPLOAD_PRESET:"education_videos",VITE_CLOUDINARY_VIDEO_ANALYSIS:"false",VITE_CLOUDINARY_WEBHOOK_URL:"https://TradeIntelX.com/api/cloudinary-webhook",VITE_FIREBASE_API_KEY:"AIzaSyBKmutM0ialeKxZvGaKx56rISFCKpBdmf4",VITE_FIREBASE_APPCHECK_RECAPTCHA_ENTERPRISE_SITE_KEY:"6Ldgr1otAAAAAMmGTScAjg_dV6RryIOFI8uoS4_b",VITE_FIREBASE_APP_ID:"1:788757341214:web:7c3644d2c33d975cf5fa0f",VITE_FIREBASE_AUTH_DOMAIN:"tradeintelx.com",VITE_FIREBASE_MESSAGING_SENDER_ID:"788757341214",VITE_FIREBASE_PROJECT_ID:"tradeintexd",VITE_FIREBASE_STORAGE_BUCKET:"tradeintexd.firebasestorage.app",VITE_FIREBASE_VAPID_KEY:"BDSH9vbHuJvu6JaHv8q7zAdKrYUDtj4yJ0nEsXY3m5URM8xE8p-mdb0tUqI36M6ZJwzcxxqh4-0l5jw8iVr0q3M",VITE_FUNCTIONS_BASE_URL:"https://us-central1-tradeintexd.cloudfunctions.net",VITE_POSTHOG_HOST:"https://us.i.posthog.com",VITE_POSTHOG_KEY:"phc_vHUP4AhtyuGUdQ2TxcKhwbuXz4rSVQDXBGHVNP67fjcN",VITE_SCHWAB_CLIENT_ID:"94GerGJLoAtjijuEluYSmPrQ998MTOc0",VITE_SCHWAB_REDIRECT_URI:"https://tradeintelx.com/callback",VITE_STRIPE_ELITE_ANNUAL_PRICE_ID:"price_1TSRzREutrlrWeRrQutiWcRs",VITE_STRIPE_ELITE_PRICE_ID:"price_1TPAzWEutrlrWeRrjpFWu58F",VITE_STRIPE_ELITE_PRODUCT_ID:"prod_UMnSzHgdPhQSsP",VITE_STRIPE_ORG_BROKERAGE_PRICE_ID:"price_1TskViEutrlrWeRrQh77F74S",VITE_STRIPE_ORG_BROKERAGE_PRODUCT_ID:"prod_UsVWjoaIqmu1d7",VITE_STRIPE_ORG_EDUCATOR_GROWTH_PRICE_ID:"price_1TskVkEutrlrWeRryK7ZbVd0",VITE_STRIPE_ORG_EDUCATOR_GROWTH_PRODUCT_ID:"prod_UsVWqOMdBoAGV3",VITE_STRIPE_ORG_EDUCATOR_SCALE_PRICE_ID:"price_1TskVlEutrlrWeRrf1RSddHc",VITE_STRIPE_ORG_EDUCATOR_SCALE_PRODUCT_ID:"prod_UsVWf8n0W3WCh8",VITE_STRIPE_ORG_EDUCATOR_STARTER_PRICE_ID:"price_1TskVjEutrlrWeRrMEZnwE7z",VITE_STRIPE_ORG_EDUCATOR_STARTER_PRODUCT_ID:"prod_UsVWlnZLOgV5YO",VITE_STRIPE_ORG_PROP_FIRM_PRICE_ID:"price_1TskVgEutrlrWeRrbLNgn
2BVH",VITE_STRIPE_ORG_PROP_FIRM_PRODUCT_ID:"prod_UsVWF5rs0Natw8",VITE_STRIPE_ORG_RIA_PRICE_ID:"price_1TskVmEutrlrWeRru4rcaVru",VITE_STRIPE_ORG_RIA_PRODUCT_ID:"prod_UsVWoi5qVOLWWI",VITE_STRIPE_PRO_ANNUAL_PRICE_ID:"price_1TSRwtEutrlrWeRrOU6kb5mC",VITE_STRIPE_PRO_PRICE_ID:"price_1TPAykEutrlrWeRrhhxJEhAk",VITE_STRIPE_PRO_PRODUCT_ID:"prod_UMnSx7Ncp5qCYc",VITE_STRIPE_PUBLISHABLE_KEY:"pk_live_51TPASiEutrlrWeRrRvhP2UisgMV8VGLICrNDrcmnklzVfbxFHSbWM6Zb3pbEPjmUB9mvFuEjGryruYbb5cSnKjMe00FNfRiqIz",VITE_TENOR_API_KEY:"AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ",VITE_TRADELOCKER_REST_ENDPOINT:"https://demo.tradelocker.com",VITE_TRADELOCKER_WS_ENDPOINT:"https://demo.tradelocker.com",VITE_USE_ACCOUNT_STATE_ORCHESTRATOR:"true"}[r];!i||i.trim()===""?e.push(r):a.push({name:r,hasValue:!0,preview:i.substring(0,8)+"..."})}),{isValid:e.length===0,missing:e,present:a,summary:`${a.length}/${t.length} API keys configured`}},Na=()=>{const t=Nt();return t.isValid?console.log("✅ All API keys configured:",t.summary):(console.warn("⚠️ Missing API Keys:",t.missing),console.log("Add these to your .env file:"),t.missing.forEach(e=>{console.log(`${e}=your_api_key_here`)})),t},ee=new Map,ye=!1,j=null,Qe=()=>{let t=0;ee.forEach((e,a)=>{if(e.scope==="route"){try{e.unsubscribe(),t++}catch{}ee.delete(a)}}),t>0&&console.log(`[NavPerf] Cleaned up ${t} route listeners`)},Me=()=>{ee.forEach((t,e)=>{try{t.unsubscribe()}catch{}}),ee.clear(),console.log("[NavPerf] All listeners cleaned up")},Fa=()=>{ye=!0,j&&clearTimeout(j),j=setTimeout(()=>{ye=!1},3e3)},Ma=()=>{ye=!1,j&&(clearTimeout(j),j=null)},de=!1,Ft=()=>{if("memory"in performance){const t=performance.memory;if(t.usedJSHeapSize/t.jsHeapSizeLimit>.9&&!de)return console.warn("[NavPerf] High memory pressure detected, cleaning up..."),de=!0,Qe(),"caches"in window&&caches.keys().then(e=>{e.forEach(a=>{(a.includes("image")||a.includes("media"))&&caches.delete(a)})}),setTimeout(()=>{de=!1},3e4),!0}return!1},Va=()=>{const t=setInterval(Ft,3e4),e=()=>{document.hidden&&Qe()};document.addEventListener("visibilitychange",e);const a=()=>{Me()};return window.addEventListener("beforeunload",a),()=>{clearInterval(t),document.removeEventListener("visibilitychange",e),window.removeEventListener("beforeunload",a),Me()}};typeof window<"u"&&(window.makeUserAdmin=async(t=null,e=null)=>{try{const a=se.currentUser;if(!a)return console.error("❌ No user is currently logged in"),!1;const r=t||a.email,i=e||a.uid;return!r||!i?(console.error("❌ Email and user ID are required"),!1):(console.log("🔄 Making user admin:",r),await nt(i,r,a.uid)?(console.log("✅ Admin access granted successfully!"),console.log("👤 User:",r),console.log("🔄 Please refresh the page to see changes"),!0):(console.log("❌ Failed to grant admin access"),!1))}catch(a){return console.error("❌ Error making user admin:",a),!1}},window.initializeFirstAdmin=async()=>{try{const t=se.currentUser;return t?(console.log("🔄 Initializing first admin..."),await st(t)?(console.log("✅ First admin initialized successfully!"),console.log("🔄 Please refresh the page to access admin panel"),!0):(console.log("⚠️ Admin already exists or initialization failed"),!1)):(console.error("❌ No user is currently logged in"),!1)}catch(t){return console.error("❌ Error initializing admin:",t),!1}},window.checkMyAdminStatus=async()=>{try{const t=se.currentUser;if(!t)return console.error("❌ No user is currently logged in"),!1;console.log("🔄 Checking admin status for:",t.email);const e=await ot(t.uid);return console.log(e?"✅ You are an admin!":"❌ You are not an admin"),e}catch(t){return console.error("❌ Error checking admin status:",t),!1}},window.adminHelp=()=>{console.log(`
3🔧 Admin Setup Functions:
4
51. Initialize First Admin (run this first):
6   → await window.initializeFirstAdmin()
7
82. Make Current User Admin:
9   → await window.makeUserAdmin()
10
113. Make Another User Admin:
12   → await window.makeUserAdmin('[email protected]', 'userUID')
13
144. Check Your Admin Status:
15   → await window.checkMyAdminStatus()
16
17📝 Instructions:
181. Make sure you're logged into your account
192. Open browser console (F12 → Console tab)
203. Run: await window.initializeFirstAdmin()
214. Refresh the page
225. Go to /admin in the URL
23
24🔒 Security Note:
25- Only the first user can initialize admin access
26- Additional admins must be granted by existing admins
27- Admin functions are only available in development
28    `)},console.log("🛡️ Admin Setup Functions Loaded!"),console.log("📖 Run window.adminHelp() for instructions"));var za={makeUserAdmin:window.makeUserAdmin,initializeFirstAdmin:window.initializeFirstAdmin,checkMyAdminStatus:window.checkMyAdminStatus,adminHelp:window.adminHelp},Mt={async forceSyncViolations(){try{const{useAuthStore:t}=await y(async()=>{const{useAuthStore:r}=await import("./chat-page-evUfHQgD.js").then(i=>i.gr);return{useAuthStore:r}},__vite__mapDeps([0,1,2,3])),e=t.getState().user?.uid;if(!e){console.error("❌ No user logged in");return}console.log("🔧 Force syncing violations for user:",e);const{syncUserViolationState:a}=await y(async()=>{const{syncUserViolationState:r}=await import("./education-page-vD6yUpCZ.js").then(i=>i.o);return{syncUserViolationState:r}},__vite__mapDeps([4,2,0,1,3,5,6,7]));await a(e),console.log("✅ Sync complete - banner should update within 2 seconds")}catch(t){console.error("❌ Sync failed:",t)}},async forceClearStaleViolations(){try{const{useAuthStore:t}=await y(async()=>{const{useAuthStore:l}=await import("./chat-page-evUfHQgD.js").then(u=>u.gr);return{useAuthStore:l}},__vite__mapDeps([0,1,2,3])),{doc:e,getDoc:a,updateDoc:r,serverTimestamp:i}=await y(async()=>{const{doc:l,getDoc:u,updateDoc:d,serverTimestamp:h}=await import("./chat-page-evUfHQgD.js").then(f=>f.fi);return{doc:l,getDoc:u,updateDoc:d,serverTimestamp:h}},__vite__mapDeps([0,1,2,3])),{db:n}=await y(async()=>{const{db:l}=await import("./chat-page-evUfHQgD.js").then(u=>u.Cr);return{db:l}},__vite__mapDeps([0,1,2,3])),o=t.getState().user?.uid;if(!o){console.error("❌ No user logged in");return}console.log("🔧 Force clearing stale violations from accountState...");const s=await a(e(n,"users",o,"educationProfile","data"));if(!s.exists()){console.error("❌ No education profile found");return}const c=s.data().violationCount??0;if(console.log("📚 educationProfile violationCount:",c),c>0){console.warn("⚠️ Education profile shows active violations. This fix is only for clearing stale accountState when educationProfile is clean.");return}await r(e(n,"accountState",o),{activeViolations:[],violationCount:0,state:"NORMAL",currentState:"NORMAL",requiresRemediation:!1,canTrade:!0,canLogTrades:!0,canStartSession:!0,canAccessAnalytics:!0,canPost:!0,blockedSurfaces:[],updatedAt:i(),syncSource:"admin_force_clear_stale"}),console.log("✅ Stale violations cleared from accountState"),console.log("🔄 Page should update within 2 seconds...")}catch(t){console.error("❌ Force clear failed:",t)}},async checkViolationState(){try{const{useAuthStore:t}=await y(async()=>{const{useAuthStore:m}=await import("./chat-page-evUfHQgD.js").then(k=>k.gr);return{useAuthStore:m}},__vite__mapDeps([0,1,2,3])),{useViolationEnforcementStore:e}=await y(async()=>{const{useViolationEnforcementStore:m}=await import("./chat-page-evUfHQgD.js").then(k=>k.Q);return{useViolationEnforcementStore:m}},__vite__mapDeps([0,1,2,3])),{doc:a,getDoc:r}=await y(async()=>{const{doc:m,getDoc:k}=await import("./chat-page-evUfHQgD.js").then(P=>P.fi);return{doc:m,getDoc:k}},__vite__mapDeps([0,1,2,3])),{db:i}=await y(async()=>{const{db:m}=await import("./chat-page-evUfHQgD.js").then(k=>k.Cr);return{db:m}},__vite__mapDeps([0,1,2,3])),n=t.getState().user?.uid;if(!n){console.error("❌ No user logged in");return}const o=e.getState();console.log("📊 ViolationEnforcementStore:",{violationCount:o.violations.length,activeViolations:o.activeViolations(),activePlan:o.activePlan});const s=await r(a(i,"accountState",n));if(s.exists()){const m=s.data();console.log("📄 accountState doc:",{state:m.state,activeViolations:m.activeViolations,syncSource:m.syncSource,updatedAt:m.updatedAt?.toDate?.()})}else console.log("📄 accountState doc: DOES NOT EXIST");const c=await r(a(i,"users",n,"educationProfile","data"));if(c.exists()){const m=c.data();console.log("📚 educationProfile:",{violationCount:m.violationCount,unresolved:m.unresolved,violationBaselineDate:m.violationBaselineDate?.toDate?.()})}const{collection:l,query:u,getDocs:d,where:h}=await y(async()=>{const{collection:m,query:k,getDocs:P,where:D}=await import("./chat-page-evUfHQgD.js").then(w=>
28w.fi);return{collection:m,query:k,getDocs:P,where:D}},__vite__mapDeps([0,1,2,3])),f=l(i,"users",n,"violations"),p=await d(f),v=await d(u(f,h("resolvedAt","==",null)));console.log("🔍 Violations collection:",{total:p.size,unresolved:v.size,docs:v.docs.map(m=>({id:m.id,code:m.data().code,resolvedAt:m.data().resolvedAt,clearedAt:m.data().clearedAt}))})}catch(t){console.error("❌ State check failed:",t)}}};typeof window<"u"&&(window.adminDebug=Mt,console.log("✅ Admin debug utilities loaded. Use: window.adminDebug.forceSyncViolations() or window.adminDebug.checkViolationState()"));var Ba=He({initializeMemoryCleanup:()=>Ut,prefetchAllRoutes:()=>zt,prefetchRoute:()=>te,setupLinkPrefetching:()=>Bt}),ue=new Set,pe=new Map,Vt={"/":()=>y(()=>import("./dashboard-page-CleTLBe1.js").then(t=>t.n),__vite__mapDeps([7,2,0,1,3,5,6])),"/dashboard":()=>y(()=>import("./dashboard-page-CleTLBe1.js").then(t=>t.n),__vite__mapDeps([7,2,0,1,3,5,6])),"/trade-logger":()=>y(()=>import("./TradeLogger-DssKv1_B.js"),__vite__mapDeps([8,9,1,2,0,3,10,11,4,5,6,7,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29])),"/trade-analytics":()=>y(()=>import("./TradeAnalytics-BhuadqLk.js"),__vite__mapDeps([30,9,1,2,0,3,10,11,4,5,6,7,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,31])),"/chat":()=>y(()=>import("./chat-page-evUfHQgD.js").then(t=>t.t),__vite__mapDeps([0,1,2,3])),"/news":()=>y(()=>import("./news-page-DagW7rtr.js").then(t=>t.t),__vite__mapDeps([21,9,1,2,0,3,10,11,4,5,6,7,12,13,15,22,23])),"/education":()=>y(()=>import("./education-page-vD6yUpCZ.js").then(t=>t.t),__vite__mapDeps([4,2,0,1,3,5,6,7])),"/community":()=>y(()=>import("./community-page-CrngAMw5.js").then(t=>t.t),__vite__mapDeps([5,2,0,1,3,6])),"/profile":()=>y(()=>import("./UserProfile-BFOE_bgG.js"),__vite__mapDeps([32,9,1,2,0,3,10,11,4,5,6,7,12,13,15,33,34,35])),"/feedback":()=>y(()=>import("./FeedbackPage-BAa3lazE.js"),__vite__mapDeps([36,9,1,2,0,3,10,11,4,5,6,7,12,13,15])),"/admin":()=>y(()=>import("./AdminPanel-BGcfmGDg.js"),__vite__mapDeps([37,9,1,2,0,3,10,11,4,5,6,7,12,13,15,38])),"/pricing":()=>y(()=>import("./PricingPage-IklOCXBQ.js"),__vite__mapDeps([39,9,1,2,0,3,10,11,4,5,6,7,12,13,14,15,16,17,18,19,20,21,22,23,24])),"/for-prop-firms":()=>y(()=>import("./ForPropFirms-BqmpH2A4.js"),__vite__mapDeps([40,2,0,1,3,41,14,9,10,11,4,5,6,7,12,13,15,16,17,18,19,20,21,22,23,24,42])),"/for-coaches":()=>y(()=>import("./ForCoaches-BOfUGmTu.js"),__vite__mapDeps([43,2,0,1,3,41,14,9,10,11,4,5,6,7,12,13,15,16,17,18,19,20,21,22,23,24,42])),"/for-educators":()=>y(()=>import("./ForCoaches-BOfUGmTu.js"),__vite__mapDeps([43,2,0,1,3,41,14,9,10,11,4,5,6,7,12,13,15,16,17,18,19,20,21,22,23,24,42])),"/social":()=>y(()=>import("./community-page-CrngAMw5.js").then(t=>t.r),__vite__mapDeps([5,2,0,1,3,6])),"/trading":()=>y(()=>import("./TradingPage-yT8D2vgC.js"),__vite__mapDeps([44,2,0,1,3,5,6]))},te=t=>{const e=t.split("?")[0].split("#")[0];if(ue.has(e))return pe.get(e)||Promise.resolve();const a=Vt[e];if(a){ue.add(e);const r=a().then(i=>(pe.set(e,i),i)).catch(i=>{ue.delete(e),console.warn(`Failed to prefetch ${e}:`,i)});return pe.set(e,r),r}return Promise.resolve()},zt=()=>{((a,r=0)=>{"requestIdleCallback"in window?window.requestIdleCallback(()=>{a.forEach((i,n)=>{setTimeout(()=>te(i),n*500+r)})},{timeout:5e3}):setTimeout(()=>{a.forEach((i,n)=>{setTimeout(()=>te(i),n*800+r)})},2e3)})(["/trade-logger","/"],1e3)},Bt=()=>{const t=e=>{const a=e.target;if(!a||typeof a.closest!="function")return;const r=a.closest("a[href]");if(r){const i=r.getAttribute("href");i&&i.startsWith("/")&&!i.includes(":")&&te(i)}};return document.addEventListener("mouseenter",t,{capture:!0,passive:!0}),document.addEventListener("touchstart",t,{capture:!0,passive:!0}),document.addEventListener("focusin",t,{capture:!0,passive:!0}),()=>{document.removeEventListener("mouseenter",t),document.removeEventListener("touchstart",t),document.removeEventListener("focusin",t)}},ge=null,Ve=Date.now(),Ut=()=>{const t=()=>{Ve=Date.now()};return window.addEventListener("click",t,{passive:!0}),window.addEventListener("scroll",t,{passive:!0}),window.addEventListener("keydown",t,{passive:!0}),window.addEventListener("touchstart",t,{passive:!0}),ge=setInterval(()=>{Date.now()-Ve>300*1e3&&Gt()},120*1e3),()=>{ge&&clearInterval(ge)}},Gt=()=>{if("caches"in window,window.gc)try{window.gc()}catch{}document.dispatchEvent(new CustomEvent("app:memoryCleanup")),console.log("🧹 Memory cleanup performed")},jt=["/signin","/signup","/forgot-password"],Ht=["/","/for-prop-firms","/for-coaches","/for-educators"],Wt=["/pricing","/rsvp","/support","/help","/redeem","/privacy","/terms","/cookies","/dpa"];function Ua({user:t,pathname:e}){return jt.includes(e)||e==="/onboarding"||Ht.includes(e)&&!t?"none":!t&&Wt.includes(e)?"marketing":"app"}var Ga=He({HapticType:()=>x,haptic:()=>re,hapticLight:()=>$t,hapticPullThreshold:()=>Yt,hapticSuccess:()=>qt}),Kt=()=>typeof navigator<"u"&&"vibrate"in navigator,x={LIGHT:"light",MEDIUM:"medium",HEAVY:"heavy",SUCCESS:"success",WARNING:"warning",ERROR:"error",SELECTION:"selection"},ze={[x.LIGHT]:[10],[x.MEDIUM]:[20],[x.HEAVY]:[30],[x.SUCCESS]:[10,50,10],[x.WARNING]:[20,40,20],[x.ERROR]:[30,50,30,50,30],[x.SELECTION]:[5]},re=(t=x.LIGHT)=>{if(!Kt())return;const e=ze[t]||ze[x.LIGHT];try{navigator.vibrate(e)}catch(a){console.debug("Haptic feedback failed:",a)}},$t=()=>re(x.LIGHT),qt=()=>re(x.SUCCESS),Yt=()=>re(x.MEDIUM);typeof window<"u"&&(window.React=I.default,window.useState=I.useState,window.useEffect=I.useEffect,window.useMemo=I.useMemo,window.useCallback=I.useCallback,window.useRef=I.useRef,window.useContext=I.useContext,window.createContext=I.createContext,window.memo=I.memo,window.lazy=I.lazy,window.Suspense=I.Suspense);var Jt=class{constructor(){this.originalConsoleError=console.error,this.originalConsoleWarn=console.warn,this.extensionErrors=new Set,this.init()}init(){console.error=(...t)=>{if(this.isExtensionError(t)){this.handleExtensionError(t);return}this.isExpectedPermissionError(t)||this.originalConsoleError.apply(console,t)},console.warn=(...t)=>{if(this.isExtensionWarning(t)){this.handleExtensionWarning(t);return}this.isExpectedPermissionError(t)||this.originalConsoleWarn.apply(console,t)},this.setupRuntimeErrorHandling()}isExtensionError(t){const e=t.join(" ").toLowerCase();return["chrome-extension://","extension context invalidated","message channel closed","receiving end does not exist","could not establish connection","extension port disconnected","error in event handler","unchecked runtime.lasterror"].some(a=>e.includes(a))}isExpectedPermissionError(t){const e=t.join(" ").toLowerCase();return["permission denied for members listener","permission denied for violations listener","permission denied for account requests listener","permission denied for organization listener","permission denied fetching members","permission denied fetching org stats","permission denied fetching member stats","permission denied fetching account requests","user may 
28not be a member","this is expected during auth transitions","error listening to broker accounts","missing or insufficient permissions","state drift: accountstate","state transition:","signature is invalid","token validation error","gethmstoken","failed to join room","failed to join call","failed to create 100ms room","not connected to any room"].some(a=>e.includes(a))}isExtensionWarning(t){const e=t.join(" ").toLowerCase();return["chrome-extension://","extension","manifest v2 is deprecated"].some(a=>e.includes(a))}handleExtensionError(t){const e=t.join(" ");this.extensionErrors.has(e)||this.extensionErrors.add(e)}handleExtensionWarning(t){const e=t.join(" ");this.extensionErrors.has(e)||this.extensionErrors.add(e)}setupRuntimeErrorHandling(){if(typeof chrome<"u"&&chrome.runtime)try{chrome.runtime.onMessage.addListener((t,e,a)=>{try{return!1}catch{return!1}})}catch{}window.addEventListener("error",t=>{this.isExtensionRelatedError(t)&&(t.preventDefault(),this.handleExtensionError([t.message]))}),window.addEventListener("unhandledrejection",t=>{this.isExtensionRelatedError(t)&&(t.preventDefault(),this.handleExtensionError([t.reason]))})}isExtensionRelatedError(t){const e=t.message||t.reason||"";return this.isExtensionError([e])}destroy(){console.error=this.originalConsoleError,console.warn=this.originalConsoleWarn}getStats(){return{filteredErrors:this.extensionErrors.size,errors:Array.from(this.extensionErrors)}}},Qt=null;typeof window<"u"&&(Qt=new Jt);var Zt=class{constructor(){this.frameRate=60,this.frameDrops=0,this.performanceLevel="high",this.isMonitoring=!1,this.frameHistory=[],this.maxHistoryLength=30,this.init()}init(){this.detectDeviceCapabilities(),this.startMonitoring(),this.setupPerformanceObserver()}detectDeviceCapabilities(){const t=/Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),e=navigator.deviceMemory&&navigator.deviceMemory<4,a=navigator.hardwareConcurrency&&navigator.hardwareConcurrency<4;t&&(e||a)?this.performanceLevel="low":t?this.performanceLevel="medium":this.performanceLevel="high",console.log(`🚀 Performance level: ${this.performanceLevel}`),this.applyPerformanceOptimizations()}startMonitoring(){let t=performance.now(),e=0;const a=r=>{if(!this.isMonitoring)return;e++;const i=r-t;i>=1e3&&(this.frameRate=Math.round(e*1e3/i),this.frameHistory.push(this.frameRate),this.frameHistory.length>this.maxHistoryLength&&this.frameHistory.shift(),this.analyzePerformance(),e=0,t=r),requestAnimationFrame(a)};this.isMonitoring=!0,requestAnimationFrame(a)}analyzePerformance(){const t=this.frameHistory.reduce((e,a)=>e+a,0)/this.frameHistory.length;t<45?(this.frameDrops++,this.frameDrops>3&&this.downgradePerformance()):t>55&&this.performanceLevel!=="high"&&this.upgradePerformance()}downgradePerformance(){if(this.performanceLevel==="low"){this.frameDrops=0;return}console.log(`⬇️ Downgrading performance due to frame drops (${this.frameRate}fps)`),this.performanceLevel==="high"?this.performanceLevel="medium":this.performanceLevel==="medium"&&(this.performanceLevel="low"),this.applyPerformanceOptimizations(),this.frameDrops=0}upgradePerformance(){console.log(`⬆️ Upgrading performance (${this.frameRate}fps)`),this.performanceLevel==="low"?this.performanceLevel="medium":this.performanceLevel==="medium"&&(this.performanceLevel="high"),this.applyPerformanceOptimizations()}applyPerformanceOptimizations(){switch(document.documentElement.setAttribute("data-performance",this.performanceLevel),this.performanceLevel){case"low":this.applyLowPerformanceMode();break;case"medium":this.applyMediumPerformanceMode();break;case"high":this.applyHighPerformanceMode();break}}applyLowPerformanceMode(){document.body.classList.add("performance-low"),document.body.classList.remove("performance-medium","performance-high"),document.documentElement.style.setProperty("--animation-duration","0.1s"),document.documentElement.style.setProperty("--transition-duration","0.1s")}applyMediumPerformanceMode(){document.body.classList.add("performance-medium"),document.body.classList.remove("performance-low","performance-high"),document.documentElement.style.setProperty("--animation-duration","0.2s"),document.documentElement.style.setProperty("--transition-duration","0.2s")}applyHighPerformanceMode(){document.body.classList.add("performance-high"),document.body.classList.remove("performance-low","performance-medium"),document.documentElement.style.setProperty("--animation-duration","0.3s"),document.documentElement.style.setProperty("--transition-duration","0.3s")}setupPerformanceObserver(){}getPerformanceLevel(){return this.performanceLevel}getCurrentFrameRate(){return this.frameRate}getStats(){return{performanceLevel:this.performanceLevel,frameRate:this.frameRate,frameDrops:this.frameDrops,averageFrameRate:this.frameHistory.reduce((t,e)=>t+e,0)/this.frameHistory.length||0}}setPerformanceLevel(t){["low","medium","high"].includes(t)&&(this.performanceLevel=t,this.applyPerformanceOptimizations())}stop(){this.isMonitoring=!1}},Xt=null;typeof window<"u"&&(Xt=new Zt);var ja=()=>{typeof window<"u"&&"requestIdleCallback"in window&&window.requestIdleCallback(()=>{y(()=>import("./TradeLogger-DssKv1_B.js"),__vite__mapDeps([8,9,1,2,0,3,10,11,4,5,6,7,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29])),y(()=>import("./TradeAnalytics-BhuadqLk.js"),__vite__mapDeps([30,9,1,2,0,3,10,11,4,5,6,7,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,31])),y(()=>import("./chat-page-evUfHQgD.js").then(t=>t.t),__vite__mapDeps([0,1,2,3]))})},ea=new Set(["en","es","pt","fr","de","ar","zh","zh-CN","zh-TW","ja","ko","ru","hi","tr"]),ta=[{code:"en",name:"English",native:"English",flag:"🇺🇸"},{code:"es",name:"Spanish",native:"Español",flag:"🇪🇸"},{code:"zh-CN",name:"Chinese (Simplified)",native:"中文(简体)",flag:"🇨🇳"},{code:"zh-TW",name:"Chinese (Traditional)",native:"中文(繁體)",flag:"🇹🇼"},{code:"ar",name:"Arabic",native:"العربية",flag:"🇸🇦"},{code:"fr",name:"French",native:"Français",flag:"🇫🇷"},{code:"de",name:"German",native:"Deutsch",flag:"🇩🇪"},{code:"hi",name:"Hindi",native:"हिन्दी",flag:"🇮🇳"},{code:"ja",name:"Japanese",native:"日本語",flag:"🇯🇵"},{code:"ko",name:"Korean",native:"한국어",flag:"🇰🇷"},{code:"pt",name:"Portuguese",native:"Português",flag:"🇧🇷"},{code:"ru",name:"Russian",native:"Русский",flag:"🇷🇺"},{code:"it",name:"Italian",native:"Italiano",flag:"🇮🇹"},{code:"nl",name:"Dutch",native:"Nederlands",flag:"🇳🇱"},{code:"pl",name:"Polish",native:"Polski",flag:"🇵🇱"},{code:"tr",name:"Turkish",native:"Türkçe",flag:"🇹🇷"},{code:"vi",name:"Vietnamese",native:"Tiếng Việt",flag:"🇻🇳"},{code:"th",name:"Thai",native:"ภาษาไทย",flag:"🇹🇭"},{code:"id",name:"Indonesian",native:"Bahasa Indonesia",flag:"🇮🇩"},{code:"ms",name:"Malay",native:"Bahasa Melayu",flag:"🇲🇾"},{code:"sv",name:"Swedish",native:"Svenska",flag:"🇸🇪"},{code:"da",name:"Danish",native:"Dansk",flag:"🇩🇰"},{code:"fi",name:"Finnish",native:"Suomi",flag:"🇫🇮"},{code:"no",name:"Norwegian",native:"Norsk",flag:"🇳🇴"}
28,{code:"uk",name:"Ukrainian",native:"Українська",flag:"🇺🇦"},{code:"el",name:"Greek",native:"Ελληνικά",flag:"🇬🇷"},{code:"ro",name:"Romanian",native:"Română",flag:"🇷🇴"},{code:"hu",name:"Hungarian",native:"Magyar",flag:"🇭🇺"},{code:"cs",name:"Czech",native:"Čeština",flag:"🇨🇿"},{code:"he",name:"Hebrew",native:"עברית",flag:"🇮🇱"},{code:"fa",name:"Persian",native:"فارسی",flag:"🇮🇷"},{code:"bn",name:"Bengali",native:"বাংলা",flag:"🇧🇩"},{code:"ta",name:"Tamil",native:"தமிழ்",flag:"🇮🇳"},{code:"tl",name:"Filipino",native:"Filipino",flag:"🇵🇭"},{code:"sw",name:"Swahili",native:"Kiswahili",flag:"🇰🇪"},{code:"af",name:"Afrikaans",native:"Afrikaans",flag:"🇿🇦"}],Ha=ta.filter(t=>ea.has(t.code)),aa="appLanguage";function Wa(){try{return localStorage.getItem(aa)||"en"}catch{return"en"}}function Ka(t="en"){try{Dt(t||"en")}catch(e){console.error("Language switch failed:",e)}}function he(t,e){if(!t||t.length<e)return[];const a=2/(e+1);let r=t.slice(0,e).reduce((n,o)=>n+o,0)/e;const i=[r];for(let n=e;n<t.length;n++)r=t[n]*a+r*(1-a),i.push(r);return i}function ia(t,e=14){if(!t||t.length<e+1)return null;const a=t.map(o=>o.close);let r=0,i=0;for(let o=1;o<=e;o++){const s=a[o]-a[o-1];s>0?r+=s:i+=Math.abs(s)}r/=e,i/=e;for(let o=e+1;o<a.length;o++){const s=a[o]-a[o-1];r=(r*(e-1)+Math.max(s,0))/e,i=(i*(e-1)+Math.max(-s,0))/e}if(i===0)return 100;const n=r/i;return parseFloat((100-100/(1+n)).toFixed(2))}function ra(t,e=12,a=26,r=9){const i={macd:null,signal:null,histogram:null};if(!t||t.length<a+r)return i;const n=t.map(f=>f.close),o=he(n,e),s=he(n,a),c=a-e;if(o.length<c+s.length)return i;const l=s.map((f,p)=>o[p+c]-f);if(l.length<r)return i;const u=he(l,r);if(!u.length)return i;const d=l[l.length-1],h=u[u.length-1];return{macd:parseFloat(d.toFixed(4)),signal:parseFloat(h.toFixed(4)),histogram:parseFloat((d-h).toFixed(4)),aboveZero:d>0,bullishCross:d>h}}function na(t,e=20,a=2){const r={upper:null,middle:null,lower:null,bandwidth:null,percentB:null};if(!t||t.length<e)return r;const i=t.map(p=>p.close),n=i.slice(-e),o=n.reduce((p,v)=>p+v,0)/e,s=n.reduce((p,v)=>p+(v-o)**2,0)/e,c=Math.sqrt(s),l=o+a*c,u=o-a*c,d=i[i.length-1],h=o>0?parseFloat(((l-u)/o*100).toFixed(2)):null,f=l-u>0?parseFloat(((d-u)/(l-u)).toFixed(4)):null;return{upper:parseFloat(l.toFixed(4)),middle:parseFloat(o.toFixed(4)),lower:parseFloat(u.toFixed(4)),bandwidth:h,percentB:f,upperTouch:d>=l*.995,lowerTouch:d<=u*1.005,squeeze:h!==null&&h<12}}function sa(t,e=14){if(!t||t.length<e+1)return null;const a=[];for(let i=1;i<t.length;i++){const n=t[i-1].close;a.push(Math.max(t[i].high-t[i].low,Math.abs(t[i].high-n),Math.abs(t[i].low-n)))}if(a.length<e)return null;let r=a.slice(0,e).reduce((i,n)=>i+n,0)/e;for(let i=e;i<a.length;i++)r=(r*(e-1)+a[i])/e;return parseFloat(r.toFixed(4))}function $a(t){if(!t||t.length<15)return null;const e=ia(t),a=ra(t),r=na(t),i=sa(t);return{rsi:e,macd:a.macd,macdSignal:a.signal,macdHistogram:a.histogram,macdAboveZero:a.aboveZero,macdBullishCross:a.bullishCross,bbUpper:r.upper,bbMiddle:r.middle,bbLower:r.lower,bbBandwidth:r.bandwidth,bbPercentB:r.percentB,bbUpperTouch:r.upperTouch,bbLowerTouch:r.lowerTouch,bbSqueeze:r.squeeze,atr:i,sparkline:t.slice(-7).map(n=>n.close)}}async function oa({fetchPage:t,onBatch:e,maxDocs:a=1/0,maxBatches:r=1e4}={}){if(typeof t!="function")throw new TypeError("paginate: fetchPage must be a function");let i,n=0,o=0,s=!1,c=!1;for(;o<r;){const l=await t(i),u=l&&l.docs||[];if(u.length===0)break;o+=1;let d=u;const h=a-n;if(u.length>h&&(d=u.slice(0,Math.max(0,h)),s=!0),n+=d.length,e&&d.length&&await e(d,o-1)===!1){c=!0;break}if(s||!l.nextCursor)break;i=l.nextCursor}return{total:n,batches:o,truncated:s,stoppedEarly:c}}async function qa(t){const e=[];return await oa({...t,onBatch:async(a,r)=>{if(e.push(...a),t.onBatch)return t.onBatch(a,r)}}),e}var Ze={position:"top-right",autoClose:4e3,hideProgressBar:!1,closeOnClick:!0,pauseOnHover:!0,draggable:!0};({...Ze});({...Ze});var Ya=(t,e={})=>{},Ja=(t,e={})=>{},Qa=(t,e={})=>{},Be={"auth/email-already-in-use":"This email is already registered. Try signing in instead.","auth/invalid-email":"Please enter a valid email address.","auth/operation-not-allowed":"This sign-in method is not enabled. Please contact support.","auth/weak-password":"Password is too weak. Use at least 8 characters with letters and numbers.","auth/user-disabled":"This account has been disabled. Please contact support.","auth/user-not-found":"No account found with this email. Please sign up first.","auth/wrong-password":"Incorrect password. Please try again or reset your password.","auth/invalid-credential":"Invalid credentials. Please check your email and password.","auth/invalid-login-credentials":"Invalid email or password.","auth/too-many-requests":"Too many failed attempts. Please wait a few minutes and try again.","auth/network-request-failed":"Network error. Please check your connection.","auth/popup-closed-by-user":null,"auth/cancelled-popup-request":null,"auth/user-cancelled":null,"auth/web-storage-unsupported":"Please enable cookies and storage to sign in.","auth/popup-blocked":"Popup was blocked. Please allow popups for this site.","auth/account-exists-with-different-credential":"An account already exists with this email using a different sign-in method.","auth/credential-already-in-use":"This sign-in method is already linked to another account.","auth/requires-recent-login":"For security, please sign in again to continue.","auth/expired-action-code":"This link has expired. Please request a new one.","auth/invalid-action-code":"This link is invali
28d or has already been used.","auth/missing-email":"Please enter your email address.","auth/missing-password":"Please enter your password.","auth/internal-error":"Something went wrong. Please try again in a moment.","auth/timeout":"Request timed out. Please try again.","auth/quota-exceeded":"Service is busy right now. Please try again shortly.","auth/unauthorized-domain":"This domain is not authorized for sign-in.",1e3:null,1001:null,ASAuthorizationErrorCanceled:null,"apple/cancelled":null},Ue={"permission-denied":"You don't have permission to do that.",unauthenticated:"Please sign in to continue.","not-found":"We couldn't find what you were looking for.","already-exists":"That already exists.","resource-exhausted":"Service is busy. Please try again in a moment.","failed-precondition":"This action can't be completed right now.",aborted:"That action was interrupted. Please try again.","out-of-range":"That value is out of range.",unimplemented:"This feature isn't available yet.",internal:"Something went wrong on our end. Please try again.",unavailable:"Service is temporarily unavailable. Please try again shortly.","data-loss":"Something went wrong. Please refresh and try again.","deadline-exceeded":"That took too long. Please try again.",cancelled:null},Za=(t,e="Something went wrong. Please try again.")=>{if(!t)return e;const a=(t.code||t?.error?.code||"").toString(),r=(t.message||"").toString();if(a in Be)return Be[a];const i=a.replace(/^[a-z]+\//i,"");if(i in Ue)return Ue[i];const n=r.toLowerCase();return/cancel/.test(n)&&/(popup|user|sign|auth)/.test(n)?null:/network|fetch failed|err_network|timeout/.test(n)?"Network error. Please check your connection.":/permission|forbidden|unauthorized/.test(n)?"You don't have permission to do that.":/quota|rate limit|too many/.test(n)?"You're doing that too fast. Please wait a moment.":e},ae="rememberedCredential",ve="redline_remembered_credential",la=3600*24*365;function ca(){try{const t=document.cookie.split("; ").find(e=>e.startsWith(`${ve}=`));return t?decodeURIComponent(t.slice(30)):null}catch{return null}}function Xe(t){try{document.cookie=`${ve}=${encodeURIComponent(t)}; max-age=${la}; path=/; SameSite=Lax`}catch{}}function da(){try{document.cookie=`${ve}=; max-age=0; path=/; SameSite=Lax`}catch{}}function Xa(){let t=null;try{t=localStorage.getItem(ae)}catch{}const e=ca(),a=t||e||null;if(!a)return null;if(!t)try{localStorage.setItem(ae,a)}catch{}return e||Xe(a),a}function ei(t){const e=String(t||"").trim();if(!e)return ua();try{localStorage.setItem(ae,e)}catch{}Xe(e)}function ua(){try{localStorage.removeItem(ae)}catch{}da()}function pa(t={}){const e=t.accountNumber||t.accountId||t.providerAccountId;return e?String(e):t.type==="paper"||t.provider==="paper"?String(t.id||""):""}function ga(t={}){const e=pa(t);return e.length>4?e.slice(-4):e}function ha(t={}){const e=t.type==="paper"||t.provider==="paper",a=String(t.env||t.environment||(e?"paper":"")).toLowerCase().trim();return a==="live"||a==="prod"||a==="production"?"LIVE":a==="paper"?"PAPER":a==="demo"?"DEMO":a==="staging"||a==="stg"?"STAGING":null}function fa(t={}){return t.displayName||t.name||t.provider||t.id||"Account"}function ti(t={}){const e=fa(t),a=ga(t),r=ha(t);return[e,a?`••${a}`:null,r].filter(Boolean).join(" · ")}var ma={symbol:["symbol","ticker","Symbol","Ticker"],entryPrice:["entryPrice","entry","openPrice","open_price"],exitPrice:["exitPrice","exit","closePrice","close_price"],quantity:["quantity","qty","size","positionSize","contracts","shares"],stopPrice:["stopPrice","stopLoss","stop_loss","stop"],maxLossAmount:["maxLossAmount","maxLoss","max_loss"],riskPercent:["riskPercent","riskPct","risk_percent"],takeProfit:["takeProfit","targetPrice","take_profit","target"],grossPnL:["grossPnL","grossPL","grossPnl","pl","pnl","profitLoss","profit_loss"],entryDate:["entryDate","entryTime","entry_time","openTime","open_time"],exitDate:["exitDate","exitTime","exit_time","closeTime","close_time"],direction:["direction","tradeType","side","trade_type"],assetClass:["assetClass","marketType","market","asset_class"],setupType:["setupType","setup","strategy"],tradingSession:["tradingSession","session","trading_session"],emotionalStateEntry:["emotionalStateEntry","entryEmotion","emotionalState","emotion"],emotionalStateExit:["emotionalStateExit","exitEmotion"],setupRating:["setupRating","setup_rating"],wasChased:["wasChased","was_chased","chased"],hadValidInvalidation:["hadValidInvalidation","had_valid_invalidation","thesisInvalidated"]};function b(t,e){const a=ma[e]||[e];for(const r of a)if(t[r]!==void 0&&t[r]!==null&&t[r]!=="")return t[r]}function L(t){if(t==null||t==="")return null;const e=parseFloat(t);return isNaN(e)?null:e}function T(t){return t==null?"":String(t)}function Q(t){return t===!0||t==="true"||t===1}function Ge(t){if(!t)return"";if(typeof t=="string")return t.split("T")[0]||t;let e;if(t?.toDate&&typeof t.toDate=="function")try{e=t.toDate()}catch{return""}else t instanceof Date?e=t:t?.seconds&&(e=new Date(t.seconds*1e3));return e instanceof Date&&!isNaN(e.getTime())?e.toISOString().split("T")[0]:""}function ai(t){if(!t||typeof t!="object")return console.warn("hydrateTrade: Invalid input",t),ya();const e=typeof t.data=="function"?{id:t.id,...t.data()}:t,a={tradeId:T(e.id||e.tradeId),symbol:T(b(e,"symbol")).toUpperCase(),assetClass:T(b(e,"assetClass"))||"Stocks",direction:T(b(e,"direction"))||"long",entryPrice:L(b(e,"entryPrice")),exitPrice:L(b(e,"exitPrice")),quantity:L(b(e,"quantity")),entryDate:Ge(b(e,"entryDate")),exitDate:Ge(b(e,"exitDate")),status:T(e.status)||(e.exitPrice?"closed":"open"),grossPnL:L(b(e,"grossPnL")),fees:L(e.fees||e.commission),stopPrice:L(b(e,"stopPrice")),maxLossAmount:L(b(e,"maxLossAmount")),riskPercent:L(b(e,"riskPercent")),takeProfit:L(b(e,"takeProfit")),riskAmount:L(e.riskAmount),plannedRR:L(e.plannedRR||e.riskRewardRatio),setupType:T(b(e,"setupType")),followedRules:e.followedRules!==!1,setupRating:L(b(e,"setupRating")),confidence:L(e.confidence),wasChased:Q(b(e,"wasChased")),tradingSession:T(b(e,"tradingSession")),preTradePlan:T(e.preTradePlan),exitReason:T(e.exitReason),hadValidInvalidation:Q(b(e,"hadValidInvalidation")),emotionalStateEntry:T(b(e,"emotionalStateEntry")),emotionalStateExit:T(b(e,"emotionalStateExit")),marketTrend:T(e.marketTrend),volatility:T(e.volatility),tags:Array.isArray(e.tags)?e.tags:[],notes:T(e.notes),source:T(e.source||e.importSource),locked:Q(e.locked),violations:Array.isArray(e.violations)?e.violations:[],violationAcknowledged:Q(e.violationAcknowledged)};return a.hasRiskDefined=!!(a.stopPrice||a.maxLossAmount||a.riskPercent),a.hasPrices=!!(a.entryPrice&&a.exitPrice),a.isImported=a.source==="import"||a.source==="auto"||a.locked,console.log("🔄 HYDRATE
28D TRADE:",{symbol:a.symbol,stopPrice:a.stopPrice,maxLossAmount:a.maxLossAmount,riskPercent:a.riskPercent,hasRiskDefined:a.hasRiskDefined,grossPnL:a.grossPnL,hasPrices:a.hasPrices}),a}function ya(){return{tradeId:"",symbol:"",assetClass:"Stocks",direction:"long",entryPrice:null,exitPrice:null,quantity:null,entryDate:"",exitDate:"",status:"open",grossPnL:null,fees:null,stopPrice:null,maxLossAmount:null,riskPercent:null,takeProfit:null,riskAmount:null,plannedRR:null,setupType:"",followedRules:!0,setupRating:null,confidence:null,wasChased:!1,tradingSession:"",preTradePlan:"",exitReason:"",hadValidInvalidation:!1,emotionalStateEntry:"",emotionalStateExit:"",marketTrend:"",volatility:"",tags:[],notes:"",locked:!1,violations:[],violationAcknowledged:!1,hasRiskDefined:!1,hasPrices:!1,isImported:!1,source:"manual",sourceMeta:{broker:null,accountId:null,importBatchId:null,externalTradeId:null,externalOrderId:null},dedupe:{fingerprintV1:null,matchKey:null},link:{canonicalTradeId:null,mergedIntoId:null,mergeStatus:"standalone"},tradeStatus:"draft"}}var je={id:null,tradeId:null,symbol:"",ticker:"",direction:"long",tradeType:"long",entryPrice:null,exitPrice:null,quantity:null,positionSize:null,status:"open",marketType:"Stocks",assetClass:"Stocks",market:"Stocks",entryDate:null,exitDate:null,entryTime:null,exitTime:null,createdAt:null,updatedAt:null,pl:null,grossPnL:null,plPercent:null,fees:null,commission:null,setupGrade:null,invalidation:{type:null,value:null},intent:{planId:null,planExists:!1,followedPlan:null},riskStateAtEntry:"NORMAL",riskStateReasonsAtEntry:[],signalTags:[],signalMeta:{gradeSkipped:!1,invalidationMissing:!1,planMissing:!1,gateSkipped:!1},dataCoverage:{required:0,recommended:0,optional:0},stopLoss:null,stopPrice:null,maxLossAmount:null,maxLoss:null,riskPercent:null,takeProfit:null,riskAmount:null,plannedRR:null,
28setupType:null,setup:null,setupRating:null,confidence:null,wasChased:null,tradingSession:null,session:null,preTradePlan:null,exitReason:null,emotionalStateEntry:null,emotionalStateExit:null,entryEmotion:null,exitEmotion:null,emotionalState:null,marketTrend:null,volatility:null,vixLevel:null,marketRegime:null,tags:[],notes:"",optionType:null,optionStrike:null,optionExpiry:null,contractMonth:null,tickSize:null,tickValue:null,contractMultiplier:null,currencyPair:null,pipValue:null,ruleId:null,playbookId:null,source:"manual",locked:!1,needsEnrichment:!0,violations:[],violationAcknowledged:!1,schemaVersion:2,sessionId:null,aiAnalysis:null,hadValidInvalidation:null};function ii(t){if(!t||typeof t!="object")return console.warn("[ensureTradeContract] Invalid input, returning default contract"),{...je};const e={};for(const[a,r]of Object.entries(je)){const i=t[a];r!==null&&typeof r=="object"&&!Array.isArray(r)?e[a]={...r,...i&&typeof i=="object"?i:{}}:Array.isArray(r)?e[a]=Array.isArray(i)?i:r:i!==void 0?e[a]=i:e[a]=r}return e.id=e.id||e.tradeId||t.id,e.tradeId=e.tradeId||e.id,console.log("[ensureTradeContract] Contract enforced:",{id:e.id,symbol:e.symbol,hasInvalidation:e.invalidation?.type!==null,hasIntent:e.intent?.planId!==null||e.intent?.planExists,hasRiskState:e.riskStateAtEntry}),e}var K={PREMARKET:"Premarket",OPENING_RANGE:"Opening Range",MIDDAY_GRIND:"Midday Grind",POWER_HOUR:"Power Hour",POST_MARKET:"Post-Market"},ri={[K.PREMARKET]:{start:0,end:9.5},[K.OPENING_RANGE]:{start:9.5,end:10.5},[K.MIDDAY_GRIND]:{start:10.5,end:15},[K.POWER_HOUR]:{start:15,end:16},[K.POST_MARKET]:{start:16,end:24}};export{Na as A,zt as C,Ma as D,Qe as E,Va as O,Ut as S,Ba as T,ja as _,ua as a,Ga as b,Za as c,Ya as d,qa as f,Ka as g,Wa as h,ti as i,Fa as k,Ja as l,Ha as m,ii as n,Xa as o,$a as p,ai as r,ei as s,K as t,Qa as u,$t as v,te as w,Ua as x,Yt as y};

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.