diff --git a/AGENTS.md b/AGENTS.md index 967fed5a..24b14b0f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -138,11 +138,8 @@ - с какого сценария продолжать разработку; - из какого коммита брать последнюю полную реализацию. -## Коммуникация по новым задачам (обязательно) -- При получении нового задания сначала кратко пересказать задачу своими словами. -- До начала реализации задать недостающие уточняющие вопросы (если они есть). +## Коммуникация по новым задачам +- При получении нового задания кратко подтвердить понимание задачи, если это помогает синхронизироваться. +- До начала реализации задавать уточняющие вопросы только когда без ответа есть риск сделать не то или затронуть опасную область. +- Если задача понятна и не требует отдельного подтверждения по другим правилам проекта, переходить к реализации сразу. - Если есть уместные идеи/улучшения — кратко предложить их; если полезных идей нет, ничего дополнительно не предлагать. -- Добавлять краткую оценку фичи (насколько это полезно/удачно по мнению исполнителя). -- После этого обязательно запросить подтверждение от пользователя, что задача понята верно, и только после подтверждения переходить к реализации. -- Если вопросов нет, явно написать в формате: «Я всё понял, начинаю делать?» и ждать подтверждения. -- Без подтверждения пользователя реализацию не начинать. diff --git a/VERSION.properties b/VERSION.properties index aba3165e..56b1a50f 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.14.0 +client.version=1.14.1 server.version=1.12.0 diff --git a/shine-UI/js/pages/start-view.js b/shine-UI/js/pages/start-view.js index cf0d7000..1a35bef7 100644 --- a/shine-UI/js/pages/start-view.js +++ b/shine-UI/js/pages/start-view.js @@ -31,13 +31,13 @@ export function render({ navigate }) { loginButton.addEventListener('click', () => navigate('login-view')); const registerButton = document.createElement('button'); - registerButton.className = 'secondary-btn shine-btn--register'; + registerButton.className = 'shine-btn shine-btn--primary'; registerButton.type = 'button'; registerButton.textContent = 'Зарегистрироваться'; registerButton.addEventListener('click', () => navigate('register-view')); const languageButton = document.createElement('button'); - languageButton.className = 'text-btn start-language-link'; + languageButton.className = 'shine-btn shine-btn--primary'; languageButton.type = 'button'; languageButton.textContent = 'Язык / Language'; languageButton.addEventListener('click', () => { @@ -46,7 +46,7 @@ export function render({ navigate }) { }); const settingsButton = document.createElement('button'); - settingsButton.className = 'text-btn start-settings-link'; + settingsButton.className = 'shine-btn shine-btn--primary'; settingsButton.type = 'button'; settingsButton.textContent = 'Настройки входа'; settingsButton.addEventListener('click', () => navigate('entry-settings-view')); diff --git a/shine-UI/static-sites/README.md b/shine-UI/static-sites/README.md index f9f08d3d..a1f1e742 100644 --- a/shine-UI/static-sites/README.md +++ b/shine-UI/static-sites/README.md @@ -4,51 +4,4 @@ Все содержимое этой папки деплоится вместе с `shine-UI`, потому что общий UI deploy синхронизирует весь каталог `shine-UI/` в Caddy web root. На текущей схеме отдельная перенастройка Caddy для каждого нового сайта не нужна: Caddy сначала отдает существующие файлы из UI root, а уже потом делает fallback на основной `index.html`. -## URL - -Если UI задеплоен на `https://t2.shineup.me`, то эта папка доступна как: - -```text -https://t2.shineup.me/static-sites/ -``` - -Текущие подпапки: - -```text -/static-sites/design-examples/channels-v1/ -/static-sites/arweave-viewer/ -``` - -Для production домен меняется на нужный хост, например: - -```text -https://shineup.me/static-sites/ -https://server2.shineup.me/static-sites/ -``` - -## Как добавлять новый временный сайт - -1. Создать подпапку внутри `shine-UI/static-sites/`. -2. Положить туда `index.html` и связанные файлы. -3. Выполнить обычный UI deploy нужного контура через `deploy/scripts/*_ui.sh`. - -После этого сайт будет доступен по URL: - -```text -https:///static-sites// -``` - -## Arweave viewer - -Постоянная папка для viewer: - -```text -shine-UI/static-sites/arweave-viewer/ -``` - -Когда появляется новая версия viewer, можно заменить содержимое этой папки новой версией и выполнить обычный UI deploy. URL останется прежним: - -```text -https:///static-sites/arweave-viewer/ -``` - +НО К UI Никакого отношения не имеет :)) \ No newline at end of file diff --git a/shine-UI/static-sites/arm-walking-monitor/index.html b/shine-UI/static-sites/arm-walking-monitor/index.html new file mode 100644 index 00000000..179098fe --- /dev/null +++ b/shine-UI/static-sites/arm-walking-monitor/index.html @@ -0,0 +1,343 @@ + + + + + + +Walking Arm Monitor v4 · Axes + + + +
+

