const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Today-DvXg_zIJ.js","assets/rolldown-runtime-S-ySWqyJ.js","assets/Card-Cxq4Ee-X.js","assets/vendor-react-DyChr2BH.js","assets/db-D2Po16Ap.js","assets/vendor-db-laug4hUC.js","assets/Card-CL5SM_6f.css","assets/Button-DGkRbwZL.js","assets/Button-k6oiKdLM.css","assets/ConfirmModal-BS7rOlSe.js","assets/PageShell-Dg0LwjEH.js","assets/PageShell-ZfdvsA9d.css","assets/KpiReorderLockButton-BChlHQkG.js","assets/KpiReorderLockButton-CTQFbEmx.css","assets/formatSettings-BmCn9wYJ.js","assets/sync-BQbCwLke.js","assets/cloudBackupEncryption-Cbq9uKvI.js","assets/accountBalance-BmL5XsaY.js","assets/storedLabels-Cp0Gl0kW.js","assets/DATA_DEFAULTS.en-DirRsuKh.js","assets/DATA_DEFAULTS-BcOucxL3.js","assets/now-Ds5hQLtP.js","assets/data-food-BfKhs-bB.js","assets/supplements-DUypwbGQ.js","assets/supplementPlanReview-ClVU7EUk.js","assets/supplementLabRetakePolicy-DYFjnA-6.js","assets/supplementKnowledgeContentCoverage-QijmrXnh.js","assets/nutrition-C9_Egd0N.js","assets/tasks-Ud0FoDhi.js","assets/trainings-DvsDkZ_M.js","assets/authConfig-BEMI_Xyz.js","assets/authSessionStore-DMywFnF3.js","assets/financeControlViewModel-XF2hvPAh.js","assets/supplementDataCoverage-BcmpKrS2.js","assets/taskControlViewModel-DyXTqYav.js","assets/trainingControlViewModel-Cg1H8VgT.js","assets/openActionRequired-hgFTBIwE.js","assets/useManualCloudSync-DhPL0ayb.js","assets/useAuthSession-xIhO0bKF.js","assets/seed-9C4rKf7X.js","assets/integrityCheck-Cpx0wjB8.js","assets/mergedCatalog-Rxfiav72.js","assets/NudgeModal-D0vRZh9U.js","assets/TaskPlanModal-SRnQw029.js","assets/WaterTargetModal-Cw0_ptbS.js","assets/numberInput-BvvnMWyY.js","assets/Today-DwsE8N0A.css","assets/Tasks-u7ngZgNB.js","assets/dictionaries-BVot2_zw.js","assets/Tasks-C9xUqf67.css","assets/Habits-CztRZGI9.js","assets/Money-qS7BN3Xz.js","assets/incomeSources-D2SRoJqE.js","assets/incomeSources-CGXz01ct.css","assets/finance-list-ui-DNCFkW-p.css","assets/MoneyMonitor-DR5B7ieY.js","assets/Nutrition-vBDDs6mT.js","assets/WeeklyNutritionCard-DY75n_BK.js","assets/Nutrition-DPKCo_iz.css","assets/FoodCatalog-s-iwP3BU.js","assets/Trainings-B_c8IqOj.js","assets/Supplements-B_M6NUEM.js","assets/labResults-qyYMSFla.js","assets/supplementProducts-BITu-prm.js","assets/supplementSafetySettings-Bz7LIF-X.js","assets/labTrendDisplay-BslOuGKD.js","assets/supplementLabDisplay-BUAs95CP.js","assets/supplementKnowledgeContentCoverageDisplay-D97LtOaN.js","assets/useSupplementPageNowISO-CtMLm_O-.js","assets/Supplements-iIPAOh2P.css","assets/SupplementLabs-DJwsmiUU.js","assets/SupplementDataNeeds-DzrCNDl4.js","assets/SupplementReports-DKWQhmni.js","assets/AutomationPreview-DahUjvks.js","assets/Analytics-CbGX8rat.js","assets/More-Doa0rCHo.js","assets/telegramBot-DpOcTJYE.js","assets/More-I5eBVbRb.css","assets/onboarding-D2dvhpUC.css","assets/WelcomePage-BZ0Vezxq.js","assets/RestorePage-G2DGLPjx.js","assets/OnboardingPage-BPpLr8lG.js"])))=>i.map(i=>d[i]); import{r as e}from"./rolldown-runtime-S-ySWqyJ.js";import{c as t,d as n,h as r,i,l as a,n as o,o as s,p as c,s as l,t as u,u as d}from"./vendor-react-DyChr2BH.js";import{a as f,h as p,n as m,r as h,t as g}from"./db-D2Po16Ap.js";import{A as _,B as v,L as y,N as b,P as x,R as S,V as C,_ as w,a as T,c as ee,d as te,f as ne,j as E,l as D,n as re,o as O,s as k,t as A,u as ie,v as j,x as M,y as ae,z as N}from"./Card-Cxq4Ee-X.js";import{g as P}from"./cloudBackupEncryption-Cbq9uKvI.js";import{o as F}from"./now-Ds5hQLtP.js";import{t as I}from"./storedLabels-Cp0Gl0kW.js";import{D as L,O as oe,d as R,i as se,o as ce,v as le,y as ue}from"./accountBalance-BmL5XsaY.js";import{a as de,i as fe,t as pe}from"./nutrition-C9_Egd0N.js";import{a as me,g as he}from"./tasks-Ud0FoDhi.js";import{I as ge,i as _e,r as ve}from"./supplements-DUypwbGQ.js";import{I as ye,J as be,W as z,X as xe,a as Se,at as Ce,c as we,d as Te,f as Ee,g as De,i as Oe,l as ke,n as Ae,o as je,r as Me,s as Ne,t as B,u as Pe,x as Fe}from"./sync-BQbCwLke.js";import{K as Ie,X as Le,Y as Re,q as ze}from"./supplementPlanReview-ClVU7EUk.js";import{a as Be,o as Ve}from"./trainings-DvsDkZ_M.js";import{t as He}from"./data-food-BfKhs-bB.js";import{_ as Ue,v as We}from"./supplementLabRetakePolicy-DYFjnA-6.js";import{r as Ge,t as Ke}from"./authConfig-BEMI_Xyz.js";import{i as qe,r as Je}from"./authSessionStore-DMywFnF3.js";import{c as Ye,f as Xe,i as Ze,n as Qe,p as $e,s as et,u as tt}from"./supplementProducts-BITu-prm.js";import{r as nt,t as rt}from"./labResults-qyYMSFla.js";import{t as it}from"./Button-DGkRbwZL.js";import{n as at,t as ot}from"./useAuthSession-xIhO0bKF.js";import{t as st}from"./seed-9C4rKf7X.js";import{t as ct}from"./useManualCloudSync-DhPL0ayb.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var lt=c(),V=e(r(),1);function ut(){let e=T(),[t,n]=(0,V.useState)(()=>w()),r=(0,V.useCallback)(()=>{n(w())},[]);(0,V.useEffect)(()=>{(async()=>{let e=j((await M())?.app);await S(e.locale),D(e),n(e)})();let e=()=>r();return window.addEventListener(O,e),()=>window.removeEventListener(O,e)},[r]);let i=(0,V.useCallback)(async e=>{await S(e.locale),await b({app:{uiTheme:e.theme,uiFontScale:e.fontScale,uiLocale:e.locale,uiDesignPreset:e.designPreset}}),D(e),ee(),n(e)},[]),a=(0,V.useCallback)(async()=>{await i({theme:ae(t.theme),fontScale:t.fontScale,locale:t.locale,designPreset:t.designPreset})},[i,t.designPreset,t.fontScale,t.locale,t.theme]),o=(0,V.useCallback)(async()=>{let e=te(t.fontScale);await i({theme:t.theme,fontScale:e,locale:t.locale,designPreset:t.designPreset})},[i,t.designPreset,t.fontScale,t.locale,t.theme]),s=(0,V.useCallback)(async()=>{let e=ne(t.locale);await i({theme:t.theme,fontScale:t.fontScale,locale:e,designPreset:t.designPreset})},[i,t.designPreset,t.fontScale,t.locale,t.theme]),c=(0,V.useCallback)(async e=>{await i({theme:t.theme,fontScale:t.fontScale,locale:e,designPreset:t.designPreset})},[i,t.designPreset,t.fontScale,t.theme]),l={compact:e(`interface.fontAriaCompact`),comfortable:e(`interface.fontAriaComfortable`),large:e(`interface.fontAriaLarge`)},u={dark:e(`interface.themeAriaDark`),light:e(`interface.themeAriaLight`)},d={ru:e(`interface.localeAriaRu`),en:e(`interface.localeAriaEn`)};return{theme:t.theme,fontScale:t.fontScale,locale:t.locale,toggleTheme:a,cycleFontScale:o,cycleLocale:s,setLocale:c,fontScaleAria:l,themeAria:u,localeAria:d}}var dt=`rms.pwa.chunk-reload-ts`,ft=`rms.pwa.chunk-reload-attempts`,pt=1500,mt=4,ht=`rms:chunk-recovery-exhausted`;function gt(){try{let e=sessionStorage.getItem(ft),t=Number(e);return Number.isFinite(t)&&t>=0?t:0}catch{return 0}}function _t(){try{sessionStorage.removeItem(dt),sessionStorage.removeItem(ft)}catch{}}function vt(){_t()}function yt(){try{let e=gt();if(e>=mt){window.dispatchEvent(new CustomEvent(ht));return}let t=sessionStorage.getItem(dt),n=Date.now();if(t&&n-Number(t){e.preventDefault(),yt()}),window.addEventListener(`unhandledrejection`,e=>{bt(xt(e.reason))&&(e.preventDefault(),yt())})}function Ct(e){return bt(xt(e))?(yt(),!0):!1}var H=u();function wt({theme:e}){return e===`light`?(0,H.jsxs)(`svg`,{className:`topbar-svg-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:[(0,H.jsx)(`circle`,{cx:`12`,cy:`12`,r:`5`,fill:`currentColor`}),(0,H.jsxs)(`g`,{stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,children:[(0,H.jsx)(`line`,{x1:`12`,y1:`2`,x2:`12`,y2:`4.5`}),(0,H.jsx)(`line`,{x1:`12`,y1:`19.5`,x2:`12`,y2:`22`}),(0,H.jsx)(`line`,{x1:`2`,y1:`12`,x2:`4.5`,y2:`12`}),(0,H.jsx)(`line`,{x1:`19.5`,y1:`12`,x2:`22`,y2:`12`}),(0,H.jsx)(`line`,{x1:`4.9`,y1:`4.9`,x2:`6.7`,y2:`6.7`}),(0,H.jsx)(`line`,{x1:`17.3`,y1:`17.3`,x2:`19.1`,y2:`19.1`}),(0,H.jsx)(`line`,{x1:`4.9`,y1:`19.1`,x2:`6.7`,y2:`17.3`}),(0,H.jsx)(`line`,{x1:`17.3`,y1:`6.7`,x2:`19.1`,y2:`4.9`})]})]}):(0,H.jsx)(`svg`,{className:`topbar-svg-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M14.5 3.2a8.2 8.2 0 1 0 7.3 12.4A7.5 7.5 0 0 1 14.5 3.2Z`})})}function Tt({locale:e}){let t=T();return(0,H.jsx)(`span`,{className:`topbar-locale-icon`,"aria-hidden":`true`,children:t(e===`en`?`common.localeEn`:`common.localeRu`)})}function Et(){return(0,H.jsx)(`svg`,{className:`topbar-svg-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5-3c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z`})})}function Dt(){return(0,H.jsx)(`svg`,{className:`topbar-svg-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M4 4.75A2.75 2.75 0 0 1 6.75 2h10.5A2.75 2.75 0 0 1 20 4.75v8.5A2.75 2.75 0 0 1 17.25 16H9.1l-4.02 3.35A.65.65 0 0 1 4 18.85V4.75Zm2.75-.75A.75.75 0 0 0 6 4.75v11.96l2.2-1.84A1.75 1.75 0 0 1 9.32 14h7.93a.75.75 0 0 0 .75-.75v-8.5a.75.75 0 0 0-.75-.75H6.75ZM7.75 7h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 3.25h5.5a.75.75 0 0 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5Z`})})}function Ot(){return(0,H.jsx)(`svg`,{className:`topbar-svg-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M18.3 5.71a1 1 0 0 0-1.41 0L12 10.59 7.11 5.7A1 1 0 0 0 5.7 7.11L10.59 12l-4.89 4.89a1 1 0 1 0 1.41 1.41L12 13.41l4.89 4.89a1 1 0 0 0 1.41-1.41L13.41 12l4.89-4.89a1 1 0 0 0 0-1.4Z`})})}function kt(){return(0,H.jsx)(`svg`,{className:`topbar-svg-icon topbar-reload-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M17.65 6.35A7.99 7.99 0 0 0 12 4c-4.42 0-8 3.58-8 8s3.58 8 8 8c3.73 0 6.84-2.55 7.73-6h-2.08A5.99 5.99 0 0 1 12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z`})})}function At({syncing:e=!1}){return(0,H.jsx)(`svg`,{className:`topbar-svg-icon topbar-cloud-sync-icon${e?` topbar-cloud-sync-icon--syncing`:``}`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M19.35 10.04A7.49 7.49 0 0 0 12 4C9.11 4 6.6 5.64 5.35 8.04A5.994 5.994 0 0 0 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v-4h-3l4-4 4 4h-3v4h-3z`})})}function jt({fontScale:e}){return(0,H.jsxs)(`span`,{className:`topbar-font-icon`,"aria-hidden":`true`,children:[(0,H.jsx)(`span`,{className:`topbar-font-icon__glyph ${e===`compact`?`topbar-font-icon__glyph--compact`:e===`large`?`topbar-font-icon__glyph--large`:`topbar-font-icon__glyph--comfortable`}`,children:`A`}),(0,H.jsxs)(`span`,{className:`topbar-font-icon__bars`,children:[(0,H.jsx)(`span`,{className:e===`compact`?`is-active`:``}),(0,H.jsx)(`span`,{className:e===`comfortable`?`is-active`:``}),(0,H.jsx)(`span`,{className:e===`large`?`is-active`:``})]})]})}function Mt({onMenuClick:e,onChatClick:t,chatUnreadCount:n=0,onBackClick:r,title:i}){let a=T(),{theme:o,fontScale:s,locale:c,toggleTheme:l,cycleFontScale:u,cycleLocale:d,fontScaleAria:f,themeAria:p,localeAria:m}=ut(),h=Math.max(0,Math.round(n));return(0,H.jsxs)(`header`,{className:`topbar`,children:[(0,H.jsxs)(`div`,{className:`topbar-start`,children:[typeof r==`function`&&(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-back-button`,"aria-label":a(`common.back`),onClick:r,children:`←`}),typeof t==`function`&&(0,H.jsxs)(`button`,{type:`button`,className:`topbar-icon-button topbar-chat-button`,"aria-label":a(`nav.openChat`),onClick:t,children:[(0,H.jsx)(Dt,{}),h>0&&(0,H.jsx)(`span`,{className:`topbar-chat-badge`,"aria-label":`${h}`,children:h>9?`9+`:h})]}),(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-font-button`,"aria-label":f[s],onClick:()=>void u(),children:(0,H.jsx)(jt,{fontScale:s})}),(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-locale-button`,"aria-label":m[c],onClick:()=>void d(),children:(0,H.jsx)(Tt,{locale:c})})]}),(0,H.jsxs)(`div`,{className:`topbar-brand`,"aria-label":i??`RMSAssist`,children:[(0,H.jsx)(`span`,{className:`topbar-brand__text brand-title-gradient motion-gradient-shift`,children:`RMS`}),i&&(0,H.jsx)(`span`,{className:`topbar-brand__title`,children:i})]}),(0,H.jsxs)(`div`,{className:`topbar-end`,children:[(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-reload-button`,"aria-label":a(`common.appErrorReload`),onClick:()=>{vt(),window.location.reload()},children:(0,H.jsx)(kt,{})}),(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-theme-button`,"aria-label":p[o],onClick:()=>void l(),children:(0,H.jsx)(wt,{theme:o})}),(0,H.jsx)(`button`,{type:`button`,className:`topbar-icon-button topbar-menu-button`,"aria-label":a(`nav.openMenu`),onClick:e,children:`☰`})]})]})}var Nt=`a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])`;function Pt(e){return Array.from(e.querySelectorAll(Nt)).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`)}function Ft(e,t){let{active:n,onClose:r,initialFocusSelector:i}=t,a=(0,V.useRef)(null);(0,V.useEffect)(()=>{if(!n)return;a.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let t=e.current;if(!t)return;let o=window.requestAnimationFrame(()=>{let e=i?t.querySelector(i):null,n=Pt(t);(e??n[0]??t).focus()}),s=e=>{if(e.key===`Escape`&&r){e.preventDefault(),r();return}if(e.key!==`Tab`)return;let n=Pt(t);if(n.length===0){e.preventDefault();return}let i=n[0],a=n[n.length-1],o=document.activeElement;e.shiftKey?(o===i||!t.contains(o))&&(e.preventDefault(),a.focus()):o===a&&(e.preventDefault(),i.focus())};return document.addEventListener(`keydown`,s),()=>{window.cancelAnimationFrame(o),document.removeEventListener(`keydown`,s),a.current?.focus?.()}},[n,e,i,r])}var It=560,Lt=!1;function Rt(){return typeof window>`u`?It:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?0:It}function zt({open:e,onClose:t}){let r=n(),i=T(),a=(0,V.useRef)(null),[o,s]=(0,V.useState)(e),[c,l]=(0,V.useState)(!1);if((0,V.useEffect)(()=>{if(e){s(!0),l(!1);return}if(!o)return;l(!0);let t=window.setTimeout(()=>{s(!1),l(!1)},Rt());return()=>window.clearTimeout(t)},[e,o]),Ft(a,{active:o&&!c,onClose:t,initialFocusSelector:`.app-menu-close`}),!o)return null;let u=e=>{c||e.target===e.currentTarget&&t()},d=(e,n)=>{r(e,n?{state:n}:void 0),t()};return(0,H.jsx)(`div`,{className:`app-menu-overlay${c?` app-menu-overlay--closing`:``}`,onClick:u,children:(0,H.jsxs)(`aside`,{ref:a,className:`app-menu-panel${c?` app-menu-panel--closing`:``}`,role:`dialog`,"aria-modal":`true`,"aria-label":i(`appMenu.ariaLabel`),children:[(0,H.jsxs)(`div`,{className:`app-menu-header`,children:[(0,H.jsx)(`div`,{className:`app-menu-title`,children:i(`appMenu.title`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-icon-button app-menu-close`,onClick:t,"aria-label":i(`common.close`),children:(0,H.jsx)(Ot,{})})]}),(0,H.jsxs)(`div`,{className:`app-menu-scroll`,children:[(0,H.jsxs)(`div`,{className:`app-menu-section`,children:[(0,H.jsx)(`div`,{className:`app-menu-section-title`,children:i(`appMenu.sectionSettings`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/analytics`),children:i(`nav.analytics`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/automation`),children:i(`appMenu.automation`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/goals`),children:i(`appMenu.sleepWater`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/nutrition`,{scrollTo:`nutrition`}),children:i(`appMenu.nutritionGoals`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/guardrails`,{scrollTo:`load-control`}),children:i(`nav.guardrails`)})]}),(0,H.jsxs)(`div`,{className:`app-menu-section`,children:[(0,H.jsx)(`div`,{className:`app-menu-section-title`,children:i(`appMenu.sectionApp`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/guide`),children:i(`appMenu.guide`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/interface`),children:i(`nav.interface`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/telegram`),children:i(`nav.telegram`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/about`,{scrollTo:`about`}),children:i(`nav.about`)}),(0,H.jsx)(`button`,{type:`button`,className:`app-menu-item`,onClick:()=>d(`/more/data`,{scrollTo:`backup`}),children:i(`menu.backup_open`)}),Lt]})]}),(0,H.jsxs)(`div`,{className:`app-menu-brand`,"aria-hidden":`true`,children:[(0,H.jsx)(`div`,{className:`app-menu-brand__mark brand-title-gradient motion-gradient-shift`,children:(0,H.jsxs)(`div`,{className:`app-menu-brand__lockup`,children:[(0,H.jsx)(`span`,{className:`app-menu-brand__letter`,children:`R`}),(0,H.jsx)(`span`,{className:`app-menu-brand__letter`,children:`M`}),(0,H.jsx)(`span`,{className:`app-menu-brand__letter`,children:`S`}),(0,H.jsx)(`span`,{className:`app-menu-brand__universe`,children:`Universe`}),(0,H.jsxs)(`span`,{className:`app-menu-brand__vertical-word`,children:[(0,H.jsx)(`span`,{children:`R`}),(0,H.jsx)(`span`,{children:`e`}),(0,H.jsx)(`span`,{children:`c`}),(0,H.jsx)(`span`,{children:`l`}),(0,H.jsx)(`span`,{children:`a`}),(0,H.jsx)(`span`,{children:`i`}),(0,H.jsx)(`span`,{children:`m`})]}),(0,H.jsxs)(`span`,{className:`app-menu-brand__vertical-word`,children:[(0,H.jsx)(`span`,{children:`M`}),(0,H.jsx)(`span`,{children:`i`}),(0,H.jsx)(`span`,{children:`n`}),(0,H.jsx)(`span`,{children:`d`})]}),(0,H.jsxs)(`span`,{className:`app-menu-brand__vertical-word`,children:[(0,H.jsx)(`span`,{children:`S`}),(0,H.jsx)(`span`,{children:`e`}),(0,H.jsx)(`span`,{children:`n`}),(0,H.jsx)(`span`,{children:`s`}),(0,H.jsx)(`span`,{children:`e`})]}),(0,H.jsxs)(`span`,{className:`app-menu-brand__assist`,children:[(0,H.jsx)(`span`,{children:`A`}),(0,H.jsx)(`span`,{children:`S`}),(0,H.jsx)(`span`,{children:`S`}),(0,H.jsx)(`span`,{children:`I`}),(0,H.jsx)(`span`,{children:`S`}),(0,H.jsx)(`span`,{children:`T`})]})]})}),(0,H.jsx)(`div`,{className:`app-menu-brand__motto brand-title-gradient motion-gradient-shift`,children:i(`appMenu.brandMotto`)}),(0,H.jsxs)(`div`,{className:`app-menu-rayan`,"aria-label":`Rayan Myers`,children:[(0,H.jsx)(`div`,{className:`app-menu-rayan__logo-wrap`,children:(0,H.jsx)(`span`,{className:`app-menu-rayan__logo`})}),(0,H.jsx)(`div`,{className:`app-menu-rayan__byline`,children:`by Rayan Myers`})]})]})]})})}var Bt=`default`;function Vt(e){return`${e}_${crypto.randomUUID?.()??`${Date.now()}_${Math.random().toString(36).slice(2)}`}`}function U(){return new Date().toISOString()}function Ht(e){return[...e].sort((e,t)=>e.createdAtISO.localeCompare(t.createdAtISO)||e.id.localeCompare(t.id))}async function Ut(e,t,n=!1){let r=await g.chatThreads.get(e);if(!r)return;let i=U();await g.chatThreads.put({...r,updatedAtISO:i,lastMessageAtISO:t??r.lastMessageAtISO,unreadCount:n?(r.unreadCount??0)+1:r.unreadCount})}async function Wt(){let e=await g.chatThreads.get(Bt);if(e)return e;let t=U(),n={id:Bt,title:`RMS Chat`,createdAtISO:t,updatedAtISO:t,unreadCount:0,archived:!1};return await g.chatThreads.add(n),n}async function Gt(e,t){let n=Ht(await g.chatMessages.where(`threadId`).equals(e).toArray());return t==null||t<=0||n.length<=t?n:n.slice(-t)}function Kt(e){return g.chatMessages.get(e)}async function qt(e){let t=e.text.trim();if(!t)throw Error(`Chat message text is empty.`);let n=U(),r={id:Vt(`chat_msg`),threadId:e.threadId,direction:e.direction,role:e.role,source:e.source,text:t,status:e.status??`local`,createdAtISO:n,updatedAtISO:n,telegramMessageId:e.telegramMessageId,serverMessageId:e.serverMessageId,cloudActionId:e.cloudActionId,actionRecordId:e.actionRecordId,error:e.error,metadata:e.metadata};return await g.chatMessages.add(r),await Ut(e.threadId,n,e.direction===`inbound`),r}function Jt(e,t,n={}){return qt({threadId:e,direction:`outbound`,role:`user`,source:`app`,text:t,status:n.status??`local`,metadata:{localOnly:!0,...n.metadata}})}function Yt(e,t,n={}){let r=n.source??`assistant`;return qt({threadId:e,direction:`inbound`,role:r===`system`?`system`:`assistant`,source:r,text:t,status:`local`,metadata:{localOnly:!0,...r===`mock`?{mock:!0}:{},...n.metadata}})}async function Xt(e){let t=e.id.trim(),n=e.text.trim();if(!t)throw Error(`Server chat message id is empty.`);if(!n)throw Error(`Server chat message text is empty.`);let r=await Kt(t);if(r)return{message:r,created:!1};let i=U(),a={id:t,threadId:e.threadId,direction:`inbound`,role:e.role,source:e.source,text:n,status:e.status??`local`,createdAtISO:e.createdAtISO,updatedAtISO:i,telegramMessageId:e.telegramMessageId,actionRecordId:e.actionRecordId,metadata:{localOnly:!1,...e.source===`mock`?{mock:!0}:{},...e.metadata}};return await g.chatMessages.add(a),await Ut(e.threadId,e.createdAtISO,e.incrementUnread??!0),{message:a,created:!0}}async function Zt(e){let t=e.source??`assistant`,{message:n}=await Xt({id:e.id,threadId:e.threadId,role:t===`system`?`system`:`assistant`,source:t,text:e.text,createdAtISO:e.createdAtISO,metadata:e.metadata});return n}async function W(e,t,n={}){let r=await g.chatMessages.get(e);if(!r)return;let i={...r,...n,status:t,updatedAtISO:U()};return await g.chatMessages.put(i),i}async function Qt(e){let t=await g.chatThreads.get(e);t&&await g.chatThreads.put({...t,unreadCount:0,updatedAtISO:U()})}async function $t(){return(await g.chatThreads.toArray()).reduce((e,t)=>e+Math.max(0,t.unreadCount??0),0)}function en(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){return e.VITE_CHAT_SYNC_ENDPOINT||e.VITE_CLOUD_SYNC_ENDPOINT||void 0}function tn(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){return e.VITE_CHAT_VOICE_ENDPOINT||en(e)}function nn(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){return e.VITE_CHAT_UPDATES_ENDPOINT||en(e)}function rn(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){return e.VITE_CHAT_ACK_ENDPOINT||en(e)}function an(e){return e===`send`?`chat-send`:e===`updates`?`chat-updates`:e===`voice`?`chat-voice`:`chat-ack`}function on(e,t){let n=an(t),r=e?.trim()??``;if(!r)return``;if(/^https?:\/\//i.test(r)){let e=new URL(r);return e.pathname=e.pathname.replace(/\/api\/[^/]*$/i,`/api/${n}`),e.pathname.endsWith(`/api/${n}`)||(e.pathname=`/api/${n}`),e.search=``,e.hash=``,e.toString()}return!r.startsWith(`/`)&&!r.startsWith(`api/`)?on(`https://${r.replace(/^\/+/,``)}`,t):(r.startsWith(`/`)?r:`/${r}`).replace(/\/api\/[^/]*$/i,`/api/${n}`)}function sn(e,t={}){let n=e===`voice`?tn(t.env):e===`updates`?nn(t.env):e===`ack`?rn(t.env):en(t.env);return we(on(t.endpointUrl??n,e))}function cn(e,t){let n=`chat.errors.${e}`,r=N(n);return r===n?N(t):r}function ln(e,t){return{ok:!1,errorCode:e,errorMessage:cn(e,t)}}function un(e,t={}){let n={...t},r=e.accessToken?.trim();return r&&(n.authorization=`Bearer ${r}`),n}async function dn(e){let t=await e.json().catch(()=>null);return!t||typeof t!=`object`||typeof t.ok!=`boolean`?ln(`invalid_response`,`chat.errors.invalidResponse`):e.ok?t:{...t,ok:!1,errorCode:t.errorCode??`http_${e.status}`,errorMessage:t.errorMessage??cn(t.errorCode??`http_${e.status}`,`chat.errors.httpFailed`)}}async function fn(e,t={}){let n=sn(`send`,t);if(!n)return ln(`config_missing`,`chat.errors.configMissing`);try{return dn(await(t.fetchImpl??fetch)(n,{method:`POST`,headers:un(t,{"content-type":`application/json`}),body:JSON.stringify(e)}))}catch{return ln(`network_error`,`chat.errors.sendNetworkError`)}}function pn(e,t){let n=Object.entries(t).filter(e=>!!e[1]);return n.length===0?e:`${e}${e.includes(`?`)?`&`:`?`}${new URLSearchParams(n).toString()}`}async function mn(e={}){let t=sn(`updates`,e);if(!t)return{ok:!1,updates:[],errorCode:`config_missing`,errorMessage:N(`chat.errors.updatesNotConfigured`)};try{return dn(await(e.fetchImpl??fetch)(pn(t,{threadId:e.threadId,cursor:e.cursor}),{method:`GET`,headers:un(e)}))}catch{return{ok:!1,updates:[],errorCode:`network_error`,errorMessage:N(`chat.errors.updatesNetworkError`)}}}async function hn(e){let t=Array.isArray(e)?e:e.updates,n={applied:0,skippedDuplicate:0,idsToAck:[]};for(let e of t){if(!e?.id||e.direction!==`inbound`||!e.text?.trim())continue;let t=e.source??(e.role===`system`?`system`:`assistant`);(await Xt({id:e.id,threadId:e.threadId||`default`,role:e.role===`system`?`system`:`assistant`,source:t,text:e.text,status:e.status??`delivered`,createdAtISO:e.createdAtISO,telegramMessageId:e.telegramMessageId,actionRecordId:e.actionRecordId,metadata:{localOnly:!1,mock:e.metadata?.mock??t===`mock`,readOnly:e.metadata?.readOnly??!0,origin:e.metadata?.origin??`chat_updates`},incrementUnread:!0})).created?(n.applied+=1,n.idsToAck.push(e.id)):n.skippedDuplicate+=1}return n}async function gn(e,t={}){let n=sn(`ack`,t);if(!n)return{ok:!1,acknowledged:0,errorCode:`config_missing`,errorMessage:N(`chat.errors.ackNotConfigured`)};try{return dn(await(t.fetchImpl??fetch)(n,{method:`POST`,headers:un(t,{"content-type":`application/json`}),body:JSON.stringify({ids:e})}))}catch{return{ok:!1,acknowledged:0,errorCode:`network_error`,errorMessage:N(`chat.errors.ackNetworkError`)}}}async function _n(e,t={}){let n=sn(`voice`,t);if(!n)return ln(`config_missing`,`chat.errors.voiceNotConfigured`);try{return dn(await(t.fetchImpl??fetch)(n,{method:`POST`,headers:un(t,{"content-type":e.mimeType||e.blob.type||`application/octet-stream`,"x-rms-client-message-id":e.clientMessageId,"x-rms-thread-id":e.threadId,"x-rms-created-at":e.createdAtISO,"x-rms-duration-ms":String(Math.round(e.durationMs)),"x-rms-size-bytes":String(Math.round(e.sizeBytes)),"x-rms-source":`app`}),body:e.blob}))}catch{return ln(`network_error`,`chat.errors.voiceNetworkError`)}}var vn=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`];function yn(){return(typeof window<`u`?window.MediaRecorder:void 0)??globalThis.MediaRecorder}function bn(e,t){let n=Error(t);return n.name=`VoiceRecorderError`,n.code=e,n}function xn(e){let t=e instanceof DOMException||e instanceof Error?e.name:``;if(t===`NotAllowedError`||t===`SecurityError`)return`permission_denied`;if(t===`NotFoundError`||t===`DevicesNotFoundError`)return`no_microphone`;if(t===`NotSupportedError`)return`unsupported`;if(e&&typeof e==`object`&&`code`in e){let t=String(e.code);if([`unsupported`,`permission_denied`,`no_microphone`,`recorder_error`,`empty_recording`].includes(t))return t}return`unknown`}function Sn(){return!!(typeof(typeof navigator<`u`?navigator.mediaDevices:void 0)?.getUserMedia==`function`&&yn())}function Cn(e=yn()){return!e||typeof e.isTypeSupported!=`function`?``:vn.find(t=>e.isTypeSupported(t))??``}function wn(e){let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/60),r=t%60;return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function Tn(e){e.getTracks().forEach(e=>e.stop())}async function En(){if(!Sn())throw bn(`unsupported`,`Voice recording is not supported.`);try{return await navigator.mediaDevices.getUserMedia({audio:!0})}catch(e){throw bn(xn(e),`Microphone permission failed.`)}}function Dn(e,t={}){let n=yn();if(!n)throw bn(`unsupported`,`MediaRecorder is not supported.`);let r=Cn(n),i=new n(e,r?{mimeType:r}:void 0),a=[],o=t.now??(()=>Date.now()),s=0,c=!1;return i.addEventListener(`dataavailable`,e=>{e.data?.size&&a.push(e.data)}),{start(){c=!1,a.length=0,s=o(),i.start()},stop(){return new Promise((t,n)=>{if(i.addEventListener(`error`,()=>{Tn(e),n(bn(`recorder_error`,`Recording failed.`))},{once:!0}),i.addEventListener(`stop`,()=>{if(Tn(e),c)return;let l=new Blob(a,{type:i.mimeType||r||`audio/webm`});if(l.size<=0){n(bn(`empty_recording`,`Recording is empty.`));return}t({blob:l,mimeType:l.type,durationMs:Math.max(0,o()-s),sizeBytes:l.size,createdAtISO:new Date().toISOString()})},{once:!0}),i.state===`inactive`){Tn(e),n(bn(`recorder_error`,`Recorder is not active.`));return}i.stop()})},cancel(){c=!0,a.length=0,i.state!==`inactive`&&i.stop(),Tn(e)}}}function On(){return`voice_draft_${globalThis.crypto?.randomUUID?.()??`${Date.now()}_${Math.random().toString(36).slice(2)}`}`}function kn(e){let t=typeof URL<`u`?URL:void 0;return!t||typeof t.createObjectURL!=`function`?``:t.createObjectURL(e)}function An(e){let t=Math.max(0,Math.round(e));return t<1024?`${t} B`:t<1024*1024?`${Math.round(t/1024)} KB`:`${Math.round(t/(1024*1024))} MB`}function jn(e){if(e.blob.size<=0||e.sizeBytes<=0)throw Error(`empty_voice_draft`);return{id:On(),blob:e.blob,objectUrl:kn(e.blob),mimeType:e.mimeType||e.blob.type,durationMs:e.durationMs,sizeBytes:e.sizeBytes,createdAtISO:e.createdAtISO}}function Mn(e){if(!e?.objectUrl)return;let t=typeof URL<`u`?URL:void 0;!t||typeof t.revokeObjectURL!=`function`||t.revokeObjectURL(e.objectUrl)}function Nn(e){return{durationText:wn(e.durationMs),sizeText:An(e.sizeBytes),mimeTypeText:e.mimeType||`audio`}}var Pn=new Set([`transcription_unavailable`,`empty_transcript`,`transcription_failed`]);function Fn(e,t=y()){let n=`chat.voice.${e}`,r=v(n,void 0,t);return r===n?v(`chat.voice.default`,void 0,t):r}function In(e){return e?Pn.has(e):!1}function Ln(e,t,n=y()){switch(e){case`transcription_unavailable`:case`empty_transcript`:case`transcription_failed`:case`config_missing`:case`voice_upload_failed`:case`network_error`:return Fn(e,n);default:return v(`chat.voice.default`,void 0,n)}}function Rn(e,t=y()){return In(e)?v(`chat.voice.retryTranscription`,void 0,t):v(`chat.voice.retryUpload`,void 0,t)}async function zn(e){let t=(await M())?.app??null,n=t?.uiLocale===`en`?`en`:`ru`,r=Te(t,n),i=Me(),a=i?Oe(48):!1;return{pageRoute:e,snapshotAge:i?B():null,snapshotStale:a,uiLocale:n,persona:r}}var Bn=[`supplements.chatAssistant.guardrails.readOnly`,`supplements.chatAssistant.guardrails.noDiagnosis`,`supplements.chatAssistant.guardrails.useSummaryOnly`,`supplements.chatAssistant.guardrails.missingData`,`supplements.chatAssistant.guardrails.tone`];function Vn(e=`ru`){return Bn.map(t=>N(t,void 0,e))}Vn(`ru`);var Hn=[`magnesium_not_ready_without_labs`,`expiring_or_expired_products`,`labs_or_profile_gaps`,`plan_needs_attention`,`vitamin_d3_blocked_or_caution`],Un=4,Wn=12,Gn=20;function Kn(e,t){return e.slice(0,t)}function qn(e){return{...e,today:{...e.today,slots:e.today.slots.slice(0,Wn)},activePlan:e.activePlan.slice(0,Gn),risk:{...e.risk,highlights:Kn(e.risk.highlights,Un)},safety:{...e.safety,highlights:Kn(e.safety.highlights,Un)},suggestions:{...e.suggestions,highlights:Kn(e.suggestions.highlights,Un)}}}function Jn(e){try{return JSON.stringify(e).length}catch{return 0}}function Yn(e){let t=e,n=!1,r=t.moduleSummaries?.supplements;if(r&&typeof r==`object`&&r&&`compact`in r){let e=r.compact;if(e){let i=qn(e);t={...t,moduleSummaries:{...t.moduleSummaries,supplements:{...r,compact:i}},supplementAssistant:t.supplementAssistant?{...t.supplementAssistant,supplementSummary:i}:t.supplementAssistant},n=!0}}let i=Jn(t);if(i>14e3&&t.supplementAssistant){let e=qn(t.supplementAssistant.supplementSummary),r=t.moduleSummaries?.supplements;t={...t,moduleSummaries:{readOnly:!0,supplements:{guardrails:r?.guardrails??[],interpretationHints:r?.interpretationHints??[],compact:e,readOnlyNotice:e.readOnlyNotice}},supplementAssistant:{...t.supplementAssistant,supplementSummary:e}},n=!0,i=Jn(t)}return{context:t,trimmed:n,charCount:i}}function Xn(e){return e===`/supplements`||e.startsWith(`/supplements/`)}function Zn(e){let t=[];(e.dataNeeds.missingLabsCount>0||e.dataNeeds.outdatedLabsCount>0)&&t.push(`labs_or_profile_gaps`),(e.inventory.expiringSoonCount>0||e.inventory.expiredCount>0)&&t.push(`expiring_or_expired_products`),(e.inventory.lowStockCount>0||e.shopping.runningLowCount>0)&&t.push(`low_stock_or_shopping`),(e.suggestions.needsAttentionCount>0||e.safety.needsAttentionCount>0)&&t.push(`plan_needs_attention`),e.safety.blockedCount>0&&t.push(`plan_items_blocked`);let n=[...e.risk.highlights,...e.safety.highlights,...e.suggestions.highlights].join(` `).toLowerCase();return/магн|magnesium/.test(n)&&e.dataNeeds.missingLabsCount>0&&t.push(`magnesium_not_ready_without_labs`),e.safety.blockedCount>0&&(/d3|витамин d|д3/.test(n)||e.activePlan.some(e=>/d3|витамин d|д3/i.test(e.displayName)))&&t.push(`vitamin_d3_blocked_or_caution`),[...new Set(t)]}function Qn(e){let t=e.locale===`en`?`en`:`ru`;return{readOnly:!0,pageRoute:e.pageRoute,generatedAtISO:e.generatedAtISO??new Date().toISOString(),guardrailsVersion:1,guardrails:Vn(t),qaTopics:Hn,interpretationHints:Zn(e.summary),supplementSummary:e.summary,uiLocale:t}}function $n(e){let t=Me(),n=t?Oe(48):!1,r=t?B():null,i=t?r??`never`:`local-only`;return Yn({pageRoute:e.pageRoute,snapshotAge:i,snapshotStale:n,uiLocale:e.uiLocale??`ru`,supportedTelegramActions:[],moduleSummaries:{readOnly:!0,supplements:{guardrails:[...e.guardrails],interpretationHints:e.interpretationHints,compact:e.supplementSummary,readOnlyNotice:e.supplementSummary.readOnlyNotice}},supplementAssistant:e}).context}async function er(e,t){if(!Xn(e))return null;let n=t?.dateISO??F(),r=t?.nowISO??new Date().toISOString(),[i,a,o,s,c]=await Promise.all([ve(),M(),nt(),Ye(),et()]),l=a?.app?.uiLocale===`en`?`en`:`ru`;return Qn({pageRoute:e,summary:De({dateISO:n,nowISO:r,generatedAtISO:r,planItems:i,supplementIntakeLogs:[],products:s,planProductLinks:c,labResults:o,supplementProfile:a?.app?.supplementProfile,safetyProfile:a?.app?.supplementSafetyProfile,locale:l}),generatedAtISO:r,locale:l})}var tr=6e4;function nr(e=48){return Me()&&Oe(e)}function rr(e=48){let[t,n]=(0,V.useState)(0),r=(0,V.useCallback)(()=>n(e=>e+1),[]),i=(0,V.useMemo)(()=>nr(e),[e,t]);return(0,V.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&r()};document.addEventListener(`visibilitychange`,e);let t=window.setInterval(r,tr);return()=>{document.removeEventListener(`visibilitychange`,e),window.clearInterval(t)}},[r]),{visible:i,bump:r}}function ir({visible:e,className:t,messageKey:n=`today.cloudStaleBanner`,variant:r=`card`,syncState:i}){let a=T(),o=rr(),{busy:s,message:c,sync:l}=i;if(!(e??o.visible))return null;let u=(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(`p`,{style:{margin:0,fontSize:r===`compact`?13:14},children:a(n)}),c&&(0,H.jsx)(`p`,{style:{margin:r===`compact`?`6px 0 0`:`8px 0 0`,fontSize:r===`compact`?12:13,color:`var(--color-text-muted)`},children:c}),(0,H.jsx)(`div`,{style:{marginTop:r===`compact`?8:12},children:(0,H.jsx)(it,{variant:`primary`,disabled:s,onClick:()=>void l(),children:a(s?`today.syncing`:`today.cloudSyncNow`)})})]});return r===`compact`?(0,H.jsx)(`div`,{className:`chat-drawer-stale-banner${t?` ${t}`:``}`,role:`status`,style:{marginTop:8,padding:`8px 10px`,borderRadius:`var(--radius-sm)`,background:`var(--color-surface-elevated)`,color:`var(--color-warning, #b8860b)`},children:u}):(0,H.jsx)(A,{className:t,style:{marginBottom:12,padding:12},children:u})}function ar({syncState:e,onSynced:t,...n}){return e?(0,H.jsx)(ir,{...n,syncState:e,onSynced:t}):(0,H.jsx)(or,{onSynced:t,...n})}function or({onSynced:e,...t}){let{bump:n}=rr(),r=ct(()=>{n(),e?.()});return(0,H.jsx)(ir,{...t,syncState:r,onSynced:e})}var sr=6e4,cr=560;function lr(){return typeof window>`u`?cr:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?0:cr}function ur(e){return e.role===`system`?N(`chat.authorSystem`):e.role===`assistant`?N(`chat.authorAssistant`):N(`chat.authorYou`)}function dr(e){return e.direction===`outbound`?e.status===`pending`?N(`chat.statusPending`):e.status===`sent`||e.status===`delivered`?N(`chat.statusSent`):e.status===`failed`?N(`chat.statusFailed`):e.status===`local`?N(`chat.statusLocal`):e.status:null}function fr(e){if(e instanceof Error&&e.message===`empty_voice_draft`)return N(`chat.voiceErrors.emptyDraft`);let t=xn(e);return N(t===`unsupported`?`chat.voiceErrors.unsupported`:t===`permission_denied`?`chat.voiceErrors.permissionDenied`:t===`no_microphone`?`chat.voiceErrors.noMicrophone`:t===`empty_recording`?`chat.voiceErrors.emptyRecording`:`chat.voiceErrors.recordFailed`)}function pr(e){return N(`chat.voiceMessage`,{duration:wn(e)})}function mr(){return(0,H.jsx)(`svg`,{className:`chat-drawer-send__icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,H.jsx)(`path`,{fill:`currentColor`,d:`M2.5 20.5 22 12 2.5 3.5l1.8 6.6L14 12l-9.7 1.9-1.8 6.6Z`})})}function hr({open:e,onClose:t,onRead:n}){let r=T(),i=(0,V.useRef)(null),[a,o]=(0,V.useState)(e),[s,c]=(0,V.useState)(!1);(0,V.useEffect)(()=>{if(e){o(!0),c(!1);return}if(!a)return;c(!0);let t=window.setTimeout(()=>{o(!1),c(!1)},lr());return()=>window.clearTimeout(t)},[e,a]),Ft(i,{active:a&&!s,onClose:t,initialFocusSelector:`.chat-drawer-icon-button--close`});let l=d(),{session:u}=at(),[f,p]=(0,V.useState)(null),[m,h]=(0,V.useState)([]),[g,_]=(0,V.useState)(``),[v,y]=(0,V.useState)(!1),[b,x]=(0,V.useState)(null),[S,C]=(0,V.useState)(null),[w,ee]=(0,V.useState)(!1),[te,ne]=(0,V.useState)(null),[E,D]=(0,V.useState)(`idle`),[re,O]=(0,V.useState)(0),[k,A]=(0,V.useState)(null),[ie,j]=(0,V.useState)(null),[ae,P]=(0,V.useState)(null),[F,I]=(0,V.useState)(null),[L,oe]=(0,V.useState)(!1),[R,se]=(0,V.useState)(``),[ce,le]=(0,V.useState)(!1),[ue,de]=(0,V.useState)(!1),[fe,pe]=(0,V.useState)(0),{busy:me,message:he,sync:ge}=ct(()=>pe(e=>e+1)),_e=(0,V.useRef)(null),ve=(0,V.useRef)(null),ye=(0,V.useRef)(null),be=(0,V.useRef)(null),z=(0,V.useRef)(null),xe=(0,V.useRef)(0),Se=(0,V.useRef)(null),Ce=(0,V.useRef)(null),we=E===`requesting_permission`||E===`recording`,Te=()=>{window.requestAnimationFrame(()=>{be.current?.scrollIntoView({block:`end`})})},Ee=()=>{Se.current!=null&&(window.clearInterval(Se.current),Se.current=null),Ce.current!=null&&(window.clearTimeout(Ce.current),Ce.current=null)},De=async()=>{let e=z.current;if(e){Ee();try{let t=await e.stop();A(jn(t)),D(`stopped`),O(t.durationMs)}catch(e){P(null),j(fr(e)),D(`error`)}finally{z.current=null}}},ke=()=>{Ee(),z.current?.cancel(),z.current=null,D(`idle`),O(0),A(null),I(null),j(null),P(null)},Ae=()=>{A(null),D(`idle`),O(0),I(null),j(null),P(null),je()},je=async()=>{if(j(null),P(null),A(null),I(null),O(0),!Sn()){j(N(`chat.voiceErrors.unsupported`)),D(`error`);return}D(`requesting_permission`);try{let e=Dn(await En());z.current=e,xe.current=Date.now(),e.start(),D(`recording`),Se.current=window.setInterval(()=>{O(Date.now()-xe.current)},500),Ce.current=window.setTimeout(()=>{De()},sr)}catch(e){Ee(),z.current=null,P(null),j(fr(e)),D(`error`)}};if((0,V.useEffect)(()=>{if(!e)return;let t=!1;return zn(l.pathname).then(e=>{t||(ve.current=e,de(e.snapshotStale))}),()=>{t=!0}},[l.pathname,e,fe]),(0,V.useEffect)(()=>{if(!Xn(l.pathname)){_e.current=null,le(!1);return}let e=!1;return er(l.pathname).then(t=>{if(e||!t)return;let n=$n(t);_e.current=n,le(!!n.snapshotStale)}),()=>{e=!0}},[l.pathname,e,fe]),(0,V.useEffect)(()=>{if(!e)return;let r=!1,i=window.setTimeout(()=>ye.current?.focus(),120),a=e=>{e.key===`Escape`&&t()};return window.addEventListener(`keydown`,a),(async()=>{y(!0),x(null);try{se((await M())?.app?.telegramAutomation?.chatSyncEndpointUrl?.trim()??``);let e=await Wt(),t=await Gt(e.id);if(await Qt(e.id),r)return;p(e.id),h(t),n?.(),Te()}catch{r||x(N(`chat.loadHistoryFailed`))}finally{r||y(!1)}})(),()=>{r=!0,window.clearTimeout(i),window.removeEventListener(`keydown`,a)}},[t,n,e]),(0,V.useEffect)(()=>{e&&Te()},[m,e]),(0,V.useEffect)(()=>{e||(Ee(),z.current?.cancel(),z.current=null,D(`idle`),O(0))},[e]),(0,V.useEffect)(()=>()=>Mn(k),[k]),!a)return null;let Ne=e=>{s||e.target===e.currentTarget&&t()},B=async e=>{let t=await Gt(e);await Qt(e),h(t),n?.(),Te()},Pe=async()=>{if(!(!f||w)){ee(!0),ne(null);try{let e=await mn({threadId:f,endpointUrl:R||void 0,accessToken:u?.accessToken});if(!e.ok){ne(e.errorCode===`config_missing`?N(`chat.syncNotConfigured`):N(`chat.syncFailed`));return}let t=await hn(e);t.idsToAck.length>0&&await gn(t.idsToAck,{endpointUrl:R||void 0,accessToken:u?.accessToken}),await B(f),ne(t.applied>0?N(`chat.syncUpdated`):N(`chat.syncNoNew`))}catch{ne(N(`chat.syncFailed`))}finally{ee(!1)}}},Fe=async e=>{if(!f)return;let t=await fn({clientMessageId:e.id,threadId:f,text:e.text,createdAtISO:e.createdAtISO,source:`app`,context:{...ve.current??{},..._e.current??{}}},{endpointUrl:R||void 0,accessToken:u?.accessToken});if(t.ok){if(await W(e.id,t.status===`mocked`?`sent`:`delivered`,{serverMessageId:t.serverMessageId,error:void 0}),t.assistantMessage?.id&&t.assistantMessage.text){let e=t.status===`mocked`?N(`chat.mockReply`):t.assistantMessage.text;await Zt({id:t.assistantMessage.id,threadId:f,text:e,createdAtISO:t.assistantMessage.createdAtISO,source:t.status===`mocked`?`mock`:`assistant`,metadata:{mock:t.status===`mocked`}})}}else t.errorCode===`config_missing`?(await W(e.id,`local`,{error:void 0}),await Yt(f,N(`chat.backendStub`),{source:`mock`})):(await W(e.id,`failed`,{error:t.errorMessage??t.errorCode}),x(N(`chat.sendError`)))},Ie=async()=>{let e=g.trim();if(!(!e||!f)){_(``),x(null);try{let t=await Jt(f,e,{status:`pending`});await B(f),await Fe(t),await B(f)}catch{_(e),x(N(`chat.saveLocalFailed`))}}},Le=async e=>{if(!(!f||e.direction!==`outbound`||e.status===`pending`)){x(null),C(e.id);try{let t=await W(e.id,`pending`,{error:void 0});await B(f),await Fe(t??e),await B(f)}catch{await W(e.id,`failed`,{error:`retry_failed`}),x(N(`chat.sendError`)),await B(f)}finally{C(null)}}},Re=async(e,t)=>{if(!f)return;let n=await _n({clientMessageId:e.id,threadId:f,blob:t.blob,mimeType:t.mimeType,durationMs:t.durationMs,sizeBytes:t.sizeBytes,createdAtISO:e.createdAtISO},{endpointUrl:R||void 0,accessToken:u?.accessToken});if(n.ok){await W(e.id,`sent`,{serverMessageId:n.serverMessageId,error:void 0}),n.voiceMessage?.id&&n.voiceMessage.text&&await Zt({id:n.voiceMessage.id,threadId:f,text:n.voiceMessage.text,createdAtISO:n.voiceMessage.createdAtISO,source:`system`,metadata:{voiceDraft:!0,transcriptText:n.voiceMessage.transcriptText??n.transcript?.text,durationMs:n.voiceMessage.durationMs,sizeBytes:n.voiceMessage.sizeBytes,mimeType:n.voiceMessage.mimeType}}),n.assistantMessage?.id&&n.assistantMessage.text?await Zt({id:n.assistantMessage.id,threadId:f,text:n.assistantMessage.text,createdAtISO:n.assistantMessage.createdAtISO,source:`assistant`,metadata:{voiceDraft:!0,transcriptText:n.transcript?.text}}):n.assistantErrorCode&&n.voiceMessage?.id&&await Zt({id:`${n.voiceMessage.id}_assistant_error`,threadId:f,text:N(`chat.assistantUnavailable`),createdAtISO:n.voiceMessage.createdAtISO,source:`system`,metadata:{voiceDraft:!0,transcriptText:n.transcript?.text}}),A(null),I(null),D(`idle`),O(0),j(null),P(null);return}let r=n.errorCode??`voice_upload_failed`;await W(e.id,`failed`,{error:r}),P(r),j(Ln(r,n.errorMessage))},ze=async()=>{if(!f||!k||L)return;j(null),P(null),oe(!0);let e=F;try{let t;if(F){let e=m.find(e=>e.id===F);t=await W(F,`pending`,{error:void 0})??e??{id:F,threadId:f,direction:`outbound`,role:`user`,source:`app`,text:pr(k.durationMs),status:`pending`,createdAtISO:k.createdAtISO,updatedAtISO:k.createdAtISO,metadata:{localOnly:!1,voiceDraft:!0}}}else t=await Jt(f,pr(k.durationMs),{status:`pending`,metadata:{localOnly:!1,voiceDraft:!0,durationMs:k.durationMs,sizeBytes:k.sizeBytes,mimeType:k.mimeType}}),I(t.id);e=t.id,await B(f),await Re(t,k),await B(f)}catch{e&&await W(e,`failed`,{error:`voice_upload_failed`}),P(`voice_upload_failed`),j(Ln(`voice_upload_failed`)),f&&await B(f)}finally{oe(!1)}},Be=e=>{e.key!==`Enter`||e.shiftKey||(e.preventDefault(),Ie())},Ve=k?Nn(k):null,He=Me()&&(ue||ce||Oe(48));return(0,H.jsx)(`div`,{className:`chat-drawer-overlay${s?` chat-drawer-overlay--closing`:``}`,onClick:Ne,children:(0,H.jsxs)(`aside`,{ref:i,className:`chat-drawer-panel${s?` chat-drawer-panel--closing`:``}`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`chat-drawer-title`,children:[(0,H.jsxs)(`div`,{className:`chat-drawer-header`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h2`,{id:`chat-drawer-title`,className:`chat-drawer-title`,children:r(`chat.title`)}),(0,H.jsx)(`p`,{className:`chat-drawer-description`,children:r(`chat.subtitle`)}),Xn(l.pathname)?(0,H.jsx)(`p`,{className:`chat-drawer-description`,style:{marginTop:4},children:r(`chat.supplementsHint`)}):null,(0,H.jsx)(ar,{variant:`compact`,visible:He,messageKey:`chat.staleSync`,syncState:{busy:me,message:he,sync:ge}})]}),(0,H.jsxs)(`div`,{className:`chat-drawer-header-actions`,children:[(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-icon-button`,onClick:()=>void Pe(),disabled:!f||w,"aria-label":r(w?`chat.refreshing`:`chat.refresh`),children:(0,H.jsx)(kt,{})}),(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-icon-button chat-drawer-icon-button--close`,onClick:t,"aria-label":r(`chat.close`),children:(0,H.jsx)(Ot,{})})]})]}),(0,H.jsxs)(`div`,{className:`chat-drawer-messages`,"aria-live":`polite`,children:[v&&(0,H.jsx)(`div`,{className:`chat-drawer-state`,children:r(`chat.loading`)}),b&&(0,H.jsx)(`div`,{className:`chat-drawer-state chat-drawer-state--error`,role:`alert`,children:b}),te&&(0,H.jsx)(`div`,{className:`chat-drawer-state`,children:te}),!v&&!b&&m.length===0&&(0,H.jsx)(`div`,{className:`chat-drawer-state`,children:r(`chat.empty`)}),m.map(e=>(0,H.jsxs)(`div`,{className:`chat-drawer-message chat-drawer-message--${e.role}`,children:[(0,H.jsx)(`div`,{className:`chat-drawer-message-author`,children:ur(e)}),(0,H.jsx)(`div`,{className:`chat-drawer-message-text`,children:e.text}),e.status===`failed`&&e.direction===`outbound`&&(0,H.jsx)(`div`,{className:`chat-drawer-message-error`,role:`alert`,children:e.metadata?.voiceDraft?Ln(e.error):r(`chat.sendFailed`)}),dr(e)&&(0,H.jsx)(`div`,{className:`chat-drawer-message-status chat-drawer-message-status--${e.status}`,children:dr(e)}),e.status===`failed`&&e.direction===`outbound`&&e.metadata?.voiceDraft&&k&&F===e.id&&(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-retry`,onClick:()=>void ze(),disabled:L||!f,"aria-label":Rn(e.error),children:L?r(`chat.retrying`):Rn(e.error)}),e.status===`failed`&&e.direction===`outbound`&&e.metadata?.voiceDraft&&(!k||F!==e.id)&&(0,H.jsx)(`p`,{className:`chat-drawer-message-error-hint`,children:r(`chat.voiceUnavailableHint`)}),e.status===`failed`&&e.direction===`outbound`&&!e.metadata?.voiceDraft&&(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-retry`,onClick:()=>void Le(e),disabled:S===e.id,"aria-label":r(`chat.retryAria`),children:S===e.id?r(`chat.retrying`):r(`chat.retry`)})]},e.id)),(0,H.jsx)(`div`,{ref:be})]}),(0,H.jsxs)(`form`,{className:`chat-drawer-form`,onSubmit:e=>{e.preventDefault(),Ie()},children:[(0,H.jsx)(`label`,{className:`chat-drawer-input-label`,htmlFor:`chat-drawer-input`,children:r(`chat.messageLabel`)}),(0,H.jsx)(`textarea`,{id:`chat-drawer-input`,ref:ye,className:`chat-drawer-input`,value:g,onChange:e=>_(e.target.value),onKeyDown:Be,rows:3,placeholder:r(`chat.placeholder`),disabled:we}),E===`recording`&&(0,H.jsxs)(`div`,{className:`chat-drawer-recording`,role:`status`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`strong`,{children:r(`chat.recording`)}),(0,H.jsx)(`span`,{className:`chat-drawer-recording-note`,children:r(`chat.recordingMax`)})]}),(0,H.jsxs)(`div`,{className:`chat-drawer-recording-controls`,children:[(0,H.jsx)(`span`,{className:`chat-drawer-recording-timer`,children:wn(re)}),(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-voice-secondary`,onClick:()=>void De(),"aria-label":r(`chat.stopRecordingAria`),children:r(`chat.stopRecording`)}),(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-voice-secondary`,onClick:ke,"aria-label":r(`chat.cancelRecordingAria`),children:r(`chat.cancelRecording`)})]})]}),k&&(0,H.jsxs)(`div`,{className:`chat-drawer-voice-draft`,children:[(0,H.jsx)(`strong`,{children:r(`chat.voiceReady`)}),Ve&&(0,H.jsxs)(`div`,{className:`chat-drawer-voice-summary`,children:[(0,H.jsx)(`span`,{children:r(`chat.duration`,{value:Ve.durationText})}),(0,H.jsx)(`span`,{children:r(`chat.size`,{value:Ve.sizeText})}),(0,H.jsx)(`span`,{children:r(`chat.format`,{value:Ve.mimeTypeText})})]}),k.objectUrl?(0,H.jsx)(`audio`,{className:`chat-drawer-voice-preview`,controls:!0,src:k.objectUrl,children:r(`chat.audioUnsupported`)}):(0,H.jsx)(`div`,{className:`chat-drawer-voice-preview-fallback`,children:r(`chat.previewUnavailable`)}),(0,H.jsx)(`div`,{className:`chat-drawer-voice-helper`,children:r(`chat.voiceDraftNote`)}),(0,H.jsxs)(`div`,{className:`chat-drawer-voice-draft-actions`,children:[(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-voice-secondary`,onClick:ke,disabled:L,"aria-label":r(`chat.deleteVoiceAria`),children:r(`chat.deleteVoice`)}),(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-voice-secondary`,onClick:Ae,disabled:L,"aria-label":r(`chat.rerecordVoiceAria`),children:r(`chat.rerecordVoice`)}),(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-voice-send`,onClick:()=>void ze(),disabled:L||!f,"aria-label":r(F?`chat.resendVoiceAria`:`chat.sendVoiceAria`),children:r(L?`chat.sendingVoice`:F?`chat.resendVoice`:`chat.sendVoice`)})]})]}),ie&&(0,H.jsxs)(`div`,{className:`chat-drawer-voice-error`,role:`alert`,children:[(0,H.jsx)(`p`,{className:`chat-drawer-voice-error-text`,children:ie}),k&&(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-retry`,onClick:()=>void ze(),disabled:L||!f,"aria-label":Rn(ae),children:L?r(`chat.retrying`):Rn(ae)})]}),(0,H.jsxs)(`div`,{className:`chat-drawer-form-actions`,children:[(0,H.jsx)(`button`,{type:`button`,className:`chat-drawer-icon-button chat-drawer-icon-button--mic${E===`requesting_permission`?` chat-drawer-icon-button--busy`:``}`,onClick:()=>void je(),disabled:v||we,"aria-label":r(E===`requesting_permission`?`chat.micRequestingAria`:`chat.startRecordingAria`),children:(0,H.jsx)(Et,{})}),(0,H.jsx)(`button`,{type:`submit`,className:`chat-drawer-send`,disabled:!g.trim()||!f||v||we,"aria-label":r(`chat.send`),children:(0,H.jsx)(mr,{})})]})]})]})})}var gr=280;function _r(){let e=T(),[t,n]=(0,V.useState)(!1);return(0,V.useEffect)(()=>{let e=()=>{n(window.scrollY>gr)};return e(),window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[]),t?(0,H.jsx)(`button`,{type:`button`,className:`scroll-to-top-fab`,"aria-label":e(`common.scrollTop`),onClick:()=>window.scrollTo({top:0,behavior:`smooth`}),children:`↑`}):null}function vr(){return crypto.randomUUID?.()??`sub_rem_${Date.now()}_${Math.random().toString(36).slice(2)}`}function yr(){return new Date().toISOString()}function br(e){return`${e}T09:00:00.000Z`}function xr(e,t){let n=new Date(br(e)).getTime();return new Date(n-t*60*1e3).toISOString()}function Sr(e,t,n){return`sub:${e}:${t}:${n}`}function Cr(e,t=60){let n=Date.now(),r=t*24*60*60*1e3,i=[];for(let t of e){if(!t.active)continue;let e=new Date(br(t.nextChargeDateISO)).getTime();if(!(en+r))for(let e of t.reminderOffsetMinutes){let r=xr(t.nextChargeDateISO,e);new Date(r).getTime()e.dedupeKey)),n=await g.subscriptionReminders.toArray(),r=n.filter(e=>!t.has(e.dedupeKey)).map(e=>e.id);await g.transaction(`rw`,g.subscriptionReminders,async()=>{r.length&&await g.subscriptionReminders.bulkDelete(r);for(let t of e){let e=n.find(e=>e.dedupeKey===t.dedupeKey),r={...t,id:e?.id??vr(),status:e?.status===`sent`||e?.status===`done`?e.status:`active`,snoozedUntilISO:e?.snoozedUntilISO,updatedAtISO:yr()};await g.subscriptionReminders.put(r)}})}async function Tr(e=yr()){let t=await xe(),n=new Map(t.map(e=>[e.id,e]));return(await g.subscriptionReminders.toArray()).filter(t=>t.status!==`active`||t.snoozedUntilISO&&t.snoozedUntilISO>e?!1:t.notifyAtISO<=e).map(e=>{let t=n.get(e.subscriptionId);return{...e,serviceName:t?.serviceName??v(`finance.subscriptions.defaultName`),priceRub:t?.priceRub??0}}).sort((e,t)=>e.notifyAtISO.localeCompare(t.notifyAtISO))}async function Er(e){let t=await g.subscriptionReminders.get(e);t&&await g.subscriptionReminders.put({...t,status:`sent`,updatedAtISO:yr()})}var Dr=300*1e3;function Or(){let[e,t]=(0,V.useState)(null),n=(0,V.useRef)(!1),r=(0,V.useCallback)(async()=>{if(!n.current){n.current=!0;try{await wr();let e=(await Tr())[0];if(!e)return;t(t=>t?.id===e.id?t:{id:e.id,serviceName:e.serviceName,priceRub:e.priceRub,chargeDateISO:e.chargeDateISO})}finally{n.current=!1}}},[]);return(0,V.useEffect)(()=>{r();let e=window.setInterval(()=>void r(),Dr),t=()=>{document.visibilityState===`visible`&&r()};return document.addEventListener(`visibilitychange`,t),()=>{window.clearInterval(e),document.removeEventListener(`visibilitychange`,t)}},[r]),{nudge:e,dismissNudge:(0,V.useCallback)(async()=>{e&&await Er(e.id),t(null),r()},[e,r])}}function kr({nudge:e,onDismiss:t,onOpenSubscriptions:n}){let r=T();return(0,H.jsx)(`div`,{className:`nudge-modal-overlay`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`sub-reminder-title`,children:(0,H.jsxs)(A,{className:`nudge-modal-card`,children:[(0,H.jsx)(`h2`,{id:`sub-reminder-title`,className:`nudge-modal-title`,children:r(`subscriptionReminder.title`)}),(0,H.jsxs)(`p`,{className:`nudge-modal-text`,children:[e.serviceName,` — `,e.priceRub.toLocaleString(),` `,r(`common.rub`),e.chargeDateISO?` · ${e.chargeDateISO}`:``]}),(0,H.jsxs)(`div`,{className:`nudge-modal-actions`,style:{flexDirection:`column`,alignItems:`stretch`},children:[(0,H.jsx)(it,{variant:`primary`,onClick:n,children:r(`subscriptionReminder.open`)}),(0,H.jsx)(it,{variant:`secondary`,onClick:t,children:r(`common.ok`)})]})]})})}var Ar=`rms-bootstrap-refresh`;function jr(){typeof window<`u`&&window.dispatchEvent(new Event(Ar))}function G(e){return v(`auth.errors.${e}`,void 0,y())}var Mr=3e3,Nr=600*1e3;function Pr(e){let t=e.telegramUserId??e.telegram_user_id;return{telegramUserId:typeof t==`string`||typeof t==`number`?t:null,telegramUsername:typeof e.telegramUsername==`string`?e.telegramUsername:typeof e.telegram_username==`string`?e.telegram_username:null,telegramDisplayName:typeof e.telegramDisplayName==`string`?e.telegramDisplayName:typeof e.telegram_display_name==`string`?e.telegram_display_name:null}}function Fr(e){return e.status===`confirmed`&&typeof e.chatId==`string`&&!!e.chatId}function Ir(e,t){let[n,r]=(0,V.useState)(null),[i,a]=(0,V.useState)(`idle`),[o,s]=(0,V.useState)(null),[c,l]=(0,V.useState)(null),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(null),h=(0,V.useRef)(!1),g=(0,V.useCallback)(e=>Fr(e)?(r(typeof e.code==`string`?e.code:null),s(e.chatId),l(Pr(e)),a(`confirmed`),d(null),!0):!1,[]),_=(0,V.useCallback)(async t=>{let r=Ge();if(!r||!e)return!1;try{let t=await fetch(`${r}/api/telegram-pairing-status`,{headers:{authorization:`Bearer ${e}`}}),n=await t.json().catch(()=>({}));if(!t.ok){if(t.status===401)return a(`error`),d(G(`sessionExpired`)),!1;if(t.status>=500)return a(`error`),d(typeof n.error==`string`?n.error:G(`pairingStatusFailed`)),!1}if(g(n))return!0}catch{}let i=t??n;if(!i)return!1;try{let t=await fetch(`${r}/api/telegram-pairing-status?code=${encodeURIComponent(i)}`,{headers:{authorization:`Bearer ${e}`}}),n=await t.json().catch(()=>({}));if(!t.ok){if(t.status===401)return a(`error`),d(G(`sessionExpired`)),!1;if(t.status>=500)return a(`error`),d(typeof n.error==`string`?n.error:G(`pairingStatusFailed`)),!1}if(g(n))return!0;if(n.status===`expired`||n.status===`failed`)return a(`expired`),d(G(`pairingCodeExpired`)),!1}catch{}return!1},[e,n,g]),v=(0,V.useCallback)(async()=>_(),[_]),y=(0,V.useCallback)(async()=>{if(h.current)return;let n=Ge();if(!n||!e){d(G(`pairingNeedLogin`)),a(`error`);return}h.current=!0,d(null);try{let i=await fetch(`${n}/api/telegram-pairing-start`,{method:`POST`,headers:{authorization:`Bearer ${e}`,"content-type":`application/json`},body:JSON.stringify({telegramUserId:t?.telegramUserId??null,telegramUsername:t?.telegramUsername??null,telegramDisplayName:t?.telegramDisplayName??null})}),o=await i.json().catch(()=>({}));if(!i.ok){d(typeof o.error==`string`?o.error:G(`pairingCodeFailed`)),a(`error`);return}let s=String(o.code??``);r(s),p(typeof o.expiresAtISO==`string`?o.expiresAtISO:null),a(`pending`),m.current=Date.now(),_(s)}catch{d(G(`noNetwork`)),a(`error`)}finally{h.current=!1}},[e,t?.telegramUserId,t?.telegramUsername,t?.telegramDisplayName,_]);return(0,V.useEffect)(()=>{if(i!==`pending`||!e)return;_();let t=window.setInterval(()=>{if(m.current&&Date.now()-m.current>Nr){a(`expired`),d(G(`pairingCodeExpired`));return}_()},Mr),n=()=>{document.visibilityState===`visible`&&_()};return document.addEventListener(`visibilitychange`,n),()=>{window.clearInterval(t),document.removeEventListener(`visibilitychange`,n)}},[i,e,_]),{code:n,status:i,chatId:o,profile:c,error:u,expiresAtISO:f,startPairing:y,syncExistingPairing:v}}async function Lr(e,t){let n=e.trim();if(!n)return!1;let r=(await M())?.app?.telegramAutomation;return r?.chatId===n&&r?.verifiedAtISO&&(t?.telegramUserId==null||r.telegramUserId===t.telegramUserId)?!1:(await b({app:{telegramAutomation:{...r,enabled:!0,chatId:n,telegramUserId:t?.telegramUserId??r?.telegramUserId??void 0,telegramUsername:t?.telegramUsername??r?.telegramUsername??void 0,telegramDisplayName:t?.telegramDisplayName??r?.telegramDisplayName??void 0,verifiedAtISO:r?.verifiedAtISO??new Date().toISOString()}}}),!0)}function Rr(){let{authEnabled:e,session:t,loading:n,isAuthenticated:r}=at(),{chatId:i,profile:a,status:o,syncExistingPairing:s}=Ir(t?.accessToken,t),c=(0,V.useRef)(!1),l=(0,V.useRef)(null);return(0,V.useEffect)(()=>{!e||n||!r||!t?.accessToken||c.current||(c.current=!0,s())},[e,n,r,t?.accessToken,s]),(0,V.useEffect)(()=>{o!==`confirmed`||!i||l.current===i||(l.current=i,(async()=>{await Lr(i,a)&&jr()})())},[o,i,a]),null}function zr(e,t){switch(e.id){case`finance`:return t.startsWith(`/more/money`)||t.startsWith(`/analytics`);case`supplements`:return t.startsWith(`/supplements`);case`nutrition`:return t.startsWith(`/nutrition`);case`money`:return t.startsWith(`/money`);default:return t===e.to||t.startsWith(`${e.to}/`)}}var Br=[`/more/goals`,`/more/interface`,`/more/nutrition`,`/more/money`,`/more/guardrails`,`/more/guide`,`/more/telegram`,`/automation`,`/more/about`,`/more/data`];function Vr(e){return Br.some(t=>e===t||e.startsWith(`${t}/`))}function Hr(e){return e.startsWith(`/more/interface`)?`nav.interface`:e.startsWith(`/more/goals`)?`nav.goals`:e.startsWith(`/more/nutrition`)?`nav.nutrition`:e.startsWith(`/more/money`)?`nav.finance`:e.startsWith(`/more/guardrails`)?`nav.guardrails`:e.startsWith(`/more/data`)?`nav.data`:e.startsWith(`/more/about`)?`nav.about`:e.startsWith(`/more/telegram`)?`nav.telegram`:e.startsWith(`/more/guide`)?`nav.guide`:e.startsWith(`/more/dev`)?`nav.dev`:e.startsWith(`/tasks`)?`nav.tasks`:e.startsWith(`/habits`)?`nav.habits`:e.startsWith(`/money`)?`nav.money`:e.startsWith(`/nutrition`)?`nav.nutrition`:e.startsWith(`/trainings`)?`nav.trainings`:e.startsWith(`/supplements`)?`nav.supplements`:e.startsWith(`/automation`)?`nav.automation`:e.startsWith(`/analytics`)?`nav.analytics`:e.startsWith(`/more`)?`nav.settings`:`nav.today`}function Ur(e,t){let n=[`nav-tile`,`nav-tile--${e.id}`];return t&&n.push(`nav-tile--active`),n.join(` `)}function Wr({tab:e,location:t,label:n}){let r=zr(e,t.pathname);return(0,H.jsx)(i,{to:e.to,className:Ur(e,r),"aria-current":r?`page`:void 0,children:(0,H.jsx)(`span`,{className:`nav-tile__label`,children:n})})}function Gr(){let e=d(),t=n(),r=T(),[i,a]=(0,V.useState)(!1),[o,s]=(0,V.useState)(!1),[c,u]=(0,V.useState)(0),[f,p]=(0,V.useState)(typeof navigator<`u`?navigator.onLine:!0),m=(0,V.useMemo)(()=>[{id:`today`,to:`/today`,labelKey:`nav.today`},{id:`tasks`,to:`/tasks`,labelKey:`nav.tasks`},{id:`money`,to:`/money`,labelKey:`nav.money`},{id:`nutrition`,to:`/nutrition`,labelKey:`nav.nutrition`}],[]),h=(0,V.useMemo)(()=>[{id:`habits`,to:`/habits`,labelKey:`nav.habits`},{id:`trainings`,to:`/trainings`,labelKey:`nav.trainings`},{id:`finance`,to:`/more/money`,labelKey:`nav.finance`},{id:`supplements`,to:`/supplements`,labelKey:`nav.supplements`}],[]),g=(0,V.useMemo)(()=>r(Hr(e.pathname)),[e.pathname,r]),_=(0,V.useCallback)(async()=>{try{u(await $t())}catch{u(0)}},[]);(0,V.useEffect)(()=>{_()},[_]),(0,V.useEffect)(()=>{document.title=`${g} · RMSAssist`},[g]),(0,V.useEffect)(()=>{let e=()=>p(!0),t=()=>p(!1);return window.addEventListener(`online`,e),window.addEventListener(`offline`,t),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,t)}},[]),(0,V.useEffect)(()=>{window.scrollTo({top:0,behavior:`auto`})},[e.pathname]);let v=()=>{s(!1),a(!0),_()},y=()=>{a(!1),s(!0),u(0)},b=()=>{s(!1),_()},x=(0,V.useCallback)(()=>{u(0)},[]),S=e.pathname.startsWith(`/more/`)&&!Vr(e.pathname)||e.pathname===`/nutrition/catalog`,{nudge:C,dismissNudge:w}=Or();return(0,H.jsxs)(`div`,{className:`layout rms-app-shell rms-aurora-bg${f?``:` layout--offline`}`,children:[(0,H.jsx)(Mt,{onMenuClick:v,onChatClick:y,onBackClick:S?()=>t(-1):void 0,chatUnreadCount:c,title:g}),!f&&(0,H.jsxs)(`div`,{className:`layout-offline-banner`,role:`status`,"aria-live":`polite`,children:[(0,H.jsx)(`strong`,{children:r(`settings.offline`,{value:r(`settings.offlineYes`)})}),(0,H.jsx)(`span`,{children:r(`settings.offlineHint`)})]}),(0,H.jsx)(`main`,{className:`layout-main`,children:(0,H.jsx)(l,{})}),(0,H.jsx)(`nav`,{className:`layout-nav`,"aria-label":r(`nav.mainMenu`),children:(0,H.jsxs)(`div`,{className:`layout-nav-grid`,children:[(0,H.jsx)(`div`,{className:`layout-nav-row`,role:`group`,"aria-label":r(`nav.primaryScreens`),children:m.map(t=>(0,H.jsx)(Wr,{tab:t,location:e,label:r(t.labelKey)},t.id))}),(0,H.jsx)(`div`,{className:`layout-nav-row`,role:`group`,"aria-label":r(`nav.secondaryScreens`),children:h.map(t=>(0,H.jsx)(Wr,{tab:t,location:e,label:r(t.labelKey)},t.id))})]})}),(0,H.jsx)(_r,{}),(0,H.jsx)(Rr,{}),(0,H.jsx)(zt,{open:i,onClose:()=>a(!1)}),(0,H.jsx)(hr,{open:o,onClose:b,onRead:x}),C&&(0,H.jsx)(kr,{nudge:C,onDismiss:()=>void w(),onOpenSubscriptions:()=>{w(),t(`/more/money`,{state:{scrollTo:`subscriptions`}})}})]})}function Kr(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){return e.VITEST?!1:e.DEV===!0}async function qr(e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_AUTH_API_BASE:`https://api.assist.staging.rmsuniverse.ru`,VITE_AUTH_ENABLED:`true`,VITE_AUTH_PROVIDER_MODE:`platform`,VITE_CHAT_ACK_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-ack`,VITE_CHAT_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-send`,VITE_CHAT_UPDATES_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-updates`,VITE_CHAT_VOICE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/chat-voice`,VITE_CLOUD_AUTOMATION_TOKEN:``,VITE_CLOUD_BACKUP_TOKEN:``,VITE_CLOUD_SNAPSHOT_MINIMAL:`true`,VITE_CLOUD_SYNC_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`,VITE_CLOUD_SYNC_TOKEN:``,VITE_PUSH_API_TOKEN:``,VITE_PUSH_SUBSCRIBE_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/push-subscribe`,VITE_SUPPLEMENT_LABEL_OCR_ENDPOINT:`https://api.assist.staging.rmsuniverse.ru/api/supplements`,VITE_TELEGRAM_BOT_USERNAME:`rmstrackerbot`,VITE_VAPID_PUBLIC_KEY:`BJx1OPGUcJ7nCmsY7WLVIllEno-1atjV-4tgxul23yK6KdWB2GXh-_OjGx7VkS_XRrAe18OnZB5QU70iEO5FLB0`}){if(!Kr(e))return;let t=(await M())?.app??{},n=(t.userName?.trim().length??0)>=2?t.userName.trim():`Dev`,r=(t.assistantName?.trim().length??0)>=2?t.assistantName.trim():`RMS`;t.onboardingCompletedAtISO&&$r({userName:n,assistantName:r})||await b({app:{userName:n,assistantName:r,onboardingCompletedAtISO:t.onboardingCompletedAtISO??new Date().toISOString(),onboardingVersion:t.onboardingVersion??1}})}function Jr(e){return v(`auth.errors.${e}`,void 0,y())}function Yr(e){return{authorization:`Bearer ${e}`}}async function Xr(e){let t=Ge();if(!t||!e)return{hasBackup:!1};try{let n=await fetch(`${t}/api/cloud-restore-meta`,{headers:Yr(e)});if(!n.ok)return{hasBackup:!1};let r=await n.json();return{...r,hasBackup:!!r.hasBackup}}catch{return{hasBackup:!1}}}async function Zr(e){let t=Ge();if(!t||!e)return{ok:!1,error:Jr(`noCloudAccess`)};try{let n=await fetch(`${t}/api/cloud-restore-download`,{headers:Yr(e)}),r=await n.json().catch(()=>({}));return n.ok?{ok:!0,backupData:r.backupData,updatedAtISO:typeof r.updatedAtISO==`string`?r.updatedAtISO:void 0}:{ok:!1,error:typeof r.error==`string`?r.error:Jr(`restoreFailed`)}}catch{return{ok:!1,error:Jr(`noNetwork`)}}}async function Qr(e,t,n=1){let r=Ge();if(!r||!e)return{ok:!1,error:Jr(`noCloudAccess`)};try{let i=await fetch(`${r}/api/cloud-restore-upload`,{method:`PUT`,headers:{...Yr(e),"content-type":`application/json`},body:JSON.stringify({backupData:t,schemaVersion:n})}),a=await i.json().catch(()=>({}));return i.ok?{ok:!0}:{ok:!1,error:typeof a.error==`string`?a.error:Jr(`saveFailed`)}}catch{return{ok:!1,error:Jr(`noNetwork`)}}}function $r(e){let t=e?.userName?.trim()??``,n=e?.assistantName?.trim()??``;return t.length>=2&&n.length>=2}async function ei(e){if(!e||!Je(e))return!1;let t=await M();if(t?.app?.cloudRestoreCompletedAtISO||!(await Xr(e.accessToken)).hasBackup)return!1;let n=!!(t?.app?.authUserId&&t.app.authUserId!==e.authUserId),r=!t?.app?.onboardingCompletedAtISO;return n||r}async function ti(e,t){if(!t)return`app`;if(!Je(e))return`welcome`;if(Kr())return await qr(),await ei(e)?`restore`:`app`;if(await ei(e))return`restore`;let n=(await M())?.app;return!n?.onboardingCompletedAtISO||!$r(n)?`onboarding`:`app`}var ni=new Set([`/welcome`,`/restore`,`/onboarding`]);function ri({children:e}){let t=T(),n=Ke(),r=d(),{loading:i,session:a,isAuthenticated:o}=at(),[c,l]=(0,V.useState)(n?null:`app`),u=(0,V.useCallback)(()=>{if(!n){l(`app`);return}i||ti(a,n).then(l)},[n,i,a]);if((0,V.useEffect)(()=>{u()},[u,r.pathname]),(0,V.useEffect)(()=>{if(!n)return;let e=()=>{u()};return window.addEventListener(Ar,e),()=>window.removeEventListener(Ar,e)},[n,u]),!n)return(0,H.jsx)(H.Fragment,{children:e});if(i||c===null)return(0,H.jsx)(`div`,{style:{padding:16},children:t(`auth.welcome.loading`)});let f=r.pathname;return c===`welcome`&&f!==`/welcome`&&!ni.has(f)?(0,H.jsx)(s,{to:`/welcome`,replace:!0}):c===`restore`&&f!==`/restore`?(0,H.jsx)(s,{to:`/restore`,replace:!0}):c===`onboarding`&&f!==`/onboarding`?(0,H.jsx)(s,{to:`/onboarding`,replace:!0}):c===`app`&&ni.has(f)?(0,H.jsx)(s,{to:`/today`,replace:!0}):!o&&!ni.has(f)?(0,H.jsx)(s,{to:`/welcome`,replace:!0}):(0,H.jsx)(H.Fragment,{children:e})}function ii(){return crypto.randomUUID?.()??`_${Date.now()}_${Math.random().toString(36).slice(2)}`}function ai(){return new Date().toISOString()}async function oi(){return g.holidays.orderBy(`dateISO`).toArray()}async function si(e){let t=ai(),n={...e,id:ii(),title:e.title.trim()||`Событие`,budgetRub:Math.max(0,Math.round(e.budgetRub)),createdAt:t,updatedAt:t};return await g.holidays.add(n),n}async function ci(e,t){let n=await g.holidays.get(e);if(!n)return;let r={...n,...t,id:e,title:t.title==null?n.title:t.title.trim()||n.title,budgetRub:t.budgetRub==null?n.budgetRub:Math.max(0,Math.round(t.budgetRub)),updatedAt:ai()};return await g.holidays.put(r),r}async function li(e){await g.holidays.delete(e)}function ui(e,t,n){if(!Number.isInteger(n)||n<0)return null;let r=Fe(e,t)[n];return r?{dateISO:t,mealIndex:n,timeHHMM:r.timeHHMM,target:{kcal:r.target.targetKcal,protein:r.target.targetProtein??0,fat:r.target.targetFat??0,carbs:r.target.targetCarbs??0}}:null}function di(e,t,n){let r=0,i=0,a=0,o=0;for(let s of e){let e=t[s.catalogFoodId];if(!e)continue;let c=s.gramsBase/100;r+=e.kcalPer100*c,n===`total`?i+=e.proteinPer100*c:i+=(e.proteinSource===`animal`?e.proteinPer100:0)*c,a+=e.fatPer100*c,o+=e.carbsPer100*c}return{kcal:r,protein:i,fat:a,carbs:o}}function fi(e,t){return!Number.isFinite(e)||t<=0?Math.round(e):Math.round(e/t)*t}function pi(e,t,n,r){let i=fi(e,r);return Math.max(t,Math.min(n,i))}function K(e){return Math.round(e*10)/10}function q(e){return Number.isFinite(e)&&e>0?e:0}function mi(e,t){let n=q(t);if(n<=0)return q(e)<=0?100:0;let r=Math.abs(e-n)/n;return Math.max(0,Math.min(100,Math.round((1-r)*100)))}function hi(e,t){let n=mi(e.kcal,t.kcal),r=mi(e.protein,t.protein),i=mi(e.fat,t.fat),a=mi(e.carbs,t.carbs);return Math.max(0,Math.min(100,Math.round(n*.3+r*.3+i*.2+a*.2)))}function gi(e,t){let n=(e,t)=>{let n=q(t);return n<=0?q(e)<=0?0:1:Math.abs(e-n)/n};return n(e.kcal,t.kcal)*.3+n(e.protein,t.protein)*.3+n(e.fat,t.fat)*.2+n(e.carbs,t.carbs)*.2}function _i(e,t){let n=q(t);return n<=0?q(e)<=0?0:100:Math.round((e-n)/n*1e3)/10}function vi(e){return e.reduce((e,t)=>{let n=t.grams/100;return e.kcal+=t.kcalPer100*n,e.protein+=t.proteinPer100*n,e.fat+=t.fatPer100*n,e.carbs+=t.carbsPer100*n,e},{kcal:0,protein:0,fat:0,carbs:0})}function yi(e){let t=vi(e.ingredients),n={kcal:Math.round(t.kcal),protein:K(t.protein),fat:K(t.fat),carbs:K(t.carbs)},r=hi(n,e.target),i=r>=e.minScorePercent;return{status:e.status===`failed`?`failed`:i?`success`:`partial`,scorePercent:r,scoreBeforePercent:e.scoreBeforePercent,isGoodEnough:i,ingredients:e.ingredients.map(e=>{let t=e.grams/100;return{catalogFoodId:e.catalogFoodId,...e.name?{name:e.name}:{},grams:e.grams,locked:e.locked,kcal:Math.round(e.kcalPer100*t),protein:K(e.proteinPer100*t),fat:K(e.fatPer100*t),carbs:K(e.carbsPer100*t)}}),totals:n,target:e.target,deviations:{kcalPercent:_i(n.kcal,e.target.kcal),proteinPercent:_i(n.protein,e.target.protein),fatPercent:_i(n.fat,e.target.fat),carbsPercent:_i(n.carbs,e.target.carbs)},warnings:[...new Set(e.warnings)]}}function bi(e,t){return yi({status:`failed`,target:e,ingredients:[],scoreBeforePercent:0,minScorePercent:101,warnings:t})}function xi(e){return{kcal:Math.round(q(e.kcal)),protein:K(q(e.protein)),fat:K(q(e.fat)),carbs:K(q(e.carbs))}}function Si(e,t,n){if(e.length===0)return n.push(v(`nutrition.optimizer.pickProducts`)),null;let r=new Set,i=[];for(let a of e){if(!a.catalogFoodId)return n.push(v(`nutrition.optimizer.missingCatalogId`)),null;if(r.has(a.catalogFoodId))return n.push(v(`nutrition.optimizer.duplicateProduct`)),null;if(r.add(a.catalogFoodId),[a.kcalPer100,a.proteinPer100,a.fatPer100,a.carbsPer100].some(e=>!Number.isFinite(e)||e<0))return n.push(v(`nutrition.optimizer.invalidMacros`)),null;let e=a.minGrams??0,o=a.maxGrams??ki;if(!Number.isFinite(e)||!Number.isFinite(o)||e>o)return n.push(v(`nutrition.optimizer.invalidConstraints`)),null;let s=a.stepGrams??t;if(!Number.isFinite(s)||s<=0)return n.push(v(`nutrition.optimizer.invalidStep`)),null;let c=a.initialGrams??100,l=pi(c,e,o,s);l!==fi(c,s)&&n.push(v(`nutrition.optimizer.startClamped`)),i.push({catalogFoodId:a.catalogFoodId,...a.name?{name:a.name}:{},grams:l,minGrams:e,maxGrams:o,stepGrams:s,locked:a.locked===!0,kcalPer100:a.kcalPer100,proteinPer100:a.proteinPer100,fatPer100:a.fatPer100,carbsPer100:a.carbsPer100})}return i}function Ci(e,t,n,r,i,a){i0&&t.protein0&&t.carbs0&&t.fat>n.fat*1.25&&a.push(v(`nutrition.optimizer.fatOverflow`));let o=e.filter(e=>!e.locked);o.some(e=>e.grams>=e.maxGrams)&&a.push(v(`nutrition.optimizer.maxGramsReached`)),o.some(e=>e.grams<=e.minGrams)&&a.push(v(`nutrition.optimizer.minGramsReached`)),o.length===0&&i({...e})),c=hi(vi(s),t),l=c,u=gi(vi(s),t);for(let e=0;ee.score)&&(e={index:n,grams:a,score:l,loss:u})}}if(!e||e.loss>=u)break;o[e.index].grams=e.grams,u=e.loss,l=e.score,s=o.map(e=>({...e}))}let d=vi(s);return Ci(s,d,t,n,l,a),yi({status:l>=n?`success`:`partial`,target:t,ingredients:s,scoreBeforePercent:c,minScorePercent:n,warnings:a})}function Ti(e){let{template:t,chosenCatalogIdsByRole:n,mealTarget:r,catalogMap:i,proteinMode:a,maxIters:o=25}=e,s=[];for(let e of t.slots){let t=n[e.role];if(!t)continue;let r=e.defaultGr>0?e.defaultGr:e.minGr;s.push({catalogFoodId:t,gramsBase:pi(r,e.minGr,e.maxGr,e.stepGr),role:e.role})}let c=-1,l=s.map(e=>({...e})),u=()=>di(s,i,a),d=z(u(),r).score;d>c&&(c=d,l=s.map(e=>({...e})));let f=r.targetKcal??0,p=r.targetProtein??0,m=r.targetFat??0,h=r.targetCarbs??0;function g(e){for(let n of t.slots)if(n.macroPriority===e)return n;if(e===`carbs`||e===`kcal`){for(let e of t.slots)if(e.role===`carb_base`||e.role===`side`||e.role===`fruit`)return e}return t.slots[0]??null}for(let e=0;e0&&Math.abs(t.kcal)>10){let e=Math.abs(t.kcal)/Math.max(80,f*.2);e>a&&(a=e,i=`kcal`)}if(p>0&&Math.abs(t.protein)>2){let e=Math.abs(t.protein)/Math.max(5,p*.25);e>a&&(a=e,i=`protein`)}if(m>0&&Math.abs(t.fat)>2){let e=Math.abs(t.fat)/Math.max(5,m*.25);e>a&&(a=e,i=`fat`)}if(h>0&&Math.abs(t.carbs)>2){let e=Math.abs(t.carbs)/Math.max(5,h*.25);e>a&&(a=e,i=`carbs`)}if(!i)break;let o=i===`kcal`?t.kcal>0:i===`protein`?(t.protein??0)>0:i===`fat`?(t.fat??0)>0:(t.carbs??0)>0,_=g(i===`kcal`?`carbs`:i);if(!_)break;let v=n[_.role];if(!v)break;let y=s.findIndex(e=>e.role===_.role&&e.catalogFoodId===v);if(y<0)break;let b=_.stepGr,x=o?b:-b,S=s[y].gramsBase;if(s[y].gramsBase=pi(S+x,_.minGr,_.maxGr,_.stepGr),s[y].gramsBase===S)break;let{score:C}=z(u(),r);C>c&&(c=C,l=s.map(e=>({...e}))),d=C}return l}function Ei(e,t){let n=t[e];if(!n)return`carbs`;let r=n.proteinPer100??0,i=n.carbsPer100??0,a=n.fatPer100??0,o=Math.max(r,i,a);return o<=0?`carbs`:o===r?`protein`:o===i?`carbs`:`fat`}var Di=5,Oi=5,ki=400;function Ai(e,t){let n=t[e];if(!n)return ki;let r=n.group??``,i=n.tags??[];return r===`nuts`||r.includes(`nut`)||r===`oils`?80:i.includes(`sugar`)||i.includes(`sweet_dairy`)?30:r===`meat`||r===`fish_seafood`||r===`poultry`||r===`eggs`?300:r===`cereals`?150:ki}function ji(e){let{ingredients:t,locks:n,mealTarget:r,catalogMap:i,proteinMode:a,maxIters:o=30}=e,s=t.map(e=>({...e})),c=z(di(s,i,a),r).score,l=r.targetProtein??0,u=r.targetFat??0,d=r.targetCarbs??0,f=()=>di(s,i,a),p=c,m=s.map(e=>({...e}));for(let e=0;e0&&Math.abs(t.protein)>2){let e=Math.abs(t.protein)/Math.max(5,l*.2);e>o&&(o=e,a=`protein`)}if(u>0&&Math.abs(t.fat)>2){let e=Math.abs(t.fat)/Math.max(5,u*.2);e>o&&(o=e,a=`fat`)}if(d>0&&Math.abs(t.carbs)>2){let e=Math.abs(t.carbs)/Math.max(5,d*.2);e>o&&(o=e,a=`carbs`)}if(!a)break;let c=a===`protein`&&t.protein>0||a===`fat`&&t.fat>0||a===`carbs`&&t.carbs>0,h=a===`protein`?`protein`:a===`fat`?`fat`:`carbs`,g=s.map((e,t)=>({ing:e,idx:t})).filter(({ing:e})=>!n[e.catalogFoodId]).filter(({ing:e})=>Ei(e.catalogFoodId,i)===h);if(g.length===0)break;let _=-1,v=p;for(let{ing:e,idx:t}of g){let n=Oi,a=Ai(e.catalogFoodId,i),o=Di,l=c?o:-o,u=s[t].gramsBase,d=pi(u+l,n,a,o);if(d===u)continue;s[t].gramsBase=d;let p=z(f(),r).score;s[t].gramsBase=u,p>v&&(v=p,_=t)}if(_<0)break;let y=s[_],b=Oi,x=Ai(y.catalogFoodId,i),S=Di,C=c?S:-S,w=s[_].gramsBase;s[_].gramsBase=pi(w+C,b,x,S);let T=z(f(),r).score;T>p&&(p=T,m=s.map(e=>({...e})))}return{ingredients:m,scoreBefore:c,scoreAfter:p}}function Mi(e){return e.trim()||void 0}function Ni(e){let t=e.trim();if(!t)return;let n=Number(t.replace(`,`,`.`));return!Number.isFinite(n)||n<=0?`invalid`:n}function Pi(e){let t=e.trim();if(!t)return;let n=Number(t.replace(`,`,`.`));return!Number.isFinite(n)||n<0?`invalid`:n}function Fi(e){let t=e.trim();if(t)return t.length===10?`${t}T00:00:00.000Z`:t}function Ii(e){return!!(e.primaryIngredientName.trim()||e.primaryIngredientAmount.trim())}function Li(e,t){if(!Ii(e))return[];let n=e.primaryIngredientName.trim(),r=Ni(e.primaryIngredientAmount),i=e.primaryIngredientUnit.trim();return n||t.push(`Укажите название активного вещества.`),r===`invalid`&&t.push(`Количество ингредиента должно быть > 0.`),(!r||r===`invalid`)&&(e.primaryIngredientAmount.trim()||t.push(`Укажите количество активного вещества.`)),i||t.push(`Укажите единицу активного вещества.`),!n||!i||!r||r===`invalid`?[]:[{name:n,amount:r,unit:i,per:e.primaryIngredientPer,isPrimary:!0,mapsToSupplementKnowledgeId:Mi(e.supplementKnowledgeId)}]}function Ri(e,t){let n=e.name.trim();n||t.push(`Название продукта обязательно.`),Xe.includes(e.form)||t.push(`Выберите форму продукта.`);let r=Ni(e.servingAmount);r===`invalid`&&t.push(`Размер порции должен быть > 0.`);let i=Ni(e.packageTotalUnits);i===`invalid`&&t.push(`Количество в упаковке должно быть > 0.`);let a=Ni(e.servingsPerPackage);a===`invalid`&&t.push(`Порций в упаковке должно быть > 0.`);let o=Pi(e.servingsRemaining);o===`invalid`&&t.push(`Остаток порций должен быть >= 0.`);let s=Pi(e.lowStockThresholdServings);s===`invalid`&&t.push(`Порог низкого остатка должен быть >= 0.`);let c=Pi(e.purchasePrice);c===`invalid`&&t.push(`Цена покупки должна быть >= 0.`);let l=Li(e,t),u=r&&r!==`invalid`?{amount:r,unit:e.servingUnit}:void 0,d=i&&i!==`invalid`?{totalUnits:i,unit:e.packageUnit,servingsPerPackage:a&&a!==`invalid`?a:void 0}:void 0,f=o!=null&&o!==`invalid`||a!=null&&a!==`invalid`||s!=null&&s!==`invalid`?{servingsTotal:a&&a!==`invalid`?a:void 0,servingsRemaining:o!=null&&o!==`invalid`?o:void 0,lowStockThresholdServings:s!=null&&s!==`invalid`?s:void 0}:void 0;return{name:n,brand:Mi(e.brand),form:e.form,supplementKnowledgeId:Mi(e.supplementKnowledgeId),labelServingSize:u,activeIngredients:l,packageQuantity:d,inventory:f,purchasePrice:c!=null&&c!==`invalid`?c:void 0,currency:Mi(e.currency)?.toUpperCase(),purchaseDateISO:Fi(e.purchaseDateISO),openedAtISO:Fi(e.openedAtISO),expiresAtISO:Fi(e.expiresAtISO),notes:Mi(e.notes),source:`manual`}}function zi(){return{name:``,brand:``,form:`capsule`,supplementKnowledgeId:``,servingAmount:``,servingUnit:`capsule`,primaryIngredientName:``,primaryIngredientAmount:``,primaryIngredientUnit:`mg`,primaryIngredientPer:`capsule`,packageTotalUnits:``,packageUnit:`capsule`,servingsPerPackage:``,servingsRemaining:``,lowStockThresholdServings:`7`,purchasePrice:``,currency:`RUB`,purchaseDateISO:``,openedAtISO:``,expiresAtISO:``,notes:``}}function Bi(e){return e?.trim()?e.slice(0,10):``}function Vi(e){let t=e.activeIngredients.find(e=>e.isPrimary)??e.activeIngredients[0];return{id:e.id,name:e.name,brand:e.brand??``,form:e.form,supplementKnowledgeId:e.supplementKnowledgeId??``,servingAmount:e.labelServingSize?String(e.labelServingSize.amount):``,servingUnit:e.labelServingSize?.unit??`capsule`,primaryIngredientName:t?.name??``,primaryIngredientAmount:t?String(t.amount):``,primaryIngredientUnit:t?String(t.unit):`mg`,primaryIngredientPer:t?.per??`capsule`,packageTotalUnits:e.packageQuantity?String(e.packageQuantity.totalUnits):``,packageUnit:e.packageQuantity?.unit??`capsule`,servingsPerPackage:e.packageQuantity?.servingsPerPackage?String(e.packageQuantity.servingsPerPackage):e.inventory?.servingsTotal?String(e.inventory.servingsTotal):``,servingsRemaining:e.inventory?.servingsRemaining==null?``:String(e.inventory.servingsRemaining),lowStockThresholdServings:e.inventory?.lowStockThresholdServings==null?`7`:String(e.inventory.lowStockThresholdServings),purchasePrice:e.purchasePrice==null?``:String(e.purchasePrice),currency:e.currency??`RUB`,purchaseDateISO:Bi(e.purchaseDateISO),openedAtISO:Bi(e.openedAtISO),expiresAtISO:Bi(e.expiresAtISO),notes:e.notes??``}}function Hi(e){let t=[],n=Ri(e,t);return e.name.trim()||t.push(`Название продукта обязательно.`),t.length>0||!e.name.trim()?{ok:!1,errors:Array.from(new Set(t))}:{ok:!0,input:n}}function Ui(e){let t=[],n=Ri(e,t);return e.name.trim()||t.push(`Название продукта обязательно.`),t.length>0||!e.name.trim()?{ok:!1,errors:Array.from(new Set(t))}:{ok:!0,patch:n,mode:`patch`}}var Wi=Xe,Gi=$e;function Ki(e,t){let n=zi(),{parsed:r}=e,i=t?.notesHeader??`Импорт с этикетки (${e.source}).`;return{...n,name:r.name??n.name,brand:r.brand??n.brand,form:r.form??n.form,servingAmount:r.servingAmount==null?n.servingAmount:String(r.servingAmount),servingUnit:r.servingUnit??n.servingUnit,servingsPerPackage:r.servingsPerPackage==null?n.servingsPerPackage:String(r.servingsPerPackage),packageTotalUnits:r.packageTotalUnits==null?n.packageTotalUnits:String(r.packageTotalUnits),primaryIngredientName:r.primaryIngredientName??n.primaryIngredientName,primaryIngredientAmount:r.primaryIngredientAmount==null?n.primaryIngredientAmount:String(r.primaryIngredientAmount),primaryIngredientUnit:r.primaryIngredientUnit??n.primaryIngredientUnit,notes:e.rawText.trim()?`${i}\n\n${e.rawText.slice(0,500)}${e.rawText.length>500?`…`:``}`:n.notes}}var qi=/(\d+[.,]?\d*)\s*(mg|mcg|µg|μg|мг|мкг|г|g|IU|МЕ|ml|мл|CFU|КОЕ|млрд|млн)\b/gi,Ji=/(?:serving\s*size|размер\s*порции|порция|на\s*порцию|per\s*serving)[:\s]*(\d+[.,]?\d*)?\s*(капсул\w*|capsule\w*|таблет\w*|softgel\w*|порци\w*|g|г|ml|мл)?/i,Yi=/(?:servings?\s*per\s*container|в\s*упаковке|количество\s*порций|кол-во\s*порций|упаковка)[:\s]*(\d+[.,]?\d*)\s*(капсул\w*|capsule\w*|таблет\w*|softgel\w*|порци\w*)?/i,Xi=/(\d+[.,]?\d*)\s*(?:капсул\w*|capsule\w*|таблет\w*|softgels?|порци\w*)(?:\s|$|[.,;])/i,Zi=/EPA\s*[:=]?\s*(\d+[.,]?\d*)\s*(mg|мг).*?DHA\s*[:=]?\s*(\d+[.,]?\d*)\s*(mg|мг)|DHA\s*[:=]?\s*(\d+[.,]?\d*)\s*(mg|мг).*?EPA\s*[:=]?\s*(\d+[.,]?\d*)\s*(mg|мг)/is,Qi=/(?:элементарн\w*\s+)?магни\w*[^.\n]{0,40}?(\d+[.,]?\d*)\s*(mg|мг)/i,$i=/(\d+[.,]?\d*)\s*(млрд|млн|billion|million)?\s*(CFU|КОЕ|кое)/i;function J(e){if(!e?.trim())return;let t=Number(e.replace(`,`,`.`));return Number.isFinite(t)&&t>0?t:void 0}function ea(e){let t=e.toLowerCase();return t===`мг`||t===`mg`?`mg`:t===`мкг`||t===`mcg`||t===`µg`||t===`μg`?`mcg`:t===`г`||t===`g`?`g`:t===`ме`||t===`iu`?`IU`:t===`мл`||t===`ml`?`ml`:t===`кое`||t===`cfu`?`CFU`:e}function ta(e){let t=e.toLowerCase();if(/softgel|софтгел|мягк\w*\s*капсул/i.test(t))return`softgel`;if(/капсул|capsule/i.test(t))return`capsule`;if(/таблет|tablet/i.test(t))return`tablet`;if(/порошок|powder/i.test(t))return`powder`;if(/жидк|liquid|сироп|syrup/i.test(t))return`liquid`;if(/жеватель|chewable|gumm/i.test(t))return`gummy`}function na(e){if(!e)return;let t=e.toLowerCase();if(/капсул|capsule|softgel/i.test(t))return`capsule`;if(/таблет|tablet/i.test(t))return`tablet`;if(/порци/i.test(t))return`serving`;if(t===`g`||t===`г`)return`g`;if(t===`ml`||t===`мл`)return`ml`}function Y(e,t,n){let r=e[t];(!r||n===`high`||n===`medium`&&r===`low`)&&(e[t]=n)}function ra(e){let t=[],n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n)continue;let r,i=new RegExp(qi.source,qi.flags);for(;(r=i.exec(n))!==null;){let e=J(r[1]),i=ea(r[2]);if(!e)continue;let a=n.slice(0,r.index).replace(/[:\-–—|]+$/g,``).trim();t.push({amount:e,unit:i,line:n,nameHint:a.length>=2&&a.length<=80?a:void 0})}}return t}function ia(e){if(e.length===0)return{confidence:`missing`};let t=e.find(e=>/epa|dha|омега/i.test(e.line));if(t)return{name:`Omega-3 (EPA/DHA)`,amount:t.amount,unit:t.unit,confidence:`medium`};let n=e.find(e=>e.unit===`CFU`);if(n)return{name:n.nameHint??`Пробиотик`,amount:n.amount,unit:`CFU`,confidence:n.nameHint?`medium`:`low`};let r=e.filter(e=>!/serving|порци|container|упаковк/i.test(e.line)).map(e=>{let t=e.amount;return(e.unit===`mg`||e.unit===`mcg`||e.unit===`IU`)&&(t+=1e3),e.nameHint&&(t+=50),{...e,score:t}}).sort((e,t)=>t.score-e.score)[0];return r?{name:r.nameHint??`Активное вещество`,amount:r.amount,unit:r.unit,confidence:r.nameHint?`medium`:`low`}:{confidence:`missing`}}function aa(e){let t=e.map(e=>e.trim()).filter(e=>e.length>1);if(t.length===0)return{};let n=t.findIndex(e=>/^(состав|ingredients|nutrition|supplement\s*facts|пищевая)/i.test(e)),r=n>0?t.slice(0,n):t.slice(0,4);if(r.length===0)return{};if(r.length===1)return{name:r[0]};let i=r[0],a=r[1];return i.length<=40&&a.length>i.length?{brand:i,name:a}:{name:i,brand:i.length<=24?i:void 0}}function oa(e,t=`manual_paste`){let n=e.replace(/\u00a0/g,` `).trim(),r=n.split(/\r?\n/),i=[],a={},o={};if(!n)return{rawText:``,source:t,parsed:o,fieldConfidence:a,warnings:[`Вставьте текст этикетки или загрузите фото.`]};let{brand:s,name:c}=aa(r);s&&(o.brand=s,Y(a,`brand`,`medium`)),c&&(o.name=c,Y(a,`name`,s?`medium`:`low`));let l=ta(n);l&&(o.form=l,Y(a,`form`,`medium`));let u=n.match(Ji);if(u){let e=J(u[1])??1,t=na(u[2])??`capsule`;o.servingAmount=e,o.servingUnit=t,Y(a,`servingAmount`,`medium`),Y(a,`servingUnit`,u[2]?`medium`:`low`)}let d=n.match(Yi);if(d){let e=J(d[1]);e&&(o.servingsPerPackage=e,o.packageTotalUnits=e,Y(a,`servingsPerPackage`,`medium`),Y(a,`packageTotalUnits`,`medium`))}else{let e=[...n.matchAll(new RegExp(Xi.source,`gi`))].map(e=>J(e[1])).filter(e=>e!=null&&e>=10).sort((e,t)=>t-e)[0];e&&(o.packageTotalUnits=e,o.servingsPerPackage=e,Y(a,`packageTotalUnits`,`low`),Y(a,`servingsPerPackage`,`low`),i.push(`Количество в упаковке определено приблизительно — проверьте на этикетке.`))}let f=n.match(Qi);if(f){let e=J(f[1]);e&&(o.primaryIngredientName=`Магний (элементарный)`,o.primaryIngredientAmount=e,o.primaryIngredientUnit=`mg`,Y(a,`primaryIngredientName`,`high`),Y(a,`primaryIngredientAmount`,`high`),Y(a,`primaryIngredientUnit`,`high`))}let p=n.match(Zi);if(p&&!o.primaryIngredientName){let e=J(p[1]??p[5]);e&&(o.primaryIngredientName=`Omega-3 (EPA/DHA)`,o.primaryIngredientAmount=e,o.primaryIngredientUnit=`mg`,Y(a,`primaryIngredientName`,`medium`),Y(a,`primaryIngredientAmount`,`medium`),Y(a,`primaryIngredientUnit`,`medium`),i.push(`EPA и DHA указаны отдельно — при необходимости уточните суммарную дозу.`))}let m=n.match($i);if(m&&!o.primaryIngredientName){let e=J(m[1]);e&&(o.primaryIngredientName=`Пробиотик`,o.primaryIngredientAmount=e,o.primaryIngredientUnit=`CFU`,Y(a,`primaryIngredientName`,`medium`),Y(a,`primaryIngredientAmount`,`low`),Y(a,`primaryIngredientUnit`,`medium`),i.push(`КОЕ/CFU: проверьте множитель (млн/млрд) на этикетке.`))}if(!o.primaryIngredientName){let e=ia(ra(n));e.name&&e.amount&&e.unit&&(o.primaryIngredientName=e.name,o.primaryIngredientAmount=e.amount,o.primaryIngredientUnit=e.unit,Y(a,`primaryIngredientName`,e.confidence),Y(a,`primaryIngredientAmount`,e.confidence),Y(a,`primaryIngredientUnit`,e.confidence))}return o.name||(i.push(`Название продукта не распознано — введите вручную.`),Y(a,`name`,`missing`)),o.primaryIngredientAmount||(i.push(`Доза активного вещества не найдена — проверьте состав.`),Y(a,`primaryIngredientAmount`,`missing`)),!o.servingsPerPackage&&!o.packageTotalUnits&&(i.push(`Количество в упаковке не найдено.`),Y(a,`servingsPerPackage`,`missing`)),i.push(`Проверьте единицы (mg, mcg, IU, CFU) перед сохранением продукта.`),{rawText:n,source:t,parsed:o,fieldConfidence:a,warnings:Array.from(new Set(i))}}var sa=`rms:cloudActionApplied:v1:`;function ca(){try{return globalThis.localStorage===void 0?null:globalThis.localStorage}catch{return null}}function la(e,t,n){return`${sa}${e}:${t}:${n}`}function ua(e=ca()){if(!e)return[];let t=[];for(let n=0;ne.length>=3)}async function Ca(){let e=(await g.foods.toArray()).map(e=>({name:e.name,source:`food`,item:{id:e.id,name:e.name,kcalPer100:e.kcalPer100,proteinPer100:e.proteinPer100,fatPer100:e.fatPer100,carbsPer100:e.carbsPer100,proteinSource:e.proteinSource??`plant`,...e.hasFastCarbs===!0?{hasFastCarbs:!0}:{}}})),t=He(y()).map(e=>({name:e.name,source:`catalog`,item:e})),n=[...e,...t],r=new Set;return n.filter(e=>{let t=ba(e.name);return!t||r.has(t)?!1:(r.add(t),!0)}).sort((e,t)=>t.name.length-e.name.length)}function Q(e,t,n){let r=ha(t);if(!r)return{status:`no_match`};let i=e.filter(e=>ha(n(e))===r);if(i.length===1)return{status:`matched`,item:i[0]};if(i.length>1)return{status:`ambiguous`};let a=e.filter(e=>ga(n(e),t));return a.length===1?{status:`matched`,item:a[0]}:a.length>1?{status:`ambiguous`}:{status:`no_match`}}function wa(e){return e.trim().toLowerCase().replace(/ё/g,`е`).replace(/[.,!?;:()[\]{}"']/g,` `).replace(/\s+/g,` `).trim()}function Ta(e){let t=[e.customName,e.supplementCatalogId?ge(e.supplementCatalogId,y())?.name:void 0,e.supplementCatalogId];return Array.from(new Set(t.map(e=>wa(e??``)).filter(Boolean)))}async function Ea(e){let t=wa(e);if(!t)return{status:`no_match`};let n=(await g.supplementPlanItems.toArray()).filter(e=>e.active?Ta(e).some(e=>e===t||e.includes(t)||t.includes(e)):!1);return n.length===1?{status:`matched`,item:n[0]}:n.length>1?{status:`ambiguous`}:{status:`no_match`}}async function Da(e){let t=String(e??``).trim();if(!t)return{status:`no_match`};let n=await g.supplementPlanItems.get(t);return n?n.active?{status:`matched`,item:n}:{status:`skipped`,item:n}:{status:`no_match`}}function Oa(e){return Se(e).replace(/\/api\/cloud-sync$/,`/api/cloud-actions`)}async function ka(e,t,n={}){let r=Oa(ke());if(!r)throw Error(v(`cloudSyncApi.noEndpoint`,void 0,y()));let i=await Ee(),a=Ke(),o=n.accessToken?.trim()||(a?void 0:n.syncToken??Ae());if(a&&!o)throw Error(v(`auth.syncLogin`,void 0,y()));let s=new URL(r);return a||s.searchParams.set(`userKey`,i),fetch(s.toString(),{method:e,headers:{"content-type":`application/json`,...o?{authorization:`Bearer ${o}`}:{}},body:t?JSON.stringify(t):void 0})}async function Aa(e){let t=await ka(`GET`,void 0,e);if(!t.ok)throw Error(v(`cloudSyncApi.actionsFailed`,{status:t.status},y()));let n=await t.json();return Array.isArray(n.actions)?n.actions:[]}async function ja(e,t){let n=Number(e.targetKcal);if(Number.isFinite(n)&&n>0){let t=Number(e.targetProtein),r=Number(e.targetFat),i=Number(e.targetCarbs);return{kcal:Math.round(n),protein:Number.isFinite(t)&&t>0?t:Math.round(n*.25/4),fat:Number.isFinite(r)&&r>0?r:Math.round(n*.3/9),carbs:Number.isFinite(i)&&i>0?i:Math.round(n*.45/4)}}let r=Number(e.fitMealIndex);if(!Number.isInteger(r)||r<0)return null;let i=ui((await M())?.app??null,t,r);return i?i.target:null}async function Ma(e,t){let n=F();if(e.kind===`transaction`){let r=Math.round(Number(e.amountRub)||0);if(r<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});await ce({dateISO:n,amount:r,type:e.transactionType===`income`?`income`:`expense`,category:e.category||(e.transactionType===`income`?`Доход`:`Другое`),note:[e.merchant,e.note,`voice: ${t}`].filter(Boolean).join(` · `),incomeSource:e.transactionType===`income`?`other`:void 0});let i=I(e.category||(e.transactionType===`income`?`Доход`:`Другое`));return Z(e,`applied`,{entityLabel:X(`transactionApplied`,{type:e.transactionType===`income`?X(`transactionIncome`):X(`transactionExpense`),amount:`${r} ₽`,category:i})})}if(e.kind===`water`){let t=await f((await M())?.app.waterTargetMl),r=Math.max(1,Math.round(Number(e.amountMl)||250));return await m(t.id,n,r),Z(e,`applied`,{entityId:t.id,entityLabel:X(`waterApplied`,{amountMl:r})})}if(e.kind===`task_done`){let t=String(e.title??``).trim();if(!t)return Z(e,`no_match`,{reason:X(`taskTitleNotRecognized`)});let n=Q((await g.tasks.toArray()).filter(e=>e.status!==`done`&&e.status!==`canceled`),t,e=>e.title);if(n.status===`no_match`)return Z(e,`no_match`,{reason:X(`taskNotFound`)});if(n.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`tasksAmbiguous`)});let r=n.item;return await he(r.id,{status:`done`}),Z(e,`applied`,{entityId:r.id,entityLabel:r.title})}if(e.kind===`habit_done`){let t=String(e.name??``).trim();if(!t)return Z(e,`no_match`,{reason:X(`habitNameNotRecognized`)});let r=Q((await g.habits.toArray()).filter(e=>e.active&&e.type===`daily`),t,e=>e.name);if(r.status===`no_match`)return Z(e,`no_match`,{reason:X(`habitNotFound`)});if(r.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`habitsAmbiguous`)});let i=r.item;return await p(i.id,n,!0),Z(e,`applied`,{entityId:i.id,entityLabel:i.name})}if(e.kind===`food_create`){let t=String(e.name??``).trim();return t?(await fe({name:t,kcalPer100:Math.max(0,Math.round(Number(e.kcalPer100)||0)),proteinPer100:Math.max(0,Number(e.proteinPer100)||0),fatPer100:Math.max(0,Number(e.fatPer100)||0),carbsPer100:Math.max(0,Number(e.carbsPer100)||0),...e.proteinSource===`animal`||e.proteinSource===`plant`?{proteinSource:e.proteinSource}:{},...e.hasFastCarbs===!0?{hasFastCarbs:!0}:{}}),Z(e,`applied`,{entityLabel:t})):Z(e,`skipped`,{reason:X(`productNameNotRecognized`)})}if(e.kind===`recipe_create`){let t=String(e.name??``).trim(),r=Array.isArray(e.ingredients)?e.ingredients:[];if(!t)return Z(e,`skipped`,{reason:X(`recipeNameNotRecognized`)});if(r.length===0)return Z(e,`skipped`,{reason:X(`recipeIngredientsNotRecognized`)});let i=await g.foods.toArray(),a=[],o=[];for(let t of r){let n=String(t.foodName??``).trim().toLowerCase(),r=Math.max(1,Math.round(Number(t.gramsBase)||0));if(!n||r<=0)return Z(e,`skipped`,{reason:X(`recipeIngredientNotRecognized`)});let s=Q(i.filter(e=>!!e.catalogId),n,e=>e.name);if(s.status===`matched`&&s.item.catalogId){a.push({catalogFoodId:s.item.catalogId,gramsBase:r}),o.push({catalogFoodId:s.item.catalogId,name:s.item.name,kcalPer100:s.item.kcalPer100,proteinPer100:s.item.proteinPer100,fatPer100:s.item.fatPer100,carbsPer100:s.item.carbsPer100,initialGrams:r,minGrams:10,maxGrams:600,stepGrams:5});continue}let c=Q(He(y()),n,e=>e.name);if(c.status===`no_match`)return Z(e,`no_match`,{reason:X(`recipeFoodNotFound`,{foodName:t.foodName})});if(c.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`recipeFoodAmbiguous`,{foodName:t.foodName})});a.push({catalogFoodId:c.item.id,gramsBase:r}),o.push({catalogFoodId:c.item.id,name:c.item.name,kcalPer100:c.item.kcalPer100,proteinPer100:c.item.proteinPer100,fatPer100:c.item.fatPer100,carbsPer100:c.item.carbsPer100,initialGrams:r,minGrams:10,maxGrams:600,stepGrams:5})}let s=t,c=await ja(e,n);if(c){let e=wi({target:c,selectedFoods:o});if(e.status!==`failed`){let n=new Map(e.ingredients.map(e=>[e.catalogFoodId,e.grams]));for(let e of a){let t=n.get(e.catalogFoodId);t!=null&&t>0&&(e.gramsBase=Math.round(t))}s=X(`recipeFitLabel`,{name:t,kcal:Math.round(e.totals.kcal),targetKcal:Math.round(c.kcal),score:Math.round(e.scorePercent)})}}let l=`u:${crypto.randomUUID?.()??Date.now().toString(36)}`;return await Ce({id:l,name:t,source:`user`,mealTags:Array.isArray(e.mealTags)&&e.mealTags.length>0?e.mealTags:[`lunch`],tags:Array.isArray(e.tags)?e.tags:[`telegram`],ingredients:a}),Z(e,`applied`,{entityId:l,entityLabel:s})}if(e.kind===`supplement_done`||e.kind===`supplement_taken`){let t=e.kind===`supplement_taken`&&e.planItemId?await Da(e.planItemId):null;if(t?.status===`no_match`)return Z(e,`no_match`,{reason:X(`supplementPlanItemNotFound`)});if(t?.status===`skipped`)return Z(e,`skipped`,{reason:X(`supplementPlanItemDisabled`),entityId:t.item.id});if(t?.status===`matched`){let r=t.item;return await Le({planItemId:r.id,dateISO:n,scheduledAtHHMM:e.kind===`supplement_taken`&&e.scheduledAtHHMM||r.preferredTimesHHMM[0],source:`telegram`,note:e.dosage?.trim()?`Telegram dosage: ${e.dosage.trim()}`:void 0}),Z(e,`applied`,{entityId:r.id,entityLabel:ma(r)})}let r=String(e.name??``).trim();if(!r)return Z(e,`no_match`,{reason:X(`supplementNameNotRecognized`)});let i=await Ea(r);if(i.status===`no_match`)return Z(e,`no_match`,{reason:X(`supplementNotInPlan`)});if(i.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`supplementsAmbiguous`)});let a=i.item;return await Le({planItemId:a.id,dateISO:n,scheduledAtHHMM:a.preferredTimesHHMM[0],source:`voice`,note:e.dosage?.trim()?`Voice dosage: ${e.dosage.trim()}`:void 0}),Z(e,`applied`,{entityId:a.id,entityLabel:ma(a)})}if(e.kind===`supplement_stock_update`){let t=String(e.productId??``).trim();if(!t)return Z(e,`no_match`,{reason:X(`productIdMissing`)});let n=await Ze(t);if(!n)return Z(e,`no_match`,{reason:X(`productNotFound`)});let r={...n.inventory};e.servingsRemaining!=null&&(r.servingsRemaining=e.servingsRemaining),e.unitsRemaining!=null&&(r.unitsRemaining=e.unitsRemaining),r.lastCountedAtISO=new Date().toISOString();let i=[n.notes,e.note?.trim()].filter(Boolean);return await tt(t,{inventory:r,...i.length>0?{notes:i.join(` `)}:{}}),Z(e,`applied`,{entityId:t,entityLabel:e.name??n.name})}if(e.kind===`supplement_product_create`){let t=String(e.name??``).trim();if(!t)return Z(e,`no_match`,{reason:X(`productNameNotRecognized`)});let n=String(e.rawLabelText??``).trim();if(n){let r=Ki(oa(n,`manual_paste`));r.name.trim()||(r.name=t);let i=Hi(r);if(!i.ok||!(`input`in i))return Z(e,`skipped`,{reason:i.ok?X(`productBuildFailed`):i.errors.join(` `)});let a=await Qe({...i.input,source:`telegram`,notes:[i.input.notes,v(`cloud.voice.ocrImportNote`,void 0,y())].filter(Boolean).join(` `)});return Z(e,`applied`,{entityId:a.id,entityLabel:a.name})}let r=zi();r.name=t,e.brand?.trim()&&(r.brand=e.brand.trim()),e.form&&(r.form=e.form);let i=Hi(r);if(!i.ok||!(`input`in i))return Z(e,`skipped`,{reason:i.ok?X(`productBuildFailed`):i.errors.join(` `)});let a=await Qe({...i.input,...e.supplementCatalogId?.trim()?{supplementCatalogId:e.supplementCatalogId.trim()}:{},source:`telegram`,notes:[i.input.notes,v(`cloud.voice.createdFromTelegram`,void 0,y())].filter(Boolean).join(` `)});return Z(e,`applied`,{entityId:a.id,entityLabel:a.name})}if(e.kind===`supplement_undo_last`){let t=(await ze(String(e.dateISO??n).trim()||n)).filter(e=>e.source===`telegram`||e.source===`voice`).sort((e,t)=>t.updatedAtISO.localeCompare(e.updatedAtISO)||t.id.localeCompare(e.id))[0];return t?(await Ie(t.id),Z(e,`applied`,{entityId:t.id,entityLabel:X(`supplementIntakeUndoLabel`,{planItemId:t.planItemId})})):Z(e,`no_match`,{reason:X(`supplementIntakeUndoEmpty`)})}if(e.kind===`supplement_skipped`){let t=e.planItemId?await Da(e.planItemId):null;if(t?.status===`no_match`)return Z(e,`no_match`,{reason:X(`supplementPlanItemNotFound`)});if(t?.status===`skipped`)return Z(e,`skipped`,{reason:X(`supplementPlanItemDisabled`),entityId:t.item.id});if(t?.status===`matched`){let r=t.item;return await Re({planItemId:r.id,dateISO:n,scheduledAtHHMM:e.scheduledAtHHMM||r.preferredTimesHHMM[0],source:`telegram`,note:e.reason?.trim()?`Telegram reason: ${e.reason.trim()}`:void 0}),Z(e,`applied`,{entityId:r.id,entityLabel:ma(r)})}let r=String(e.name??``).trim();if(!r)return Z(e,`no_match`,{reason:X(`supplementNameNotRecognized`)});let i=await Ea(r);if(i.status===`no_match`)return Z(e,`no_match`,{reason:X(`supplementNotInPlan`)});if(i.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`supplementsAmbiguous`)});let a=i.item;return await Re({planItemId:a.id,dateISO:n,scheduledAtHHMM:a.preferredTimesHHMM[0],source:`voice`,note:e.reason?.trim()?`Voice reason: ${e.reason.trim()}`:void 0}),Z(e,`applied`,{entityId:a.id,entityLabel:ma(a)})}if(e.kind===`meal_done`){let r=String(e.meal??e.note??t).trim();if(!r)return Z(e,`no_match`,{reason:X(`mealDescriptionNotRecognized`)});let i=await Ca(),a=va(r),o=new Set,s=`voice:${crypto.randomUUID?.()??Date.now().toString(36)}`,c=_a(),l=[];for(let e of i){let t=ba(e.name),r=Sa(e.name);if(!t||o.has(t))continue;let i=r.map(e=>a.indexOf(e)).filter(e=>e>=0).sort((e,t)=>e-t)[0]??-1;if(i<0)continue;let u=Math.max(0,i-32),d=Math.min(a.length,i+t.length+32),f=ya(a.slice(u,d));f<=0&&(f=ya(a.slice(i+t.length,i+t.length+24))),f<=0&&(f=100);let p=e.item.id;e.source===`catalog`&&(p=(await de(e.item)).id);let m=await pe({dateISO:n,timeHHMM:c,foodId:p,grams:f,mealGroupId:s});m&&l.push(m),o.add(t)}return l.length===0?Z(e,`no_match`,{reason:X(`mealFoodNotFound`)}):Z(e,`applied`,{entityId:s,entityLabel:X(`mealAppliedLabel`,{count:l.length,preview:r.slice(0,40)})})}if(e.kind===`training_done`){let r=String(e.title??e.note??t).trim();if(!r)return Z(e,`no_match`,{reason:X(`trainingNotRecognized`)});let i=Q((await g.trainingScheduleItems.toArray()).filter(e=>e.active),r,e=>e.title),a=i.status===`matched`?i.item.title:r,o=i.status===`matched`?i.item.id:void 0;return await Be({dateISO:n,timeHHMM:_a(),title:a,trainingId:o,source:`voice`,note:e.note?.trim()?e.note.trim():t.trim()}),Z(e,`applied`,{entityId:o,entityLabel:a})}if(e.kind===`task_create`){let t=String(e.title??``).trim();if(!t)return Z(e,`skipped`,{reason:X(`taskTitleNotRecognized`)});let n=e.recurrence===`weekly`?`weekly`:`once`,r=await me({title:t,...e.dueDateISO?{dueDate:e.dueDateISO}:{},...e.category?.trim()?{category:e.category.trim()}:{},...e.priority?{priority:e.priority}:{},...e.notes?.trim()?{notes:e.notes.trim()}:{},recurrence:n,...n===`weekly`&&Array.isArray(e.daysOfWeek)?{daysOfWeek:e.daysOfWeek}:{}});return Z(e,`applied`,{entityId:r.id,entityLabel:r.title})}if(e.kind===`habit_create`){let t=String(e.name??``).trim();if(!t)return Z(e,`skipped`,{reason:X(`habitNameNotRecognized`)});let n=await h({name:t,group:e.group?.trim()||X(`defaultHabitGroup`),type:e.habitType??`daily`,...e.target!=null&&Number(e.target)>0?{target:Number(e.target)}:{},...Array.isArray(e.daysOfWeek)&&e.daysOfWeek.length>0?{daysOfWeek:e.daysOfWeek}:{},...e.preferredTimeHHMM?{preferredTimeHHMM:e.preferredTimeHHMM}:{},...e.notes?.trim()?{notes:e.notes.trim()}:{}});return Z(e,`applied`,{entityId:n.id,entityLabel:n.name})}if(e.kind===`training_create`){let t=String(e.title??``).trim();if(!t)return Z(e,`skipped`,{reason:X(`trainingNotRecognized`)});let r=e.recurrence===`weekly`?`weekly`:`once`;if(r===`weekly`&&(!Array.isArray(e.daysOfWeek)||e.daysOfWeek.length===0))return Z(e,`skipped`,{reason:X(`trainingDaysMissing`)});let i=await Ve({title:t,type:e.trainingType??`other`,recurrence:r,...r===`once`?{dateISO:e.dateISO||n}:{},...r===`weekly`?{daysOfWeek:e.daysOfWeek??[]}:{},timeHHMM:e.timeHHMM||`18:00`,durationMin:Math.max(1,Math.round(Number(e.durationMin)||60)),reminderEnabled:!0});return Z(e,`applied`,{entityId:i.id,entityLabel:i.title})}if(e.kind===`debt_create`){let t=String(e.name??``).trim(),n=Math.round(Number(e.totalRub)||0);if(!t||n<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let r=await L({name:t,totalRub:n,...e.dueDateISO?{dueDateISO:e.dueDateISO}:{},...e.minPaymentRub!=null&&Number(e.minPaymentRub)>0?{minPaymentRub:Math.round(Number(e.minPaymentRub))}:{},...e.notes?.trim()?{notes:e.notes.trim()}:{}});return Z(e,`applied`,{entityId:r.id,entityLabel:X(`debtCreatedLabel`,{name:r.name,amount:n})})}if(e.kind===`debt_payment`){let t=String(e.debtName??``).trim(),r=Math.round(Number(e.amountRub)||0);if(!t||r<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let i=Q((await g.debts.toArray()).filter(e=>e.active),t,e=>e.name);return i.status===`no_match`?Z(e,`no_match`,{reason:X(`debtNotFound`,{name:t})}):i.status===`ambiguous`?Z(e,`ambiguous`,{reason:X(`debtsAmbiguous`,{name:t})}):(await oe({debtId:i.item.id,dateISO:n,amountRub:r,source:`manual`}),Z(e,`applied`,{entityId:i.item.id,entityLabel:X(`debtPaymentLabel`,{name:i.item.name,amount:r})}))}if(e.kind===`subscription_create`){let t=String(e.serviceName??``).trim(),r=Math.round(Number(e.priceRub)||0);if(!t||r<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let i=e.nextChargeDateISO||Na(n,e.billingPeriod),a=await be({serviceName:t,active:!0,billingPeriod:e.billingPeriod===`yearly`?`year`:`month`,priceRub:r,nextChargeDateISO:i,accountContact:``,paymentMethod:{kind:`card`,bankName:``,cardBrand:`MIR`,last4:``},reminderOffsetMinutes:[1440]});return Z(e,`applied`,{entityId:a.id,entityLabel:X(`subscriptionCreatedLabel`,{name:a.serviceName,amount:r})})}if(e.kind===`holiday_create`){let t=String(e.title??``).trim(),n=String(e.dateISO??``).trim();if(!t||!/^\d{4}-\d{2}-\d{2}$/.test(n))return Z(e,`skipped`,{reason:X(`holidayDateMissing`)});let r=await si({title:t,kind:e.personName?.trim()||e.recurringYearly?`birthday`:`holiday`,dateISO:n,recurringYearly:e.recurringYearly===!0,budgetRub:Math.max(0,Math.round(Number(e.budgetRub)||0)),active:!0,...e.personName?.trim()?{personName:e.personName.trim()}:{}});return Z(e,`applied`,{entityId:r.id,entityLabel:`${r.title} · ${n}`})}if(e.kind===`savings_goal_create`){let t=String(e.name??``).trim(),n=Math.round(Number(e.targetRub)||0);if(!t||n<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let r=await ue({name:t,targetRub:n,...e.targetDateISO?{targetDateISO:e.targetDateISO}:{},...e.notes?.trim()?{notes:e.notes.trim()}:{}});return Z(e,`applied`,{entityId:r.id,entityLabel:X(`savingsGoalCreatedLabel`,{name:r.name,amount:n})})}if(e.kind===`savings_topup`){let t=String(e.goalName??``).trim(),r=Math.round(Number(e.amountRub)||0);if(!t||r<=0)return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let i=Q((await g.savingsGoals.toArray()).filter(e=>e.active),t,e=>e.name);return i.status===`no_match`?Z(e,`no_match`,{reason:X(`savingsGoalNotFound`,{name:t})}):i.status===`ambiguous`?Z(e,`ambiguous`,{reason:X(`savingsGoalsAmbiguous`,{name:t})}):(await le({goalId:i.item.id,dateISO:n,amountRub:r,source:`manual`}),Z(e,`applied`,{entityId:i.item.id,entityLabel:X(`savingsTopupLabel`,{name:i.item.name,amount:r})}))}if(e.kind===`balance_set`){let t=Math.round(Number(e.balanceRub));return Number.isFinite(t)?(await se(t),Z(e,`applied`,{entityLabel:X(`balanceSetLabel`,{amount:t})})):Z(e,`skipped`,{reason:X(`amountNotRecognized`)})}if(e.kind===`budget_limit_set`){let t=String(e.category??``).trim(),n=Math.round(Number(e.amountRub)||0),r=Math.round(Number(e.monthlyAvailableRub)||0);if(t&&n>0){let r=await R(),i=Array.isArray(r.essentialBudgetsRub)?[...r.essentialBudgetsRub]:[],a=i.findIndex(e=>ga(e.category,t));return a>=0?i[a]={...i[a],amount:n}:i.push({category:t,amount:n}),await _({essentialBudgetsRub:i}),Z(e,`applied`,{entityLabel:X(`budgetLimitSetLabel`,{category:a>=0?i[a].category:t,amount:n})})}return r>0?(await _({monthlyAvailableRub:r}),Z(e,`applied`,{entityLabel:X(`budgetMonthlySetLabel`,{amount:r})})):Z(e,`skipped`,{reason:X(`budgetLimitInvalid`)})}if(e.kind===`budget_limit_delete`){let t=String(e.category??``).trim();if(!t)return Z(e,`skipped`,{reason:X(`budgetLimitInvalid`)});let n=await R(),r=Array.isArray(n.essentialBudgetsRub)?n.essentialBudgetsRub:[],i=r.filter(e=>ga(e.category,t));return i.length===0?Z(e,`no_match`,{reason:X(`budgetLimitNotFound`,{category:t})}):i.length>1?Z(e,`ambiguous`,{reason:X(`budgetLimitsAmbiguous`,{category:t})}):(await _({essentialBudgetsRub:r.filter(e=>e!==i[0])}),Z(e,`applied`,{entityLabel:X(`budgetLimitDeletedLabel`,{category:i[0].category})}))}if(e.kind===`supplement_plan_add`){let t=String(e.name??``).trim();return t?Z(e,`applied`,{entityId:(await _e({customName:t,dosageValue:Math.max(0,Number(e.dosageValue)||1),dosageUnit:e.dosageUnit?.trim()||X(`defaultDosageUnit`),frequencyPerDay:Math.max(1,Math.round(Number(e.frequencyPerDay)||1)),timing:e.withMeal===!0?`with_meal`:`custom`,preferredTimesHHMM:Array.isArray(e.preferredTimesHHMM)&&e.preferredTimesHHMM.length>0?e.preferredTimesHHMM:[`09:00`],withMeal:e.withMeal===!0,active:!0,...e.notes?.trim()?{notes:e.notes.trim()}:{}})).id,entityLabel:t}):Z(e,`no_match`,{reason:X(`supplementNameNotRecognized`)})}if(e.kind===`user_params_update`){let t=await M();if(!t?.app)return Z(e,`error`,{reason:X(`applyFailed`)});let n=t.app,r=n.nutritionProfile??{},i={};e.heightCm!=null&&(i.heightCm=Number(e.heightCm)),e.weightKg!=null&&(i.weightKg=Number(e.weightKg)),e.age!=null&&(i.age=Math.round(Number(e.age))),e.sex&&(i.sex=e.sex),e.bodyType&&(i.bodyType=e.bodyType),e.activityLevel&&(i.activityLevel=e.activityLevel),e.goalType&&(i.goalType=e.goalType),e.goalAggressiveness!=null&&(i.goalAggressiveness=Number(e.goalAggressiveness)),e.mealsPerDay!=null&&(i.mealsPerDay=Math.round(Number(e.mealsPerDay))),e.firstMealTimeHHMM&&(i.firstMealTimeHHMM=e.firstMealTimeHHMM),e.mealIntervalHours!=null&&(i.mealIntervalHours=Number(e.mealIntervalHours));let a=Object.keys(i),o=e.wakeTimeHHMM!=null||e.sleepTimeHHMM!=null||e.carbBefore18Percent!=null||e.waterTargetMl!=null;if(a.length===0&&!o)return Z(e,`skipped`,{reason:X(`paramsNotRecognized`)});let s={...r,...i},c={};a.length>0&&(c.nutritionProfile=s),e.wakeTimeHHMM&&(c.wakeTimeTarget=e.wakeTimeHHMM),e.sleepTimeHHMM&&(c.sleepTimeTarget=e.sleepTimeHHMM),e.carbBefore18Percent!=null&&(c.nutritionCarbBefore18Percent=Number(e.carbBefore18Percent)),(e.weightKg!=null||e.sex||e.age!=null)&&(c.supplementProfile={...n.supplementProfile??{},...e.weightKg==null?{}:{weightKg:Number(e.weightKg)},...e.sex?{sex:e.sex}:{},...e.age==null?{}:{ageYears:Math.round(Number(e.age))}}),await b({app:c});let l=s.sex!=null&&s.age!=null&&s.heightCm!=null&&s.weightKg!=null&&s.bodyType!=null&&s.activityLevel!=null&&s.goalType!=null&&s.goalAggressiveness!=null,u=!1;if(l){let t=ye({...s,carbBefore18Percent:e.carbBefore18Percent==null?n.nutritionCarbBefore18Percent:Number(e.carbBefore18Percent),wakeTimeHHMM:e.wakeTimeHHMM??n.wakeTimeTarget,sleepTimeHHMM:e.sleepTimeHHMM??n.sleepTimeTarget});await E({nutritionCaloriesTarget:t.targetCalories,nutritionProteinTargetGr:t.proteinGr,nutritionFatTargetGr:t.fatGr,nutritionCarbTargetGr:t.carbsGr,nutritionMealsPerDayTarget:t.mealsPerDay,nutritionCarbBefore18Percent:t.carbBefore18Percent}),e.waterTargetMl??await x(t.waterTargetMl),u=!0}e.waterTargetMl!=null&&await x(Math.round(Number(e.waterTargetMl)));let d=[...a,...e.wakeTimeHHMM?[`wakeTime`]:[],...e.sleepTimeHHMM?[`sleepTime`]:[],...e.carbBefore18Percent==null?[]:[`carbBefore18Percent`],...e.waterTargetMl==null?[]:[`waterTargetMl`]].join(`, `);return Z(e,`applied`,{entityLabel:X(u?`paramsAppliedRecalculated`:`paramsApplied`,{params:d})})}if(e.kind===`lab_result_add`){let t=String(e.biomarkerName??``).trim(),n=Number(e.value);if(!t||!Number.isFinite(n))return Z(e,`skipped`,{reason:X(`amountNotRecognized`)});let r=Ia(t);if(r.status===`no_match`)return Z(e,`no_match`,{reason:X(`labBiomarkerNotFound`,{name:t})});if(r.status===`ambiguous`)return Z(e,`ambiguous`,{reason:X(`labBiomarkersAmbiguous`,{name:t})});let i=We(r.id)??null,a=String(e.unit??``).trim(),o=a&&i?.supportedUnits.some(e=>e.toLowerCase()===a.toLowerCase())?a:i?.defaultUnit??a;if(!o)return Z(e,`skipped`,{reason:X(`labUnitMissing`)});let s=e.collectedAtISO?new Date(`${e.collectedAtISO}T12:00:00`).toISOString():new Date().toISOString();return Z(e,`applied`,{entityId:(await rt({biomarkerId:r.id,value:n,unit:o,collectedAtISO:s,source:`manual`})).id,entityLabel:X(`labResultLabel`,{name:i?.name??r.id,value:n,unit:o})})}return e.kind===`note`?Z(e,`skipped`,{reason:X(`noteReadOnly`)}):Z(e,`unsupported`,{reason:X(`unsupported`)})}function Na(e,t){let n=new Date(`${e}T12:00:00`);return t===`yearly`?n.setFullYear(n.getFullYear()+1):n.setMonth(n.getMonth()+1),n.toISOString().slice(0,10)}var Pa={а:`a`,б:`b`,в:`b`,д:`d`,е:`e`,к:`k`,с:`c`};function Fa(e){return ha(e).replace(/ё/g,`е`).split(` `).map(e=>{let t=/^([абвдекс])(\d*)$/.exec(e);return t?`${Pa[t[1]]??t[1]}${t[2]}`:e}).join(` `)}function Ia(e){let t=Fa(e);if(!t)return{status:`no_match`};let n=Ue.filter(e=>[e.id,e.name,e.shortName??``,...e.aliases??[]].some(e=>{let n=Fa(e);return n&&(n===t||n.includes(t)||t.includes(n))}));if(n.length===1)return{status:`matched`,id:n[0].id};if(n.length>1){let e=n.filter(e=>[e.id,e.name,e.shortName??``,...e.aliases??[]].some(e=>Fa(e)===t));return e.length===1?{status:`matched`,id:e[0].id}:{status:`ambiguous`}}return{status:`no_match`}}async function La(e){let t=await Aa(e),n=[],r=0,i=0,a=0,o=0,s=0,c=0,l=[],u=[];for(let e of t){let t=e.actions.filter(e=>e.kind!==`note`);t.length===0&&t.push({kind:`note`,text:e.transcript});let d=[];for(let[n,l]of t.entries())try{let t=la(e.id,n,l.kind);if(fa(t)){let e=Z(l,`skipped`,{reason:X(`alreadyApplied`)});d.push(e),i+=1;continue}let u=await Ma(l,e.transcript);d.push(u),u.status===`applied`?r+=1:i+=1,u.status===`applied`&&pa(t),u.status===`unsupported`&&(a+=1),u.status===`no_match`&&(o+=1),u.status===`ambiguous`&&(s+=1),u.status===`error`&&(c+=1),(u.status===`unsupported`||u.status===`no_match`||u.status===`ambiguous`)&&(u.action.kind,u.status)}catch(e){let t=Z(l,`error`,{reason:e instanceof Error?e.message:X(`applyFailed`)});d.push(t),i+=1,c+=1,l.kind,t.status}let f=d.filter(e=>e.status===`applied`).length,p=d.filter(e=>e.status===`error`).length,m={recordId:e.id,results:d,appliedCount:f,skippedCount:d.length-f,unsupportedCount:d.filter(e=>e.status===`unsupported`).length,noMatchCount:d.filter(e=>e.status===`no_match`).length,ambiguousCount:d.filter(e=>e.status===`ambiguous`).length,errorCount:p,hasErrors:p>0,shouldAckRecord:p===0};n.push(m),f>0&&l.push(e.id),m.shouldAckRecord&&u.push(e.id)}if(u.length>0){let t=await ka(`POST`,{ids:u},e);if(!t.ok)throw Error(v(`cloudSyncApi.ackFailed`,{status:t.status},y()))}da(),r>0&&P();let d=y(),f=[v(`cloudSyncApi.applySummaryApplied`,{applied:r},d)];return i>0&&f.push(v(`cloudSyncApi.applySummarySkipped`,{skipped:i},d)),o>0&&f.push(v(`cloudSyncApi.applySummaryNoMatch`,{noMatch:o},d)),s>0&&f.push(v(`cloudSyncApi.applySummaryAmbiguous`,{ambiguous:s},d)),a>0&&f.push(v(`cloudSyncApi.applySummaryUnsupported`,{unsupported:a},d)),c>0&&f.push(v(`cloudSyncApi.applySummaryErrors`,{errors:c},d)),{recordsFetched:t.length,recordsAcked:u.length,appliedRecords:l.length,appliedActions:r,skippedActions:i,unsupportedActions:a,noMatchActions:o,ambiguousActions:s,erroredActions:c,recordResults:n,message:t.length===0?v(`cloudSyncApi.queueEmpty`,void 0,d):f.join(` `)}}var Ra=`rms.cloudVoiceLastError`,za=`rms.chatSyncLastError`;function Ba(e,t){if(!(typeof localStorage>`u`))try{localStorage.setItem(e,JSON.stringify({message:t.slice(0,500),atISO:new Date().toISOString()}))}catch{}}function Va(e){if(!(typeof localStorage>`u`))try{localStorage.removeItem(e)}catch{}}function Ha(e){Ba(Ra,e)}function Ua(){Va(Ra)}function Wa(e){Ba(za,e)}function Ga(){Va(za)}var Ka=3e4;async function qa(e){if(!Me())return;let t=Ke(),n=await Pe({endpointUrl:ke(),accessToken:e,syncToken:t?void 0:``});n.ok?Ne(n.syncedAtISO):je(n.message)}function Ja(e=Ka){let{session:t}=at(),n=!!`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`?.trim(),[r,i]=(0,V.useState)(!1),[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(null),d=(0,V.useRef)(!1);return(0,V.useEffect)(()=>{if(!n)return;let r=!1,a=async()=>{if(!(d.current||r)){d.current=!0,i(!0),u(null);try{let e=await La({accessToken:t?.accessToken});if(r)return;c(e),o(new Date().toISOString()),Ua(),e.appliedActions>0&&(P(),await qa(t?.accessToken))}catch(e){if(r)return;let t=e instanceof Error?e.message:v(`cloudSyncApi.voiceApplyFailed`,void 0,y());Ha(t),u(t)}finally{d.current=!1,r||i(!1)}}};a();let s=window.setInterval(()=>{a()},Math.max(1e4,e)),l=()=>{document.visibilityState===`visible`&&a()};return document.addEventListener(`visibilitychange`,l),()=>{r=!0,window.clearInterval(s),document.removeEventListener(`visibilitychange`,l)}},[n,e,t?.accessToken]),{enabled:n,running:r,lastRunAtISO:a,lastResult:s,lastError:l}}var Ya=3e4;function Xa(e=48){return!Oe(e)}function Za(){let{authEnabled:e,isAuthenticated:t,session:n}=at(),r=(0,V.useRef)(!1);(0,V.useEffect)(()=>{if(!Me()||e&&!t)return;let i=!1,a=async()=>{if(!(i||r.current)&&!(typeof document<`u`&&document.hidden)){r.current=!0;try{let t=await Pe({endpointUrl:ke(),accessToken:n?.accessToken,syncToken:e?void 0:``,skipIfUnchanged:Xa()});t.ok?Ne(t.syncedAtISO):je(t.message)}catch{je(v(`cloudSyncApi.autoSyncFailed`,void 0,y()))}finally{r.current=!1}}};a();let o=window.setInterval(()=>void a(),Ya),s=()=>{document.hidden||a()};return document.addEventListener(`visibilitychange`,s),()=>{i=!0,window.clearInterval(o),document.removeEventListener(`visibilitychange`,s)}},[e,t,n?.accessToken])}var Qa=3e4;async function $a(e){let t=(await M())?.app?.telegramAutomation,n=t?.enabled!==!1,r=t?.chatSyncEndpointUrl?.trim()??``;if(e.setEnabled(!!(n&&r)),!n||!r){e.setLastStatusText(v(`chat.syncNotConfigured`,void 0,y()));return}Ga();let i=await Wt(),a=await qe(),o=Je(a)?a.accessToken:void 0,s=await mn({threadId:i.id,endpointUrl:r,accessToken:o});if(!s.ok){let t=s.errorCode===`config_missing`?v(`chat.syncNotConfigured`,void 0,y()):v(`chat.syncFetchFailed`,void 0,y());Wa(t),e.setLastStatusText(t);return}let c=await hn(s);c.idsToAck.length>0&&await gn(c.idsToAck,{endpointUrl:r,accessToken:o}),e.setLastAppliedCount(c.applied),e.setLastRunAtISO(new Date().toISOString());let l=y();e.setLastStatusText(c.applied>0?v(`chat.syncUpdated`,{count:c.applied},l):v(`chat.syncNoNew`,void 0,l))}function eo(e=Qa){let[t,n]=(0,V.useState)(!1),[r,i]=(0,V.useState)(!1),[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(0),[l,u]=(0,V.useState)(null),[d,f]=(0,V.useState)(null),p=(0,V.useRef)(!1);return(0,V.useEffect)(()=>{let t=!1,r=async()=>{if(!(p.current||t)){p.current=!0,i(!0),u(null);try{await $a({setEnabled:n,setRunning:i,setLastRunAtISO:o,setLastAppliedCount:c,setLastError:u,setLastStatusText:f})}catch(e){if(!t){let t=y(),n=e instanceof Error?e.message:v(`chat.syncFailed`,void 0,t);Wa(n),u(n),f(n)}}finally{p.current=!1,t||i(!1)}}};r();let a=window.setInterval(()=>{r()},Math.max(1e4,e)),s=()=>{document.visibilityState===`visible`&&r()};return document.addEventListener(`visibilitychange`,s),()=>{t=!0,window.clearInterval(a),document.removeEventListener(`visibilitychange`,s)}},[e]),{enabled:t,running:r,lastRunAtISO:a,lastAppliedCount:s,lastError:l,lastStatusText:d,syncNow:async()=>{if(!p.current){p.current=!0,i(!0),u(null);try{await $a({setEnabled:n,setRunning:i,setLastRunAtISO:o,setLastAppliedCount:c,setLastError:u,setLastStatusText:f})}catch(e){let t=y(),n=e instanceof Error?e.message:v(`chat.syncFailed`,void 0,t);Wa(n),u(n),f(n)}finally{p.current=!1,i(!1)}}}}}function to(){return(0,H.jsx)(`div`,{className:`rms-page`,style:{padding:16,color:`var(--color-text-muted)`},children:T()(`common.loading`)})}function no({title:e,hint:t,reloadLabel:n}){return(0,H.jsxs)(`div`,{className:`rms-page`,style:{minHeight:`100dvh`,padding:`max(24px, env(safe-area-inset-top)) 20px max(24px, env(safe-area-inset-bottom))`,display:`flex`,flexDirection:`column`,justifyContent:`center`,gap:16,color:`var(--color-text, #f8fafc)`,background:`var(--color-bg, #070a0f)`},children:[(0,H.jsx)(`h1`,{style:{margin:0,fontSize:20,lineHeight:1.3},children:e}),(0,H.jsx)(`p`,{style:{margin:0,color:`var(--color-text-muted, #64748b)`,lineHeight:1.45},children:t}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>{vt(),window.location.reload()},style:{alignSelf:`flex-start`,marginTop:8,padding:`12px 18px`,borderRadius:`var(--radius-md, 12px)`,border:`none`,background:`var(--color-primary, #67e8f9)`,color:`var(--color-on-primary, #0f172a)`,fontWeight:600,fontSize:15,cursor:`pointer`},children:n})]})}var ro=class extends V.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){Ct(e)}render(){return this.state.hasError?(0,H.jsx)(no,{title:this.props.title,hint:this.props.hint,reloadLabel:this.props.reloadLabel}):this.props.children}};function io({children:e}){let t=T(),[n,r]=(0,V.useState)(!1);(0,V.useEffect)(()=>{let e=()=>r(!0);return window.addEventListener(ht,e),()=>window.removeEventListener(ht,e)},[]);let i=t(`common.appErrorTitle`),a=t(`common.appErrorHint`),o=t(`common.appErrorReload`);return n?(0,H.jsx)(no,{title:i,hint:a,reloadLabel:o}):(0,H.jsx)(ro,{title:i,hint:a,reloadLabel:o,children:e})}async function ao(e,t=1){let n;for(let r=0;r<=t;r+=1)try{return await e()}catch(e){if(n=e,bt(e instanceof Error?e.message:String(e))&&r=t)break}throw n instanceof Error?n:Error(String(n))}function $(e,t=1){return(0,V.lazy)(()=>ao(e,t))}var oo=$(()=>C(()=>import(`./Today-DvXg_zIJ.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46]))),so=$(()=>C(()=>import(`./Tasks-u7ngZgNB.js`),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,48,19,20,28,21,42,43,34,49]))),co=$(()=>C(()=>import(`./Habits-CztRZGI9.js`),__vite__mapDeps([50,1,2,3,4,5,6,7,8,10,11,18,19,20,21,23,28,36,42,44,45]))),lo=$(()=>C(()=>import(`./Money-qS7BN3Xz.js`),__vite__mapDeps([51,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,18,19,21,17,36,52,53,32,42,45,54]))),uo=$(()=>C(()=>import(`./MoneyMonitor-DR5B7ieY.js`),__vite__mapDeps([55,1,2,3,4,5,6,7,8,10,11,14,18,19,20,21,17,52,53]))),fo=$(()=>C(()=>import(`./Nutrition-vBDDs6mT.js`),__vite__mapDeps([56,1,2,3,4,5,6,7,8,9,10,11,14,22,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,41,57,45,58]))),po=$(()=>C(()=>import(`./FoodCatalog-s-iwP3BU.js`),__vite__mapDeps([59,1,2,3,4,5,6,7,8,10,11,22,27,41]))),mo=$(()=>C(()=>import(`./Trainings-B_c8IqOj.js`),__vite__mapDeps([60,1,2,3,4,5,6,7,8,10,11,29,36,35,21,45]))),ho=$(()=>C(()=>import(`./Supplements-B_M6NUEM.js`),__vite__mapDeps([61,1,2,3,4,5,6,7,8,10,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,62,63,64,65,66,67,68,45,69]))),go=$(()=>C(()=>import(`./SupplementLabs-DJwsmiUU.js`),__vite__mapDeps([70,1,2,3,4,5,6,7,8,10,11,23,62,25,64,65]))),_o=$(()=>C(()=>import(`./SupplementDataNeeds-DzrCNDl4.js`),__vite__mapDeps([71,1,2,3,4,5,6,10,11,23,62,25,64,33,26,67,66]))),vo=$(()=>C(()=>import(`./SupplementReports-DKWQhmni.js`),__vite__mapDeps([72,1,2,3,4,5,6,7,8,10,11,23,62,25,24,26,21,63,64,68,14,29,65,66]))),yo=$(()=>C(()=>import(`./AutomationPreview-DahUjvks.js`),__vite__mapDeps([73,1,2,3,4,5,6,7,8,10,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,39,37]))),bo=$(()=>C(()=>import(`./Analytics-CbGX8rat.js`),__vite__mapDeps([74,1,2,3,4,5,6,7,8,10,11,14,18,19,20,21,17,27,57]))),xo=$(()=>C(()=>import(`./More-Doa0rCHo.js`),__vite__mapDeps([75,1,2,3,4,5,6,7,8,9,10,11,16,17,14,18,19,20,21,76,48,22,15,23,24,25,26,27,28,29,30,31,32,33,34,35,38,39,40,41,45,77,54,78]))),So=$(()=>C(()=>import(`./WelcomePage-BZ0Vezxq.js`),__vite__mapDeps([79,1,2,3,4,5,6,7,8,38,39,20,30,31,78]))),Co=$(()=>C(()=>import(`./RestorePage-G2DGLPjx.js`),__vite__mapDeps([80,1,2,3,4,5,6,7,8,16,17,14,18,19,20,21,38,39,30,31,78]))),wo=$(()=>C(()=>import(`./OnboardingPage-BPpLr8lG.js`),__vite__mapDeps([81,1,2,3,4,5,6,7,8,16,17,14,18,19,20,21,76,15,22,23,24,25,26,27,28,29,30,31,32,33,34,35,62,38,39,45,78])));function To(){let[e,n]=(0,V.useState)(null);return Ja(),Za(),eo(),(0,V.useEffect)(()=>{_t(),da(),st().catch(e=>{console.error(`seed_from_defaults_failed`,e),n(`Не удалось подготовить стартовые данные. Можно продолжать, но часть демо-данных может отсутствовать.`)})},[]),(0,H.jsx)(o,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:(0,H.jsx)(k,{children:(0,H.jsx)(re,{children:(0,H.jsx)(ri,{children:(0,H.jsxs)(io,{children:[e&&(0,H.jsx)(`div`,{className:`app-seed-error`,role:`status`,"aria-live":`polite`,children:e}),(0,H.jsx)(V.Suspense,{fallback:(0,H.jsx)(to,{}),children:(0,H.jsxs)(a,{children:[(0,H.jsx)(t,{path:`/welcome`,element:(0,H.jsx)(So,{})}),(0,H.jsx)(t,{path:`/restore`,element:(0,H.jsx)(Co,{})}),(0,H.jsx)(t,{path:`/onboarding`,element:(0,H.jsx)(wo,{})}),(0,H.jsxs)(t,{path:`/`,element:(0,H.jsx)(Gr,{}),children:[(0,H.jsx)(t,{index:!0,element:(0,H.jsx)(s,{to:`/today`,replace:!0})}),(0,H.jsx)(t,{path:`today`,element:(0,H.jsx)(oo,{})}),(0,H.jsx)(t,{path:`tasks`,element:(0,H.jsx)(so,{})}),(0,H.jsx)(t,{path:`habits`,element:(0,H.jsx)(co,{})}),(0,H.jsx)(t,{path:`money`,element:(0,H.jsx)(lo,{})}),(0,H.jsx)(t,{path:`money/monitor/:section`,element:(0,H.jsx)(uo,{})}),(0,H.jsx)(t,{path:`nutrition`,element:(0,H.jsx)(fo,{})}),(0,H.jsx)(t,{path:`nutrition/catalog`,element:(0,H.jsx)(po,{})}),(0,H.jsx)(t,{path:`trainings`,element:(0,H.jsx)(mo,{})}),(0,H.jsx)(t,{path:`supplements`,element:(0,H.jsx)(ho,{})}),(0,H.jsx)(t,{path:`supplements/labs`,element:(0,H.jsx)(go,{})}),(0,H.jsx)(t,{path:`supplements/data-needs`,element:(0,H.jsx)(_o,{})}),(0,H.jsx)(t,{path:`supplements/reports`,element:(0,H.jsx)(vo,{})}),(0,H.jsx)(t,{path:`automation`,element:(0,H.jsx)(yo,{})}),(0,H.jsx)(t,{path:`analytics`,element:(0,H.jsx)(bo,{})}),(0,H.jsx)(t,{path:`more`,element:(0,H.jsx)(s,{to:`/more/money`,replace:!0})}),(0,H.jsx)(t,{path:`more/:section`,element:(0,H.jsx)(xo,{})})]}),(0,H.jsx)(t,{path:`*`,element:(0,H.jsx)(s,{to:`/today`,replace:!0})})]})})]})})})})})}function Eo(){if(typeof document>`u`)return;let e=e=>{e.preventDefault()};document.addEventListener(`gesturestart`,e,{passive:!1}),document.addEventListener(`gesturechange`,e,{passive:!1}),document.addEventListener(`gestureend`,e,{passive:!1}),document.addEventListener(`touchmove`,e=>{e.touches.length>1&&e.preventDefault()},{passive:!1})}var Do=`true`,Oo=`false`,ko=Do===`true`,Ao=Oo===`true`;function jo(e={}){let{immediate:t=!1,onNeedReload:n,onNeedRefresh:r,onOfflineReady:i,onRegistered:a,onRegisteredSW:o,onRegisterError:s}=e,c,l,u,d=async(e=!0)=>{await l,ko||u?.()};async function f(){if(`serviceWorker`in navigator){if(c=await C(async()=>{let{Workbox:e}=await import(`./workbox-window.prod.es5-1pVofQPM.js`);return{Workbox:e}},[]).then(({Workbox:e})=>new e(`/sw.js`,{scope:`/`,type:`classic`})).catch(e=>{s?.(e)}),!c)return;if(u=()=>{c?.messageSkipWaiting()},!Ao)if(ko)c.addEventListener(`activated`,e=>{(e.isUpdate||e.isExternal)&&(n?n():window.location.reload())}),c.addEventListener(`installed`,e=>{e.isUpdate||i?.()});else{let e=!1,t=()=>{e=!0,c?.addEventListener(`controlling`,e=>{e.isUpdate&&(n?n():window.location.reload())}),r?.()};c.addEventListener(`installed`,n=>{n.isUpdate===void 0?n.isExternal===void 0?!e&&i?.():n.isExternal?t():!e&&i?.():n.isUpdate||i?.()}),c.addEventListener(`waiting`,t)}c.register({immediate:t}).then(e=>{o?o(`/sw.js`,e):a?.(e)}).catch(e=>{s?.(e)})}}return l=f(),d}function Mo(){let e=T(),[t,n]=(0,V.useState)(!1),r=(0,V.useRef)(void 0);return(0,V.useEffect)(()=>{if(!(`serviceWorker`in navigator))return;let e=jo({immediate:!0,onNeedRefresh(){n(!0),vt(),e(!0)},onRegistered(e){e&&window.setInterval(()=>{e.update()},3600*1e3)}});r.current=e},[]),t?(0,H.jsxs)(`div`,{role:`status`,style:{position:`fixed`,left:12,right:12,bottom:`calc(var(--bottom-nav-height, 96px) + 12px + env(safe-area-inset-bottom, 0px))`,zIndex:1e4,padding:`12px 14px`,borderRadius:`var(--radius-md, 10px)`,background:`var(--color-surface-elevated, #2a2a2a)`,color:`var(--color-text, #fff)`,boxShadow:`0 4px 20px rgba(0,0,0,0.35)`,display:`flex`,flexDirection:`column`,gap:10},children:[(0,H.jsx)(`span`,{style:{fontSize:14,lineHeight:1.35},children:e(`pwa.updating`)}),(0,H.jsx)(`div`,{style:{display:`flex`,gap:8,flexWrap:`wrap`},children:(0,H.jsx)(`button`,{type:`button`,onClick:()=>{vt(),r.current?.(!0)},style:{flex:1,minWidth:120,padding:`10px 12px`,borderRadius:`var(--radius-sm, 8px)`,border:`none`,background:`var(--color-primary, #4a9eff)`,color:`#fff`,fontSize:14,fontWeight:600,cursor:`pointer`},children:e(`pwa.refreshNow`)})})]}):null}var No=`rms-db-error-overlay`;function Po(e){let t=e?.name??``,n=e?.inner?.name??``;return t===`QuotaExceededError`||n===`QuotaExceededError`?`quota`:t===`UpgradeError`||t===`VersionError`||t===`SchemaError`?`upgrade`:`unavailable`}var Fo={quota:{title:`Недостаточно места для данных`,hint:`На устройстве закончилось место для локального хранилища. Освободите немного памяти и перезагрузите приложение — данные не потеряны.`},upgrade:{title:`Не удалось обновить локальную базу`,hint:`Произошла ошибка при обновлении структуры данных. Перезагрузите приложение. Если ошибка повторяется — не очищайте данные браузера, а восстановитесь из облачной копии в настройках.`},unavailable:{title:`Локальное хранилище недоступно`,hint:`Браузер не дал доступ к локальной базе данных. Это бывает в приватном режиме или при жёстких ограничениях памяти. Откройте приложение в обычном режиме и перезагрузите страницу.`}};function Io(e,t=document){if(t.getElementById(No))return;let{title:n,hint:r}=Fo[e],i=t.createElement(`div`);i.id=No,i.setAttribute(`role`,`alert`),i.style.cssText=`position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--color-bg, #101014);color:var(--color-text, #f4f4f6);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;text-align:center;`;let a=t.createElement(`div`);a.style.cssText=`max-width:420px;display:flex;flex-direction:column;gap:12px;align-items:center;`;let o=t.createElement(`h1`);o.textContent=n,o.style.cssText=`font-size:20px;font-weight:700;margin:0;`;let s=t.createElement(`p`);s.textContent=r,s.style.cssText=`font-size:15px;line-height:1.5;margin:0;opacity:0.85;`;let c=t.createElement(`button`);c.type=`button`,c.textContent=`Перезагрузить`,c.style.cssText=`margin-top:8px;min-height:44px;padding:10px 24px;border-radius:12px;border:none;background:var(--color-accent, #4f7df9);color:#fff;font-size:16px;font-weight:600;cursor:pointer;`,c.addEventListener(`click`,()=>{window.location.reload()}),a.append(o,s,c),i.append(a),t.body.append(i)}function Lo(e=()=>g.open(),t=document){return e().then(()=>void 0).catch(e=>{console.error(`[db] Не удалось открыть локальную базу данных`,e),Io(Po(e),t)})}St(),Eo(),ie(),Lo(),document.body.classList.add(`rms-theme-active`),(0,lt.createRoot)(document.getElementById(`root`)).render((0,H.jsxs)(V.StrictMode,{children:[(0,H.jsx)(ot,{children:(0,H.jsx)(To,{})}),(0,H.jsx)(Mo,{})]}));export{wr as A,Qr as C,Ir as D,Lr as E,At as F,vt as I,nr as M,rr as N,Ar as O,Ft as P,Xr as S,Kr as T,ci as _,Hi as a,ei as b,zi as c,Ti as d,wi as f,oi as g,li as h,Gi as i,ar as j,jr as k,di as l,si as m,Ki as n,Vi as o,ui as p,Wi as r,Ui as s,oa as t,ji as u,$r as v,qr as w,Zr as x,ti as y};