From 6603258474e9ea64c0e1f199c451dae3f0c2798e Mon Sep 17 00:00:00 2001 From: Zakhar Date: Sat, 5 Sep 2026 13:19:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=B8=D1=82=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B4=D0=B5=D0=BD=D1=86?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cart/Cart.tsx | 118 ++++-- src/components/Cart/FinishPopupContent.tsx | 48 ++- src/components/Cart/FinitaLaCommedia.tsx | 6 +- src/components/Family/FamilySection.tsx | 3 +- src_static/cookies_and_recommendations.html | 402 +++++++++++++++++++- vite.config.ts | 1 + 6 files changed, 526 insertions(+), 52 deletions(-) diff --git a/src/components/Cart/Cart.tsx b/src/components/Cart/Cart.tsx index bae4ae9..cf3db4a 100644 --- a/src/components/Cart/Cart.tsx +++ b/src/components/Cart/Cart.tsx @@ -1,13 +1,13 @@ import {Dispatch, SetStateAction, useMemo, useState} from 'react'; import styled from 'styled-components'; -import { deleteProduct, replaceProduct } from '../../api/promoApi'; -import { useCartPolling } from '../../hooks/useCartPolling'; -import { declension } from '../../utils/declension'; -import { formatCurrency } from '../../utils/formatCurrency'; -import type { Product } from '../../types/cart'; -import { CartItem } from './CartItem'; -import { CartFooter } from './CartFooter'; -import { ProductModal } from './ProductModal'; +import {deleteProduct, replaceProduct} from '../../api/promoApi'; +import {useCartPolling} from '../../hooks/useCartPolling'; +import {declension} from '../../utils/declension'; +import {formatCurrency} from '../../utils/formatCurrency'; +import type {Product} from '../../types/cart'; +import {CartItem} from './CartItem'; +import {CartFooter} from './CartFooter'; +import {ProductModal} from './ProductModal'; import {useGlobalZustandState} from "../../hooks/useGlobalZustandState"; import {NotEnoughPopup} from "./NotEnoughPopup"; import {reachGoal} from "../../hooks/useYM"; @@ -97,11 +97,13 @@ export function Cart({ {products.length > 0 && ( <> - +
+ {products.length} {declension(products.length, ['товар', 'товара', 'товаров'])} - - {formattedTotalPrice} + + {formattedTotalPrice} +
с запасами на {stockDays} {declension(stockDays, ['день', 'дня', 'дней'])} @@ -138,17 +140,20 @@ export function Cart({ {products.length === 0 && ( - + )} {remaining > 0 && ( - setVisibleCount(products.length)}> - Показать ещё {remaining} товаров - - - - + + setVisibleCount(products.length)}> + Показать ещё {remaining} товаров + + + + + )} - {showNotEnoughPopup && {setShowNotEnoughPopup(false)}} />} + {showNotEnoughPopup && { + setShowNotEnoughPopup(false) + }}/>} ); } const AbsoluteRefreshButton = styled.button` - background-color: ${({ theme }) => theme.colors.green}; + background-color: ${({theme}) => theme.colors.green}; height: 32px; color: #ffffff; border: none; @@ -194,7 +201,7 @@ const AbsoluteRefreshButton = styled.button` &:hover, &:focus { - background-color: ${({ theme }) => theme.colors.greenHover}; + background-color: ${({theme}) => theme.colors.greenHover}; } &:active { @@ -210,35 +217,51 @@ const Summary = styled.div` flex-shrink: 0; width: 100%; position: relative; + > div { + width: 100%; + } `; const SummaryTitle = styled.div` font-size: 20px; line-height: 24px; font-weight: 600; - color: ${({ theme }) => theme.colors.darkGreen}; + color: ${({theme}) => theme.colors.darkGreen}; margin-bottom: 8px; `; const Green = styled.span` - color: ${({ theme }) => theme.colors.green}; + color: ${({theme}) => theme.colors.green}; `; const SummaryDetails = styled.div<{ $hidden: boolean }>` min-height: 24px; font-size: 14px; - color: ${({ theme }) => theme.colors.gray}; + color: ${({theme}) => theme.colors.gray}; display: flex; - justify-content: start; + flex: 1 1 100%; + justify-content: space-between; align-items: center; gap: 8px; - visibility: ${({ $hidden }) => ($hidden ? 'hidden' : 'visible')}; + visibility: ${({$hidden}) => ($hidden ? 'hidden' : 'visible')}; + * { + color:inherit; + } + > div:first-child { + display: flex; + align-items: center; + justify-content: start; + gap: 8px; + } span { font-weight: 350; + white-space: nowrap; + color:inherit; } b { + color:inherit; font-family: initial; font-size: 20px; line-height: 8px; @@ -246,12 +269,13 @@ const SummaryDetails = styled.div<{ $hidden: boolean }>` `; const SummaryExcess = styled.div` - background-color: ${({ theme }) => theme.colors.paleGreen}; + background-color: ${({theme}) => theme.colors.paleGreen}; padding: 3px 6px 5px; color: #6D8982; border-radius: 4px; font-size: 14px; font-weight: 350; + justify-content: center; `; const Loader = styled.div<{ $hidden: boolean, "data-display-text": string }>` @@ -261,8 +285,8 @@ const Loader = styled.div<{ $hidden: boolean, "data-display-text": string }>` color: transparent; background-clip: text; position: absolute; - top:32px; - visibility: ${({ $hidden }) => ($hidden ? 'hidden' : 'visible')}; + top: 32px; + visibility: ${({$hidden}) => ($hidden ? 'hidden' : 'visible')}; &:before, &:after { @@ -290,7 +314,7 @@ const ScrollWrapper = styled.div` overflow-y: auto; overflow-x: hidden; padding-right: 4px; - margin-bottom: 10px; + margin-bottom: 0; position: relative; display: flex; @@ -322,12 +346,18 @@ const EmptyLoader = styled.img` align-self: center; `; +const ShowMoreWrap = styled.div` + padding: 16px 8px 24px 8px; + display: flex; + justify-content: center; +`; const ShowMore = styled.button` display: flex; align-items: center; justify-content: center; - padding: 20px 0 10px; - color: ${({ theme }) => theme.colors.green}; + padding:8px 24px; + border-radius: 8px; + color: ${({theme}) => theme.colors.green}; font-size: 14px; cursor: pointer; font-weight: 500; @@ -335,25 +365,37 @@ const ShowMore = styled.button` flex-shrink: 0; gap: 4px; border: 0; + height: 52px; background: transparent; - &:hover { - opacity: 0.8; - } - span { - color: ${({ theme }) => theme.colors.green}; + color: ${({theme}) => theme.colors.green}; } svg { width: 24px; height: 24px; - stroke: ${({ theme }) => theme.colors.green}; + stroke: ${({theme}) => theme.colors.green}; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; margin-left: 6px; } + + span { + color: inherit; + font-weight: inherit; + } + + &:hover { + background-color: #F7FBF6; + } + + &:active, + &:focus { + background-color: #EEF8EB; + outline: none; + } `; const NotEnoughWrapper = styled.div` diff --git a/src/components/Cart/FinishPopupContent.tsx b/src/components/Cart/FinishPopupContent.tsx index 8c6eb47..de81fbc 100644 --- a/src/components/Cart/FinishPopupContent.tsx +++ b/src/components/Cart/FinishPopupContent.tsx @@ -13,12 +13,17 @@ export const FinishPopupContent = ({setShowCompletePopup}: any) => {

Спасибо!

- Вы помогли нам протестировать автокорзину. Сейчас сервис ещё разрабатывается, поэтому оформить заказ пока не получится. + Вы помогли нам протестировать автокорзину. Сейчас сервис ещё разрабатывается, поэтому оформить заказ + пока нельзя. Оставьте адрес электронной почты, и после запуска мы подарим вам 3 бесплатные корзины

-

- Если вы оставите адрес электронной почты - после запуска мы подарим вам 3 бесплатные корзины. -

- + + + + { if (buttonContent === 'Получить подарок') { setButtonContent('...') @@ -34,7 +39,7 @@ export const FinishPopupContent = ({setShowCompletePopup}: any) => { }) } }}>{buttonContent} - {createPortal(, document.body)} + {createPortal(, document.body)} ; }; @@ -42,11 +47,12 @@ const FinishPopupContentWrap = styled.div` padding: 20px; display: flex; flex-direction: column; - + img { max-width: 100%; display: flex; } + h2 { margin-top: 24px; margin-bottom: 8px; @@ -55,6 +61,7 @@ const FinishPopupContentWrap = styled.div` font-weight: 450; text-align: center; } + p { font-size: 16px; line-height: 19px; @@ -63,8 +70,31 @@ const FinishPopupContentWrap = styled.div` margin-bottom: 24px; } `; +const Confirm = styled.div` + font-size: 12px; + color: ${({theme}) => theme.colors.gray}; + flex-direction: row; + margin-top: 16px; + * { + color: inherit; + } + input { + width: 11px; + margin-right: 5px; + accent-color: #4A8D19; + } + label { + align-self: center; + margin-bottom: 16px; + display: flex; + flex-direction: row; + align-items: flex-start; + flex-wrap: nowrap; + } + +`; const FinishButton = styled.button` - background-color: ${({ theme }) => theme.colors.green}; + background-color: ${({theme}) => theme.colors.green}; height: 54px; width: 100%; color: #ffffff; @@ -80,7 +110,7 @@ const FinishButton = styled.button` &:hover, &:focus { - background-color: ${({ theme }) => theme.colors.greenHover}; + background-color: ${({theme}) => theme.colors.greenHover}; } &:active { diff --git a/src/components/Cart/FinitaLaCommedia.tsx b/src/components/Cart/FinitaLaCommedia.tsx index 1c5a37c..e8d03c7 100644 --- a/src/components/Cart/FinitaLaCommedia.tsx +++ b/src/components/Cart/FinitaLaCommedia.tsx @@ -36,10 +36,10 @@ const Overlay = styled.div` `; const Window = styled.div` background-color: #ffffff; - border-radius: 12px; + border-radius: 20px; width: auto; max-width: 535px; - padding: 20px 24px; + padding: 20px 20px 40px 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); position: relative; z-index: 9; @@ -74,6 +74,7 @@ const ModalContent = styled.div` display: flex; flex-direction: column; gap: 24px; + text-align: center; > div { display: flex; flex-direction: column; @@ -87,7 +88,6 @@ const ModalContent = styled.div` } `; const ButtonBlock = styled.div` - margin-top: 24px; display: flex; gap: 16px; flex-direction: column; diff --git a/src/components/Family/FamilySection.tsx b/src/components/Family/FamilySection.tsx index ecc84f8..735a2a7 100644 --- a/src/components/Family/FamilySection.tsx +++ b/src/components/Family/FamilySection.tsx @@ -228,7 +228,8 @@ const AddButton = styled.button` display: flex; align-items: center; justify-content: center; - margin-top: 14px; + margin-top: 16px; + margin-bottom: 2px; color: ${({ theme }) => theme.colors.green}; font-size: 14px; font-weight: 500; diff --git a/src_static/cookies_and_recommendations.html b/src_static/cookies_and_recommendations.html index 45e7e4e..64f54be 100644 --- a/src_static/cookies_and_recommendations.html +++ b/src_static/cookies_and_recommendations.html @@ -5,9 +5,409 @@ - Рекомендательные технологии и куки + Хватило - Рекомендательные технологии и куки +

Политика конфиденциальности

+

Дата последнего обновления: 05 сентября 2026 г.

+

Настоящая Политика конфиденциальности (далее – «Политика») регулирует порядок сбора, использования, хранения и защиты + персональных данных пользователей (далее – «Пользователь») сайта и приложения «Хватило» (далее – + «Сайт», «Приложение»), расположенного по адресу: https://hvatilo.ru, + а также мобильного приложения, + доступного в Google Play и App Store.

+ +

Автор сайта и Оператор персональных данных: Самозанятый Телятников Захар Александрович, ИНН + 502479720182 (далее – «Оператор», «Автор»).

+ +

Настоящая Политика разработана в соответствии с требованиями Федерального закона от 27 июля 2006 г. № 152-ФЗ «О + персональных данных», а также требованиями платформ Google Play, App Store и платёжного сервиса Robokassa.

+ +

Используя Сайт и/или Приложение, Пользователь выражает своё полное и безоговорочное согласие с условиями настоящей + Политики.

+ + + + +

1. Общие положения

+

1.1. Настоящая Политика определяет позицию Оператора в отношении обработки персональных данных, а + также конкретные цели обработки персональных данных, перечень подлежащих обработке персональных данных, действия с + персональными данными, сроки их обработки, условия и порядок их уничтожения.

+

1.2. Политика действует в отношении всех персональных данных, которые Оператор может получить от + Пользователя во время использования им Сайта, Приложения, сервисов, продуктов и услуг.

+

1.3. Политика является общедоступным документом, размещённым в открытом доступе по адресу: https://hvatilo.ru/land/cookies_and_recommendations.html.

+ + +

2. Персональные данные, которые мы собираем

+

Для предоставления доступа к сервисам Сайта и Приложения Оператор может собирать и обрабатывать следующие категории + персональных данных Пользователя:

+ +

2.1. Данные, предоставляемые Пользователем добровольно

+
    +
  • имя, фамилия, отчество (при регистрации);
  • +
  • адрес электронной почты;
  • +
  • контактный номер телефона;
  • +
  • логин и пароль для доступа к личному кабинету;
  • +
  • информация о предпочтениях в еде, пищевых привычках, и ограничениях (в рамках использования сервисов + составления рациона, меню и «дневника питания»); +
  • +
  • записи в «дневнике питания»;
  • +
  • иная информация, которую Пользователь добровольно вносит в сервисы Сайта.
  • +
+ +

+ Оператор не запрашивает и не обрабатывает сведения, относящиеся к специальной категории персональных данных + (состояние здоровья). Пользователь обязуется не указывать такую информацию при использовании сервисов. + Если Пользователь по собственной инициативе укажет сведения о здоровье, Оператор не несёт ответственности + за их обработку, но предпримет меры к их удалению при обнаружении. +

+ +

2.2. Данные, собираемые автоматически

+
    +
  • данные об устройстве (модель, операционная система, уникальные идентификаторы устройства);
  • +
  • IP-адрес;
  • +
  • данные о местоположении (с согласия Пользователя);
  • +
  • файлы cookie и аналогичные технологии;
  • +
  • информация о действиях Пользователя на Сайте и в Приложении (просмотренные страницы, использованные функции, + время сессии); +
  • +
  • данные о взаимодействии с рекламными материалами (при наличии).
  • +
+ +

2.3. Платёжные данные

+
    +
  • Оператор не собирает и не хранит полные данные банковских карт Пользователя. Все платёжные + операции осуществляются через платёжный шлюз Robokassa. +
  • +
  • Robokassa может обрабатывать следующие данные: номер банковской карты (в зашифрованном виде), срок действия + карты, имя держателя карты, сумму платежа. +
  • +
+ + +

3. Цели обработки персональных данных

+

Оператор обрабатывает персональные данные Пользователя в следующих целях:

+
    +
  • 3.1. Регистрация и идентификация Пользователя – для создания учётной записи, обеспечения + доступа к личному кабинету и сервисам Сайта/Приложения. +
  • +
  • 3.2. Предоставление услуг – для предоставления доступа к закрытым разделам Сайта, включая: +
      +
    • информацию о продуктах питания и товарах в сетях ритейл;
    • +
    • справочную информацию о симптомах нехватки и избытка нутриентов (на основе данных National Institutes + of Health – + https://ods.od.nih.gov/factsheets/list-all/); +
    • +
    • авторские статьи;
    • +
    • сервисы составления рациона и меню;
    • +
    • «дневник питания»;
    • +
    • учёт личных предпочтений в еде;
    • +
    • сервис автоматического сбора продуктовой корзины.
    • +
    + Сервис носит информационный характер и не является медицинским изделием. Информация не заменяет консультацию + врача. Вводя данные в дневник, пользователь не получает диагноз; +
  • +
  • 3.3. Обработка платежей – для проведения оплаты через платёжный шлюз Robokassa и подтверждения + факта оплаты. +
  • +
  • 3.4. Улучшение качества сервисов – для анализа использования Сайта и Приложения, повышения + удобства и функциональности сервисов. +
  • +
  • 3.5. Информирование Пользователя – для направления уведомлений о статусе услуг, изменениях в + тарифах, новостях и обновлениях Сайта (с согласия Пользователя). +
  • +
  • 3.6. Исполнение требований законодательства – для выполнения обязательств, предусмотренных + законодательством Российской Федерации. +
  • +
  • 3.7. Предоставление персонализированного контента и рекомендаций – для формирования + индивидуальных предложений, рецептов и статей на основе предпочтений и истории использования + Пользователя (подробнее см. раздел 4 «Использование рекомендательных технологий»). +
  • +
  • 3.8. Анализ посещаемости и улучшение работы Сайта и Приложения – для сбора и анализа + обезличенной статистики о действиях Пользователей, оценки эффективности контента, повышения удобства + и функциональности сервисов с использованием сервиса веб-аналитики Яндекс Метрика (подробнее см. раздел + 4 «Использование рекомендательных технологий и сервисов веб-аналитики»). +
  • +
+ + +

4. Использование рекомендательных технологий (алгоритмических систем)

+

+ 4.1. В целях повышения удобства и персонализации сервисов Сайта и Приложения Оператор применяет алгоритмические рекомендательные технологии (далее – «Рекомендательные технологии»). Рекомендательные технологии позволяют предлагать Пользователю контент, меню, статьи, рецепты и информационные материалы, которые с наибольшей вероятностью соответствуют его предпочтениям и истории использования. +

+

+ 4.2. Рекомендательные технологии строятся на анализе следующих данных Пользователя: +

+
    +
  • информация о пищевых предпочтениях и ограничениях, указанных Пользователем;
  • +
  • записи в «дневнике питания»;
  • +
  • история просмотров страниц, статей и рецептов;
  • +
  • взаимодействие с сервисами составления рациона и меню.
  • +
+

+ На основе этих данных формируются индивидуальные пользовательские профили (модели интересов), которые используются + для подбора наиболее релевантных предложений. Все расчёты производятся автоматически с использованием алгоритмов, + разработанных Оператором. Решения не принимаются исключительно в автоматическом режиме, если они могут повлиять + на права и законные интересы Пользователя. +

+

+ 4.3. Права Пользователя в отношении рекомендательных технологий +

+

Пользователь вправе:

+
    +
  • + получить информацию о факте применения Рекомендательных технологий и их основных принципах (настоящий раздел); +
  • +
  • + отключить персонализированные рекомендации в любой момент в личном кабинете (раздел «Настройки» → переключатель «Персональные рекомендации»). + После отключения Пользователю будут показываться только общие (неперсонализированные) материалы; +
  • +
  • + удалить свои предпочтения и записи в дневнике питания, что повлияет на рекомендации – после удаления + соответствующих данных алгоритм перестанет их учитывать. +
  • +
+

+ 4.4. Рекомендательные технологии не используются для: +

+
    +
  • принятия решений, имеющих юридические последствия для Пользователя;
  • +
  • установления цен или индивидуальных условий оплаты (цены одинаковы для всех пользователей);
  • +
  • дискриминации Пользователей по любым признакам.
  • +
+

4.5. Отказ от ответственности

+

+ Предлагаемые рекомендации носят исключительно информационный характер и не являются медицинскими заключениями, + не заменяют консультацию врача. Пользователь самостоятельно принимает решение о следовании рекомендациям. +

+

4.6. Сервис веб-аналитики Яндекс Метрика

+

+ 4.6.1. Для сбора и анализа статистики посещаемости, оценки эффективности контента и улучшения работы Сайта Оператор использует сервис веб-аналитики Яндекс Метрика, предоставляемый компанией ООО «ЯНДЕКС» (ОГРН 1027700229193, адрес: 119021, г. Москва, ул. Льва Толстого, д. 16). +

+

+ 4.6.2. Яндекс Метрика использует файлы cookie и аналогичные технологии для сбора обезличенной информации о действиях Пользователя на Сайте. В рамках сервиса могут обрабатываться следующие данные: +

+
    +
  • IP-адрес Пользователя (в обезличенной форме);
  • +
  • тип и версия браузера, операционная система;
  • +
  • данные об устройстве (модель, разрешение экрана);
  • +
  • информация о местоположении (на основе IP-адреса, с точностью до города);
  • +
  • сведения о действиях Пользователя на Сайте (просмотренные страницы, время пребывания, переходы, клики);
  • +
  • файлы cookie, устанавливаемые сервисом Яндекс Метрика.
  • +
+

+ 4.6.3. Все собираемые данные Яндекс рассматривает как персональные данные и обрабатывает их в соответствии со своей Политикой конфиденциальности. Обработка данных осуществляется на серверах Яндекса, расположенных на территории Российской Федерации. +

+

+ 4.6.4. Оператор не передаёт в Яндекс Метрику персональные данные, позволяющие идентифицировать Пользователя (ФИО, адрес электронной почты, номер телефона и т.п.). Пользователь обязуется не указывать такие сведения при использовании сервисов Сайта. +

+

+ 4.6.5. Права Пользователя: +

+
    +
  • Пользователь может запретить сбор данных о своих посещениях Сайта сервисом Яндекс Метрика, установив блокировщик Яндекс Метрики в своём браузере;
  • +
  • Пользователь может отключить файлы cookie в настройках своего браузера (это может повлиять на функциональность Сайта);
  • +
  • Пользователь имеет право на получение информации об обработке его персональных данных в порядке, предусмотренном разделом 9 настоящей Политики.
  • +
+

+ 4.6.6. Подробнее об условиях обработки данных в Яндекс Метрике можно узнать в Условиях использования сервиса Яндекс Метрика. +

+ + +

5. Правовые основания обработки персональных данных

+

Обработка персональных данных осуществляется на следующих правовых основаниях:

+
    +
  • 5.1. Согласие Пользователя на обработку персональных данных, выраженное при регистрации на + Сайте/в Приложении и/или при оформлении заказа. +
  • +
  • 5.2. Исполнение договора, стороной которого является Пользователь (предоставление доступа к + сервисам). +
  • +
  • 5.3. Исполнение требований Федерального закона № 152-ФЗ «О персональных данных» и иных + нормативных правовых актов. +
  • +
+ + +

6. Порядок и условия обработки персональных данных

+

6.1. Обработка персональных данных осуществляется с использованием средств автоматизации или без + использования таких средств.

+

6.2. Оператор принимает необходимые организационные и технические меры для защиты персональных + данных от неправомерного доступа, уничтожения, изменения, блокирования, копирования, распространения, а также от + иных неправомерных действий третьих лиц.

+

6.3. Персональные данные Пользователя не передаются третьим лицам, за исключением случаев, прямо + предусмотренных настоящей Политикой или законодательством Российской Федерации.

+

+ 6.4. + Обработка персональных данных осуществляется Оператором с использованием баз данных, расположенных на технических + серверах, физически находящихся на территории Российской Федерации. +

+

+ 6.5. + Обработка персональных данных осуществляется на серверах, расположенных на территории Российской Федерации. + Трансграничная передача персональных данных не осуществляется, за исключением случаев, когда это необходимо + для исполнения договора с Пользователем (проведение платежа через международные платежные системы в рамках + сервиса Робокасса). Перед началом трансграничной передачи Оператор удостоверится в том, что иностранным + государством обеспечивается адекватная защита прав субъектов персональных данных. +

+ + +

7. Передача персональных данных третьим лицам

+

Для обеспечения функционирования Сайта и Приложения Оператор может передавать персональные данные Пользователя + следующим третьим лицам:

+ + + + + + + + + + + + + + + + + + + + +
Третье лицоЦель передачиСсылка на политику конфиденциальности
ООО «РОБОКАССА» (ИНН 5047063929, ОГРН 1055009302215)Приём и обработка платежейhttps://robokassa.com/privacy-policy/ +
ООО «ЯНДЕКС» (ОГРН 1027700229193, адрес: 119021, г. Москва, ул. Льва Толстого, д. 16)Сбор и обработка обезличенной статистики посещаемости, анализ поведения пользователей (сервис Яндекс Метрика)https://yandex.ru/legal/confidential/
+ +

7.1.Передача персональных данных Пользователя платежному сервису ООО «РОБОКАССА» осуществляется + исключительно для целей проведения платежа и в объёме, необходимом для этой цели.

+

7.2. Robokassa обеспечивает конфиденциальность персональных данных и безопасность персональных + данных при их обработке в соответствии с международным стандартом PCI DSS.

+

7.3. Оператор не передаёт персональные данные Пользователя иным третьим лицам без согласия + Пользователя, за исключением случаев, предусмотренных законодательством Российской Федерации.

+

7.4. Для обработки платежей по банковским картам данные также могут передаваться банку-эквайеру + и банку-эмитенту (банку, выпустившему карту Пользователя). Дальнейшая передача данных банку-эквайеру и + платёжным системам осуществляется платёжным сервисом Робокасса самостоятельно. + Оператор не участвует в этой передаче и не контролирует её, однако выбрал Робокассу как сервис, + обеспечивающий соответствие стандарту PCI DSS

+

7.5. Оператор не контролирует и не несет ответственности за обработку данных Пользователя банками + и платежными системами, однако прикладывает разумные усилия для выбора надежных партнеров.

+

7.6. Передача автоматически собираемых данных сервису Яндекс Метрика.

+

+ Оператор передаёт обезличенные автоматически собираемые данные (IP-адрес, сведения о браузере и устройстве, данные о местоположении, файлы cookie, информация о действиях на Сайте) сервису веб-аналитики Яндекс Метрика (ООО «ЯНДЕКС») для сбора статистики и улучшения работы Сайта. Передача осуществляется на основании договора с Яндексом и в соответствии с его Политикой конфиденциальности. +

+

+ При этом Оператор не передаёт в Яндекс Метрику персональные данные, позволяющие прямо идентифицировать Пользователя (ФИО, email, телефон). Все данные обезличиваются на стороне Оператора перед передачей или обрабатываются Яндексом как обезличенные в соответствии с условиями сервиса. +

+

+ Иные автоматически собираемые данные (кроме переданных в Яндекс Метрику) не передаются третьим лицам, за исключением случаев, предусмотренных законодательством Российской Федерации. +

+ + +

8. Сроки обработки и хранения персональных данных

+

8.1. Персональные данные Пользователя хранятся не дольше, чем этого требуют цели их обработки, если + иной срок не предусмотрен законодательством Российской Федерации или договором.

+

8.2. Срок хранения персональных данных:

+
    +
  • Данные учётной записи – хранятся до момента удаления учётной записи Пользователем;
  • +
  • Данные о платежах – Оператор не хранит на своих серверах полные данные банковских карт и + детали транзакций. Информация о факте оплаты и сроке действия подписки хранится до момента удаления учетной + записи Пользователя. Хранение фискальных документов (чеков) осуществляется платежным агентом (Робокасса) + в соответствии с требованиями 54-ФЗ. Оператор получает от Робокассы только обезличенный идентификатор + платежа для автоматической активации доступа; +
  • +
  • Данные «дневников» и предпочтений – хранятся до момента удаления учётной записи Пользователем; +
  • +
  • Логи и технические данные – хранятся не более 6 месяцев.
  • +
+

8.3. После истечения срока хранения или при отзыве согласия Пользователя персональные данные + подлежат уничтожению или обезличиванию.

+ + +

9. Права Пользователя

+

Пользователь имеет право:

+
    +
  • 9.1. На доступ к своим персональным данным – получить информацию, подтверждающую факт обработки + персональных данных Оператором. +
  • +
  • 9.2. На уточнение персональных данных – требовать уточнения своих персональных данных, их + блокирования или уничтожения в случае, если данные являются неполными, устаревшими, неточными или получены + незаконно. +
  • +
  • 9.3. На отзыв согласия – отозвать своё согласие на обработку персональных данных в любое время + в личном кабинете путём нажатия кнопки «Удалить аккаунт» или направления письменного уведомления Оператору + по адресу электронной почты: info@hvatilo.ru. + Требование об уничтожении или уточнении данных будет выполнено в срок, не превышающий 30 дней с момента + получения запроса (ст. 21 152-ФЗ). Если в запросе не указаны идентифицирующие признаки субъекта, Оператор + вправе запросить дополнительные сведения. +
  • +
  • 9.4. На удаление данных – требовать удаления своих персональных данных, за исключением случаев, + когда их обработка необходима для исполнения требований законодательства. +
  • +
  • 9.5. На обжалование – обжаловать действия или бездействие Оператора в уполномоченный орган по + защите прав субъектов персональных данных (Роскомнадзор) или в судебном порядке. +
  • +
+ + +

10. Порядок уничтожения персональных данных

+

10.1. Уничтожение персональных данных осуществляется в следующих случаях:

+
    +
  • при отзыве Пользователем согласия на обработку персональных данных;
  • +
  • по истечении установленного срока хранения;
  • +
  • при удалении учётной записи Пользователем;
  • +
  • по требованию уполномоченных органов в случаях, предусмотренных законодательством.
  • +
+

10.2. Уничтожение персональных данных осуществляется способом, исключающим возможность их дальнейшего + восстановления.

+ + +

11. Оплата услуг

+

+ Приложение «Хватило» предоставляется бесплатно. Доступ к расширенным функциям оформляется посредством оплаты + на официальном сайте Оператора (hvatilo.ru). Оплата производится через платёжный сервис Робокасса. + Оплата внутри приложения не осуществляется. +

+ + +

12. Использование файлов cookie

+

12.1. Сайт и Приложение могут использовать файлы cookie и аналогичные технологии для:

+
    +
  • аутентификации Пользователя;
  • +
  • сохранения настроек и предпочтений;
  • +
  • анализа использования Сайта и Приложения;
  • +
  • улучшения качества предоставляемых услуг.
  • +
+

12.2. Пользователь может отключить файлы cookie в настройках своего браузера, однако это может + повлиять на функциональность Сайта и Приложения.

+ + +

13. Безопасность платежей

+

13.1. Все платежи на Сайте обрабатываются через платёжный шлюз Robokassa.

+

13.2. Robokassa обеспечивает обработку платёжных данных в соответствии с международным стандартом + безопасности PCI DSS (Payment Card Industry Data Security Standard).

+

13.3. Оператор не хранит на своих серверах полные данные банковских карт + Пользователя (номер карты, CVV-код, срок действия).

+

13.4. Передача информации о платежах осуществляется в зашифрованном виде с использованием протокола + TLS (Transport Layer Security).

+ + +

14. Изменение Политики конфиденциальности

+

14.1. Оператор оставляет за собой право вносить изменения в настоящую Политику в одностороннем + порядке.

+

14.2. Изменения вступают в силу с момента опубликования новой редакции Политики на Сайте.

+

14.3. Пользователь обязуется самостоятельно отслеживать изменения в Политике. Продолжение + использования Сайта и/или Приложения после внесения изменений означает согласие Пользователя с новой редакцией + Политики.

+

14.4. О существенных изменениях Оператор уведомляет Пользователя через Сайт или по электронной почте + не менее чем за 7 (семь) дней до вступления изменений в силу.

+ + +

15. Контактная информация

+

По всем вопросам, связанным с настоящей Политикой конфиденциальности, обработкой персональных данных, а также для + отзыва согласия, удаления данных или реализации иных прав Пользователь может обратиться к Оператору:

+

Автор сайта: Самозанятый Телятников Захар Александрович
+ ИНН: 502479720182
+ Электронная почта: info@hvatilo.ru

\ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 62c1a0b..fbc1182 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -22,6 +22,7 @@ export default defineConfig(({mode}) => ({ name: 'copy-html-root', closeBundle() { fs.copyFileSync('dist/src/template.html', 'auto_cart.html'); + fs.copyFileSync('dist/src_static/cookies_and_recommendations.html', 'land/cookies_and_recommendations.html'); fs.writeFileSync('autocart.js', JavascriptObfuscator.obfuscate(fs.readFileSync('dist/autocart.js').toString() .replace('https://local.hvatilo.ru:8055', 'https://hvatilo.ru') ).getObfuscatedCode());