diff --git a/fitnes/.claude/launch.json b/fitnes/.claude/launch.json index 3428eb2..14339fd 100644 --- a/fitnes/.claude/launch.json +++ b/fitnes/.claude/launch.json @@ -6,6 +6,12 @@ "runtimeExecutable": "npm", "runtimeArgs": ["run", "dev:client"], "port": 5173 + }, + { + "name": "fitnes-v2-legacy", + "runtimeExecutable": "python3", + "runtimeArgs": ["-m", "http.server", "8090", "--directory", "/Users/yp/projects/exodevices/fitnes/legacy/Fitnes v2"], + "port": 8090 } ] } diff --git a/fitnes/legacy/Fitnes v2/DEPLOY.txt b/fitnes/legacy/Fitnes v2/DEPLOY.txt new file mode 100644 index 0000000..5255998 --- /dev/null +++ b/fitnes/legacy/Fitnes v2/DEPLOY.txt @@ -0,0 +1 @@ +Загрузить все файлы и папку assets в один каталог на сервере. Открываемый файл: index.html. diff --git a/fitnes/legacy/Fitnes v2/README.md b/fitnes/legacy/Fitnes v2/README.md new file mode 100644 index 0000000..8f9de1d --- /dev/null +++ b/fitnes/legacy/Fitnes v2/README.md @@ -0,0 +1,14 @@ +# Fitnes — EXO Group landing + +Готовая серверная кодовая база. + +## Структура +- index.html — разметка страницы +- styles.css — стили +- script.js — интерактив, конструктор, калькулятор и форма +- assets/ — локальные изображения и графика + +## Размещение +Загрузите содержимое папки Fitnes на сервер, сохраняя структуру файлов. Точка входа — index.html. + +Форма отправляет данные на endpoint, заданный в script.js. Перед публикацией проверьте адрес API и серверную обработку заявок. diff --git a/fitnes/legacy/Fitnes v2/assets/asset_01_8209763f3541.webp b/fitnes/legacy/Fitnes v2/assets/asset_01_8209763f3541.webp new file mode 100644 index 0000000..e948af5 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_01_8209763f3541.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_02_cbf145cf201b.webp b/fitnes/legacy/Fitnes v2/assets/asset_02_cbf145cf201b.webp new file mode 100644 index 0000000..23ebb2b Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_02_cbf145cf201b.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_03_161e92b250ee.png b/fitnes/legacy/Fitnes v2/assets/asset_03_161e92b250ee.png new file mode 100644 index 0000000..d1a7c79 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_03_161e92b250ee.png differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_04_bc5aed342f9d.webp b/fitnes/legacy/Fitnes v2/assets/asset_04_bc5aed342f9d.webp new file mode 100644 index 0000000..bc43f25 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_04_bc5aed342f9d.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_05_d661a53c4019.webp b/fitnes/legacy/Fitnes v2/assets/asset_05_d661a53c4019.webp new file mode 100644 index 0000000..39c7ff3 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_05_d661a53c4019.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_06_1f84fd8fbb01.webp b/fitnes/legacy/Fitnes v2/assets/asset_06_1f84fd8fbb01.webp new file mode 100644 index 0000000..c64061e Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_06_1f84fd8fbb01.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_07_6a1002dc240d.webp b/fitnes/legacy/Fitnes v2/assets/asset_07_6a1002dc240d.webp new file mode 100644 index 0000000..73ae871 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_07_6a1002dc240d.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_08_363370028862.webp b/fitnes/legacy/Fitnes v2/assets/asset_08_363370028862.webp new file mode 100644 index 0000000..69943ab Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_08_363370028862.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_09_cfa0f6440fb6.webp b/fitnes/legacy/Fitnes v2/assets/asset_09_cfa0f6440fb6.webp new file mode 100644 index 0000000..2978ced Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_09_cfa0f6440fb6.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_10_e0dd441c5a61.webp b/fitnes/legacy/Fitnes v2/assets/asset_10_e0dd441c5a61.webp new file mode 100644 index 0000000..0d5fccc Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_10_e0dd441c5a61.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_11_e22a2b74cfb2.webp b/fitnes/legacy/Fitnes v2/assets/asset_11_e22a2b74cfb2.webp new file mode 100644 index 0000000..1d3958e Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_11_e22a2b74cfb2.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_12_1a4405bd5ffd.webp b/fitnes/legacy/Fitnes v2/assets/asset_12_1a4405bd5ffd.webp new file mode 100644 index 0000000..7adbecb Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_12_1a4405bd5ffd.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_13_874140f5a728.webp b/fitnes/legacy/Fitnes v2/assets/asset_13_874140f5a728.webp new file mode 100644 index 0000000..156a554 Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_13_874140f5a728.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_14_c3b984d644de.webp b/fitnes/legacy/Fitnes v2/assets/asset_14_c3b984d644de.webp new file mode 100644 index 0000000..63032da Binary files /dev/null and b/fitnes/legacy/Fitnes v2/assets/asset_14_c3b984d644de.webp differ diff --git a/fitnes/legacy/Fitnes v2/assets/asset_15_26cd46934e8e.svg b/fitnes/legacy/Fitnes v2/assets/asset_15_26cd46934e8e.svg new file mode 100644 index 0000000..f0ae20b --- /dev/null +++ b/fitnes/legacy/Fitnes v2/assets/asset_15_26cd46934e8e.svg @@ -0,0 +1 @@ +<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 128'><rect width='128' height='128' rx='27' fill='#0A2540'/><path d='M30 29h38c22 0 37 14 37 35S90 99 68 99H30V29Zm19 18v34h18c11 0 18-7 18-17s-7-17-18-17H49Z' fill='white'/><path d='M45 58h27v12H45z' fill='#00C4B4'/></svg> \ No newline at end of file diff --git a/fitnes/legacy/Fitnes v2/index.html b/fitnes/legacy/Fitnes v2/index.html new file mode 100644 index 0000000..7c0c3ff --- /dev/null +++ b/fitnes/legacy/Fitnes v2/index.html @@ -0,0 +1,360 @@ + + + + + + +EXO Recovery Zone для фитнес-клубов | Экзо Групп + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ Зона восстановления и спортивной эффективности +

Восстановление, которое удерживает клиента в клубе

+

Готовая зона внутри фитнес-центра: клиент проходит путь «тренировка → восстановление → контроль → следующий визит», не уходя во внешние клиники и recovery-студии.

+ +
+
34 из 100клиентов клуб не удерживает за год при среднем показателе 66%
+
4 источника выручкисессии, пакеты, premium-сервис и персональные тренировки
+
Окупаемостьот 6 месяцев — быстрый возврат инвестиций без риска заморозить деньги в оборудовании
+
+ Почему это актуально сейчас +
+ +
+
+
+
+
+Динамика рынка +

Фитнес рынок растет, но удерживать выручку только за счет удорожания абонемента становится все сложнее.

+

Клубу нужен принципиально новый продукт внутри сетки услуг: высокомаржинальный сервис восстановления, который увеличивает ARPU, LTV и удерживает людей в клубе.

+
+
+
+
+
263 млрд ₽+23%2024
+
316,5 млрд ₽+20%2025
+
365 млрд ₽+15% прогноз2026П
+
+
Оборот фитнес-услуг в Россиитемп: 23% → 20% → 15%
+
+
+Что меняется для собственника +
+
>50%
Рост всё больше ценовой

В I полугодии 2025 года повышение цен обеспечило более половины прироста рынка.

+
12%
Подписка меняет модель

Доля рекуррентных продаж карт достигла 12% в I квартале 2025 года, в Москве приблизилась к 20%.

+
66%
Удержание — ключевой резерв

Международный benchmark HFA: средняя годовая удерживаемость участников — около двух третей.

+
+

Источники: FitnessData, итоги 2025 и прогноз 2026; FitnessData, I полугодие 2025; HFA Benchmarking Report 2025.

+
+
+
+
+ +
+
+
+ Экономика действующей клиентской базы +

Клуб теряет деньги не на тренировке — а между посещениями

+

Более половины прироста рынка уже обеспечивается повышением цен, а средняя годовая удерживаемость составляет около 66%. Recovery Zone создаёт новую выручку без продажи ещё одной клубной карты.

+
+
+
>50%роста рынка — ценовойдальше повышать карту всё сложнее
+
34 из 100клиентов не удерживаютсярасчёт из benchmark 66%
+
≈88%продаж карт не рекуррентныерекуррентная доля — 12%
+
23→15%замедление темпа рынка2024 → прогноз 2026
+
+
+
+

Где клуб недополучает выручку

+
+
01
День без тренировки не монетизируетсяПри усталости, перегрузке или паузе клиент не приходит в клуб и не покупает дополнительный сервис.
+
02
Запрос уходит во внешние студииМассаж, восстановление и return-to-sport покупаются за пределами клуба.
+
03
ARPU растёт только вместе с ценой картыНовый доход появляется через подорожание, а не через новый продукт для действующей базы.
+
+
+
+

На чём зарабатывает клуб с Экзо

