From 9fba1427b4b6bf96f4e018e3ce4df26ac4b57942 Mon Sep 17 00:00:00 2001 From: cursor-agent Date: Wed, 25 Feb 2026 16:10:38 +0000 Subject: [PATCH] =?UTF-8?q?Update:=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=B1=D1=80=D0=B5=D0=BD=D0=B4=D0=B1=D1=83=D0=BA?= =?UTF-8?q?=D1=83,=20Geologica,=20=D0=BB=D0=BE=D0=B3=D0=BE=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=20=D0=B2=20=D1=88=D0=B0=D0=BF=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- HISTORY.md | 14 ++ app/static/css/theme.css | 192 +++++++++++++++++---------- app/static/images/watersurf-logo.png | Bin 0 -> 17419 bytes app/templates/base.html | 4 +- 4 files changed, 136 insertions(+), 74 deletions(-) create mode 100644 app/static/images/watersurf-logo.png diff --git a/HISTORY.md b/HISTORY.md index 800eb62..c2e3806 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,19 @@ # История изменений ERP WaterSurf +## 2025-02-25 20:15 UTC – Стили по корпоративному брендбуку и логотип + +**Проблема**: Нужно привести интерфейс в соответствие с корпоративным брендбуком WaterSurf и использовать логотип компании. + +**Решение**: +- В `static/css/theme.css` применены цвета брендбука: базовый фон #0A121D, ключевой акцент #0DADBB, градации серого (Gray 01–04), дополнительные красный/зелёный для состояний. +- Подключён шрифт Geologica (Google Fonts): Light для основного текста, Medium для подзаголовков, Bold для заголовков; учтён letter-spacing по брендбуку. +- В шапке вместо текстовой надписи выводится логотип WaterSurf из `static/images/watersurf-logo.png`, рядом — подпись «ERP». +- Сохранены тёмная тема, минималистичные карточки, таблицы и формы в едином стиле. + +**Изменения**: base.html (подключение Geologica, логотип в навбаре), theme.css (палитра и типографика брендбука), добавлен каталог static/images и файл watersurf-logo.png. + +--- + ## 2025-02-25 19:00 UTC – Кнопка «Добавить строку» в табличной части заказов **Проблема**: В форме заказа клиента (и заказа поставщику) нельзя было добавить более одной строки товаров — formset показывал только одну пустую строку (extra=1). diff --git a/app/static/css/theme.css b/app/static/css/theme.css index e0a3fa8..989b87a 100644 --- a/app/static/css/theme.css +++ b/app/static/css/theme.css @@ -1,23 +1,38 @@ -/* ERP WaterSurf — тёмная тема, минималистичный интерфейс */ +/* ERP WaterSurf — стили по корпоративному брендбуку */ +/* Базовые цвета брендбука */ :root { - --ws-bg-page: #0d1117; - --ws-bg-surface: #161b22; - --ws-bg-elevated: #21262d; - --ws-bg-hover: #30363d; - --ws-border: #30363d; - --ws-border-focus: #58a6ff; - --ws-text: #e6edf3; - --ws-text-muted: #8b949e; - --ws-accent: #2dd4bf; - --ws-accent-hover: #5eead4; - --ws-danger: #f87171; - --ws-danger-bg: rgba(248, 113, 113, 0.12); - --ws-success-bg: rgba(45, 212, 191, 0.12); + --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-bg-page: #0A121D; + --ws-bg-surface: #0f1823; + --ws-bg-elevated: #151d2b; + --ws-bg-hover: #1a2435; + --ws-border: #2a3647; + --ws-border-focus: #0DADBB; + --ws-text: #F5F9FD; + --ws-text-muted: #B1C7D7; + --ws-text-secondary: #617E92; + --ws-danger-bg: rgba(255, 58, 32, 0.12); + --ws-success-bg: rgba(19, 173, 83, 0.12); --ws-radius: 8px; --ws-radius-sm: 6px; - --ws-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); - --ws-font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --ws-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); + --ws-font: "Geologica", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } * { @@ -31,13 +46,34 @@ html { body { background: var(--ws-bg-page); color: var(--ws-text); - font-family: var(--ws-font-sans); - font-size: 15px; - line-height: 1.6; + font-family: var(--ws-font); + font-weight: 300; + font-size: 16px; + line-height: 1.5; + letter-spacing: -0.02em; min-height: 100vh; -webkit-font-smoothing: antialiased; } +/* Типографика по масштабу брендбука: p3 16/24 -2% для основного текста */ +.ws-page-title { + font-size: 24px; + line-height: 1.25; + letter-spacing: -0.02em; + font-weight: 700; + margin-bottom: 1rem; + color: var(--ws-text); +} + +.ws-form-section-title { + font-size: 20px; + line-height: 1.3; + letter-spacing: -0.02em; + font-weight: 500; + margin-bottom: 0.75rem; + color: var(--ws-text); +} + /* Навбар */ .navbar-ws { background: var(--ws-bg-surface) !important; @@ -46,19 +82,34 @@ body { } .navbar-ws .navbar-brand { + display: flex; + align-items: center; + gap: 0.75rem; color: var(--ws-text) !important; - font-weight: 600; + font-weight: 700; font-size: 1.1rem; + letter-spacing: -0.02em; +} + +.navbar-ws .navbar-brand img { + height: 36px; + width: auto; + object-fit: contain; } .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; border-radius: var(--ws-radius-sm); padding: 0.4rem 0.75rem !important; + font-weight: 400; } .navbar-ws .nav-link:hover { @@ -86,7 +137,8 @@ body { .navbar-ws .navbar-text { color: var(--ws-text-muted); - font-size: 0.9rem; + font-size: 14px; + letter-spacing: -0.01em; } .navbar-ws .navbar-toggler { @@ -101,13 +153,6 @@ body { padding: 1.5rem 1rem 3rem; } -.ws-page-title { - font-size: 1.5rem; - font-weight: 600; - margin-bottom: 1rem; - color: var(--ws-text); -} - /* Карточки */ .ws-card { background: var(--ws-bg-surface); @@ -148,10 +193,10 @@ body { .ws-table th { background: var(--ws-bg-elevated); - font-weight: 600; - font-size: 0.85rem; - color: var(--ws-text-muted); - text-transform: none; + font-weight: 500; + font-size: 14px; + letter-spacing: -0.01em; + color: var(--ws-text-secondary); } .ws-table tbody tr:hover { @@ -169,7 +214,7 @@ body { .ws-table .ws-link { color: var(--ws-accent); text-decoration: none; - font-size: 0.9rem; + font-size: 14px; } .ws-table .ws-link:hover { @@ -182,23 +227,24 @@ body { } .ws-table .ws-link-danger:hover { - color: #fca5a5; + color: var(--ws-danger-dark); } -/* Кнопки */ +/* Кнопки — ключевой цвет бренда */ .btn-ws-primary { background: var(--ws-accent); - color: var(--ws-bg-page); + color: var(--ws-black); border: none; border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; font-weight: 500; - font-size: 0.9rem; + font-size: 14px; + letter-spacing: -0.01em; } .btn-ws-primary:hover { background: var(--ws-accent-hover); - color: var(--ws-bg-page); + color: var(--ws-black); } .btn-ws-secondary { @@ -207,13 +253,13 @@ body { border: 1px solid var(--ws-border); border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; - font-size: 0.9rem; + font-size: 14px; } .btn-ws-secondary:hover { background: var(--ws-bg-hover); color: var(--ws-text); - border-color: var(--ws-border); + border-color: var(--ws-gray-04); } .btn-ws-danger { @@ -222,12 +268,12 @@ body { border: 1px solid var(--ws-danger); border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; - font-size: 0.9rem; + font-size: 14px; } .btn-ws-danger:hover { background: var(--ws-danger); - color: var(--ws-bg-page); + color: var(--ws-white); } .ws-btn-group { @@ -245,7 +291,8 @@ body { .ws-form-group label { display: block; font-weight: 500; - font-size: 0.9rem; + font-size: 14px; + letter-spacing: -0.01em; color: var(--ws-text-muted); margin-bottom: 0.35rem; } @@ -260,7 +307,8 @@ body { border: 1px solid var(--ws-border); border-radius: var(--ws-radius-sm); color: var(--ws-text); - font-size: 0.95rem; + font-size: 15px; + font-family: var(--ws-font); } .ws-form-group input:focus, @@ -268,13 +316,13 @@ body { .ws-form-group textarea:focus { outline: none; border-color: var(--ws-border-focus); - box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.25); + box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.25); } .ws-form-group input::placeholder, .ws-form-group textarea::placeholder { - color: var(--ws-text-muted); - opacity: 0.8; + color: var(--ws-text-secondary); + opacity: 0.9; } .ws-form-login input, @@ -287,18 +335,19 @@ body { border: 1px solid var(--ws-border); border-radius: var(--ws-radius-sm); color: var(--ws-text); - font-size: 0.95rem; + 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(88, 166, 255, 0.25); + box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.25); } .ws-text-danger { color: var(--ws-danger); - font-size: 0.85rem; + font-size: 14px; display: block; margin-top: 0.25rem; } @@ -309,13 +358,6 @@ body { border-top: 1px solid var(--ws-border); } -.ws-form-section-title { - font-size: 1rem; - font-weight: 600; - margin-bottom: 0.75rem; - color: var(--ws-text); -} - /* Сообщения (alerts) */ .ws-alert { padding: 0.75rem 1rem; @@ -326,21 +368,21 @@ body { .ws-alert-success { background: var(--ws-success-bg); - color: var(--ws-accent); - border-color: rgba(45, 212, 191, 0.3); + color: var(--ws-success); + border-color: rgba(19, 173, 83, 0.3); } .ws-alert-error, .ws-alert-danger { background: var(--ws-danger-bg); color: var(--ws-danger); - border-color: rgba(248, 113, 113, 0.3); + border-color: rgba(255, 58, 32, 0.3); } .ws-alert-warning { - background: rgba(251, 191, 36, 0.12); - color: #fbbf24; - border-color: rgba(251, 191, 36, 0.3); + background: rgba(255, 136, 0, 0.12); + color: #FF8800; + border-color: rgba(255, 136, 0, 0.3); } .ws-alert .btn-close { @@ -352,8 +394,8 @@ body { .ws-empty { text-align: center; padding: 2rem 1rem; - color: var(--ws-text-muted); - font-size: 0.95rem; + color: var(--ws-text-secondary); + font-size: 15px; } /* Логин */ @@ -364,8 +406,10 @@ body { } .ws-login-title { - font-size: 1.5rem; - font-weight: 600; + font-size: 24px; + line-height: 1.25; + letter-spacing: -0.02em; + font-weight: 700; margin-bottom: 1.5rem; text-align: center; } @@ -377,14 +421,17 @@ body { } .ws-hero h1 { - font-size: 1.75rem; - font-weight: 600; + font-size: 32px; + line-height: 1.25; + letter-spacing: -0.02em; + font-weight: 700; margin-bottom: 0.5rem; } .ws-hero p { color: var(--ws-text-muted); - font-size: 1rem; + font-size: 16px; + line-height: 1.5; } /* Подсказка удаления */ @@ -403,7 +450,8 @@ body { border: 1px solid var(--ws-border); color: var(--ws-text); padding: 0.4rem 0.5rem; - font-size: 0.9rem; + font-size: 14px; + font-family: var(--ws-font); } .ws-form-card .ws-form-group input, @@ -421,7 +469,7 @@ body { .ws-table input:focus, .ws-table select:focus { border-color: var(--ws-border-focus); - box-shadow: 0 0 0 2px rgba(88, 166, 255, 0.2); + box-shadow: 0 0 0 2px rgba(13, 173, 187, 0.2); } /* Списки документов — выравнивание чисел */ diff --git a/app/static/images/watersurf-logo.png b/app/static/images/watersurf-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c7acdbc306d6c60e9dd92a0ac3054b58f3e7eb82 GIT binary patch literal 17419 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 U$E3=0Kw1r3UccXkpgQROUvXYHLjV8( literal 0 HcmV?d00001 diff --git a/app/templates/base.html b/app/templates/base.html index 1255beb..ce4f0f0 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -7,7 +7,7 @@ {% block title %}ERP WaterSurf{% endblock %} - + {% block extra_css %}{% endblock %} @@ -15,7 +15,7 @@