From 90ae4bdc1b58f1993300c153233591817553e1df Mon Sep 17 00:00:00 2001 From: cursor-agent Date: Wed, 25 Feb 2026 16:17:21 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=D1=82=D0=B8=D0=BF;=20=D1=84=D0=BE=D0=BD=20?= =?UTF-8?q?=D0=B8=20=D0=B0=D0=BA=D1=86=D0=B5=D0=BD=D1=82=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B8=D0=B7=20=D0=B1=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B4=D0=B1=D1=83=D0=BA=D0=B0;=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20Bootstrap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- HISTORY.md | 15 ++ app/static/css/theme.css | 295 ++++++++++++++++----------- app/static/images/watersurf-logo.png | Bin 17419 -> 0 bytes app/templates/base.html | 2 +- 4 files changed, 187 insertions(+), 125 deletions(-) delete mode 100644 app/static/images/watersurf-logo.png diff --git a/HISTORY.md b/HISTORY.md index c2e3806..3098144 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,20 @@ # История изменений ERP WaterSurf +## 2025-02-25 20:45 UTC – Логотип убран; дизайн строго по брендбуку + +**Проблема**: Логотип в шапке был вставлен некорректно; визуально тема не отличалась от дефолтной — цвета и шрифты не применялись. + +**Решение**: +- Логотип из шапки убран, в навбаре снова текст «WaterSurf ERP». +- Файл логотипа удалён из `static/images/`. +- Фон страницы и поверхностей задан только основными цветами бренда: Black #0A121D; границы — Gray 04 #617E92; текст — Gray 01 #F5F9FD, Gray 03 #B1C7D7, Gray 04 #617E92. +- Ключевой акцент взят только из дополнительных цветов: Blue (02) #34AFE3, при наведении Blue (03) #00868F. +- Добавлены переопределения Bootstrap с !important для body, main, кнопок, полей ввода, таблиц и типографики, чтобы гарантированно применялись Geologica и палитра брендбука. + +**Изменения**: base.html (удалён img логотипа), theme.css (палитра только из брендбука, акцент из дополнительных, переопределения Bootstrap), удалён app/static/images/watersurf-logo.png. + +--- + ## 2025-02-25 20:15 UTC – Стили по корпоративному брендбуку и логотип **Проблема**: Нужно привести интерфейс в соответствие с корпоративным брендбуком WaterSurf и использовать логотип компании. diff --git a/app/static/css/theme.css b/app/static/css/theme.css index 989b87a..3a262a4 100644 --- a/app/static/css/theme.css +++ b/app/static/css/theme.css @@ -1,29 +1,27 @@ -/* ERP WaterSurf — стили по корпоративному брендбуку */ +/* ERP WaterSurf — только цвета и шрифты из брендбука */ -/* Базовые цвета брендбука */ +/* Основные цвета бренда (базовые): White, Gray 01–04, Black */ :root { --ws-white: #FFFFFF; --ws-gray-01: #F5F9FD; --ws-gray-02: #DCE7EF; --ws-gray-03: #B1C7D7; --ws-gray-04: #617E92; - /* Базовый цвет — глубина, стабильность (тёмная тема) */ --ws-black: #0A121D; - /* Ключевой цвет бренда — динамика, энергия */ - --ws-accent: #0DADBB; - --ws-accent-hover: #34AFE3; - --ws-accent-light: #E3F7FF; - /* Дополнительные: опасность, успех */ - --ws-danger: #FF3A20; - --ws-danger-dark: #AA1400; - --ws-success: #13AD53; - /* Поверхности тёмной темы на базе --ws-black */ + /* Дополнительные цвета бренда — только для акцента и состояний */ + --ws-accent: #34AFE3; /* Blue (02) — дополнительный */ + --ws-accent-hover: #00868F; /* Blue (03) — дополнительный */ + --ws-accent-light: #E3F7FF; /* Blue (01) */ + --ws-danger: #FF3A20; /* Red (02) */ + --ws-danger-dark: #AA1400; /* Red (03) */ + --ws-success: #13AD53; /* Green (02) */ + /* Фон страницы и поверхностей — только из основных */ --ws-bg-page: #0A121D; - --ws-bg-surface: #0f1823; - --ws-bg-elevated: #151d2b; - --ws-bg-hover: #1a2435; - --ws-border: #2a3647; - --ws-border-focus: #0DADBB; + --ws-bg-surface: #0A121D; + --ws-bg-elevated: #0A121D; + --ws-bg-hover: #0f1823; + --ws-border: #617E92; + --ws-border-focus: #34AFE3; --ws-text: #F5F9FD; --ws-text-muted: #B1C7D7; --ws-text-secondary: #617E92; @@ -35,28 +33,31 @@ --ws-font: "Geologica", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } -* { - box-sizing: border-box; -} - +/* Жёсткое переопределение Bootstrap: фон и шрифт по брендбуку */ html { scroll-behavior: smooth; + background: var(--ws-bg-page) !important; } body { - background: var(--ws-bg-page); - color: var(--ws-text); - font-family: var(--ws-font); - font-weight: 300; - font-size: 16px; - line-height: 1.5; - letter-spacing: -0.02em; + background: var(--ws-bg-page) !important; + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; + font-weight: 300 !important; + font-size: 16px !important; + line-height: 1.5 !important; + letter-spacing: -0.02em !important; min-height: 100vh; -webkit-font-smoothing: antialiased; } -/* Типографика по масштабу брендбука: p3 16/24 -2% для основного текста */ +* { + box-sizing: border-box; +} + +/* Типографика: Geologica, веса по брендбуку */ .ws-page-title { + font-family: var(--ws-font) !important; font-size: 24px; line-height: 1.25; letter-spacing: -0.02em; @@ -66,6 +67,7 @@ body { } .ws-form-section-title { + font-family: var(--ws-font) !important; font-size: 20px; line-height: 1.3; letter-spacing: -0.02em; @@ -74,76 +76,71 @@ body { color: var(--ws-text); } -/* Навбар */ +/* Навбар — без лого, только текст */ .navbar-ws { background: var(--ws-bg-surface) !important; - border-bottom: 1px solid var(--ws-border); + border-bottom: 1px solid var(--ws-border) !important; padding: 0.5rem 0; } .navbar-ws .navbar-brand { - display: flex; - align-items: center; - gap: 0.75rem; color: var(--ws-text) !important; - font-weight: 700; - font-size: 1.1rem; - letter-spacing: -0.02em; -} - -.navbar-ws .navbar-brand img { - height: 36px; - width: auto; - object-fit: contain; + font-family: var(--ws-font) !important; + font-weight: 700 !important; + font-size: 1.1rem !important; + letter-spacing: -0.02em !important; } .navbar-ws .navbar-brand:hover { color: var(--ws-accent) !important; } -.navbar-ws .navbar-brand:hover img { - opacity: 0.95; -} - .navbar-ws .nav-link { color: var(--ws-text-muted) !important; + font-family: var(--ws-font) !important; border-radius: var(--ws-radius-sm); padding: 0.4rem 0.75rem !important; - font-weight: 400; + font-weight: 300; } .navbar-ws .nav-link:hover { color: var(--ws-text) !important; - background: var(--ws-bg-hover); + background: var(--ws-bg-hover) !important; } .navbar-ws .dropdown-menu { - background: var(--ws-bg-elevated); - border: 1px solid var(--ws-border); + background: var(--ws-bg-surface) !important; + border: 1px solid var(--ws-border) !important; border-radius: var(--ws-radius); box-shadow: var(--ws-shadow); padding: 0.25rem; } .navbar-ws .dropdown-item { - color: var(--ws-text); + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; border-radius: var(--ws-radius-sm); } .navbar-ws .dropdown-item:hover { - background: var(--ws-bg-hover); - color: var(--ws-text); + background: var(--ws-bg-hover) !important; + color: var(--ws-text) !important; } .navbar-ws .navbar-text { - color: var(--ws-text-muted); + color: var(--ws-text-muted) !important; + font-family: var(--ws-font) !important; font-size: 14px; letter-spacing: -0.01em; } .navbar-ws .navbar-toggler { - border-color: var(--ws-border); - color: var(--ws-text); + border-color: var(--ws-border) !important; + color: var(--ws-text) !important; +} + +.navbar-ws .navbar-toggler-icon { + filter: invert(1); } /* Контент */ @@ -151,12 +148,13 @@ body { max-width: 1200px; margin: 0 auto; padding: 1.5rem 1rem 3rem; + background: var(--ws-bg-page) !important; } -/* Карточки */ +/* Карточки — поверхности из основных цветов, граница Gray 04 */ .ws-card { - background: var(--ws-bg-surface); - border: 1px solid var(--ws-border); + background: var(--ws-bg-surface) !important; + border: 1px solid var(--ws-border) !important; border-radius: var(--ws-radius); padding: 1.25rem; margin-bottom: 1rem; @@ -176,31 +174,33 @@ body { overflow-x: auto; border-radius: var(--ws-radius); border: 1px solid var(--ws-border); + background: var(--ws-bg-surface) !important; } .ws-table { width: 100%; border-collapse: collapse; - color: var(--ws-text); + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; } .ws-table th, .ws-table td { padding: 0.75rem 1rem; text-align: left; - border-bottom: 1px solid var(--ws-border); + border-bottom: 1px solid var(--ws-border) !important; } .ws-table th { - background: var(--ws-bg-elevated); - font-weight: 500; + background: var(--ws-bg-elevated) !important; + font-weight: 500 !important; font-size: 14px; letter-spacing: -0.01em; - color: var(--ws-text-secondary); + color: var(--ws-text-secondary) !important; } .ws-table tbody tr:hover { - background: var(--ws-bg-hover); + background: var(--ws-bg-hover) !important; } .ws-table tbody tr:last-child td { @@ -212,68 +212,71 @@ body { } .ws-table .ws-link { - color: var(--ws-accent); + color: var(--ws-accent) !important; text-decoration: none; font-size: 14px; } .ws-table .ws-link:hover { - color: var(--ws-accent-hover); + color: var(--ws-accent-hover) !important; text-decoration: underline; } .ws-table .ws-link-danger { - color: var(--ws-danger); + color: var(--ws-danger) !important; } .ws-table .ws-link-danger:hover { - color: var(--ws-danger-dark); + color: var(--ws-danger-dark) !important; } -/* Кнопки — ключевой цвет бренда */ +/* Кнопки — акцент только из дополнительных (Blue 02) */ .btn-ws-primary { - background: var(--ws-accent); - color: var(--ws-black); - border: none; + background: var(--ws-accent) !important; + color: var(--ws-black) !important; + border: none !important; border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; - font-weight: 500; + font-family: var(--ws-font) !important; + font-weight: 500 !important; font-size: 14px; letter-spacing: -0.01em; } .btn-ws-primary:hover { - background: var(--ws-accent-hover); - color: var(--ws-black); + background: var(--ws-accent-hover) !important; + color: var(--ws-white) !important; } .btn-ws-secondary { - background: transparent; - color: var(--ws-text-muted); - border: 1px solid var(--ws-border); + background: transparent !important; + color: var(--ws-text-muted) !important; + border: 1px solid var(--ws-border) !important; border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; + font-family: var(--ws-font) !important; font-size: 14px; } .btn-ws-secondary:hover { - background: var(--ws-bg-hover); - color: var(--ws-text); - border-color: var(--ws-gray-04); + background: var(--ws-bg-hover) !important; + color: var(--ws-text) !important; + border-color: var(--ws-gray-04) !important; } .btn-ws-danger { - background: var(--ws-danger-bg); - color: var(--ws-danger); - border: 1px solid var(--ws-danger); + background: var(--ws-danger-bg) !important; + color: var(--ws-danger) !important; + border: 1px solid var(--ws-danger) !important; border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; + font-family: var(--ws-font) !important; font-size: 14px; } .btn-ws-danger:hover { - background: var(--ws-danger); - color: var(--ws-white); + background: var(--ws-danger) !important; + color: var(--ws-white) !important; } .ws-btn-group { @@ -283,13 +286,14 @@ body { align-items: center; } -/* Формы */ +/* Формы — шрифт Geologica, границы из основных */ .ws-form-group { margin-bottom: 1rem; } .ws-form-group label { display: block; + font-family: var(--ws-font) !important; font-weight: 500; font-size: 14px; letter-spacing: -0.01em; @@ -303,20 +307,20 @@ body { width: 100%; max-width: 400px; padding: 0.5rem 0.75rem; - background: var(--ws-bg-page); - border: 1px solid var(--ws-border); + background: var(--ws-black) !important; + border: 1px solid var(--ws-border) !important; border-radius: var(--ws-radius-sm); - color: var(--ws-text); + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; font-size: 15px; - font-family: var(--ws-font); } .ws-form-group input:focus, .ws-form-group select:focus, .ws-form-group textarea:focus { - outline: none; - border-color: var(--ws-border-focus); - box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.25); + outline: none !important; + border-color: var(--ws-border-focus) !important; + box-shadow: 0 0 0 2px rgba(52, 175, 227, 0.25) !important; } .ws-form-group input::placeholder, @@ -331,18 +335,18 @@ body { width: 100%; max-width: 100%; padding: 0.5rem 0.75rem; - background: var(--ws-bg-page); - border: 1px solid var(--ws-border); + background: var(--ws-black) !important; + border: 1px solid var(--ws-border) !important; border-radius: var(--ws-radius-sm); - color: var(--ws-text); + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; font-size: 15px; - font-family: var(--ws-font); } .ws-form-login input:focus { - outline: none; - border-color: var(--ws-border-focus); - box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.25); + outline: none !important; + border-color: var(--ws-border-focus) !important; + box-shadow: 0 0 0 2px rgba(52, 175, 227, 0.25) !important; } .ws-text-danger { @@ -364,25 +368,26 @@ body { border-radius: var(--ws-radius-sm); margin-bottom: 1rem; border: 1px solid transparent; + font-family: var(--ws-font) !important; } .ws-alert-success { - background: var(--ws-success-bg); - color: var(--ws-success); - border-color: rgba(19, 173, 83, 0.3); + background: var(--ws-success-bg) !important; + color: var(--ws-success) !important; + border-color: rgba(19, 173, 83, 0.3) !important; } .ws-alert-error, .ws-alert-danger { - background: var(--ws-danger-bg); - color: var(--ws-danger); - border-color: rgba(255, 58, 32, 0.3); + background: var(--ws-danger-bg) !important; + color: var(--ws-danger) !important; + border-color: rgba(255, 58, 32, 0.3) !important; } .ws-alert-warning { - background: rgba(255, 136, 0, 0.12); - color: #FF8800; - border-color: rgba(255, 136, 0, 0.3); + background: rgba(255, 136, 0, 0.12) !important; + color: #FF8800 !important; + border-color: rgba(255, 136, 0, 0.3) !important; } .ws-alert .btn-close { @@ -390,15 +395,14 @@ body { opacity: 0.7; } -/* Пустое состояние */ .ws-empty { text-align: center; padding: 2rem 1rem; color: var(--ws-text-secondary); + font-family: var(--ws-font) !important; font-size: 15px; } -/* Логин */ .ws-login-card { max-width: 380px; margin: 2rem auto; @@ -406,52 +410,55 @@ body { } .ws-login-title { + font-family: var(--ws-font) !important; font-size: 24px; line-height: 1.25; letter-spacing: -0.02em; font-weight: 700; margin-bottom: 1.5rem; text-align: center; + color: var(--ws-text); } -/* Главная */ .ws-hero { padding: 2rem 0; text-align: center; } .ws-hero h1 { + font-family: var(--ws-font) !important; font-size: 32px; line-height: 1.25; letter-spacing: -0.02em; font-weight: 700; margin-bottom: 0.5rem; + color: var(--ws-text); } .ws-hero p { color: var(--ws-text-muted); + font-family: var(--ws-font) !important; font-size: 16px; line-height: 1.5; } -/* Подсказка удаления */ .ws-confirm-text { color: var(--ws-text-muted); margin-bottom: 1.25rem; } -/* Таблица в форме заказа — инпуты */ +/* Таблица в форме заказа */ .ws-table input.form-control, .ws-table select.form-select, .ws-table input[type="text"], .ws-table input[type="number"], .ws-table select { - background: var(--ws-bg-page); - border: 1px solid var(--ws-border); - color: var(--ws-text); + background: var(--ws-black) !important; + border: 1px solid var(--ws-border) !important; + color: var(--ws-text) !important; padding: 0.4rem 0.5rem; + font-family: var(--ws-font) !important; font-size: 14px; - font-family: var(--ws-font); } .ws-form-card .ws-form-group input, @@ -468,12 +475,52 @@ body { .ws-table input:focus, .ws-table select:focus { - border-color: var(--ws-border-focus); - box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.2); + border-color: var(--ws-border-focus) !important; + box-shadow: 0 0 0 2px rgba(52, 175, 227, 0.2) !important; } -/* Списки документов — выравнивание чисел */ .ws-table .ws-num { text-align: right; font-variant-numeric: tabular-nums; } + +/* Переопределение Bootstrap: кнопки и инпуты в контенте */ +.ws-main .btn-primary { + background: var(--ws-accent) !important; + border-color: var(--ws-accent) !important; + color: var(--ws-black) !important; + font-family: var(--ws-font) !important; +} + +.ws-main .btn-primary:hover { + background: var(--ws-accent-hover) !important; + border-color: var(--ws-accent-hover) !important; + color: var(--ws-white) !important; +} + +.ws-main .form-control, +.ws-main .form-select { + background: var(--ws-black) !important; + border-color: var(--ws-border) !important; + color: var(--ws-text) !important; + font-family: var(--ws-font) !important; +} + +.ws-main .form-control:focus, +.ws-main .form-select:focus { + border-color: var(--ws-border-focus) !important; + box-shadow: 0 0 0 0.25rem rgba(52, 175, 227, 0.25) !important; +} + +.ws-main .form-control::placeholder { + color: var(--ws-text-secondary); +} + +.ws-main h1, .ws-main h2, .ws-main h3, .ws-main h4 { + font-family: var(--ws-font) !important; + color: var(--ws-text) !important; +} + +.ws-main p, .ws-main label, .ws-main td, .ws-main th, .ws-main li { + font-family: var(--ws-font) !important; +} diff --git a/app/static/images/watersurf-logo.png b/app/static/images/watersurf-logo.png deleted file mode 100644 index c7acdbc306d6c60e9dd92a0ac3054b58f3e7eb82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17419 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 U$E3=0Kw1r3UccXkpgQROUvXYHLjV8( diff --git a/app/templates/base.html b/app/templates/base.html index ce4f0f0..17b088c 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -15,7 +15,7 @@