+
+
01
Разовые recovery-сессииОтдельная причина прийти в клуб после нагрузки или даже в день без тренировки.
+
02
Короткие курсы и пакетыВосстановление ног, подвижность, перезагрузка и возврат к нагрузке повышают ARPU.
+
03
Premium и рекомендации тренераRecovery усиливает membership, помогает удержанию и возвращает клиента к регулярной нагрузке.
+
+
+
+
+ Экономика строится на текущей базе, а не на дополнительном маркетинговом трафике +
+
3 аппаратакомпактное recovery-ядро
+
5 аппаратовполная платформа клуба
+
от 6 мес.заявленный ориентир окупаемости
+
4 каналасессии, пакеты, premium, PT
+
+

Итоговая конфигурация и экономика зависят от базы клуба, формата тренировок, выбранной модели работы, тарифов и загрузки зоны.

+
+
+
+ Простой расчёт +

Сколько зона восстановления может приносить клубу

+

Без процентов и сложных метрик: укажите продажи в день, средний чек и количество рабочих дней.

+
+
+
1Оплаченных программ
в день
+ × +
2Средний чек
программы
+ × +
3Рабочих дней
в месяц
+ = +
Дополнительная
выручка в месяц
+
+
+
+
+ + + Разовая сессия, пакет или короткий курс — одна продажа. +
+
+ + + Фактическая средняя сумма оплаты +
+
+ + + Сколько дней зона принимает клиентов +
+
+ + + Нужны только для расчёта ROI и срока возврата инвестиций +
+
+
+
Дополнительная выручка / месяцВведите программы в день и средний чек
+
Дополнительная выручка / годдо вычета расходов
+
Срок возврата инвестицийинвестиции ÷ дополнительная выручка в месяц
+
ROI за 12 месяцевсценарный расчёт до операционных расходов
+
+
+

Средний чек программы составляет 2 500 ₽, по данным нашей клиники «ЭкзоКлиник» в городе Тольятти за период 2025–2026гг.

Средний чек программы может меняться в зависимости от региона и сезонных предложений.

+

Расчёт показывает сценарную выручку и ROI, а не финансовую гарантию. ROI рассчитан без учёта ФОТ, налогов, аренды, расходников и прочих операционных расходов. Финальная экономика уточняется после аудита.

+
+
+
+ +
+
+
+Бизнес-эффект +

Следующий рост клуба — не ещё один тренажёр. Это восстановление

+

Зона встраивается в существующий клиентский поток и превращает паузу после нагрузки в понятный продукт клуба.

+
+
+
01 / LTV

Удержание

Появляется причина прийти даже в день без тренировки и не выпадать из привычного плана из-за перегрузки или дискомфорта.

+
02 / ARPU

Новая выручка

Процедуры, короткие курсы и recovery-пакеты монетизируют действующую базу без продажи ещё одной клубной карты.

+
03 / SALES

Роль тренера

Тренер замечает запрос, рекомендует маршрут восстановления и получает инструмент для возвращения клиента к нагрузке.

+
04 / BRAND

Новая аудитория

Premium-клиенты, спортсмены-любители, взрослые и корпоративные клиенты получают дополнительный аргумент выбрать клуб.

+
LTVLifetime Value — совокупная ценность клиента за весь период отношений с клубом.
ARPUAverage Revenue Per User — средняя выручка на одного клиента.
SALESSales — продажи и коммерческая конверсия.
BRANDBrand — бренд, его ценность и восприятие аудиторией.
+
+
+
+
+
+Конструктор EXO +

Не один комплект для всех. Собираем зону под ваш клуб

+

Выберите компактное ядро из трёх аппаратов или полную платформу из пяти. Финальная конфигурация определяется после аудита площади, потока, аудитории, формата тренировок.

+
+
+
+
Интерактивный подбор
+
+ + +
+
+
+
+

Состав оборудования

Выберите ровно 3 аппарата

3 / 3
+
+ + + + + +
+
+ + + +
+
+
+
Пример зоны восстановления с тремя аппаратами в фитнес-клубеКомпактный форматПример визуализации. Итоговый рендер создаётся под выбранный состав и интерьер клуба.
+

Recovery Start — 3 аппарата

Компактный вход в recovery с флагманской, потоковой и автономной процедурой.

03
+
+
+ +
+
+
+
+
+
+
+
+Продукт для клиента +

Продаётся не аппарат. Продаётся понятный маршрут

+

Состав программы зависит от цели клиента, этапа тренировок и допуска специалиста. Клуб получает продукт, который проще объяснять, измерять и продавать курсом.

+
+
СИЛА И МЫШЦЫ

Готовность к тяжелым весам (Пауэрлифтинг / Бодибилдинг)

Комплексная подготовка опорно-двигательного аппарата к предельным нагрузкам. Устранение мышечной зажатости, проработка триггерных точек, фасциальный релиз и увеличение эластичности мягких тканей для безопасного приседа, жима и тяги.

Процедуры и связки: ЭкзоТекар + ЭкзоТерапия
Глубокий прогрев соединительной ткани, снятие блоков, подготовка нервной системы к взрывной работе.
БЕГ / КАРДИО

Восстановление ног и выносливости (Легкая атлетика / Сайклинг)

Мощный лимфодренаж и выведение продуктов распада (молочной кислоты) после длительного бега, функционального тренинга или «дня ног». Снятие ощущения «гудящих» мышц, устранение застойных явлений и запуск быстрой регенерации.

Процедуры и связки: ЭкзоПресс + ЭкзоВодород
Прессотерапия для вытеснения венозной крови и межтканевой жидкости + мощное антиоксидантное насыщение против клеточного стресса.
ПОДВИЖНОСТЬ И ГИБКОСТЬ

Локальный комфорт и амплитуда (Йога / Растяжка / Пилатес)

Увеличение подвижности заблокированных суставов (особенно тазобедренных и плечевых) и снятие жесткости фасций. Идеально для тех, кто хочет улучшить шпагат, разгрузить позвоночник и убрать скованность движений после сидячей работы.

Процедуры и связки: ЭкзоТекар + ЭкзоТерапия
Фасциальный массаж с глубоким прогревом для стимуляции выработки коллагена и эластичности.
ПОСЛЕ НАГРУЗКИ

Перезагрузка после активного дня (Кроссфит / Единоборства)

Быстрый перевод организма из режима максимального стресса (симпатическая нервная система) в режим глубокого отдыха (парасимпатика). Снижение общего воспалительного тонуса мышц, нормализация пульса и подготовка к комфортному ночному сну.

Процедуры и связки: ЭкзоТерапия + ЭкзоПресс
Стимуляция нервных окончаний для снятия осевой нагрузки с позвоночника + лимфодренажный массаж всего тела.
ВОЗВРАТ В СПОРТ

Безопасный возврат к тренировкам (После травм и пауз)

Мягкая и безопасная реабилитация внутри фитнес-клуба. Ускорение заживления растяжений, точечное снятие хронических воспалений в сухожилиях, восстановление мышечного тонуса и координации движений в пространстве (проприоцепции).

Процедуры и связки: Комбинация по протоколу: ЭкзоЛазер B + ЭкзоИмпульс
Локальная фотобиомодуляция для регенерации связок + глубокая электромагнитная стимуляция для пробуждения атрофированных мышц.
СТРЕСС И ПЕРЕЗАГРУЗКА

День восстановления (Фитнес без тренировки)

Сценарий посещения клуба без физических нагрузок. Полная релаксация, ликвидация умственного выгорания, синдрома хронической усталости и головных болей напряжения. Возвращение телесного комфорта и легкости за один сеанс.

Процедуры и связки: ЭкзоВодород + ЭкзоПресс
Ингаляции чистым водородом для снижения уровня стресса на клеточном уровне + мягкий релакс-массаж ног и тела.
+
Корректная коммуникация: не обещаем «сжигание жира», рост мышц от аппарата, лечение травмы без специалиста или гарантированный спортивный результат. В медицинском формате используются допуск, назначение, протокол и проверка противопоказаний.
+
+
+
+
+
+Визуальная концепция +

Recovery должен выглядеть частью фитнеса, а не «медицинским углом»

+

Используем готовые рендеры как отправную точку и создаём визуализацию под интерьер, площадь и выбранный конструктор вашего клуба.

+
+ + +
+
+ +
+
+
+Почему Экзо Групп +

Вы входите в готовую экосистему, где каждый бизнес-процесс уже автоматизирован.

+

Собственное производство, планировка пространства, меню готовых программ, обучение команды. Все это работает на окупаемость вашего клуба с первого дня.

+
+
4собственные клиники
+
70+клиник-партнёров
+
60+медицинских учреждений
+
2 млн+проведённых процедур
+
+
+
Оборудованиеподбор и поставка
+
Пространствопланировка и дизайн
+
Программыметодики и курсы
+
Обучениеоператоры и продажи
+
АналитикаKPI и повторные визиты
+
Масштабтиповой формат для сети
+
+
+ +
+
+
+
+
+
+
+ Персональная конфигурация +

Подберем индивидуальный комплект оборудования точно под формат вашего клуба.

+

Оставьте контакты — проведём первичный аудит потока и площади, предложим состав оборудования, формат размещения и визуальную концепцию.

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

Получить консультацию

+

Выбранный в конструкторе состав автоматически добавится в заявку.