Рука при ходьбе · v4

Распознавание маха по выбранным осям телефона

+ +
+ +
Датчики ещё не запущены.
+
+ +
+
Текущее состояние
+
—
+
—%
+
+
Сначала включи датчики и начни идти.
+
+
+ +
+ +
+
+
Громкость сигнала100%
+ +
+
+
Предупреждать после5 секунд
+
+ + + +
+
+
+
Оси ускорения для распознаванияY
+
+ + + +
+
+ X — влево/вправо по экрану · Y — вдоль телефона от низа к верху · Z — перпендикулярно экрану. + По умолчанию включена только Y: в твоём хвате боком она соответствует движению руки вперёд-назад. + Переворот телефона на 180° не мешает — учитывается амплитуда, а не знак. +
+
+
+
Сигнал выключен. При включении используется максимальная громкость страницы.
+
Вибрация: проверяется браузером при запуске.
+
+ +
+
+
Сигнал распознавания—м/с² RMS
+
Ось X, RMS 1.5 с—м/с²
+
Ось Y, RMS 1.5 с—м/с²
+
Ось Z, RMS 1.5 с—м/с²
+
Частота датчика—Гц
+
Записано0отсчётов
+
+
+ +
+
Запись примеров
+
Запись
+
+ + +
+ +
Запись не влияет на распознавание. Можно продолжать собирать примеры и потом прислать CSV.
+
+ +
+
Последние секунды: сигнал выбранных осей ускорения
+ +
+ +
+ Алгоритм v4 по умолчанию смотрит только на динамическое ускорение вдоль оси Y телефона. Это специально убирает большую часть ложных срабатываний от вертикальной качки тела при быстрой ходьбе. Можно включить X и/или Z вручную. Если включено несколько осей, распознавание берёт самую выраженную из выбранных осей. Пороги для Y настроены по твоим записям «РОВНО» и «МАХ». +
+ +
+ + + diff --git a/shine-UI/static-sites/breath-belly-sensor/1/index.html b/shine-UI/static-sites/breath-belly-sensor/1/index.html new file mode 100644 index 00000000..cdafe110 --- /dev/null +++ b/shine-UI/static-sites/breath-belly-sensor/1/index.html @@ -0,0 +1,725 @@ + + + + + + + Дыхание по движению живота + + + +
+
+

Дыхание

+

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

+
+ +
+
+
+
+
Сейчас
+
Готово
+
+
+ — + качество сигнала +
+
+
+
Нажмите «Начать». Первые 10 секунд — калибровка.
+ +
+ + +
+
+ + + +
+
+ +
+
+
За последнюю 1 минуту
+
—
+
сек/цикл · — дых./мин
+
+
+
За последние 3 минуты
+
—
+
сек/цикл · — дых./мин
+
+
+
За последние 5 минут
+
—
+
сек/цикл · — дых./мин
+
+
+
+ +
+
+

