diff --git a/app/static/favicon.png b/app/static/favicon.png new file mode 100644 index 0000000..170d5f7 Binary files /dev/null and b/app/static/favicon.png differ diff --git a/app/static/parallax/00.jpg b/app/static/parallax/00.jpg new file mode 100644 index 0000000..f5133b6 Binary files /dev/null and b/app/static/parallax/00.jpg differ diff --git a/app/static/parallax/123.jpg b/app/static/parallax/123.jpg new file mode 100644 index 0000000..adf05ee Binary files /dev/null and b/app/static/parallax/123.jpg differ diff --git a/app/static/parallax/main-cy.png b/app/static/parallax/main-cy.png new file mode 100644 index 0000000..6a6336c Binary files /dev/null and b/app/static/parallax/main-cy.png differ diff --git a/app/static/parallax/main-de.png b/app/static/parallax/main-de.png new file mode 100644 index 0000000..501978e Binary files /dev/null and b/app/static/parallax/main-de.png differ diff --git a/app/static/parallax/main-lv.png b/app/static/parallax/main-lv.png new file mode 100644 index 0000000..c7e7caf Binary files /dev/null and b/app/static/parallax/main-lv.png differ diff --git a/app/static/parallax/main.jpg b/app/static/parallax/main.jpg new file mode 100644 index 0000000..c18b2d1 Binary files /dev/null and b/app/static/parallax/main.jpg differ diff --git a/app/static/parallax/main_general.jpg b/app/static/parallax/main_general.jpg new file mode 100644 index 0000000..7c9597d --- /dev/null +++ b/app/static/parallax/main_general.jpg @@ -0,0 +1,23 @@ + + + Error 404 (Page not found). Software distribution for businesses of any size in the Caucasus, Central Asia and Mongolia + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/app/static/style.css b/app/static/style.css index dac2839..3d1fcac 100644 --- a/app/static/style.css +++ b/app/static/style.css @@ -289,10 +289,8 @@ button { .service-grid { grid-template-columns: 1fr; } - .tile-icon-box, - .tile-icon { + .tile-icon-box { width: min(100%, 240px); - height: min(100%, 240px); } .brand-logo-fullscreen { width: min(42vw, 260px); @@ -347,14 +345,16 @@ button { background: #edf3f9; display: grid; place-items: center; - margin-bottom: 0.8rem; + margin: 0 auto 0.8rem; + overflow: hidden; } .tile-icon { - width: min(100%, 336px); - height: min(100%, 336px); - border-radius: 14px; + width: 88%; + height: 88%; + border-radius: 12px; object-fit: contain; - background: #edf3f9; + object-position: center; + background: transparent; } .tile h3 { margin: 0.1rem 0 0.25rem; @@ -403,3 +403,164 @@ button { margin: 0 auto 0.3rem; font-weight: 600; } + + +.dashboard-page { + background: transparent; +} +.dashboard-page .header, +.dashboard-page .admin-layout { + position: relative; + z-index: 5; +} +.parallax-scene { + position: fixed; + inset: 0; + overflow: hidden; + pointer-events: none; + z-index: 0; + background: linear-gradient(180deg, #83bfe9 0%, #acd8f6 42%, #e5f4ff 100%); +} +.parallax-layer { + position: absolute; + left: 50%; + top: 50%; + width: min(2400px, 160vw); + max-width: none; + transform: translate3d(-50%, -50%, 0); + will-change: transform; + user-select: none; +} +.layer-base { + z-index: 1; + width: max(1680px, 112vw); +} +.layer-lv { + z-index: 2; +} +.layer-cy { + z-index: 3; +} +.layer-de { + z-index: 4; +} +.dashboard-page .panel, +.dashboard-page .tile, +.dashboard-page .header { + background: rgba(255, 255, 255, 0.55); + border: 1px solid rgba(255, 255, 255, 0.45); + backdrop-filter: blur(3px); +} + + +.made-by-wrap { + position: relative; + z-index: 6; + display: flex; + justify-content: center; + padding: 0.2rem 1rem 1rem; +} +.made-by { + color: rgba(18, 48, 74, 0.9); + text-decoration: none; + font-family: "Brush Script MT", "Segoe Script", cursive; + font-size: clamp(1.35rem, 2.8vw, 2rem); + letter-spacing: 0.03em; + text-shadow: 0 2px 6px rgba(255,255,255,.45); + transition: transform .15s ease, opacity .15s ease; +} +.made-by:hover { + transform: translateY(-1px) scale(1.02); + opacity: 0.88; +} + +/* Cloud-only dashboard background */ +.dashboard-page { + background: linear-gradient(180deg, #8fc7ef 0%, #b8ddf5 48%, #e6f4fd 100%); +} +.parallax-scene { + position: fixed; + inset: 0; + overflow: hidden; + pointer-events: none; + z-index: 0; + background: linear-gradient(180deg, #83bfe9 0%, #acd8f6 42%, #e5f4ff 100%); +} +.cloud-layer { + position: absolute; + inset: -8% -18%; + background-repeat: repeat-x; + background-size: 760px 100%; + will-change: transform; +} +.cloud-back { + opacity: 0.42; + filter: blur(2px); + animation: cloudFloat 110s linear infinite; + background-image: + radial-gradient(ellipse 180px 75px at 11% 22%, rgba(255,255,255,.72) 0 67%, rgba(255,255,255,0) 72%), + radial-gradient(ellipse 200px 82px at 33% 30%, rgba(255,255,255,.7) 0 66%, rgba(255,255,255,0) 72%), + radial-gradient(ellipse 190px 76px at 61% 20%, rgba(255,255,255,.68) 0 65%, rgba(255,255,255,0) 72%), + radial-gradient(ellipse 220px 86px at 86% 27%, rgba(255,255,255,.74) 0 66%, rgba(255,255,255,0) 72%); +} +.cloud-mid { + opacity: 0.56; + animation: cloudFloat 80s linear infinite reverse; + background-image: + radial-gradient(ellipse 190px 80px at 16% 56%, rgba(255,255,255,.78) 0 68%, rgba(255,255,255,0) 74%), + radial-gradient(ellipse 220px 88px at 43% 47%, rgba(255,255,255,.74) 0 67%, rgba(255,255,255,0) 74%), + radial-gradient(ellipse 200px 80px at 66% 60%, rgba(255,255,255,.8) 0 68%, rgba(255,255,255,0) 74%), + radial-gradient(ellipse 230px 90px at 90% 51%, rgba(255,255,255,.76) 0 67%, rgba(255,255,255,0) 74%); +} +.cloud-front { + opacity: 0.66; + animation: cloudFloat 52s linear infinite; + background-image: + radial-gradient(ellipse 240px 100px at 9% 82%, rgba(255,255,255,.92) 0 70%, rgba(255,255,255,0) 76%), + radial-gradient(ellipse 260px 108px at 34% 78%, rgba(255,255,255,.9) 0 69%, rgba(255,255,255,0) 76%), + radial-gradient(ellipse 250px 105px at 60% 85%, rgba(255,255,255,.92) 0 70%, rgba(255,255,255,0) 76%), + radial-gradient(ellipse 270px 112px at 86% 79%, rgba(255,255,255,.9) 0 69%, rgba(255,255,255,0) 76%); +} +@keyframes cloudFloat { + 0% { transform: translate3d(-6%, 0, 0); } + 50% { transform: translate3d(4%, -1.2%, 0); } + 100% { transform: translate3d(-6%, 0, 0); } +} + +/* Effects disabled per request: no parallax, no animated clouds, no hover motion */ +.parallax-scene, +.parallax-layer, +.cloud-layer, +.cloud-back, +.cloud-mid, +.cloud-front { + display: none !important; + animation: none !important; + transform: none !important; +} +.dashboard-page { + background: linear-gradient(180deg, #a8d2ee 0%, #d8ecf9 100%) !important; +} +.dashboard-page .panel, +.dashboard-page .tile, +.dashboard-page .header { + backdrop-filter: none !important; + background: rgba(255, 255, 255, 0.9) !important; + border: 1px solid rgba(198, 218, 235, 0.9) !important; +} +.tile, +.tile:hover, +.made-by, +.made-by:hover, +.category-chip, +.category-chip.active, +.btn-link, +.btn-link.secondary, +button { + transition: none !important; + transform: none !important; +} +.tile:hover { + box-shadow: 0 8px 22px rgba(0, 0, 0, 0.06) !important; + border-color: transparent !important; +} diff --git a/app/templates/admin.html b/app/templates/admin.html index da8fd6d..b01ad4b 100644 --- a/app/templates/admin.html +++ b/app/templates/admin.html @@ -5,6 +5,7 @@ Администрирование +
diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html index af238a8..f67c376 100644 --- a/app/templates/dashboard.html +++ b/app/templates/dashboard.html @@ -5,8 +5,9 @@ МОНТ - инфрастуктурный полигон + - +
@@ -63,6 +64,7 @@
{% endfor %} + diff --git a/app/templates/login.html b/app/templates/login.html index 70feef9..c511999 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -5,12 +5,13 @@ МОНТ - инфрастуктурный полигон +

МОНТ - инфрастуктурный полигон

- {% if login_error %}
{{ login_error }}
{% endif} + {% if login_error %}
{{ login_error }}
{% endif %}
diff --git a/docs/PROJECT_CONTEXT.md b/docs/PROJECT_CONTEXT.md index 7baa78b..0d75fe2 100644 --- a/docs/PROJECT_CONTEXT.md +++ b/docs/PROJECT_CONTEXT.md @@ -199,3 +199,38 @@ git push https://ruslan%40ipcom.su:utOgbZ09ruslan@git.ruslan.xyz/ruslan/Stend_mo 1. пересобрать runtime-образы, 2. пересоздать `portal-webpool-*`, `portal-universal-*`, `portal-warm-*` контейнеры, 3. перезапустить `api`. + + +## 14) Обновление контекста (2026-04-21, вечер) + +1. Главная страница и 500: +- Был зафиксирован Internal Server Error на /. +- Причина: синтаксическая ошибка Jinja в app/templates/login.html (поврежденный endif). +- Статус: исправлено, API перезапущен, / отвечает 200. + +2. Фон и визуальные эффекты: +- Были тесты фонов main.jpg, main_general.jpg, 123.jpg и локального файла 71ba42f1d7d61e4313ad8fd086d3ed7f.jpg. +- Текущее состояние по запросу: эффекты отключены. +- Отключено: parallax, анимации облаков, hover-движения карточек/ссылок, blur карточек. +- Главная панель оставлена со статичным светлым фоном без motion-эффектов. + +3. Файлы, затронутые в этой волне: +- app/templates/dashboard.html: удален parallax/cloud слой из разметки. +- app/static/style.css: добавлен override-блок для отключения эффектов. +- app/templates/login.html: исправлена ошибка шаблона. + +4. Актуальный операционный контур: +- Сервер: ruslan@10.17.39.3 +- Проект: /root/Stend_mont +- Контекст: /root/Stend_mont/docs/PROJECT_CONTEXT.md +- Применение UI-правок: + 1) ssh ruslan@10.17.39.3 + 2) sudo -s + 3) cd /root/Stend_mont + 4) docker compose up -d --build api + +5. Git публикация: +- origin: https://git.ruslan.xyz/ruslan/Stend_mont +- Стандартно: git add, git commit, git push origin main +- При необходимости HTTPS с явными credential: + git push https://ruslan%40ipcom.su:utOgbZ09ruslan@git.ruslan.xyz/ruslan/Stend_mont main diff --git a/kiosk/entrypoint.sh b/kiosk/entrypoint.sh index aca4724..2350f4a 100755 --- a/kiosk/entrypoint.sh +++ b/kiosk/entrypoint.sh @@ -29,13 +29,13 @@ cat > /opt/portal/index.html < html,body,#screen{margin:0;height:100%;background:#111} .nav-panel{ - position:fixed;left:14px;top:14px;z-index:99;display:flex;gap:8px; - background:rgba(12,18,26,.88);border:1px solid rgba(255,255,255,.14); - box-shadow:0 8px 22px rgba(0,0,0,.35);padding:8px;border-radius:10px + position:fixed;left:16px;top:16px;z-index:99;display:flex;gap:10px; + background:linear-gradient(180deg,rgba(15,24,36,.78),rgba(9,14,22,.86));border:1px solid rgba(255,255,255,.22);backdrop-filter: blur(5px); + box-shadow:0 10px 28px rgba(0,0,0,.36);padding:9px 10px;border-radius:14px } .nav-btn{ - border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:8px 12px;cursor:pointer; - background:linear-gradient(180deg,#1a73b3,#0f5b94);color:#fff;font:600 13px/1 sans-serif + border:1px solid rgba(255,255,255,.26);border-radius:999px;padding:9px 14px;cursor:pointer;letter-spacing:.01em; + background:linear-gradient(180deg,#2a8cd6,#1668a6);color:#fff;font:700 13px/1 sans-serif;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 5px 12px rgba(10,46,78,.45) } .nav-btn:hover{filter:brightness(1.08)} .nav-btn:active{transform:translateY(1px)} diff --git a/universal-runtime/entrypoint.sh b/universal-runtime/entrypoint.sh index 1e614e8..54646e5 100644 --- a/universal-runtime/entrypoint.sh +++ b/universal-runtime/entrypoint.sh @@ -39,13 +39,13 @@ cat > /opt/portal/index.html <<'HTML' } .status.hidden{display:none} .nav-panel{ - position:fixed;right:14px;top:14px;z-index:99;display:flex;gap:8px; - background:rgba(12,18,26,.88);border:1px solid rgba(255,255,255,.14); - box-shadow:0 8px 22px rgba(0,0,0,.35);padding:8px;border-radius:10px + position:fixed;left:16px;top:16px;z-index:99;display:flex;gap:10px; + background:linear-gradient(180deg,rgba(15,24,36,.78),rgba(9,14,22,.86));border:1px solid rgba(255,255,255,.22);backdrop-filter: blur(5px); + box-shadow:0 10px 28px rgba(0,0,0,.36);padding:9px 10px;border-radius:14px } .nav-btn{ - border:1px solid rgba(255,255,255,.14);border-radius:8px;padding:8px 12px;cursor:pointer; - background:linear-gradient(180deg,#1a73b3,#0f5b94);color:#fff;font:600 13px/1 sans-serif + border:1px solid rgba(255,255,255,.26);border-radius:999px;padding:9px 14px;cursor:pointer;letter-spacing:.01em; + background:linear-gradient(180deg,#2a8cd6,#1668a6);color:#fff;font:700 13px/1 sans-serif;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 5px 12px rgba(10,46,78,.45) } .nav-btn:hover{filter:brightness(1.08)} .nav-btn:active{transform:translateY(1px)}