+
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+ +
Получить консультацию
+ + + + + + + \ No newline at end of file diff --git a/fitnes/legacy/Fitnes v2/script.js b/fitnes/legacy/Fitnes v2/script.js new file mode 100644 index 0000000..c4275d5 --- /dev/null +++ b/fitnes/legacy/Fitnes v2/script.js @@ -0,0 +1,161 @@ +const FORM_ENDPOINT = '/api/leads/fitness-centers'; + const devices = { + therapy: {name:'ЭкзоТерапия', role:'флагманский full-body recovery и premium-продукт', benefits:['заметный якорь зоны','восстановительный этап после нагрузки','повышает технологичность сервиса']}, + magnet: {name:'ЭкзоМагнит 3 в 1', role:'medical-core для нейромышечных и опорно-двигательных маршрутов', benefits:['магнит + УВТ + инфракрасный модуль','работа по медицинскому протоколу','ядро для спортивной медицины']}, + tecar: {name:'ЭкзоТекар 3 в 1', role:'активная локальная работа с тканями, фасциями и подвижностью', benefits:['TECAR + УВТ + ультразвук','инструмент специалиста','сильная связь с PT и return-to-sport']}, + press: {name:'ЭкзоПресс', role:'потоковый recovery для ног после бега, leg day и нагрузки', benefits:['компрессия + тепло / холод','понятный сервис для массового спроса','легко включается в пакеты']}, + hydrogen: {name:'ЭкзоВодород', role:'автономная lounge-процедура для recovery и recharge', benefits:['спокойный формат в кресле','минимальное участие оператора','отдельная причина прийти в recovery-day']} + }; + const presets = { + recovery: {ids:['therapy','press','hydrogen'], title:'Recovery Start', subtitle:'Компактный вход в recovery с флагманской, потоковой и автономной процедурой.'}, + sport: {ids:['magnet','tecar','press'], title:'Sport Core', subtitle:'Активное ядро для клуба с сильным PT, беговым, силовым или спортивным направлением.'}, + premium: {ids:['therapy','tecar','hydrogen'], title:'Premium Mix', subtitle:'Статусная конфигурация с индивидуальной процедурой, флагманским recovery и lounge-сценарием.'} + }; + let mode = 3; + let selected = new Set(presets.recovery.ids); + let currentPreset = 'recovery'; + const threeImage = "assets/asset_09_cfa0f6440fb6.webp"; + const fiveImage = "assets/asset_14_c3b984d644de.webp"; + const cards = [...document.querySelectorAll('.device-card')]; + const modeButtons = [...document.querySelectorAll('.mode-btn')]; + const presetButtons = [...document.querySelectorAll('.preset-btn')]; + + function configString() { return [...selected].map(id => devices[id].name).join(', '); } + function uniqueBenefits(ids) { + const items = []; + ids.forEach(id => devices[id].benefits.forEach(x => { if(!items.includes(x)) items.push(x); })); + return items.slice(0,4); + } + function updateConstructor() { + const ids = [...selected]; + cards.forEach(card => { + const active = selected.has(card.dataset.device); + card.classList.toggle('selected',active); + card.classList.toggle('locked',mode===5); + card.setAttribute('aria-pressed',String(active)); + }); + modeButtons.forEach(btn => btn.classList.toggle('active',Number(btn.dataset.mode)===mode)); + document.getElementById('selectedCount').textContent=ids.length; + document.getElementById('modeCount').textContent=mode; + document.getElementById('pickerHint').textContent = mode===5 ? 'Полная линейка выбрана' : (ids.length===3 ? 'Конфигурация собрана' : `Выберите ещё ${3-ids.length}`); + document.getElementById('presetRow').style.display = mode===3 ? 'flex':'none'; + presetButtons.forEach(btn=>btn.classList.toggle('active',btn.dataset.preset===currentPreset && mode===3)); + const image = document.getElementById('configImage'); + image.style.opacity='0'; + setTimeout(()=>{ image.src=mode===5?fiveImage:threeImage; image.alt=mode===5?'Полная зона восстановления с пятью аппаратами':'Пример зоны восстановления с тремя аппаратами'; image.style.opacity='1'; },180); + document.getElementById('configTag').textContent=mode===5?'Полная EXO-платформа':'Конструктор на 3 аппарата'; + document.getElementById('configNumber').textContent=mode===5?'05':String(ids.length).padStart(2,'0'); + const exactPreset = Object.entries(presets).find(([_,p])=>p.ids.length===ids.length && p.ids.every(id=>selected.has(id))); + const incomplete = mode===3 && ids.length<3; + const title = mode===5 ? 'Полная зона — 5 аппаратов' : (incomplete ? `Выбрано ${ids.length} из 3 аппаратов` : (exactPreset ? `${exactPreset[1].title} — 3 аппарата` : 'Персональный микс — 3 аппарата')); + const subtitle = mode===5 ? 'Полный маршрут: active medical-core, premium recovery, потоковые и автономные процедуры.' : (incomplete ? 'Можно продолжить подбор или получить консультацию — специалист поможет собрать оптимальную конфигурацию.' : (exactPreset ? exactPreset[1].subtitle : 'Состав собран под выбранные вами приоритеты. Итоговая логика уточняется после аудита клуба.')); + document.getElementById('configTitle').textContent=title; + document.getElementById('configSubtitle').textContent=subtitle; + document.getElementById('selectedList').innerHTML=ids.map(id=>`${devices[id].name}`).join(''); + document.getElementById('configBenefits').innerHTML=uniqueBenefits(ids).map(x=>`
${x}
`).join(''); + document.getElementById('configurationInput').value=ids.length ? `${ids.length} аппарата: ${configString()}` : 'Конфигурация не выбрана — нужна консультация'; + const cta=document.getElementById('configCta'); + cta.style.opacity='1';cta.style.pointerEvents='auto'; + } + cards.forEach(card=>card.addEventListener('click',()=>{ + if(mode===5) return; + const id=card.dataset.device; + currentPreset=''; + if(selected.has(id)) selected.delete(id); + else { if(selected.size>=3) selected.delete([...selected][0]); selected.add(id); } + updateConstructor(); + })); + modeButtons.forEach(btn=>btn.addEventListener('click',()=>{ + mode=Number(btn.dataset.mode); + if(mode===5){ selected=new Set(Object.keys(devices)); currentPreset=''; } + else { selected=new Set(presets.recovery.ids); currentPreset='recovery'; } + updateConstructor(); + })); + presetButtons.forEach(btn=>btn.addEventListener('click',()=>{ + mode=3;currentPreset=btn.dataset.preset;selected=new Set(presets[currentPreset].ids);updateConstructor(); + })); + document.getElementById('resetConfig').addEventListener('click',()=>{mode=3;currentPreset='recovery';selected=new Set(presets.recovery.ids);updateConstructor();}); + document.getElementById('configCta').addEventListener('click',()=>{const picked=configString();document.getElementById('comment').value=picked?`Интересует конфигурация: ${selected.size} аппарата — ${picked}`:'Нужна консультация по подбору конфигурации Recovery Zone';}); + updateConstructor(); + + const header=document.getElementById('header'); + const mobileCta=document.getElementById('mobileCta'); + function onScroll(){header.classList.toggle('scrolled',scrollY>35);mobileCta.classList.toggle('show',scrollY>window.innerHeight*.75 && scrollYentries.forEach(entry=>{if(entry.isIntersecting){entry.target.classList.add('is-visible');observer.unobserve(entry.target)}}),{threshold:.12}); + document.querySelectorAll('.reveal,.market-panel').forEach(el=>observer.observe(el)); + + const modal=document.getElementById('imageModal'), modalImg=document.getElementById('modalImage'); + document.querySelectorAll('.gallery-card').forEach(card=>card.addEventListener('click',()=>{modalImg.src=card.dataset.full;modal.classList.add('open');document.body.classList.add('locked')})); + function closeModal(){modal.classList.remove('open');document.body.classList.remove('locked')} + modal.querySelector('.modal-close').addEventListener('click',closeModal);modal.addEventListener('click',e=>{if(e.target===modal)closeModal()});addEventListener('keydown',e=>{if(e.key==='Escape')closeModal()}); + + function collectUtm(){const p=new URLSearchParams(location.search),o={};['utm_source','utm_medium','utm_campaign','utm_content','utm_term'].forEach(k=>{if(p.get(k))o[k]=p.get(k)});return o} + async function handleLead(event){ + event.preventDefault(); + const form=event.currentTarget,status=document.getElementById('formStatus'),btn=document.getElementById('submitBtn'); + if(!form.checkValidity()){form.reportValidity();status.textContent='Проверьте обязательные поля и согласие.';return false} + if(form.website.value) return false; + const payload=Object.fromEntries(new FormData(form).entries());Object.assign(payload,collectUtm(),{page:'/fitness',created_at:new Date().toISOString()}); + btn.disabled=true;btn.textContent='Отправляем…';status.textContent=''; + try{ + const res=await fetch(FORM_ENDPOINT,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); + if(!res.ok)throw new Error('HTTP '+res.status); + status.textContent='Спасибо. Заявка отправлена — специалист свяжется с вами.';status.style.color='#087F73';form.reset();updateConstructor(); + window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:'fitness_lead_sent',configuration:payload.configuration}); + }catch(error){ + localStorage.setItem('exo_fitness_lead_draft',JSON.stringify(payload)); + status.textContent='Не удалось отправить форму автоматически. Данные сохранены в браузере — свяжитесь с нами по +7 939 717-80-80.';status.style.color='#A14D12'; + console.warn('Lead endpoint error',error,payload); + }finally{btn.disabled=false;btn.textContent='Получить консультацию →';} + return false; + } + window.handleLead=handleLead; + +(function(){ + const money = new Intl.NumberFormat('ru-RU',{maximumFractionDigits:0}); + const val = (root, selector) => { + const el=root.querySelector(selector); if(!el) return 0; + return Number(String(el.value||'').replace(/\s/g,'').replace(',','.'))||0; + }; + document.querySelectorAll('[data-econ-calc]').forEach(root=>{ + const type=root.getAttribute('data-econ-calc'); + const update=()=>{ + let month=0, volume=0, ready=false; + if(type==='hotel'){ + const programs=val(root,'#hotelPrograms'), check=val(root,'#hotelCheck'), days=val(root,'#hotelDays'); + ready=programs>0&&check>0&&days>0; volume=programs*days; month=volume*check; + }else{ + const programs=val(root,'#fitPrograms'), check=val(root,'#fitCheck'), days=val(root,'#fitDays'); + ready=programs>0&&check>0&&days>0; volume=programs*days; month=volume*check; + } + const monthEl=root.querySelector('[data-econ-month]'), yearEl=root.querySelector('[data-econ-year]'), volumeEl=root.querySelector('[data-econ-volume]'); + const paybackEl=root.querySelector('[data-econ-payback]'), roiEl=root.querySelector('[data-econ-roi]'); + if(!ready){ + if(monthEl) monthEl.textContent='—'; + if(yearEl) yearEl.textContent='—'; + if(volumeEl) volumeEl.textContent=type==='hotel'?'Введите программы и средний чек':'Введите программы в день и средний чек'; + if(paybackEl) paybackEl.textContent='—'; + if(roiEl) roiEl.textContent='—'; + return; + } + if(monthEl) monthEl.textContent=money.format(month)+' ₽'; + if(yearEl) yearEl.textContent=money.format(month*12)+' ₽'; + if(volumeEl) volumeEl.textContent=type==='hotel'?money.format(volume)+' программ в месяц':money.format(val(root,'#fitPrograms'))+' × '+money.format(val(root,'#fitDays'))+' = '+money.format(volume)+' программ в месяц'; + if(type==='fitness' && paybackEl && roiEl){ + const investment=val(root,'#fitInvestment'); + if(investment>0 && month>0){ + const payback=investment/month; + const roi=((month*12-investment)/investment)*100; + paybackEl.textContent=(Math.round(payback*10)/10).toLocaleString('ru-RU')+' мес.'; + roiEl.textContent=Math.round(roi).toLocaleString('ru-RU')+'%'; + }else{ + paybackEl.textContent='Укажите инвестиции'; + roiEl.textContent='Укажите инвестиции'; + } + } + }; + root.querySelectorAll('input').forEach(input=>input.addEventListener('input',update)); update(); + }); +})(); diff --git a/fitnes/legacy/Fitnes v2/styles.css b/fitnes/legacy/Fitnes v2/styles.css new file mode 100644 index 0000000..e9f93af --- /dev/null +++ b/fitnes/legacy/Fitnes v2/styles.css @@ -0,0 +1,438 @@ +:root { + --navy:#0A2540; + --navy-2:#061B2F; + --navy-3:#0E3352; + --navy-4:#123C5B; + --teal:#00C4B4; + --teal-2:#3BE4D6; + --teal-pale:#DDFBF7; + --orange:#FF7A1A; + --white:#FFFFFF; + --paper:#F4F8FA; + --paper-2:#EAF2F5; + --ink:#0A2540; + --muted:#61798B; + --muted-dark:#A9BFCC; + --line:rgba(10,37,64,.12); + --line-dark:rgba(255,255,255,.13); + --shadow:0 30px 90px rgba(4,28,46,.16); + --shadow-soft:0 16px 50px rgba(4,28,46,.10); + --radius-xl:34px; + --radius-lg:26px; + --radius-md:19px; + --container:1200px; + --section-y:clamp(70px,8vw,110px); + } + *{box-sizing:border-box} + html{scroll-behavior:smooth;scroll-padding-top:90px} + body{margin:0;font-family:Inter,Manrope,"Segoe UI",Arial,sans-serif;color:var(--ink);background:var(--paper);line-height:1.5;-webkit-font-smoothing:antialiased} + body.locked{overflow:hidden} + img{display:block;max-width:100%} + button,input,textarea,select{font:inherit} + button,a{-webkit-tap-highlight-color:transparent} + a{color:inherit;text-decoration:none} + h1,h2,h3,p{margin-top:0} + h1,h2,h3{letter-spacing:-.035em} + .container{width:min(calc(100% - 36px),var(--container));margin-inline:auto} + .section{padding:var(--section-y) 0;position:relative} + .section--dark{background:var(--navy-2);color:#fff} + .section--navy{background:var(--navy);color:#fff} + .section--white{background:#fff} + .eyebrow{display:inline-flex;align-items:center;gap:9px;text-transform:uppercase;letter-spacing:.13em;font-size:12px;font-weight:800;color:var(--teal);margin-bottom:18px} + .eyebrow::before{content:"";width:23px;height:2px;background:currentColor;border-radius:3px} + .section-title{font-size:clamp(34px,5vw,62px);line-height:1.01;margin-bottom:18px;max-width:920px} + .section-lead{font-size:clamp(17px,2vw,21px);line-height:1.55;color:var(--muted);max-width:760px;margin-bottom:0} + .section--dark .section-lead,.section--navy .section-lead{color:var(--muted-dark)} + .section-head{display:flex;flex-direction:column;gap:8px;margin-bottom:clamp(34px,5vw,58px)} + .label{display:inline-flex;align-items:center;gap:8px;padding:9px 13px;border:1px solid rgba(0,196,180,.35);border-radius:999px;background:rgba(0,196,180,.08);color:var(--teal-2);font-size:12px;font-weight:800;letter-spacing:.07em;text-transform:uppercase} + .label-dot{width:7px;height:7px;border-radius:50%;background:var(--teal);box-shadow:0 0 16px rgba(0,196,180,.75)} + .btn{min-height:54px;border-radius:999px;padding:0 22px;display:inline-flex;align-items:center;justify-content:center;gap:10px;font-weight:800;border:1px solid transparent;cursor:pointer;transition:transform .25s ease,box-shadow .25s ease,background .25s ease,color .25s ease,border-color .25s ease} + .btn svg{width:19px;height:19px;flex:0 0 auto} + .btn:hover{transform:translateY(-2px)} + .btn--primary{background:var(--teal);color:var(--navy-2);box-shadow:0 12px 34px rgba(0,196,180,.25)} + .btn--primary:hover{background:var(--teal-2);box-shadow:0 16px 40px rgba(0,196,180,.34)} + .btn--ghost{border-color:rgba(255,255,255,.26);color:#fff;background:rgba(255,255,255,.06);backdrop-filter:blur(12px)} + .btn--ghost:hover{border-color:rgba(255,255,255,.55);background:rgba(255,255,255,.11)} + .btn--outline{border-color:rgba(10,37,64,.2);color:var(--navy);background:#fff} + .btn--outline:hover{border-color:var(--teal)} + .reveal{opacity:0;transform:translateY(24px);transition:opacity .75s ease,transform .75s ease} + .reveal.is-visible{opacity:1;transform:none} + + /* Header */ + .site-header{position:fixed;z-index:50;top:0;left:0;right:0;padding:13px 0;transition:background .3s ease,box-shadow .3s ease,backdrop-filter .3s ease} + .site-header.scrolled{background:rgba(6,27,47,.88);backdrop-filter:blur(16px);box-shadow:0 10px 35px rgba(0,0,0,.15)} + .header-inner{display:flex;align-items:center;justify-content:space-between;gap:18px} + .brand{display:flex;align-items:center;gap:11px;color:#fff;min-width:max-content} + .brand-mark{width:38px;height:38px;border:2px solid #fff;border-radius:9px;display:grid;place-items:center;position:relative} + .brand-mark::before{content:"";width:18px;height:18px;border:3px solid var(--teal);border-left-color:transparent;border-radius:50%} + .brand-text strong{display:block;font-size:15px;letter-spacing:.04em;line-height:1.05} + .brand-text span{display:block;font-size:8px;opacity:.72;line-height:1.2;margin-top:3px} + .nav{display:none;gap:24px;color:rgba(255,255,255,.82);font-size:13px;font-weight:700} + .nav a:hover{color:var(--teal)} + .header-cta{min-height:42px;padding:0 16px;font-size:13px;white-space:nowrap} + + /* Hero */ + .hero{min-height:min(900px,100svh);padding:128px 0 42px;display:flex;align-items:flex-end;position:relative;isolation:isolate;color:#fff;overflow:hidden;background:var(--navy-2)} + .hero::before{content:"";position:absolute;inset:0;z-index:-3;background-image:url("assets/asset_02_cbf145cf201b.webp");background-size:cover;background-position:54% center;transform:scale(1.025)} + .hero::after{content:"";position:absolute;inset:0;z-index:-2;background:linear-gradient(180deg,rgba(3,20,34,.36),rgba(3,20,34,.20) 33%,rgba(3,20,34,.92) 100%),linear-gradient(90deg,rgba(3,20,34,.94) 0%,rgba(3,20,34,.75) 48%,rgba(3,20,34,.10) 100%)} + .hero-glow{position:absolute;z-index:-1;width:520px;height:520px;right:-210px;bottom:-220px;border-radius:50%;background:rgba(0,196,180,.42);filter:blur(115px)} + .hero-grid{display:grid;gap:34px;align-items:end} + .hero-copy{max-width:820px} + .hero h1{font-size:clamp(46px,7.1vw,86px);line-height:.94;margin:18px 0 24px;text-wrap:balance} + .hero h1 span{color:var(--teal-2)} + .hero-lead{max-width:700px;font-size:clamp(18px,2vw,23px);line-height:1.5;color:#D9E7EE;margin-bottom:30px} + .hero-actions{display:flex;gap:12px;flex-wrap:wrap} + .hero-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:34px;max-width:790px} + .hero-fact{padding:16px;border-radius:18px;border:1px solid rgba(255,255,255,.17);background:rgba(6,27,47,.55);backdrop-filter:blur(14px)} + .hero-fact strong{font-size:19px;display:block;color:#fff} + .hero-fact span{font-size:12px;color:#B9CBD6} + .hero-card{display:none;padding:23px;border:1px solid rgba(255,255,255,.17);border-radius:28px;background:rgba(6,27,47,.64);backdrop-filter:blur(18px);box-shadow:0 24px 70px rgba(0,0,0,.22)} + .hero-card__title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px} + .hero-card__title strong{font-size:18px} + .hero-card__steps{display:grid;gap:11px} + .hero-card__step{display:grid;grid-template-columns:31px 1fr;gap:11px;align-items:start} + .hero-card__step b{width:31px;height:31px;display:grid;place-items:center;border-radius:50%;background:rgba(0,196,180,.14);color:var(--teal);font-size:12px} + .hero-card__step span{font-size:13px;color:#CBD9E2;padding-top:5px} + .hero-scroll{margin-top:32px;display:inline-flex;align-items:center;gap:10px;color:rgba(255,255,255,.64);font-size:12px;font-weight:700} + .hero-scroll i{width:24px;height:36px;border:1px solid rgba(255,255,255,.35);border-radius:14px;position:relative} + .hero-scroll i::before{content:"";position:absolute;left:50%;top:8px;width:3px;height:7px;background:var(--teal);border-radius:3px;transform:translateX(-50%);animation:scrollDot 1.8s infinite} + @keyframes scrollDot{0%,100%{opacity:.2;transform:translate(-50%,0)}50%{opacity:1;transform:translate(-50%,9px)}} + + /* Market */ + .market-layout{display:grid;gap:26px} + .market-panel{border-radius:var(--radius-xl);background:#fff;box-shadow:var(--shadow-soft);border:1px solid var(--line);padding:clamp(22px,4vw,40px);overflow:hidden} + .market-panel--dark{background:var(--navy);color:#fff;border-color:transparent} + .market-chart{height:300px;display:grid;grid-template-columns:repeat(3,1fr);align-items:end;gap:14px;padding:30px 0 0;position:relative} + .market-chart::before,.market-chart::after{content:"";position:absolute;left:0;right:0;height:1px;background:rgba(10,37,64,.09)} + .market-chart::before{top:33%}.market-chart::after{top:66%} + .market-bar{height:var(--h);min-height:65px;border-radius:18px 18px 6px 6px;background:linear-gradient(180deg,var(--teal-2),var(--teal));position:relative;transform-origin:bottom;transform:scaleY(.1);opacity:.35;transition:transform 1s cubic-bezier(.2,.8,.2,1),opacity .8s} + .market-panel.is-visible .market-bar{transform:scaleY(1);opacity:1} + .market-bar:nth-child(2){background:linear-gradient(180deg,#62D4EC,#189BC4)} + .market-bar:nth-child(3){background:linear-gradient(180deg,#FFB16C,var(--orange))} + .market-bar__value{position:absolute;left:50%;top:-43px;transform:translateX(-50%);white-space:nowrap;font-size:clamp(19px,2.3vw,28px);font-weight:900;color:var(--navy)} + .market-bar__year{position:absolute;left:50%;bottom:-31px;transform:translateX(-50%);font-weight:800;font-size:13px;color:var(--muted);white-space:nowrap} + .market-bar__growth{position:absolute;left:50%;top:12px;transform:translateX(-50%);padding:6px 8px;border-radius:999px;background:rgba(255,255,255,.82);font-size:11px;font-weight:900;color:var(--navy);white-space:nowrap} + .market-note{margin-top:54px;display:flex;justify-content:space-between;gap:12px;align-items:center;color:var(--muted);font-size:12px} + .market-insights{display:grid;gap:13px;margin-top:21px} + .market-insight{display:grid;grid-template-columns:45px 1fr;gap:14px;align-items:start;padding:17px;border-radius:18px;background:rgba(255,255,255,.075);border:1px solid rgba(255,255,255,.1)} + .market-insight__num{width:45px;height:45px;display:grid;place-items:center;border-radius:14px;background:rgba(0,196,180,.14);color:var(--teal);font-size:14px;font-weight:900} + .market-insight strong{display:block;font-size:16px;margin:1px 0 4px} + .market-insight p{margin:0;color:#B6C8D4;font-size:13px} + .source-note{font-size:11px;color:var(--muted);margin-top:18px;line-height:1.5} + .source-note a{text-decoration:underline;text-underline-offset:3px} + + /* Benefits */ + .benefit-grid{display:grid;gap:14px} + .benefit-card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:24px;box-shadow:0 12px 34px rgba(4,28,46,.05);transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease} + .benefit-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-soft);border-color:rgba(0,196,180,.42)} + .benefit-index{font-size:12px;color:var(--teal);font-weight:900;letter-spacing:.1em;margin-bottom:26px} + .benefit-card h3{font-size:23px;margin-bottom:10px} + .benefit-card p{color:var(--muted);font-size:14px;margin-bottom:0} + + /* Constructor */ + .constructor-shell{border-radius:38px;background:linear-gradient(145deg,#0A2540,#061B2F);box-shadow:var(--shadow);overflow:hidden;border:1px solid rgba(255,255,255,.08)} + .constructor-top{padding:clamp(24px,5vw,46px);border-bottom:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:24px} + .mode-switch{display:grid;grid-template-columns:1fr 1fr;padding:5px;border-radius:999px;background:rgba(255,255,255,.08);max-width:430px} + .mode-btn{border:0;background:transparent;color:#AFC4D0;border-radius:999px;min-height:46px;font-weight:900;cursor:pointer;transition:.25s} + .mode-btn.active{background:var(--teal);color:var(--navy-2);box-shadow:0 8px 25px rgba(0,196,180,.22)} + .constructor-body{display:grid} + .device-picker{padding:clamp(22px,4vw,40px);border-bottom:1px solid rgba(255,255,255,.1)} + .picker-head{display:flex;justify-content:space-between;gap:14px;align-items:end;margin-bottom:21px} + .picker-head h3{font-size:clamp(25px,3vw,36px);margin-bottom:4px;color:#fff} + .picker-head p{font-size:13px;color:#AFC4D0;margin:0} + .selection-count{white-space:nowrap;font-size:12px;color:#BFD3DE;padding:8px 11px;border-radius:999px;border:1px solid rgba(255,255,255,.15)} + .selection-count strong{color:var(--teal)} + .device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px} + .device-card{position:relative;min-height:170px;border:1px solid rgba(255,255,255,.11);border-radius:20px;background:rgba(255,255,255,.055);color:#fff;padding:13px;text-align:left;cursor:pointer;overflow:hidden;transition:transform .25s ease,border-color .25s ease,background .25s ease} + .device-card:hover{transform:translateY(-3px);border-color:rgba(0,196,180,.45)} + .device-card.selected{background:rgba(0,196,180,.13);border-color:var(--teal);box-shadow:inset 0 0 0 1px rgba(0,196,180,.2)} + .device-card.locked{cursor:default} + .device-card__check{position:absolute;top:11px;right:11px;width:25px;height:25px;border-radius:50%;border:1px solid rgba(255,255,255,.3);display:grid;place-items:center;color:transparent;background:rgba(6,27,47,.55);z-index:2} + .device-card__check svg{width:15px;height:15px} + .device-card.selected .device-card__check{background:var(--teal);border-color:var(--teal);color:var(--navy)} + .device-card img{height:84px;width:100%;object-fit:contain;filter:drop-shadow(0 12px 20px rgba(0,0,0,.24));margin-bottom:5px} + .device-card strong{display:block;font-size:14px;line-height:1.2} + .device-card small{display:block;color:#9DB4C1;font-size:10px;margin-top:4px;line-height:1.3} + .device-card__indications{display:block;margin-top:5px;color:#69E7DB;font-size:9px;line-height:1.35;font-weight:700} + .preset-row{display:flex;gap:8px;overflow:auto;padding-top:18px;scrollbar-width:none} + .preset-row::-webkit-scrollbar{display:none} + .preset-btn{flex:0 0 auto;border:1px solid rgba(255,255,255,.15);background:transparent;color:#BFD1DB;padding:9px 12px;border-radius:999px;font-size:11px;font-weight:800;cursor:pointer} + .preset-btn:hover,.preset-btn.active{border-color:var(--teal);color:var(--teal)} + .config-preview{padding:clamp(22px,4vw,40px);background:#fff;display:flex;flex-direction:column} + .config-render{height:clamp(230px,35vw,420px);border-radius:25px;overflow:hidden;position:relative;background:var(--navy);margin-bottom:24px} + .config-render img{width:100%;height:100%;object-fit:cover;transition:opacity .35s ease,transform .7s ease} + .config-render:hover img{transform:scale(1.025)} + .config-render__tag{position:absolute;left:14px;top:14px;padding:9px 12px;border-radius:999px;background:rgba(6,27,47,.84);backdrop-filter:blur(12px);color:#fff;font-size:11px;font-weight:900} + .config-render__note{position:absolute;right:14px;bottom:14px;max-width:230px;padding:10px 12px;border-radius:14px;background:rgba(255,255,255,.88);backdrop-filter:blur(12px);color:var(--navy);font-size:10px;line-height:1.35} + .config-title{display:flex;justify-content:space-between;gap:15px;align-items:start} + .config-title h3{font-size:clamp(27px,3.5vw,42px);margin-bottom:8px} + .config-title p{color:var(--muted);font-size:14px;margin-bottom:0} + .config-number{font-size:54px;line-height:.8;font-weight:950;color:rgba(10,37,64,.08)} + .selected-list{display:flex;flex-wrap:wrap;gap:8px;margin:22px 0} + .selected-pill{padding:9px 12px;border-radius:999px;background:var(--teal-pale);color:var(--navy);font-size:12px;font-weight:800} + .config-benefits{display:grid;gap:9px;margin-bottom:24px} + .config-benefit{display:grid;grid-template-columns:25px 1fr;gap:9px;color:var(--muted);font-size:13px} + .config-benefit i{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:rgba(0,196,180,.12);color:var(--teal)} + .config-benefit svg{width:13px;height:13px} + .config-actions{margin-top:auto;display:flex;gap:10px;flex-wrap:wrap} + + /* Programs */ + .program-strip{display:flex;gap:13px;overflow:auto;padding:3px 1px 18px;scroll-snap-type:x mandatory;scrollbar-width:none} + .program-strip::-webkit-scrollbar{display:none} + .program-card{flex:0 0 min(83vw,330px);scroll-snap-align:start;background:#fff;border:1px solid var(--line);border-radius:23px;padding:22px;min-height:215px} + .program-card__tag{display:inline-flex;padding:7px 10px;border-radius:999px;background:var(--teal-pale);color:var(--navy);font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;margin-bottom:22px} + .program-card h3{font-size:22px;margin-bottom:9px} + .program-card p{font-size:13px;color:var(--muted);margin-bottom:18px} + .program-devices{font-size:12px;font-weight:800;color:var(--navy);padding-top:15px;border-top:1px solid var(--line)} + .program-disclaimer{padding:16px 18px;border-radius:18px;background:rgba(10,37,64,.05);color:var(--muted);font-size:12px;margin-top:12px} + + /* Gallery */ + .gallery-grid{display:flex;gap:14px;overflow:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding-bottom:18px} + .gallery-grid::-webkit-scrollbar{display:none} + .gallery-card{flex:0 0 min(88vw,520px);scroll-snap-align:start;border-radius:28px;overflow:hidden;background:#fff;color:var(--ink);position:relative;cursor:zoom-in;box-shadow:0 16px 50px rgba(0,0,0,.18)} + .gallery-image{height:300px;overflow:hidden} + .gallery-image img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease} + .gallery-card:hover .gallery-image img{transform:scale(1.035)} + .gallery-copy{padding:20px 21px 22px} + .gallery-copy h3{font-size:21px;margin-bottom:7px} + .gallery-copy p{font-size:13px;color:var(--muted);margin:0} + .gallery-badge{position:absolute;left:14px;top:14px;padding:8px 11px;border-radius:999px;background:rgba(6,27,47,.82);color:#fff;font-size:10px;font-weight:900;backdrop-filter:blur(12px)} + .gallery-hint{display:flex;align-items:center;gap:8px;color:#AEC0CC;font-size:12px;margin-top:10px} + .gallery-hint span{width:31px;height:1px;background:var(--teal)} + + /* Journey & launch */ + .launch-layout{display:grid;gap:22px} + .journey-card,.launch-card{border-radius:var(--radius-xl);padding:clamp(24px,4vw,40px)} + .journey-card{background:var(--navy);color:#fff} + .launch-card{background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-soft)} + .journey-card h3,.launch-card h3{font-size:clamp(27px,3vw,38px);margin-bottom:7px} + .journey-card>p{color:#AFC4D0;font-size:14px} + .journey-steps{display:grid;gap:8px;margin-top:25px} + .journey-step{display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:13px;border-radius:17px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08)} + .journey-step b{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:rgba(0,196,180,.14);color:var(--teal);font-size:12px} + .journey-step strong{font-size:14px} + .journey-step span{display:none;font-size:11px;color:#AFC4D0} + .journey-step em{font-style:normal;color:var(--teal);font-size:17px} + .timeline{display:grid;gap:15px;margin-top:26px} + .timeline-item{display:grid;grid-template-columns:52px 1fr;gap:14px;position:relative} + .timeline-item:not(:last-child)::after{content:"";position:absolute;left:25px;top:50px;bottom:-18px;width:1px;background:rgba(0,196,180,.3)} + .timeline-day{width:52px;height:52px;border-radius:17px;background:var(--teal-pale);color:var(--navy);display:grid;place-items:center;text-align:center;font-size:10px;font-weight:900;line-height:1.05} + .timeline-copy{padding-top:4px} + .timeline-copy strong{font-size:15px} + .timeline-copy p{font-size:12px;color:var(--muted);margin:4px 0 0} + .pilot-kpis{display:flex;gap:8px;flex-wrap:wrap;margin-top:23px} + .pilot-kpis span{font-size:10px;font-weight:800;padding:8px 10px;border-radius:999px;background:rgba(10,37,64,.06);color:var(--navy)} + + /* Why EXO */ + .proof-layout{display:grid;gap:28px;align-items:center} + .proof-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px} + .proof-stat{border-radius:20px;padding:19px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1)} + .proof-stat strong{font-size:clamp(27px,4vw,44px);color:var(--teal);display:block;line-height:1} + .proof-stat span{font-size:11px;color:#AFC4D0} + .ecosystem-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:22px} + .ecosystem-item{padding:15px;border-radius:17px;background:rgba(255,255,255,.06);font-size:12px;color:#C6D5DE} + .ecosystem-item b{display:block;color:#fff;margin-bottom:4px} + .legal-box{border-radius:28px;background:#fff;color:var(--ink);padding:clamp(23px,4vw,36px)} + .legal-box h3{font-size:27px;margin-bottom:12px} + .legal-intro{font-size:13px;line-height:1.55;color:var(--muted);margin:0 0 18px} + .legal-option{padding:16px 0;border-top:1px solid var(--line)} + .legal-option:first-of-type{border-top:0;padding-top:0} + .legal-option strong{display:flex;align-items:center;gap:9px;font-size:15px} + .legal-option strong i{width:9px;height:9px;border-radius:50%;background:var(--teal)} + .legal-option p{font-size:12px;color:var(--muted);margin:7px 0 0} + + /* CTA */ + .cta-wrap{border-radius:38px;overflow:hidden;background:linear-gradient(135deg,#0A2540,#061B2F);color:#fff;box-shadow:var(--shadow);position:relative;isolation:isolate} + .cta-wrap::before{content:"";position:absolute;width:470px;height:470px;border-radius:50%;background:rgba(0,196,180,.28);filter:blur(95px);right:-180px;top:-190px;z-index:-1} + .cta-grid{display:grid} + .cta-copy{padding:clamp(28px,5vw,58px)} + .cta-copy h2{font-size:clamp(22px,2.7vw,36px);line-height:1.12;margin-bottom:20px;max-width:680px} + .cta-copy p{color:#B6C9D4;max-width:610px;font-size:16px} + .cta-list{display:grid;gap:10px;margin-top:27px} + .cta-list div{display:grid;grid-template-columns:24px 1fr;gap:9px;align-items:center;color:#D7E4EB;font-size:13px} + .cta-list i{width:23px;height:23px;border-radius:50%;display:grid;place-items:center;background:rgba(0,196,180,.15);color:var(--teal)} + .cta-list svg{width:13px;height:13px} + .lead-form{background:#fff;color:var(--ink);padding:clamp(24px,4vw,42px)} + .lead-form h3{font-size:28px;margin-bottom:8px} + .lead-form>p{color:var(--muted);font-size:13px;margin-bottom:23px} + .form-grid{display:grid;gap:12px} + .field{display:flex;flex-direction:column;gap:7px} + .field label{font-size:11px;font-weight:800;color:var(--muted)} + .field input,.field textarea,.field select{width:100%;border:1px solid rgba(10,37,64,.15);border-radius:15px;background:#F7FAFB;color:var(--ink);outline:none;padding:14px 15px;transition:border-color .2s,box-shadow .2s,background .2s} + .field input,.field select{height:51px} + .field textarea{min-height:93px;resize:vertical} + .field input:focus,.field textarea:focus,.field select:focus{border-color:var(--teal);background:#fff;box-shadow:0 0 0 4px rgba(0,196,180,.10)} + .field--full{grid-column:1/-1} + .form-consent{display:grid;grid-template-columns:18px 1fr;gap:9px;font-size:10px;color:var(--muted);margin:13px 0} + .form-consent input{margin-top:2px;accent-color:var(--teal)} + .form-submit{width:100%} + .form-status{font-size:12px;min-height:20px;margin-top:11px;color:var(--muted)} + .hp{position:absolute!important;left:-9999px!important;opacity:0!important} + + /* Footer & modal */ + .footer{background:#041726;color:#8FA6B4;padding:32px 0;font-size:11px} + .footer-inner{display:flex;flex-direction:column;gap:18px} + .footer-links{display:flex;gap:16px;flex-wrap:wrap} + .footer a:hover{color:#fff} + .modal{position:fixed;z-index:100;inset:0;background:rgba(2,13,22,.92);display:none;align-items:center;justify-content:center;padding:18px;backdrop-filter:blur(10px)} + .modal.open{display:flex} + .modal img{max-width:min(1500px,96vw);max-height:88vh;border-radius:22px;box-shadow:0 30px 100px rgba(0,0,0,.55)} + .modal-close{position:fixed;right:18px;top:18px;width:46px;height:46px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.09);color:#fff;font-size:25px;cursor:pointer} + .mobile-cta{position:fixed;z-index:45;left:12px;right:12px;bottom:12px;display:flex;background:rgba(6,27,47,.90);backdrop-filter:blur(15px);border:1px solid rgba(255,255,255,.14);border-radius:999px;padding:6px;box-shadow:0 18px 48px rgba(0,0,0,.25);transform:translateY(130%);transition:transform .35s ease} + .mobile-cta.show{transform:none} + .mobile-cta .btn{width:100%;min-height:47px;font-size:13px} + + @media(min-width:640px){ + .container{width:min(calc(100% - 56px),var(--container))} + .benefit-grid{grid-template-columns:repeat(2,1fr)} + .device-grid{grid-template-columns:repeat(3,minmax(0,1fr))} + .device-card{min-height:185px} + .program-card{flex-basis:320px} + .form-grid{grid-template-columns:1fr 1fr} + .journey-step span{display:block} + } + @media(min-width:900px){ + .nav{display:flex} + .hero{min-height:860px;padding-bottom:62px} + .hero-grid{grid-template-columns:minmax(0,1fr) 315px} + .hero-card{display:block} + .market-layout{grid-template-columns:1.18fr .82fr;align-items:stretch} + .benefit-grid{grid-template-columns:repeat(4,1fr)} + .constructor-top{flex-direction:row;justify-content:space-between;align-items:end} + .constructor-body{grid-template-columns:.92fr 1.08fr} + .device-picker{border-bottom:0;border-right:1px solid rgba(255,255,255,.1)} + .device-grid{grid-template-columns:repeat(2,minmax(0,1fr))} + .program-strip{display:grid;grid-template-columns:repeat(3,1fr);overflow:visible} + .program-card{min-width:0;min-height:225px} + .gallery-grid{display:grid;grid-template-columns:repeat(2,1fr);overflow:visible} + .gallery-card{min-width:0} + .gallery-image{height:350px} + .launch-layout{grid-template-columns:.95fr 1.05fr} + .proof-layout{grid-template-columns:1.1fr .9fr} + .cta-grid{grid-template-columns:1.03fr .97fr} + .footer-inner{flex-direction:row;justify-content:space-between;align-items:center} + .mobile-cta{display:none} + } + @media(min-width:1120px){ + .constructor-body{grid-template-columns:1fr 1.18fr} + .device-grid{grid-template-columns:repeat(3,minmax(0,1fr))} + .gallery-grid{grid-template-columns:repeat(4,1fr)} + .gallery-card{border-radius:24px} + .gallery-image{height:250px} + .gallery-copy{min-height:134px} + } + @media(max-width:520px){ + .brand-text span{display:none} + .brand-text strong{font-size:14px} + .header-inner{gap:10px} + .header-cta{font-size:11px;padding:0 12px;min-height:40px} + .hero-facts{grid-template-columns:1fr} + .hero-fact{display:flex;align-items:baseline;justify-content:space-between;gap:12px} + .hero-fact strong{font-size:17px} + .hero h1{font-size:44px} + .hero-actions .btn{width:100%} + .device-card{min-height:162px} + .device-card img{height:76px} + .config-actions .btn{width:100%} + .market-chart{height:255px} + .market-bar__value{font-size:17px} + } + @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.reveal{opacity:1;transform:none}} + + +/* Fitness v2 refinements */ +.brand{display:inline-flex;align-items:center;min-width:0} +.exo-master-logo--header{width:clamp(150px,19vw,215px);height:auto;max-height:54px;object-fit:contain;object-position:left center} +.header-actions{display:flex;align-items:center;gap:9px;margin-left:auto} +.header-call{min-height:42px;padding:0 14px;font-size:13px;white-space:nowrap} +.header-call svg{width:17px;height:17px} +.hero-fact span b{color:#fff;font-weight:850} +.terms-glossary{margin-top:18px;padding:18px 20px;border-radius:22px;background:#fff;border:1px solid var(--line);display:grid;gap:10px;box-shadow:0 12px 34px rgba(4,28,46,.04)} +.term-item{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:start;font-size:13px;color:var(--muted)} +.term-item b{color:var(--navy);font-size:12px;letter-spacing:.08em} +.program-card{display:flex;flex-direction:column;min-height:100%;padding:24px} +.program-card__tag{align-self:flex-start;max-width:100%;white-space:normal;line-height:1.25;text-align:left;margin-bottom:18px} +.program-card h3{font-size:clamp(20px,2.1vw,25px);line-height:1.15;overflow-wrap:anywhere} +.program-card p{font-size:14px;line-height:1.55;flex:1} +.program-devices{font-size:13px;line-height:1.5} +.program-devices b{color:var(--navy)} +.program-devices span{display:block;margin-top:6px;color:var(--muted);font-weight:600} +@media(min-width:900px){.program-strip{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:16px}.program-card{min-height:410px}} +@media(max-width:760px){.header-actions{gap:7px}.header-call{width:42px;padding:0;font-size:0}.header-call svg{width:18px;height:18px}.header-cta{padding:0 13px}.exo-master-logo--header{width:145px}.term-item{grid-template-columns:62px 1fr}} +@media(max-width:520px){.exo-master-logo--header{width:128px}.header-cta{font-size:11px;padding:0 11px}.program-card{flex-basis:min(90vw,360px)}} + + + +/* ===== EXO economics blocks: Hotel + Fitness ===== */ +.exo-econ{--ee-navy:#0A2540;--ee-deep:#061B2F;--ee-teal:#00C4B4;--ee-teal-2:#39E0D2;--ee-ice:#EAF9F7;--ee-red:#F0656B;--ee-muted:#60778B;position:relative;overflow:hidden;background:#F4FAFB;color:var(--ee-navy)} +.exo-econ::before{content:"";position:absolute;width:520px;height:520px;border-radius:50%;right:-260px;top:-270px;background:rgba(0,196,180,.13);filter:blur(18px);pointer-events:none} +.exo-econ__head{position:relative;z-index:1;display:grid;gap:14px;margin-bottom:28px;max-width:920px} +.exo-econ__eyebrow{display:flex;align-items:center;gap:10px;color:#008F84;font-size:11px;font-weight:850;letter-spacing:.095em;text-transform:uppercase} +.exo-econ__eyebrow::before{content:"";width:28px;height:2px;border-radius:3px;background:var(--ee-teal)} +.exo-econ__head h2{margin:0;color:var(--ee-navy);font-size:clamp(31px,5vw,58px);line-height:1.02;letter-spacing:-.048em} +.exo-econ__head p{max-width:860px;margin:0;color:var(--ee-muted);font-size:clamp(15px,1.55vw,19px);line-height:1.55} +.exo-econ__metrics{position:relative;z-index:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px} +.exo-econ__metric{min-width:0;padding:17px 16px;border:1px solid rgba(0,196,180,.26);border-radius:18px;background:rgba(255,255,255,.9);box-shadow:0 12px 36px rgba(4,31,50,.055)} +.exo-econ__metric strong{display:block;color:#00A99A;font-size:clamp(22px,3vw,34px);line-height:1.05;letter-spacing:-.035em;font-variant-numeric:tabular-nums} +.exo-econ__metric span{display:block;margin-top:7px;color:var(--ee-navy);font-size:12px;font-weight:760;line-height:1.32} +.exo-econ__metric small{display:block;margin-top:4px;color:var(--ee-muted);font-size:10px;line-height:1.35} +.exo-econ__compare{position:relative;z-index:1;display:grid;gap:14px} +.exo-econ__panel{min-width:0;padding:22px;border-radius:25px} +.exo-econ__panel--loss{color:#fff;background:radial-gradient(circle at 8% 0%,rgba(240,101,107,.16),transparent 30%),linear-gradient(145deg,var(--ee-deep),var(--ee-navy));box-shadow:0 24px 60px rgba(4,25,41,.16)} +.exo-econ__panel--gain{border:1px solid rgba(0,196,180,.34);background:rgba(255,255,255,.96);box-shadow:0 24px 60px rgba(4,31,50,.075)} +.exo-econ__panel-title{display:flex;align-items:center;gap:11px;margin:0 0 17px;font-size:20px;line-height:1.15;letter-spacing:-.025em} +.exo-econ__panel-title i{width:34px;height:34px;border-radius:12px;display:grid;place-items:center;font-style:normal;font-size:17px} +.exo-econ__panel--loss .exo-econ__panel-title{color:#fff}.exo-econ__panel--loss .exo-econ__panel-title i{color:#FFD7D9;background:rgba(240,101,107,.16)} +.exo-econ__panel--gain .exo-econ__panel-title{color:var(--ee-navy)}.exo-econ__panel--gain .exo-econ__panel-title i{color:#008F84;background:var(--ee-ice)} +.exo-econ__list{display:grid;gap:9px} +.exo-econ__item{display:grid;grid-template-columns:34px 1fr;gap:11px;align-items:start;padding:13px;border-radius:16px} +.exo-econ__panel--loss .exo-econ__item{border:1px solid rgba(255,255,255,.11);background:rgba(255,255,255,.045)} +.exo-econ__panel--gain .exo-econ__item{border:1px solid rgba(10,37,64,.095);background:linear-gradient(180deg,#fff,#F7FBFB)} +.exo-econ__item b{width:28px;height:28px;border-radius:10px;display:grid;place-items:center;font-size:11px} +.exo-econ__panel--loss .exo-econ__item b{color:#FFD7D9;background:rgba(240,101,107,.16)} +.exo-econ__panel--gain .exo-econ__item b{color:#008F84;background:var(--ee-ice)} +.exo-econ__item strong{display:block;margin:1px 0 4px;font-size:14px;line-height:1.25} +.exo-econ__item span{display:block;font-size:11px;line-height:1.43} +.exo-econ__panel--loss .exo-econ__item span{color:rgba(255,255,255,.65)} +.exo-econ__panel--gain .exo-econ__item span{color:var(--ee-muted)} +.exo-econ__bridge{position:relative;z-index:1;margin:14px 0;padding:16px 18px;border-radius:19px;border:1px solid rgba(0,196,180,.28);background:linear-gradient(115deg,rgba(0,196,180,.12),rgba(255,255,255,.94));display:grid;gap:10px} +.exo-econ__bridge strong{color:var(--ee-navy);font-size:16px;line-height:1.25} +.exo-econ__bridge p{margin:0;color:var(--ee-muted);font-size:11px;line-height:1.5} +.exo-econ__ops{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px} +.exo-econ__op{padding:11px 12px;border-radius:14px;background:#fff;border:1px solid rgba(0,196,180,.22)} +.exo-econ__op b{display:block;color:#00A99A;font-size:17px;line-height:1.05}.exo-econ__op span{display:block;margin-top:4px;color:var(--ee-muted);font-size:9px;line-height:1.25} +.exo-econ__calc{position:relative;z-index:1;margin-top:14px;padding:22px;border-radius:25px;color:#fff;background:radial-gradient(circle at 90% 0%,rgba(0,196,180,.25),transparent 34%),linear-gradient(135deg,var(--ee-navy),var(--ee-deep));box-shadow:0 25px 70px rgba(4,25,41,.18)} +.exo-econ__calc-head{display:grid;gap:6px;margin-bottom:17px}.exo-econ__calc-head span{color:var(--ee-teal-2);font-size:10px;font-weight:850;letter-spacing:.09em;text-transform:uppercase}.exo-econ__calc-head h3{margin:0;color:#fff;font-size:22px;line-height:1.15}.exo-econ__calc-head p{margin:0;color:rgba(255,255,255,.58);font-size:11px;line-height:1.45} +.exo-econ__formula-simple{display:grid;grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1.12fr);gap:8px;align-items:stretch;margin:0 0 17px;padding:12px;border-radius:18px;border:1px solid rgba(0,196,180,.22);background:rgba(255,255,255,.055)} +.exo-econ__formula-step{min-width:0;display:flex;align-items:center;gap:9px;padding:10px;border-radius:13px;background:rgba(255,255,255,.055);border:1px solid rgba(255,255,255,.08)} +.exo-econ__formula-step em{flex:0 0 27px;width:27px;height:27px;border-radius:9px;display:grid;place-items:center;color:var(--ee-deep);background:var(--ee-teal-2);font-size:12px;font-style:normal;font-weight:900} +.exo-econ__formula-step span{color:rgba(255,255,255,.78);font-size:10px;font-weight:760;line-height:1.3} +.exo-econ__formula-step--result{background:linear-gradient(135deg,rgba(0,196,180,.25),rgba(0,196,180,.09));border-color:rgba(57,224,210,.34)} +.exo-econ__formula-step--result span{color:#fff} +.exo-econ__formula-op{align-self:center;color:var(--ee-teal-2);font-size:20px;text-align:center} +.exo-econ__calc-grid{display:grid;gap:13px} +.exo-econ__fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px} +.exo-econ__field{display:grid;gap:6px;min-width:0}.exo-econ__field label{color:rgba(255,255,255,.72);font-size:10px;font-weight:760}.exo-econ__field input{width:100%;min-width:0;height:48px;padding:0 13px;border-radius:13px;border:1px solid rgba(255,255,255,.17);outline:none;color:#fff;background:rgba(255,255,255,.075);font-size:15px;font-weight:800;font-variant-numeric:tabular-nums}.exo-econ__field input::placeholder{color:rgba(255,255,255,.28)}.exo-econ__field small{display:block;margin-top:-1px;color:rgba(255,255,255,.42);font-size:8.5px;line-height:1.3} +.exo-econ__field input:focus{border-color:var(--ee-teal);box-shadow:0 0 0 3px rgba(0,196,180,.13)} +.exo-econ__results{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.exo-econ__result{min-width:0;padding:15px;border-radius:16px;border:1px solid rgba(0,196,180,.28);background:rgba(0,196,180,.09)}.exo-econ__result span{display:block;color:rgba(255,255,255,.56);font-size:9px;text-transform:uppercase;letter-spacing:.055em}.exo-econ__result strong{display:block;margin-top:6px;color:var(--ee-teal-2);font-size:clamp(19px,3vw,29px);line-height:1.05;letter-spacing:-.035em;white-space:nowrap;font-variant-numeric:tabular-nums}.exo-econ__result small{display:block;margin-top:4px;color:rgba(255,255,255,.48);font-size:9px;line-height:1.3} +.exo-econ__disclaimer{margin:13px 0 0;color:rgba(255,255,255,.43);font-size:9px;line-height:1.45} +.exo-econ__source-note{margin-top:14px;padding:13px 15px;border:1px solid rgba(0,196,180,.25);border-radius:14px;background:rgba(0,196,180,.07);color:rgba(255,255,255,.72);font-size:10px;line-height:1.5}.exo-econ__source-note p{margin:0}.exo-econ__source-note p+p{margin-top:5px}.exo-econ__source-note strong{color:#fff} +@media(min-width:640px){.exo-econ__metrics{grid-template-columns:repeat(4,minmax(0,1fr))}.exo-econ__ops{grid-template-columns:repeat(4,minmax(0,1fr))}.exo-econ__fields{grid-template-columns:repeat(3,minmax(0,1fr))}} +@media(min-width:900px){.exo-econ__compare{grid-template-columns:repeat(2,minmax(0,1fr))}.exo-econ__panel{padding:27px}.exo-econ__calc{padding:28px}.exo-econ__calc-grid{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);align-items:start}.exo-econ__fields{grid-template-columns:repeat(2,minmax(0,1fr))}.exo-econ__results{align-self:stretch;grid-template-columns:repeat(2,minmax(0,1fr))}.exo-econ__result{display:flex;flex-direction:column;justify-content:center}} +@media(max-width:680px){.exo-econ__formula-simple{grid-template-columns:1fr 1fr}.exo-econ__formula-op{display:none}.exo-econ__formula-step{min-height:66px}} +@media(max-width:480px){.exo-econ__head h2{font-size:34px}.exo-econ__metric{padding:15px 13px}.exo-econ__panel{padding:18px}.exo-econ__fields,.exo-econ__results{grid-template-columns:1fr}.exo-econ__result strong{white-space:normal}.exo-econ__ops{grid-template-columns:1fr 1fr}} + + + /* v7 — unified compact section heading scale */ + .section-title, + .exo-econ__head h2, + .cta-copy h2{ + font-size:clamp(22px,2.7vw,36px)!important; + line-height:1.12!important; + letter-spacing:-.025em!important; + } + .section-title{max-width:920px} + .exo-econ__head h2{max-width:900px} + @media (max-width:640px){ + .section-title,.exo-econ__head h2,.cta-copy h2{font-size:clamp(21px,7vw,30px)!important;line-height:1.16!important} + }