import{f as e,l as t,s as n,t as r,u as i}from"./db-D2Po16Ap.js";import{B as a,C as o,F as s,I as c,L as l,x as u,z as d}from"./Card-Cxq4Ee-X.js";import{_ as f,f as p,v as m,y as h}from"./cloudBackupEncryption-Cbq9uKvI.js";import{o as g,t as _}from"./now-Ds5hQLtP.js";import{s as v}from"./storedLabels-Cp0Gl0kW.js";import{r as y,s as b}from"./formatSettings-BmCn9wYJ.js";import{M as x,_ as S,m as C,p as w,s as T}from"./accountBalance-BmL5XsaY.js";import{d as E,f as ee}from"./nutrition-C9_Egd0N.js";import{c as te,d as D,f as O,i as k,p as ne,u as re}from"./tasks-Ud0FoDhi.js";import{I as A,_ as ie,c as j,l as M,r as ae}from"./supplements-DUypwbGQ.js";import{B as N,F as P,G as F,H as I,P as L,U as oe,V as R,et as z,nt as se,q as ce,t as B,v as V}from"./supplementPlanReview-ClVU7EUk.js";import{i as le}from"./trainings-DvsDkZ_M.js";import{t as ue}from"./data-food-BfKhs-bB.js";import{t as H}from"./financeControlViewModel-XF2hvPAh.js";import{t as de}from"./taskControlViewModel-DyXTqYav.js";import{t as U}from"./trainingControlViewModel-Cg1H8VgT.js";import{t as W}from"./supplementDataCoverage-BcmpKrS2.js";import{t as fe}from"./authConfig-BEMI_Xyz.js";import{i as pe,r as G}from"./authSessionStore-DMywFnF3.js";var me=[{id:`recipe_grechka_chicken`,name:`Buckwheat + chicken`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`cereals_grechka_yadritsa`,gramsBase:80},{catalogFoodId:`poultry_chicken`,gramsBase:150}]},{id:`recipe_rice_turkey`,name:`Rice + turkey`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`cereals_rice_white`,gramsBase:80},{catalogFoodId:`poultry_turkey`,gramsBase:150}]},{id:`recipe_oatmeal_milk`,name:`Oatmeal with milk`,tags:[`breakfast`],ingredients:[{catalogFoodId:`cereals_herkules`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:150}]},{id:`recipe_tvorog_banana`,name:`Cottage cheese + banana`,tags:[`breakfast`,`snack`],ingredients:[{catalogFoodId:`dairy_tvorog_5`,gramsBase:150},{catalogFoodId:`fruit_banana`,gramsBase:100}]},{id:`recipe_eggs_tomato`,name:`Eggs + tomato`,tags:[`breakfast`,`lunch`],ingredients:[{catalogFoodId:`eggs_chicken`,gramsBase:120},{catalogFoodId:`veg_tomato`,gramsBase:100}]},{id:`recipe_fish_potato`,name:`Fish + potato`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`fish_pollock`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_cod_potato`,name:`Cod + potato`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`fish_cod`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_chicken_salad`,name:`Chicken + salad`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`poultry_chicken`,gramsBase:120},{catalogFoodId:`veg_lettuce`,gramsBase:80}]},{id:`recipe_tvorog_zero`,name:`Fat-free cottage cheese with fruit`,tags:[`breakfast`,`snack`],ingredients:[{catalogFoodId:`dairy_tvorog_0`,gramsBase:150},{catalogFoodId:`fruit_apple`,gramsBase:100}]},{id:`recipe_oats_milk_banana`,name:`Oatmeal with milk and banana`,tags:[`breakfast`],ingredients:[{catalogFoodId:`cereals_oats`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:150},{catalogFoodId:`fruit_banana`,gramsBase:50}]},{id:`recipe_eggs_cucumber`,name:`Eggs + cucumber`,tags:[`breakfast`,`snack`],ingredients:[{catalogFoodId:`eggs_chicken`,gramsBase:100},{catalogFoodId:`veg_cucumber_ground`,gramsBase:80}]},{id:`recipe_kefir_banana`,name:`Kefir + banana`,tags:[`snack`],ingredients:[{catalogFoodId:`dairy_kefir_32`,gramsBase:200},{catalogFoodId:`fruit_banana`,gramsBase:80}]},{id:`recipe_beef_beet`,name:`Beef + beet`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`meat_beef`,gramsBase:120},{catalogFoodId:`veg_beet`,gramsBase:100}]},{id:`recipe_lentils_turkey`,name:`Lentils + turkey`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`legumes_lentils`,gramsBase:70},{catalogFoodId:`poultry_turkey`,gramsBase:120}]},{id:`recipe_salmon_rice`,name:`Pink salmon + rice`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`fish_pink_salmon`,gramsBase:120},{catalogFoodId:`cereals_rice_white`,gramsBase:80}]},{id:`recipe_chicken_cabbage`,name:`Chicken + cabbage`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`poultry_chicken`,gramsBase:150},{catalogFoodId:`veg_cabbage_white`,gramsBase:150}]},{id:`recipe_turkey_carrot`,name:`Turkey + carrot`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`poultry_turkey`,gramsBase:130},{catalogFoodId:`veg_carrot`,gramsBase:100}]},{id:`recipe_hake_potato`,name:`Hake + potato`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`fish_hake`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_veg_salad`,name:`Vegetable salad`,tags:[`snack`,`side`],ingredients:[{catalogFoodId:`veg_tomato`,gramsBase:80},{catalogFoodId:`veg_lettuce`,gramsBase:50},{catalogFoodId:`veg_cucumber_ground`,gramsBase:80}]},{id:`recipe_cheese_tomato`,name:`Cheese + tomato`,tags:[`snack`,`breakfast`],ingredients:[{catalogFoodId:`dairy_cheese_gollandskiy`,gramsBase:50},{catalogFoodId:`veg_tomato`,gramsBase:100}]},{id:`recipe_semolina_milk`,name:`Semolina porridge with milk`,tags:[`breakfast`],ingredients:[{catalogFoodId:`cereals_semolina`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:200}]},{id:`recipe_peas_onion_carrot`,name:`Peas with vegetables`,tags:[`lunch`,`side`],ingredients:[{catalogFoodId:`legumes_peas_split`,gramsBase:80},{catalogFoodId:`veg_onion`,gramsBase:30},{catalogFoodId:`veg_carrot`,gramsBase:50}]},{id:`recipe_chicken_young_potato`,name:`Young chicken + potato with carrot`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`poultry_chicken_young`,gramsBase:120},{catalogFoodId:`veg_potato`,gramsBase:120},{catalogFoodId:`veg_carrot`,gramsBase:50}]},{id:`recipe_grechka_beef`,name:`Buckwheat + beef`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`cereals_grechka_yadritsa`,gramsBase:80},{catalogFoodId:`meat_beef`,gramsBase:120}]},{id:`recipe_rice_chicken`,name:`Rice + chicken`,tags:[`lunch`,`dinner`],ingredients:[{catalogFoodId:`cereals_rice_white`,gramsBase:80},{catalogFoodId:`poultry_chicken`,gramsBase:140}]}],he=[{id:`recipe_grechka_chicken`,name:`Гречка + курица`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`cereals_grechka_yadritsa`,gramsBase:80},{catalogFoodId:`poultry_chicken`,gramsBase:150}]},{id:`recipe_rice_turkey`,name:`Рис + индейка`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`cereals_rice_white`,gramsBase:80},{catalogFoodId:`poultry_turkey`,gramsBase:150}]},{id:`recipe_oatmeal_milk`,name:`Овсянка на молоке`,tags:[`завтрак`],ingredients:[{catalogFoodId:`cereals_herkules`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:150}]},{id:`recipe_tvorog_banana`,name:`Творог + банан`,tags:[`завтрак`,`перекус`],ingredients:[{catalogFoodId:`dairy_tvorog_5`,gramsBase:150},{catalogFoodId:`fruit_banana`,gramsBase:100}]},{id:`recipe_eggs_tomato`,name:`Яйца + помидор`,tags:[`завтрак`,`обед`],ingredients:[{catalogFoodId:`eggs_chicken`,gramsBase:120},{catalogFoodId:`veg_tomato`,gramsBase:100}]},{id:`recipe_fish_potato`,name:`Рыба + картофель`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`fish_pollock`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_cod_potato`,name:`Треска + картофель`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`fish_cod`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_chicken_salad`,name:`Курица + салат`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`poultry_chicken`,gramsBase:120},{catalogFoodId:`veg_lettuce`,gramsBase:80}]},{id:`recipe_tvorog_zero`,name:`Творог обезжиренный с фруктами`,tags:[`завтрак`,`перекус`],ingredients:[{catalogFoodId:`dairy_tvorog_0`,gramsBase:150},{catalogFoodId:`fruit_apple`,gramsBase:100}]},{id:`recipe_oats_milk_banana`,name:`Овсянка на молоке с бананом`,tags:[`завтрак`],ingredients:[{catalogFoodId:`cereals_oats`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:150},{catalogFoodId:`fruit_banana`,gramsBase:50}]},{id:`recipe_eggs_cucumber`,name:`Яйца + огурец`,tags:[`завтрак`,`перекус`],ingredients:[{catalogFoodId:`eggs_chicken`,gramsBase:100},{catalogFoodId:`veg_cucumber_ground`,gramsBase:80}]},{id:`recipe_kefir_banana`,name:`Кефир + банан`,tags:[`перекус`],ingredients:[{catalogFoodId:`dairy_kefir_32`,gramsBase:200},{catalogFoodId:`fruit_banana`,gramsBase:80}]},{id:`recipe_beef_beet`,name:`Говядина + свекла`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`meat_beef`,gramsBase:120},{catalogFoodId:`veg_beet`,gramsBase:100}]},{id:`recipe_lentils_turkey`,name:`Чечевица + индейка`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`legumes_lentils`,gramsBase:70},{catalogFoodId:`poultry_turkey`,gramsBase:120}]},{id:`recipe_salmon_rice`,name:`Горбуша + рис`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`fish_pink_salmon`,gramsBase:120},{catalogFoodId:`cereals_rice_white`,gramsBase:80}]},{id:`recipe_chicken_cabbage`,name:`Курица + капуста`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`poultry_chicken`,gramsBase:150},{catalogFoodId:`veg_cabbage_white`,gramsBase:150}]},{id:`recipe_turkey_carrot`,name:`Индейка + морковь`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`poultry_turkey`,gramsBase:130},{catalogFoodId:`veg_carrot`,gramsBase:100}]},{id:`recipe_hake_potato`,name:`Хек + картофель`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`fish_hake`,gramsBase:150},{catalogFoodId:`veg_potato`,gramsBase:150}]},{id:`recipe_veg_salad`,name:`Овощной салат`,tags:[`перекус`,`гарнир`],ingredients:[{catalogFoodId:`veg_tomato`,gramsBase:80},{catalogFoodId:`veg_lettuce`,gramsBase:50},{catalogFoodId:`veg_cucumber_ground`,gramsBase:80}]},{id:`recipe_cheese_tomato`,name:`Сыр + помидор`,tags:[`перекус`,`завтрак`],ingredients:[{catalogFoodId:`dairy_cheese_gollandskiy`,gramsBase:50},{catalogFoodId:`veg_tomato`,gramsBase:100}]},{id:`recipe_semolina_milk`,name:`Манная каша на молоке`,tags:[`завтрак`],ingredients:[{catalogFoodId:`cereals_semolina`,gramsBase:50},{catalogFoodId:`dairy_milk_25`,gramsBase:200}]},{id:`recipe_peas_onion_carrot`,name:`Горох с овощами`,tags:[`обед`,`гарнир`],ingredients:[{catalogFoodId:`legumes_peas_split`,gramsBase:80},{catalogFoodId:`veg_onion`,gramsBase:30},{catalogFoodId:`veg_carrot`,gramsBase:50}]},{id:`recipe_chicken_young_potato`,name:`Цыплята + картофель с морковью`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`poultry_chicken_young`,gramsBase:120},{catalogFoodId:`veg_potato`,gramsBase:120},{catalogFoodId:`veg_carrot`,gramsBase:50}]},{id:`recipe_grechka_beef`,name:`Гречка + говядина`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`cereals_grechka_yadritsa`,gramsBase:80},{catalogFoodId:`meat_beef`,gramsBase:120}]},{id:`recipe_rice_chicken`,name:`Рис + курица`,tags:[`обед`,`ужин`],ingredients:[{catalogFoodId:`cereals_rice_white`,gramsBase:80},{catalogFoodId:`poultry_chicken`,gramsBase:140}]}];function ge(e){return e===`en`?me:he}async function _e(){return r.recipes.orderBy(`createdAt`).reverse().toArray()}async function ve(e){let t=Date.now(),n=await r.recipes.get(e.id),i={...e,createdAt:n?.createdAt??t,updatedAt:t};return await r.recipes.put(i),i}async function ye(e){await r.recipes.delete(e)}function be(e){let t=`u:${typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Date.now().toString(36)}`,n=e.name.endsWith(` (мой)`)?``:` (мой)`;return{id:t,name:e.name+n,source:`user`,mealTags:[...e.mealTags],ingredients:e.ingredients.map(e=>({...e})),...e.templateId==null?{}:{originTemplateId:e.templateId}}}async function xe(e,t){let n=new Date().toISOString(),i=await r.mealPlanItems.toArray();for(let a of i)a.recipeId===e&&await r.mealPlanItems.update(a.id,{recipeName:t,updatedAtISO:n});let a=await r.mealEntries.toArray();for(let n of a)n.recipeId===e&&await r.mealEntries.update(n.id,{recipeName:t})}async function Se(e={}){let{keepDays:t=30,protectRecipeIds:n=[]}=e,i=Date.now()-t*24*60*60*1e3,a=await r.recipes.where(`source`).equals(`generated`).toArray(),o=new Set(n),s=new Set((await r.mealPlanItems.toArray()).map(e=>e.recipeId)),c=new Set((await r.mealEntries.toArray()).map(e=>e.recipeId).filter(Boolean)),l=0;for(let e of a)e.updatedAt>=i||o.has(e.id)||s.has(e.id)||c.has(e.id)||(await r.recipes.delete(e.id),l++);return l}var Ce={day:30,week:52/12,month:1,quarter:1/3,halfYear:1/6,year:1/12};function we(e){return Ce[e]??1}function Te(e,t){return Math.round(Math.max(0,Math.round(e))*we(t))}function Ee(e,t,n,r=l()){let i=d(`finance.subscriptions.period.${t}`,void 0,r);return`${y(e,n,r)} / ${i}`}function De(e){let t=e.filter(e=>e.active),n=t.reduce((e,t)=>e+Te(t.priceRub,t.billingPeriod),0);return{activeCount:t.length,monthlyTotalRub:n}}function Oe(){return crypto.randomUUID?.()??`_${Date.now()}_${Math.random().toString(36).slice(2)}`}function ke(){return new Date().toISOString()}async function Ae(){return r.subscriptions.orderBy(`createdAt`).toArray()}async function je(){return De(await Ae())}async function Me(e){let t=ke(),n={...e,id:Oe(),serviceName:e.serviceName.trim()||`Подписка`,priceRub:Math.max(0,Math.round(e.priceRub)),createdAt:t,updatedAt:t};return await r.subscriptions.add(n),n}async function Ne(e,t){let n=await r.subscriptions.get(e);if(!n)return;let i={...n,...t,id:e,serviceName:t.serviceName==null?n.serviceName:t.serviceName.trim()||n.serviceName,priceRub:t.priceRub==null?n.priceRub:Math.max(0,Math.round(t.priceRub)),updatedAt:ke()};return await r.subscriptions.put(i),i}async function Pe(e){await r.transaction(`rw`,r.subscriptions,r.subscriptionReminders,async()=>{await r.subscriptionReminders.where(`subscriptionId`).equals(e).delete(),await r.subscriptions.delete(e)})}function Fe(e){return{id:e.id,name:e.name,ingredients:e.ingredients.map(e=>({catalogFoodId:e.catalogFoodId,gramsBase:e.gramsBase,...e.role?{role:e.role}:{}})),mealTags:e.mealTags,tags:e.tags,...e.templateId==null?{}:{templateId:e.templateId},...e.originTemplateId==null?{}:{originTemplateId:e.originTemplateId}}}function Ie(e){return{id:e.id,name:e.name,ingredients:e.ingredients.map(e=>({catalogFoodId:e.catalogFoodId,gramsBase:e.gramsBase})),tags:e.tags}}function Le(e){let t=new Map;for(let n of e)t.set(n.id,Fe(n));for(let e of ge(l()))t.has(e.id)||t.set(e.id,Ie(e));return t}var Re=`starter_`;function K(e,t){let n=e.get(t);if(n)return n;if(t.startsWith(Re)){let n=t.slice(8);return e.get(n)}}function ze(e){return Array.from(e.values())}var Be=Object.fromEntries(ue(l()).map(e=>[e.id,e]));function q(e,t=Be){let n=0,r=0,i=0,a=0;for(let o of e.ingredients){let e=t[o.catalogFoodId];if(!e)continue;let s=o.gramsBase/100;n+=e.kcalPer100*s,r+=e.proteinPer100*s,i+=e.fatPer100*s,a+=e.carbsPer100*s}return{kcal:n,protein:r,fat:i,carbs:a}}var Ve=.5,He=3;function J(e,t){let{targetKcal:n}=t,{kcal:r}=e;if(!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0)return 1;let i=n/r;return Math.max(Ve,Math.min(He,i))}function Ue(e){return!Number.isFinite(e)||e<=0?5:Math.max(5,Math.round(e/5)*5)}function We(e,t){return e.ingredients.map(e=>({catalogFoodId:e.catalogFoodId,gramsRounded:Ue(e.gramsBase*t)}))}function Ge(e,t){let{targetKcal:n,targetProtein:r,targetFat:i,targetCarbs:a}=t,o={kcalDiff:e.kcal-n};typeof r==`number`&&(o.proteinDiff=e.protein-r),typeof i==`number`&&(o.fatDiff=e.fat-i),typeof a==`number`&&(o.carbsDiff=e.carbs-a);let s=100,c=Math.max(80,n*.2),l=Math.min(100,Math.abs(o.kcalDiff)/c*50);if(s-=l,typeof r==`number`&&r>0){let e=r*.25,t=Math.min(25,Math.abs(o.proteinDiff)/e*25);s-=t}if(typeof i==`number`&&i>0){let e=i*.25,t=Math.min(15,Math.abs(o.fatDiff)/e*15);s-=t}if(typeof a==`number`&&a>0){let e=a*.25,t=Math.min(15,Math.abs(o.carbsDiff)/e*15);s-=t}return{score:Math.max(0,Math.min(100,Math.round(s))),breakdown:o}}function Ke(e,t,n=Be){let r=0,i=0,a=0,o=0,s=We(e,t);for(let e of s){let t=n[e.catalogFoodId];if(!t)continue;let s=e.gramsRounded/100;r+=t.kcalPer100*s,i+=t.proteinPer100*s,a+=t.fatPer100*s,o+=t.carbsPer100*s}return{kcal:r,protein:i,fat:a,carbs:o}}function Y(e,t,n,r=Be){let i=0,a=0,o=0,s=0,c=We(e,t);for(let e of c){let t=r[e.catalogFoodId];if(!t)continue;let c=e.gramsRounded/100;i+=t.kcalPer100*c,n===`total`?a+=t.proteinPer100*c:a+=(t.proteinSource===`animal`?t.proteinPer100:0)*c,o+=t.fatPer100*c,s+=t.carbsPer100*c}return{kcal:i,protein:a,fat:o,carbs:s}}function X(e,t=l()){let n=`supplements.display.${e}`,r=a(n,void 0,t);return r===n?e:r}function qe(e,t=l()){let n=e.dosageValue,r=e.dosageUnit.trim();return Number.isFinite(n)?`${Number.isInteger(n)?String(n):String(n).replace(/\.0+$/,``)} ${r}`:r||X(`dosage.doseUnspecified`,t)}function Je(e,t,n=l()){switch(e){case`before_meal`:return X(`dosage.before_meal`,n);case`with_meal`:return X(`dosage.with_meal`,n);case`after_meal`:return X(`dosage.after_meal`,n);case`before_training`:return X(`dosage.before_training`,n);case`after_training`:return X(`dosage.after_training`,n);case`scheduled`:return X(`dosage.scheduled`,n);case`default`:return X(t?`dosage.withMealDefault`:`dosage.checkPlan`,n);default:return X(t?`dosage.withMealShort`:`dosage.checkPlan`,n)}}function Ye(e,t,n,r=l()){return`${e}: ${qe(t,r)}. ${Je(n,t.withMeal,r)}`}var Xe=/^([01]\d|2[0-3]):[0-5]\d$/;function Ze(e){return Xe.test(e.trim())}function Qe(e,t){if(!t?.length)return!0;let n=new Date(`${e}T12:00:00`).getDay();return t.includes(n)}function $e(e){let t=e.timeHHMM.trim(),n=e.title.trim(),r=e.body.trim();if(!Ze(t)||!n||!r)return null;let i=e.daysOfWeek?.filter(e=>Number.isInteger(e)&&e>=0&&e<=6)??void 0;return{timeHHMM:t,title:n,body:r,enabled:e.enabled!==!1,...i?.length?{daysOfWeek:i}:{}}}function et(e,t){return t?.length?t.filter(t=>t.enabled&&Qe(e,t.daysOfWeek)).map(t=>({id:`custom:${t.id}`,type:`custom`,dateISO:e,notifyAtHHMM:t.timeHHMM,title:t.title.trim(),message:t.body.trim(),tone:`neutral`,sourceId:t.id})):[]}function tt(e,t){let n=new Set(t??[]);return n.size===0?e:e.filter(e=>!n.has(e.id))}function nt(e){let[t,n]=e.split(`:`).map(Number);return!Number.isFinite(t)||!Number.isFinite(n)?0:Math.max(0,Math.min(23,t))*60+Math.max(0,Math.min(59,n))}function rt(e,t,n){if(!e)return null;let r=Ke(e,t);return d(`automation.macrosKcal`,{kcal:Math.round(r.kcal),protein:Math.round(r.protein),fat:Math.round(r.fat),carbs:Math.round(r.carbs)},n)}function it(e,t){let n=d(`automation.supplementDefault`,void 0,t);return e.customName?.trim()?e.customName.trim():e.supplementCatalogId?A(e.supplementCatalogId,t)?.name??n:n}function at(e,t){return nt(e.notifyAtHHMM)-nt(t.notifyAtHHMM)||e.id.localeCompare(t.id)}function ot(e,t,n){return[...e.mealPlanItems].sort((e,t)=>e.timeHHMM.localeCompare(t.timeHHMM)||e.mealIndex-t.mealIndex).map(r=>{let i=rt(K(e.recipeMap,r.recipeId),r.scale,n),a=[d(`automation.mealIn30`,{name:r.recipeName},n),i?d(`automation.mealMacros`,{macros:i},n):null,t>0?d(`automation.mealWater`,{ml:t},n):null].filter(Boolean);return{id:`meal:${r.id}`,type:`meal`,dateISO:e.dateISO,notifyAtHHMM:F(r.timeHHMM,-30),title:d(`automation.mealTitle`,{name:r.recipeName},n),message:a.join(` `),tone:`neutral`,sourceId:r.id}})}function st(e,t,n){return t<=0?[]:s({wakeTimeHHMM:e.settings?.app.wakeTimeTarget??`08:00`,sleepTimeHHMM:e.settings?.app.sleepTimeTarget}).map((r,i)=>({id:`water:${i}:${r.time}`,type:`water`,dateISO:e.dateISO,notifyAtHHMM:r.time,title:d(`automation.waterTitle`,void 0,n),message:c(r,t,void 0,n),tone:`soft`}))}function ct(e,t){let n=e.settings?.app.wakeTimeTarget??`08:00`;return e.trainings.flatMap(r=>{if(!r.active)return[];let i=nt(n){let r=it(n.planItem,t);return{id:n.id,type:`supplement`,dateISO:e.dateISO,notifyAtHHMM:n.scheduledAtHHMM,title:d(`automation.supplementTitle`,{name:r},t),message:Ye(r,n.planItem,n.label),tone:`neutral`,sourceId:n.planItem.id}})}function ut(e,t){let n=e.settings?.app.sleepTimeTarget;return n?[{id:`sleep:prep`,type:`sleep`,dateISO:e.dateISO,notifyAtHHMM:F(n,-30),title:d(`automation.sleepTitle`,void 0,t),message:d(`automation.sleepMessage`,{time:n},t),tone:`soft`}]:[]}function dt(e){let t=l(),n=e.settings?.app.waterTargetMl??0,r=e.mealPlanItems.filter(t=>t.dateISO===e.dateISO),i=e.trainings.filter(e=>e.active),a=e.supplementPlanItems.filter(e=>e.active),o=n>0&&r.length>0?Math.round(n/r.length/50)*50:0,s={...e,mealPlanItems:r,trainings:i,supplementPlanItems:a},c=et(e.dateISO,e.settings?.app.automationMessages),u=tt([...ot(s,o,t),...st(s,n,t),...ct(s,t),...lt(s,t),...ut(s,t),...c].sort(at),e.settings?.app.automationDisabledEventIds);return{dateISO:e.dateISO,events:u,summary:{meals:r.length,trainings:i.length,supplements:a.length,waterTargetMl:n,custom:c.length}}}function Z(e,t,n){return Math.min(n,Math.max(t,e))}function ft(e){return Number.isFinite(e)?Math.round(e/50)*50:0}function pt(e,t){if(!e||e.length<4)return t;let[n,r]=e.split(`:`),i=Number(n),a=Number(r);return!Number.isFinite(i)||!Number.isFinite(a)?t:Z(i,0,23)*60+Z(a,0,59)}function mt(e){let t=(e%1440+1440)%1440,n=Math.floor(t/60),r=t%60;return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function ht(e){return e===`mixed`?`mesomorph`:e}function gt(e){let t=[],n=Z(e.weightKg,40,200),r=Z(e.heightCm,120,220),i=Z(e.age,14,80),a=ht(e.bodyType),o=e.sex===`male`?10*n+6.25*r-5*i+5:10*n+6.25*r-5*i-161,s=Math.round(o),c=Math.round(s*({sedentary:1.2,light:1.375,moderate:1.55,active:1.725,veryActive:1.9}[e.activityLevel]??1.2)),l=Z(e.goalAggressiveness??.5,0,1),u={ectomorph:[.1,.18],mesomorph:[.05,.12],endomorph:[.03,.08]},f={ectomorph:[.12,.2],mesomorph:[.15,.22],endomorph:[.18,.28]},p=0;if(e.goalType===`bulk`){let[e,t]=u[a];p=e+(t-e)*l}else if(e.goalType===`cut`){let[e,t]=f[a];p=-(e+(t-e)*l)}let m=c*(1+p),h=Math.max(0,Math.round(m)),g=h-c,_=e.goalType===`bulk`?2:e.goalType===`cut`?2.2:1.8,v=Math.max(0,Math.round(n*_)),y={ectomorph:.8,mesomorph:.9,endomorph:1},b=n*.6,x=n*y[a];xC+.01)&&t.push(d(`nutrition.calculatorWarnings.carbsOutOfRange`))}else x=Math.round(O);let k=v*4,ne=x*9,re=D*4,A=k+ne+re||1,ie=k/A,j=ne/A,M=re/A,ae=e.sex===`male`?2960:2160,N=n*30,P={sedentary:0,light:250,moderate:500,active:750,veryActive:1e3}[e.activityLevel]??0,F=ft(Math.max(ae,N)+P),I=typeof e.carbBefore18Percent==`number`&&!Number.isNaN(e.carbBefore18Percent)?Z(e.carbBefore18Percent,0,1):a===`ectomorph`?.62:a===`mesomorph`?.65:.7;I=Z(I,0,1);let L=Math.round(D*I),oe=Math.max(0,D-L),R;e.mealsPerDay&&e.mealsPerDay>0?R=Z(Math.round(e.mealsPerDay),3,6):(R=3,h>2600&&h<3200?R=4:h>=3200&&(R=5));let z=pt(e.firstMealTimeHHMM,540),se=Math.round((e.mealIntervalHours??3)*60),ce=[],B=R?[...Array(R).keys()].filter(e=>((z+e*se)%1440+1440)%1440<1080).length:0,V=B>0?L/B:0,le=R-B,ue=le>0?oe/le:0,H=v/R,de=x/R;for(let e=0;e{let t=e;return t=U&&tpt(e.timeHHMM,z));if(G.some(e=>pe(e))&&t.push(d(`nutrition.calculatorWarnings.mealsDuringSleep`)),G.length>0){let e=G[G.length-1];e0&&n<60){let e=60-n;t.push(d(`nutrition.calculatorWarnings.lastMealTooLate`,{minutes:e}))}}return{bmr:s,tdee:c,targetCalories:h,deltaKcal:g,deltaPercent:p,proteinGr:v,fatGr:x,carbsGr:D,proteinKcal:k,fatKcal:ne,carbsKcal:re,proteinPct:ie,fatPct:j,carbsPct:M,mealsPerDay:R,carbBefore18Percent:I,carbBefore18Gr:L,carbAfter18Gr:oe,meals:ce,waterTargetMl:F,waterExplanation:``,warnings:t}}function _t(e){let t={};for(let n of e)n.catalogId&&(t[n.catalogId]=n.id);return t}function vt(e,t){return e.ingredients.every(e=>t[e.catalogFoodId]!=null)}var Q=Object.fromEntries(ue(l()).map(e=>[e.id,e]));function yt(e,t=Q){let n=null;for(let r of e.ingredients){let e=t[r.catalogFoodId];!e||e.proteinSource!==`animal`||(!n||r.gramsBase>n.gramsBase)&&(n={group:e.group,gramsBase:r.gramsBase})}return n?n.group:`plant`}var bt=3;function xt(e,t=Q){let n=e.templateId??e.originTemplateId??null,r=yt(e,t),i=[...e.ingredients].sort((e,t)=>t.gramsBase-e.gramsBase).slice(0,bt).map(e=>e.catalogFoodId),a=new Set;for(let n of e.ingredients){let e=t[n.catalogFoodId];e&&a.add(e.group)}return{templateId:n,mainProteinTag:r,topCatalogIds:i,ingredientGroups:a}}var St=8,Ct=4,wt=8,Tt=2,Et=4,Dt=2,Ot=2;function kt(e){return e===`low`?.5:e===`high`?1.5:1}function At(e,t,n,r){let i=new Set(n),a=new Set(r);for(let n of e.ingredients){if(i.has(n.catalogFoodId))return!0;let e=t[n.catalogFoodId];if(e&&a.has(e.group))return!0}return!1}function jt(e){let t=new Date(e+`T12:00:00`),n=t.getDay(),r=n===0?-6:1-n;return t.setDate(t.getDate()+r),`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function Mt(e,t){let n=e?.nutritionMealsPerDayTarget??3,r=e?.nutritionCaloriesTarget??2e3,i=e?.nutritionProteinTargetGr??100,a=e?.nutritionFatTargetGr??70,o=e?.nutritionCarbTargetGr??250,s;if(e?.nutritionProfile)s=gt({...e.nutritionProfile,carbBefore18Percent:e.nutritionCarbBefore18Percent,mealsPerDay:e.nutritionMealsPerDayTarget??null,firstMealTimeHHMM:e.nutritionProfile.firstMealTimeHHMM??`09:00`,mealIntervalHours:e.nutritionProfile.mealIntervalHours??3}).meals;else{let e=Math.round(r/n),t=Math.round(i/n),c=Math.round(a/n),l=Math.round(o/n);s=[];for(let r=0;r({timeHHMM:e.timeHHMM,target:{targetKcal:e.kcal,targetProtein:e.proteinGr,targetFat:e.fatGr,targetCarbs:e.carbsGr},mealTag:c[Math.min(t,c.length-1)]}))}function Nt(e,t,n,r=Q,i=`quality`,a){let o=K(a,e);if(!o)return null;let s=J(q(o,r),t),c=Y(o,s,i,r),{score:l}=Ge(c,t);return{scale:s,score:l,scaledMacros:c}}var Pt=2;function Ft(e,t,n=Q,r=`quality`,i){if(e.length===0)return[];let a=kt(i),o=[],s={},c=null,l=new Set;for(let i of t){let t=null;for(let o of e){if((s[o.id]??0)>=Pt)continue;let e=J(q(o,n),i.target),{score:u}=Ge(Y(o,e,r,n),i.target),d=xt(o,n),f=0;c&&(d.templateId!=null&&d.templateId===c.templateId&&(f+=St*a),d.mainProteinTag===c.mainProteinTag&&(f+=wt*a));for(let e of d.topCatalogIds)l.has(e)&&(f+=Ct*a);let p=u-f;(t===null||p>t.rankingScore)&&(t={recipe:o,scale:e,baseScore:u,rankingScore:p})}if(!t)break;s[t.recipe.id]=(s[t.recipe.id]??0)+1;let u=xt(t.recipe,n);c=u;for(let e of u.topCatalogIds)l.add(e);o.push({recipeId:t.recipe.id,recipeName:t.recipe.name,scale:t.scale,score:t.baseScore})}return o}function It(e){let{weekDates:t,availableRecipes:n,settings:r,foods:i,catalogFoodMap:a=Q,proteinMode:s=`quality`,blockedRecipeIds:c=[],favoriteRecipeIds:l=[]}=e,u=o(r?.recipeRules),d=u.maxSameRecipePerWeek??3,f=u.avoidSameMainProteinInRow,p=new Set(c),m=_t(i),h=n.filter(e=>!p.has(e.id)&&vt(e,m)&&!At(e,a,u.bannedCatalogFoodIds??[],u.bannedFoodGroups??[])),g=kt(r?.autoplanVarietyStrength),_={},v={},y=null,b={},x={},S=null;for(let e of t){let t=Mt(r,e);_[e]=[];let n={},i=new Set,o=[`breakfast`,`lunch`,`dinner`,`snack`];for(let r=0;r!((v[e.id]??0)>=d||(n[e.id]??0)>=Pt||f&&y!==null&&yt(e,a)===y)),p=u.length>0?u:h.filter(e=>(n[e.id]??0)Tt&&(o+=Dt*(l-Tt)*g);for(let e of r.topCatalogIds){let t=(C[e]??0)+1;t>Et&&(o+=Ot*(t-Et)*g)}let u=n-o;(w===null||u>w.rankingScore)&&(w={recipe:e,scale:t,baseScore:n,rankingScore:u})}if(!w)break;v[w.recipe.id]=(v[w.recipe.id]??0)+1,n[w.recipe.id]=(n[w.recipe.id]??0)+1,y=yt(w.recipe,a);let T=xt(w.recipe,a);S=T,b[l]||(b[l]={}),T.templateId&&(b[l][T.templateId]=(b[l][T.templateId]??0)+1),x[l]||(x[l]={});for(let e of T.topCatalogIds)i.add(e),x[l][e]=(x[l][e]??0)+1;_[e].push({recipeId:w.recipe.id,recipeName:w.recipe.name,scale:w.scale,score:w.baseScore})}}return _}var Lt=10,Rt=2;function zt(e){let{dateISO:t,mealIndex:n,currentRecipeId:r,foods:i,settings:a,existingDayItems:s,recipeCatalog:c,catalogFoodMap:l=Q,blockedRecipeIds:u=[],favoriteRecipeIds:d=[],proteinMode:f}=e,p=f??a?.nutritionProteinMode??`quality`,m=o(a?.recipeRules),h=new Set(u),g=new Set(d),_=Mt(a,t)[n];if(!_)return[];let v=_t(i),y={};for(let e of s)y[e.recipeId]=(y[e.recipeId]??0)+1;let b=c.filter(e=>!h.has(e.id)&&vt(e,v)&&!At(e,l,m.bannedCatalogFoodIds??[],m.bannedFoodGroups??[])&&e.id!==r&&(y[e.id]??0){if(t.score!==e.score)return t.score-e.score;let n=+!!g.has(e.recipeId);return+!!g.has(t.recipeId)-n}),x.slice(0,Lt)}function Bt(e,t,n,r=`quality`){let i=0,a=0,o=0,s=0;for(let c of e){let e=K(t,c.recipeId);if(!e)continue;let l=Y(e,c.scale,r,n);i+=l.kcal,a+=l.protein,o+=l.fat,s+=l.carbs}return{kcal:i,protein:a,fat:o,carbs:s}}function Vt(e,t){return!Number.isFinite(e)||e<=0?0:!t||t<=0?Math.round(e):Math.max(t,Math.round(e/t)*t)}function Ht(e,t=l()){return e>=1e3?a(`nutrition.grams.kg`,{kg:Math.round(e/10)/100},t):a(`nutrition.grams.g`,{grams:e},t)}function Ut(e,t=l()){let n=`nutrition.catalog.groups.${e}`,r=a(n,void 0,t);return r===n?e:r}function Wt(e,t,n){let r=[];for(let i of e){r.push(`${i.label.toUpperCase()}:`);for(let e of i.items){let i=Vt(e.grams,t),a=n[e.catalogFoodId]?`[x]`:`[ ]`;r.push(`${a} ${e.name} — ${Ht(i)}`)}r.push(``)}return r.join(` `).trimEnd()}var Gt=[`dairy`,`meat`,`vegetables`,`cereals`,`fruits`,`legumes`,`mushrooms`,`fish_seafood`,`nuts`,`seaweed`,`sausage`,`smoked_canned`,`eggs`,`dried_fruits`];Object.fromEntries(Gt.map(e=>[e,Ut(e,`ru`)]));function Kt(e,t,n){let r={};for(let n of e){let e=K(t,n.recipeId);if(e)for(let t of e.ingredients){let e=Math.round(t.gramsBase*n.scale/5)*5;r[t.catalogFoodId]=(r[t.catalogFoodId]??0)+e}}let i=new Map;for(let[e,t]of Object.entries(r)){let r=n[e],a=r?.group??`other`;i.has(a)||i.set(a,[]),i.get(a).push({catalogFoodId:e,name:r?.name??e,group:a,grams:t})}for(let e of i.values())e.sort((e,t)=>t.grams-e.grams);let a=[];for(let e of Gt){let t=i.get(e)??[];if(t.length===0)continue;let n=t.reduce((e,t)=>e+t.grams,0);a.push({group:e,label:Ut(e),items:t,totalGrams:n})}let o=i.get(`other`);return o?.length&&a.push({group:`other`,label:Ut(`other`),items:o.sort((e,t)=>t.grams-e.grams),totalGrams:o.reduce((e,t)=>e+t.grams,0)}),a}function qt(e,t){return t==null||t<=0?null:Math.min(1,Math.max(0,e/t))}function Jt(e,t){let n=t!=null&&t>0?Math.round(t):null;return{currentMl:e,targetMl:n,remainingMl:n==null?null:Math.max(0,n-e),progressRatio:qt(e,n)}}function Yt(e,t){return e.filter(e=>e.date===t).reduce((e,t)=>(t.type===`income`?e.todayIncome+=t.amount:S(t)&&(e.todayExpense+=t.amount),e),{todayExpense:0,todayIncome:0})}function Xt(e){return[...e].sort((e,t)=>e.timeHHMM.localeCompare(t.timeHHMM)||e.title.localeCompare(t.title))[0]}function Zt(e){let t=I(e),n=t=>e.filter(e=>e.status===t).length;return{total:t.total,taken:t.taken,skipped:n(`skipped`),snoozed:n(`snoozed`),pending:n(`pending`),rows:e}}function Qt(e){let t=[];e.cloudStale&&t.push({id:`cloud:stale`,severity:`warning`,domain:`cloud`,title:d(`dashboard.actions.cloudStale`),href:`/today`}),e.tasks.overdueCount>0&&t.push({id:`tasks:overdue`,severity:`warning`,domain:`tasks`,title:d(`dashboard.actions.tasksOverdue`,{count:e.tasks.overdueCount}),href:`/tasks`}),e.habits.pending>0&&t.push({id:`habits:pending`,severity:`info`,domain:`habits`,title:d(`dashboard.actions.habitsPending`,{count:e.habits.pending}),href:`/habits`}),e.water.remainingMl!=null&&e.water.remainingMl>0&&t.push({id:`water:remaining`,severity:`info`,domain:`water`,title:d(`dashboard.actions.waterRemaining`,{ml:e.water.remainingMl}),href:`/today`});let n=e.finance?.freePool?.freePoolRemaining;return n!=null&&n<0?t.push({id:`finance:free_pool_negative`,severity:`danger`,domain:`finance`,title:d(`dashboard.actions.freePoolNegative`),href:`/money`}):e.finance?.freePool?.warningFlag&&t.push({id:`finance:free_pool_low`,severity:`warning`,domain:`finance`,title:d(`dashboard.actions.freePoolLow`),href:`/money`}),e.nutrition.targetProtein!=null&&e.nutrition.targetProtein>0&&e.nutrition.protein0&&t.push({id:`supplements:pending`,severity:`info`,domain:`supplements`,title:d(`dashboard.actions.supplementsPending`,{count:e.supplements.pending}),href:`/supplements`}),e.trainings.count>0&&t.push({id:`training:today`,severity:`info`,domain:`training`,title:d(`dashboard.actions.trainingToday`),description:e.trainings.nextTraining?d(`dashboard.actions.trainingLine`,{time:e.trainings.nextTraining.timeHHMM,title:e.trainings.nextTraining.title}):void 0,href:`/trainings`}),t}function $t(e,t){let n=t.filter(e=>e.status!==`done`&&e.status!==`canceled`);return{overdueTasks:n.filter(t=>t.dueDate!=null&&t.dueDatet.dueDate===e)}}function en(e,t){let n=new Set;for(let t=1;t<=7;t+=1)n.add(_(e,t));return t.filter(e=>e.status!==`done`&&e.status!==`canceled`&&e.dueDate!=null&&n.has(e.dueDate))}function tn(e,t=8){return e.slice(0,t)}async function nn(e,t){let n=await z(b(e,t?.app??null));return n?se(n.id,e):[]}async function rn(r){let a=g(),o=r.slice(0,7),s=await u(),[c,d,f,p,m,h,_,v,y,b,S,E,A,ie,j,M,N,P]=await Promise.all([ne(3),re({excludeStatus:[`done`,`canceled`]}),k(r),i(r,{activeOnly:!0}),n(r),t(r),e(r),ee(r),le(r),ae(),ce(r),w(o),T(o),x(),je(),C({monthISO:o}),_e(),nn(r,s)]),F=r===a?{overdueTasks:await te(10),dueTodayTasks:await D(10),next7DaysTasks:await O(10)}:{...$t(r,d),next7DaysTasks:en(r,d)},I={topPriorityCount:c.length,overdueCount:F.overdueTasks.length,dueTodayCount:f,next7DaysCount:F.next7DaysTasks.length,topPriorityTasks:c,overdueTasks:F.overdueTasks,dueTodayTasks:F.dueTodayTasks,next7DaysTasks:F.next7DaysTasks},L={total:h.total,done:h.done,pending:Math.max(0,h.total-h.done),habits:p.filter(e=>e.type===`daily`||e.type===`weekly`||e.type===`monthly`),logs:m},oe=Jt(_,s?.app.waterTargetMl),z=Le(N),se=Object.fromEntries(ue(l()).map(e=>[e.id,e])),B=P.length>0?Bt(P.map(e=>({recipeId:e.recipeId,scale:e.scale})),z,se,s?.app.nutritionProteinMode??`quality`):void 0,V=s?.app.nutritionCaloriesTarget??s?.app.bulkCaloriesTarget,H=s?.app.nutritionProteinTargetGr??s?.app.proteinTargetGr,de={kcal:v.kcal,protein:v.protein,fat:v.fat,carbs:v.carbs,...V==null?{}:{targetKcal:V,kcalProgressRatio:qt(v.kcal,V)??void 0},...H==null?{}:{targetProtein:H,proteinProgressRatio:qt(v.protein,H)??void 0},...B==null?{}:{plannedKcal:Math.round(B.kcal),plannedProtein:Math.round(B.protein*10)/10}},U={count:y.length,items:y,nextTraining:Xt(y)},W=Zt(R(b,S,r,{mealPlanItems:P,trainings:y})),fe=Yt(M,r),pe=typeof s?.app?.financeProfile?.currentBalanceRub==`number`?s.app.financeProfile.currentBalanceRub:0,G={monthIncome:E.totalIncome,monthExpense:E.totalExpense,monthBalance:E.balance,accountBalanceRub:pe,freePool:A,debtRemaining:ie,subscriptionsActiveCount:j.activeCount,subscriptionsMonthlyRub:j.monthlyTotalRub,...fe},me=dt({dateISO:r,settings:s??null,mealPlanItems:P,recipeMap:z,trainings:y,supplementPlanItems:b}),he=tn(me.events);return{dateISO:r,tasks:I,habits:L,water:oe,nutrition:de,trainings:U,supplements:W,finance:G,automation:{eventCount:me.events.length,nextEvents:he,timelinePreview:he},actionRequired:Qt({tasks:I,habits:L,water:oe,nutrition:de,trainings:U,supplements:W,finance:{freePool:A},cloudStale:!1})}}function an(e){let t=j(e);return{planItemId:e.id,displayName:M(e),riskLevel:t?.riskLevel,labRequirement:t?.labRequirement,labTests:t?.labTests??[],caution:t?.caution,labCheckStatus:e.labCheckStatus,labCheckDateISO:e.labCheckDateISO,labCheckNote:e.labCheckNote,isActive:e.active}}function on(e){let t=e.filter(e=>e.active),n=t.map(an);return{totalActive:t.length,highRiskItems:n.filter(e=>e.riskLevel===`high`),requiredLabItems:n.filter(e=>e.labRequirement===`required`),recommendedLabItems:n.filter(e=>e.labRequirement===`recommended`),mediumRiskItems:n.filter(e=>e.riskLevel===`medium`),unknownItems:n.filter(e=>!e.riskLevel&&!e.labRequirement),lowRiskCount:n.filter(e=>e.riskLevel===`low`).length,labNeededCount:n.filter(e=>e.labCheckStatus===`needed`).length,labPlannedCount:n.filter(e=>e.labCheckStatus===`planned`).length,labDoneCount:n.filter(e=>e.labCheckStatus===`done`).length,labOverdueCount:n.filter(e=>e.labCheckStatus===`overdue`).length}}function sn(e,t=8){return e.filter(e=>e.trim()).slice(0,t)}function cn(e){return a(`supplements.display.cloud.dosagePerDay`,{value:e.dosageValue,unit:e.dosageUnit,freq:e.frequencyPerDay},l())}function ln(e){let t=new Set;for(let n of e){if(!n.active)continue;let e=j(n);e?.id&&t.add(e.id)}return t}function un(e){let t=[];for(let n of e)if(!(n.status!==`needs_attention`&&n.status!==`caution`&&n.status!==`blocked`)&&(t.push(n.title),t.length>=8))break;return t}function dn(e){let t=on(e),n=[];for(let e of t.highRiskItems)n.push(`${e.displayName}: высокий риск`);for(let e of t.requiredLabItems){if(n.length>=8)break;n.push(`${e.displayName}: нужны анализы`)}for(let e of t.recommendedLabItems){if(n.length>=8)break;n.push(`${e.displayName}: рекомендованы анализы`)}return sn(n)}function fn(e){let t=[];for(let n of e)if((n.issues.includes(`safety_strong_warning`)||n.issues.includes(`interaction_strong_warning`))&&t.push(n.title),t.length>=8)break;return sn(t)}function pn(e){let{planItems:t,products:n,activeLinkByPlanItemId:r,nowISO:i}=e,a=0,o=0,s=0,c=0;for(let e of n){if(N(e))continue;let t=P({servingsRemaining:e.inventory?.servingsRemaining,lowStockThresholdServings:e.inventory?.lowStockThresholdServings});t===`low_stock`&&(a+=1),t===`out_of_stock`&&(o+=1);let n=L({expiresAtISO:e.expiresAtISO,nowISO:i});n===`expiring_soon`&&(s+=1),n===`expired`&&(c+=1)}let l=t.filter(e=>e.active).filter(e=>!r.has(e.id)).length;return{productCount:n.filter(e=>!N(e)).length,lowStockCount:a,outOfStockCount:o,expiringSoonCount:s,expiredCount:c,planWithoutProductCount:l}}function mn(e){let t=ln(e.planItems),n=ie.filter(e=>t.has(e.id));if(n.length===0)return{planLinkedKnowledgeCount:0,missingLabsCount:0,outdatedLabsCount:0,actionableRuleGapCount:0,needsProductLabelCount:0};let r=W({knowledgeItems:n,profile:e.supplementProfile??{},labResults:e.labResults,safetyProfile:e.safetyProfile,nowISO:e.nowISO});return{planLinkedKnowledgeCount:n.length,missingLabsCount:r.summary.missingLabsCount,outdatedLabsCount:r.summary.outdatedLabsCount,actionableRuleGapCount:r.summary.actionableMissingRuleCount,needsProductLabelCount:r.summary.needsProductLabelCount}}function hn(e){let t=e.nowISO??new Date().toISOString(),n=e.generatedAtISO??t,r=e.locale??(l()===`en`?`en`:`ru`),i=e.planItems.filter(e=>e.active),a=e.products??[],o=e.planProductLinks??[],s=e.labResults??[],c=new Map(a.map(e=>[e.id,e])),u=new Map;for(let e of o)e.isActive&&u.set(e.planItemId,e);let f=R(i,e.supplementIntakeLogs.filter(t=>t.dateISO===e.dateISO),e.dateISO,{mealPlanItems:e.mealPlanItems??[],trainings:e.trainings??[]}),p=B({planItems:e.planItems,supplementProfile:e.supplementProfile,labResults:s,safetyProfile:e.safetyProfile,productsById:c,activeLinkByPlanItemId:u,nowISO:t}),m=on(e.planItems),h=V({planItems:e.planItems,productsById:c,activeLinkByPlanItemId:u,todayDateISO:e.dateISO,nowISO:t});return{schemaVersion:1,dateISO:e.dateISO,generatedAtISO:n,activePlanCount:i.length,today:{total:f.length,taken:f.filter(e=>e.status===`taken`).length,pending:f.filter(e=>e.status===`pending`).length,skipped:f.filter(e=>e.status===`skipped`).length,snoozed:f.filter(e=>e.status===`snoozed`).length,slots:f.slice(0,32).map(e=>({displayName:M(e.planItem),status:e.status,scheduledAtHHMM:e.scheduledAtHHMM,scheduleLabel:e.scheduleLabel}))},activePlan:i.slice(0,24).map(e=>({displayName:M(e),doseLabel:cn(e),timing:e.timing})),risk:{highRiskCount:m.highRiskItems.length,labNeededCount:m.labNeededCount,labOverdueCount:m.labOverdueCount,missingLabsCount:p.summary.missingLabsCount,highlights:dn(e.planItems)},safety:{needsAttentionCount:p.summary.needsAttentionCount,cautionCount:p.summary.cautionCount,blockedCount:p.summary.blockedCount,safetyStrongWarningCount:p.summary.safetyStrongWarningCount,interactionStrongWarningCount:p.summary.interactionStrongWarningCount,highlights:fn(p.items)},inventory:pn({planItems:e.planItems,products:a,planProductLinks:o,activeLinkByPlanItemId:u,nowISO:t}),shopping:{buyCount:h.groups.buy.length,runningLowCount:h.groups.runningLow.length,expiryCount:h.groups.expiry.length,noProductCount:h.groups.noProduct.length},suggestions:{needsAttentionCount:p.summary.needsAttentionCount,cautionCount:p.summary.cautionCount,personalizedSuggestionCount:p.summary.personalizedSuggestionCount,highlights:un(p.items)},dataNeeds:mn({planItems:e.planItems,labResults:s,supplementProfile:e.supplementProfile,safetyProfile:e.safetyProfile,nowISO:t}),readOnlyNotice:d(`supplements.cloud.readOnlyNotice`,void 0,r)}}var gn=1440*60*1e3;function _n(){return crypto.randomUUID?.()??`supp_reminder_${Date.now()}_${Math.random().toString(36).slice(2)}`}function vn(e,t){return e.status===`snoozed`?e.snoozedUntilISO?e.snoozedUntilISO>t:!0:!1}function yn(e,t){return e.status===`done`||e.status===`disabled`?1e3:e.status===`snoozed`?vn(e,t)?900:100:e.status===`sent`?500:200}function bn(e,t,n){let r=yn(e,n),i=yn(t,n);if(r!==i)return r>i?e:t;let a=e.updatedAtISO??e.notifyAtISO??``;return(t.updatedAtISO??t.notifyAtISO??``).localeCompare(a)>0?t:e}function xn(e,t=new Date().toISOString()){let n=new Map;for(let r of e){if(!r.dedupeKey)continue;let e=n.get(r.dedupeKey);n.set(r.dedupeKey,e?bn(e,r,t):r)}return[...n.values()].sort((e,t)=>(e.notifyAtISO??``).localeCompare(t.notifyAtISO??``)||e.dedupeKey.localeCompare(t.dedupeKey))}function Sn(e,t,n){let r=new Map(e.map(e=>[e.dedupeKey,e])),i=[];for(let e of t){let t=r.get(e.dedupeKey);if(t){let a=t.status===`done`||t.status===`disabled`||vn(t,n);i.push({...t,title:e.title,body:e.body,dateISO:e.dateISO,notifyAtISO:e.notifyAtISO,entityType:e.entityType??t.entityType,entityId:e.entityId??t.entityId,status:a?t.status:`active`,snoozedUntilISO:a?t.snoozedUntilISO:void 0,updatedAtISO:n}),r.delete(e.dedupeKey);continue}i.push({id:_n(),kind:e.kind,dedupeKey:e.dedupeKey,title:e.title,body:e.body,dateISO:e.dateISO,notifyAtISO:e.notifyAtISO,entityType:e.entityType,entityId:e.entityId,status:`active`,createdAtISO:n,updatedAtISO:n})}for(let e of r.values())(e.status===`done`||e.status===`disabled`)&&i.push(e);return i.sort((e,t)=>e.notifyAtISO.localeCompare(t.notifyAtISO)||e.dedupeKey.localeCompare(t.dedupeKey))}function Cn(e){let t=/^(\d{4}-\d{2}-\d{2})T(\d{2}):(\d{2})/.exec(e);return t?{dateISO:t[1],minutes:Number(t[2])*60+Number(t[3])}:null}function wn(e,t=new Date,n){let r=n?.lateWindowMin??10,i=n?.timezone??`Europe/Moscow`,a=new Intl.DateTimeFormat(`en-CA`,{timeZone:i,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1}),o=Object.fromEntries(a.formatToParts(t).map(e=>[e.type,e.value])),s=n?.dateISO??`${o.year}-${o.month}-${o.day}`,c=Number(o.hour)*60+Number(o.minute),l=t.toISOString();return e.filter(e=>{if(e.status===`done`||e.status===`disabled`||e.status===`sent`||vn(e,l))return!1;let t=Cn(e.notifyAtISO);if(!t||t.dateISO!==s)return!1;let n=c-t.minutes;return n>=0&&n<=r})}function Tn(e,t,n){if(t===`done`)return{...e,status:`done`,completedAtISO:n,snoozedUntilISO:void 0,updatedAtISO:n};if(t===`disable`)return{...e,status:`disabled`,snoozedUntilISO:void 0,updatedAtISO:n};let r=t===`snooze_1w`?7:1,i=new Date(Date.parse(n)+r*gn).toISOString();return{...e,status:`snoozed`,snoozedUntilISO:i,updatedAtISO:n}}function En(e){let t=new Date().toISOString();return xn(e.filter(e=>e.status===`active`||e.status===`snoozed`),t).slice(0,40).map(e=>({id:e.id,kind:e.kind,dedupeKey:e.dedupeKey,title:e.title,body:e.body,dateISO:e.dateISO,notifyAtISO:e.notifyAtISO,status:e.status,...e.snoozedUntilISO?{snoozedUntilISO:e.snoozedUntilISO}:{}}))}var Dn=`default`;async function On(e){if(fe(e?.env??{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`}))try{let e=await pe();if(e&&G(e)&&e.authUserId.trim())return e.authUserId.trim()}catch{}return(await u())?.app?.authUserId?.trim()||Dn}function kn(){let e=`true`;return e!==`false`&&e!==`0`}var An={default:{tasks:80,transactions:120,foods:120},minimal:{tasks:40,transactions:30,foods:40}};function jn(){return kn()?An.minimal:An.default}function Mn(e){return kn()?{...e,merchant:null,note:null}:e}function Nn(e){return e.filter(e=>!N(e)).map(e=>({id:e.id,name:e.name,...e.brand?.trim()?{brand:e.brand.trim()}:{},form:e.form,...e.inventory?.servingsRemaining==null?{}:{servingsRemaining:e.inventory.servingsRemaining},...e.inventory?.unitsRemaining==null?{}:{unitsRemaining:e.inventory.unitsRemaining},...e.supplementCatalogId?{supplementCatalogId:e.supplementCatalogId}:{}})).sort((e,t)=>e.name.localeCompare(t.name,`ru`)).slice(0,80)}var Pn={dashboard:rn,tasks:de,habits:v,finance:H,training:U};function Fn(e){return M(e)}function In(e=[]){return e.map(e=>({...e,displayName:Fn(e)}))}function Ln(e=[],t=g(),n=7){let r=_(t,-(Math.max(1,n)-1));return e.filter(e=>e.dateISO>=r&&e.dateISO<=t).sort((e,t)=>e.dateISO.localeCompare(t.dateISO)||(e.scheduledAtHHMM??``).localeCompare(t.scheduledAtHHMM??``)||e.createdAtISO.localeCompare(t.createdAtISO)||e.id.localeCompare(t.id)).map(e=>({id:e.id,planItemId:e.planItemId,supplementKnowledgeId:e.supplementKnowledgeId,supplementCatalogId:e.supplementCatalogId,dateISO:e.dateISO,scheduledAtHHMM:e.scheduledAtHHMM,takenAtISO:e.takenAtISO,status:e.status,source:e.source,note:e.note,dosageValue:e.dosageValue,dosageUnit:e.dosageUnit,createdAtISO:e.createdAtISO,updatedAtISO:e.updatedAtISO}))}var Rn={danger:0,warning:1,info:2};function zn(e,t){return(e??[]).filter(e=>e.title.trim()).map(e=>({domain:e.domain??t,severity:e.severity,title:e.title,...e.description?{description:e.description}:{},...e.href?{href:e.href}:{}}))}function Bn(e,t=`ru`){let n=t===`en`?`en-US`:`ru-RU`;return[...e].sort((e,t)=>Rn[e.severity]-Rn[t.severity]||e.domain.localeCompare(t.domain)||e.title.localeCompare(t.title,n)).slice(0,12)}async function Vn(e,t){try{return await t()}catch(t){console.warn(`Cloud module summary skipped: ${e}`,t);return}}function $(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function Hn(e,t=Pn){let n=e.locale??`ru`,[r,i,a,o,s]=await Promise.all([Vn(`dashboard`,()=>t.dashboard(e.dateISO)),Vn(`tasks`,()=>t.tasks({dateISO:e.dateISO})),Vn(`habits`,()=>t.habits({dateISO:e.dateISO})),Vn(`finance`,()=>t.finance({dateISO:e.dateISO,monthISO:e.dateISO.slice(0,7)})),Vn(`training`,()=>t.training({dateISO:e.dateISO}))]),c=R(e.supplementPlanItems,e.supplementIntakeLogs,e.dateISO,{mealPlanItems:e.mealPlanItems,trainings:e.trainingScheduleItems}),l={total:c.length,taken:c.filter(e=>e.status===`taken`).length,pending:c.filter(e=>e.status===`pending`||e.status===`snoozed`).length,skipped:c.filter(e=>e.status===`skipped`).length,snoozed:c.filter(e=>e.status===`snoozed`).length,actionRequiredCount:c.filter(e=>e.status===`pending`||e.status===`snoozed`).length,...e.supplementCloudSummary?{lowStockCount:e.supplementCloudSummary.inventory.lowStockCount,planWithoutProductCount:e.supplementCloudSummary.inventory.planWithoutProductCount,expiringSoonCount:e.supplementCloudSummary.inventory.expiringSoonCount}:{}},u=Bn([...zn(r?.actionRequired,`dashboard`),...zn(i?.actionRequired,`tasks`),...zn(a?.actionRequired,`habits`),...zn(o?.actionRequired,`finance`),...zn(s?.actionRequired,`training`),...l.actionRequiredCount>0?[{domain:`supplements`,severity:`info`,title:d(`cloud.snapshot.supplementsActionRequired`,{count:l.actionRequiredCount},n),href:`/supplements`}]:[]],n),f=e.appSettings;return{dateISO:e.dateISO,...r?{dashboard:{dateISO:r.dateISO,primarySignals:u.slice(0,4).map(e=>e.title)}}:{},...i?{tasks:{todayTotal:i.today.total,todayPending:i.today.pending,overdueCount:i.overdue.count,topPriorityCount:i.topPriority.count,next7DaysCount:i.next7Days.count,actionRequiredCount:i.actionRequired.length,highlights:[...i.topPriority.items.slice(0,3).map(e=>e.title),...i.overdue.items.slice(0,2).map(e=>e.title)].slice(0,5)}}:{},...a?{habits:{total:a.today.total,done:a.today.done,pending:a.today.pending,completionRatio:a.today.completionRatio,actionRequiredCount:a.actionRequired.length}}:{},water:{currentMl:e.dailyStatus.waterTodayMl,targetMl:e.dailyStatus.waterTargetMl,remainingMl:e.dailyStatus.waterRemainingMl,progressRatio:e.dailyStatus.waterTargetMl!=null&&e.dailyStatus.waterTargetMl>0?Math.min(1,Math.max(0,e.dailyStatus.waterTodayMl/e.dailyStatus.waterTargetMl)):null},nutrition:{kcal:e.nutritionToday.kcal,protein:e.nutritionToday.protein,fat:e.nutritionToday.fat,carbs:e.nutritionToday.carbs,mealEntriesCount:e.mealEntriesToday.length,...$(f?.nutritionCaloriesTarget??f?.bulkCaloriesTarget)==null?{}:{kcalTarget:$(f?.nutritionCaloriesTarget??f?.bulkCaloriesTarget)},...$(f?.nutritionProteinTargetGr??f?.proteinTargetGr)==null?{}:{proteinTarget:$(f?.nutritionProteinTargetGr??f?.proteinTargetGr)},...$(f?.nutritionFatTargetGr)==null?{}:{fatTarget:$(f?.nutritionFatTargetGr)},...$(f?.nutritionCarbTargetGr)==null?{}:{carbsTarget:$(f?.nutritionCarbTargetGr)}},supplements:l,...o?{finance:{monthIncome:o.month.income,monthExpense:o.month.expense,monthBalance:o.month.balance,todayExpense:o.today.expense,freePoolRemaining:o.budget.freePoolRemaining,safeDailySpendRub:o.budget.safeDailySpendRub,...$(e.appSettings?.financeProfile?.currentBalanceRub)==null?{}:{accountBalanceRub:$(e.appSettings?.financeProfile?.currentBalanceRub)},...$(e.debtRemainingRub)==null?{}:{debtRemainingRub:$(e.debtRemainingRub)},actionRequiredCount:o.actionRequired.length,limitation:d(`cloud.snapshot.financeLimitation`,void 0,n)}}:{},...e.appSettings?.wakeTimeTarget||e.appSettings?.sleepTimeTarget?{schedule:{...e.appSettings.wakeTimeTarget?{wakeTimeTarget:e.appSettings.wakeTimeTarget}:{},...e.appSettings.sleepTimeTarget?{sleepTimeTarget:e.appSettings.sleepTimeTarget}:{}}}:{},...s?{training:{todayCount:s.today.count,weekCount:s.week.totalCount,weekDurationMin:s.week.totalDurationMin,loadStatus:s.load.status,actionRequiredCount:s.actionRequired.length,...s.next.item?.title?{nextTitle:s.next.item.title}:{},...s.next.timeHHMM?{nextTimeHHMM:s.next.timeHHMM}:{}}}:{},actionRequired:u}}function Un(e,t=`ru`){return{userName:e?.userName?.trim()||d(`cloud.snapshot.personaUserDefault`,void 0,t),assistantName:e?.assistantName?.trim()||d(`cloud.snapshot.personaAssistantDefault`,void 0,t),userSex:(e?.nutritionProfile?.sex??e?.supplementProfile?.sex??`male`)===`female`?`female`:`male`}}async function Wn(){let t=await p(),i=g(),a=i.slice(0,7),o=await e(i),s=t.data.settings?.app?.waterTargetMl??null,c=Ln(t.data.supplementIntakeLogs??[],i,7),l=In(t.data.supplementPlanItems??[]),[u,d,f,m,h,_]=await Promise.all([re({excludeStatus:[`canceled`]}),n(i),C({monthISO:a}),E(i),ee(i),r.foods.orderBy(`createdAt`).toArray()]),v={dateISO:i,waterTodayMl:o,waterTargetMl:s,waterRemainingMl:s==null?null:Math.max(0,s-o)},y=jn(),b={dateISO:i,tasks:u.slice(0,y.tasks),habits:t.data.habits??[],habitLogsToday:d,transactionsThisMonth:f.slice(0,y.transactions).map(Mn),mealEntriesToday:m,nutritionToday:{kcal:h.kcal,protein:h.protein,proteinQuality:h.proteinQuality,fat:h.fat,carbs:h.carbs},supplementIntakeLogs:c,foods:_.slice(-y.foods).map(e=>({id:e.id,name:e.name,kcalPer100:e.kcalPer100,proteinPer100:e.proteinPer100,fatPer100:e.fatPer100,carbsPer100:e.carbsPer100,...e.catalogId?{catalogId:e.catalogId}:{},...e.hasFastCarbs===!0?{hasFastCarbs:!0}:{}}))},S=Nn(t.data.supplementProducts??[]),w=En(t.data.supplementReminders??[]),T=t.data.settings?.app?.uiLocale===`en`?`en`:`ru`,te=hn({dateISO:i,nowISO:new Date().toISOString(),planItems:t.data.supplementPlanItems??[],supplementIntakeLogs:t.data.supplementIntakeLogs??[],products:t.data.supplementProducts??[],planProductLinks:t.data.supplementPlanProductLinks??[],labResults:t.data.labResults??[],supplementProfile:t.data.settings?.app?.supplementProfile,safetyProfile:t.data.settings?.app?.supplementSafetyProfile,mealPlanItems:t.data.mealPlanItems??[],trainings:t.data.trainingScheduleItems??[],locale:T}),D=await x().catch(()=>void 0),O=await Hn({dateISO:i,locale:T,appSettings:t.data.settings?.app??null,dailyStatus:v,debtRemainingRub:D,supplementPlanItems:l,supplementIntakeLogs:c,mealPlanItems:t.data.mealPlanItems??[],trainingScheduleItems:t.data.trainingScheduleItems??[],nutritionToday:b.nutritionToday,mealEntriesToday:m,supplementCloudSummary:te}),k=t.data.settings?.app??null,ne=await On();return{schemaVersion:1,generatedAtISO:new Date().toISOString(),userKey:ne,persona:Un(k,T),appSettings:k,recipes:kn()?[]:t.data.recipes??[],mealPlans:kn()?[]:t.data.mealPlans??[],mealPlanItems:t.data.mealPlanItems??[],pantryItems:kn()?[]:t.data.pantryItems??[],trainingScheduleItems:t.data.trainingScheduleItems??[],supplementPlanItems:l,supplementIntakeLogs:c,supplementProducts:S,supplementReminders:w,dailyStatus:v,moduleSummaries:O,supplementCloudSummary:te,editableState:b}}var Gn=`rms.cloudLastSyncAtISO`,Kn=`rms.cloudLastSyncError`,qn=new Set([502,503,504]);async function Jn(e,t,n={}){let r=n.retries??2,i=n.baseDelayMs??800,a=n.fetchImpl??fetch,o=n.sleep??(e=>new Promise(t=>setTimeout(t,e))),s=null;for(let n=0;n<=r;n+=1){try{let i=await a(e,t);if(!qn.has(i.status)||n===r)return i;s=Error(`HTTP ${i.status}`)}catch(e){if(s=e,n===r)throw e}await o(i*2**n)}throw s instanceof Error?s:Error(`Cloud request failed`)}var Yn=/слишком много запросов/i;function Xn(e,t){if(t===429)return d(`cloudSyncApi.rateLimit`);let n=e.trim();if(!n)return``;try{let e=JSON.parse(n),r=typeof e.error==`string`?e.error:e.message;if(typeof r==`string`&&r.length>0)return t===429||Yn.test(r)?d(`cloudSyncApi.rateLimit`):r}catch{}return Yn.test(n)?d(`cloudSyncApi.rateLimit`):n}function Zn(e){if(typeof localStorage>`u`)return;let t=e??new Date().toISOString();try{localStorage.setItem(Gn,t),localStorage.removeItem(Kn)}catch{}}function Qn(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(Kn,JSON.stringify({message:e.slice(0,500),atISO:new Date().toISOString()}))}catch{}}function $n(){if(typeof localStorage>`u`)return null;try{return localStorage.getItem(Gn)}catch{return null}}function er(e=48,t=Date.now()){let n=$n();if(!n)return!0;let r=Date.parse(n);return Number.isFinite(r)?t-r>e*60*60*1e3:!0}function tr(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`},t){return!!or(e.VITE_CLOUD_SYNC_ENDPOINT??``,t)}function nr(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t.replace(/^\/+/,``)}`:``}function rr(e){return e||(typeof window<`u`&&window.location?.origin?window.location.origin:``)}function ir(e){try{let{hostname:t}=new URL(e);return t===`localhost`||t===`127.0.0.1`||t===`[::1]`}catch{return!1}}function ar(e,t){let n=nr(e),r=rr(t);if(!n||!r)return n;try{let e=new URL(n);if(e.origin!==r)return ir(r)?n:`${r}${e.pathname}${e.search}${e.hash}`}catch{return n}return n}function or(e,t){return ar(e??`https://api.assist.staging.rmsuniverse.ru/api/cloud-sync`??``,t)}function sr(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_CLOUD_AUTOMATION_TOKEN||e.VITE_CLOUD_SYNC_TOKEN||void 0}async function cr(e){let t=nr(e.endpointUrl);if(!t)return{ok:!1,status:0,message:d(`cloudSyncApi.noEndpoint`)};let n=e.snapshot??await Wn();if(n.userKey||=await On(),e.skipIfUnchanged){let e=f(n),t=m();if(t&&t===e)return{ok:!0,status:304,message:d(`cloudSyncApi.unchanged`),syncedAtISO:$n()??void 0}}let r=e.accessToken?`Bearer ${e.accessToken}`:e.syncToken?`Bearer ${e.syncToken}`:void 0,i=await Jn(t,{method:`POST`,headers:{"content-type":`application/json`,...r?{authorization:r}:{}},body:JSON.stringify(n)});if(!i.ok){let e=Xn(await i.text().catch(()=>``),i.status)||d(`cloudSyncApi.syncFailed`,{status:i.status});return Qn(e),{ok:!1,status:i.status,message:e}}let a=await i.json().catch(()=>null),o=a?.syncedAtISO;return Zn(o),h(f(n)),{ok:!0,status:i.status,message:a?.message??d(`cloudSyncApi.syncOk`),syncedAtISO:o}}export{Te as $,zt as A,q as B,Kt as C,Ft as D,Ht as E,vt as F,Le as G,Y as H,gt as I,Me as J,K,dt as L,At as M,Vt as N,It as O,_t as P,Ee as Q,$e as R,Wt as S,Nt as T,J as U,Ke as V,Ge as W,Ae as X,Pe as Y,Ne as Z,on as _,nr as a,ve as at,Gt as b,ar as c,Un as d,Se as et,On as f,hn as g,wn as h,er as i,xe as it,jt as j,Ut as k,or as l,Sn as m,sr as n,ye as nt,Qn as o,ge as ot,Tn as p,ze as q,tr as r,_e as rt,Zn as s,$n as t,be as tt,cr as u,Qt as v,Bt as w,Mt as x,rn as y,We as z};