Сигнал движения

+ датчик ещё не запущен +
+ +
+ +
+
+

Вдохи и выдохи

+ 0 циклов +
+
+ + + + + + + + + + + + + +
ВремяВдохВыдохЦиклТемп
Пока нет завершённых циклов
+
+
+ +
+ Диагностика датчика +
—
+
+

Это экспериментальная оценка ритма дыхания по движению телефона, а не медицинский измерительный прибор. Для наиболее стабильного результата телефон должен лежать свободно и не скользить по одежде.

+
+ + + + diff --git a/shine-UI/static-sites/breath-belly-sensor/index.html b/shine-UI/static-sites/breath-belly-sensor/index.html new file mode 100644 index 00000000..bf6a0126 --- /dev/null +++ b/shine-UI/static-sites/breath-belly-sensor/index.html @@ -0,0 +1,920 @@ + + + + + + + Дыхание по движению живота + + + +
+
+

Дыхание

+

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

+
+ +
+
+
+
+
Сейчас
+
Готово
+
+
+ — + качество сигнала +
+
+
+
Нажмите «Начать». Первые 10 секунд — калибровка.
+ +
+ + +
+
+ + + +
+
+ +
+
+
За последнюю 1 минуту
+
+
Вдох—
+
Выдох—
+
Цикл—
+
+
— дых./мин
+
+
+
За последние 3 минуты
+
+
Вдох—
+
Выдох—
+
Цикл—
+
+
— дых./мин
+
+
+
За последние 5 минут
+
+
Вдох—
+
Выдох—
+
Цикл—
+
+
— дых./мин
+
+
+
+ +
+
+

Контроль темпа

+ порог проверяется после каждого полного цикла +
+
+
+
+
Звуковые предупреждения
+
Если средний цикл за последнюю минуту короче порога: 1 сигнал, затем 2, 3 и т.д.
+
+ +
+
+
+
Минимальный средний цикл
+
Полный цикл = вдох + выдох. Диапазон 5–15 секунд.
+ +
+
+
10 c
+
порог
+
+
+
+
+
+
Предупреждение
+
Пока недостаточно данных.
+
+
0
+
+
+ +
+
+

Сигнал движения

+ датчик ещё не запущен +
+ +
+ +
+
+

Вдохи и выдохи

+ 0 циклов +
+
+ + + + + + + + + + + + + +
ВремяВдохВыдохЦиклТемп
Пока нет завершённых циклов
+
+
+ +
+ Диагностика датчика +
—
+
+

Это экспериментальная оценка ритма дыхания по движению телефона, а не медицинский измерительный прибор. Для наиболее стабильного результата телефон должен лежать свободно и не скользить по одежде.

+
+ + + + diff --git a/shine-UI/styles/features/preauth.css b/shine-UI/styles/features/preauth.css index 6959dd32..326e4d81 100644 --- a/shine-UI/styles/features/preauth.css +++ b/shine-UI/styles/features/preauth.css @@ -995,19 +995,6 @@ .screen-content.preauth-flow .topbar { background: transparent; } .auth-screen--welcome .shine-actions { gap: var(--space-3); } -.auth-screen--welcome .start-language-link, -.auth-screen--welcome .start-settings-link { - min-height: var(--control-height); - border: 0; - background: transparent; - box-shadow: none; - color: var(--accent); - font-size: var(--text-md); - font-weight: var(--weight-medium); -} -.auth-screen--welcome .start-settings-link { color: var(--text-secondary); font-size: var(--text-sm); } -.auth-screen--welcome .start-settings-link::after { content: none; } - .screen-content.preauth-flow:not(:has(> .auth-screen--welcome)) .login-choice-screen .topbar { margin-bottom: var(--space-4); } .screen-content.preauth-flow:not(:has(> .auth-screen--welcome)) .login-choice-screen .topbar__title { display: block; }