# enova365 - Szczegółowy Przewodnik Projektowy UI Dokument opisuje zasady budowania interfejsów użytkownika wizualnie spójnych z aplikacją enova365 ERP firmy Soneta. Opracowany na podstawie analizy screenshotów i plików HTML aplikacji. --- ## 1. MOTYWY KOLORYSTYCZNE Aplikacja posiada dwa pełne motywy: jasny (white) i ciemny (black). Oba używają tego samego systemu zmiennych CSS (~830 tokenów). ### 1.1 Kolor wiodący (Brand) Kolory brand pochodzą z pliku palety `PaletteBase.css` (katalog `wzorce/css/standard/`). | Element | Wartość | Zmienna CSS | |---------|---------|-------------| | **Główny zielony (primary/header)** | `#016E46` (szmaragdowy) | `--brand_500` | | **Brand ciemny** | `#015436` | `--brand_600` | | **Brand najciemniejszy** | `#01422A` | `--brand_700` | | **Brand jasny** | `#02BB77` | `--brand_300` | | **Brand najjaśniejszy** | `#02E391` | `--brand_200` | | **Akcent cyjan** | `#31e2b8` (turkusowy - logo) | — | | **Akcent błękitny** | `#6acbf3` (jasny niebieski - logo) | — | ### 1.2 Motyw jasny (White) | Przeznaczenie | Kolor | Opis | |---------------|-------|------| | **Tło główne (content area)** | `rgb(230, 231, 231)` | Jasnoszare — `--theme_bg`, wydziela białe elementy UI | | **Tło nagłówka (header bar)** | `#016E46` | Szmaragdowy — `--brand_500` | | **Tło sidebara** | `#003320` | Bardzo ciemna zieleń — `RGBA(0, 51, 32)`, **ciemniejszy niż header** | | **Sidebar hover** | `#004626` | `RGBA(0, 70, 38)` — `--nav_tree_item_hover` | | **Sidebar selected** | `#005830` | `RGBA(0, 88, 48)` — `--nav_tree_item_selected` | | **Tekst sidebara** | `#FFFFFF` | Biały tekst na ciemnozielonym tle sidebara | | **Tło surface/karty** | `#FFFFFF` | Białe karty na jasnym tle | | **Tło sekcji** | `#F5F5F5` ~ `#FAFAFA` | Bardzo jasnoszare | | **Tekst podstawowy** | `#212121` ~ `#333333` | Ciemnoszary/prawie czarny | | **Tekst drugorzędny** | `#757575` ~ `#A3A3A3` | Średni szary | | **Tekst etykiet** | `#616161` | Szary na etykietach pól | | **Tekst na ciemnym tle** | `#FFFFFF` | Biały na zielonym headerze | | **Obramowanie inputów** | `#BDBDBD` ~ `#E0E0E0` | Jasnoszare | | **Obramowanie focus** | `#016E46` | Zielony border na focus | | **Tło wiersza zaznaczonego** | `rgba(46, 125, 50, 0.08)` | Bardzo lekki zielony tint | | **Tło wiersza hover** | `rgba(0, 0, 0, 0.04)` | Prawie przezroczysty szary | | **Separator/divider** | `#E0E0E0` | Jasnoszara linia | | **Tło inputu disabled** | `#F5F5F5` | Jasnoszary | ### 1.3 Motyw ciemny (Black) | Przeznaczenie | Kolor | Opis | |---------------|-------|------| | **Tło główne** | `#1E1E1E` ~ `#212121` | Ciemny grafitowy | | **Tło nagłówka (header bar)** | `#1B5E20` ~ `#0D3B14` | Ciemnozielony (ciemniejszy niż w jasnym) | | **Tło sidebara** | `#1A1A1A` ~ `#1E1E1E` | Ciemny — w motywie ciemnym sidebar nie jest zielony, lecz ciemny grafitowy | | **Tło surface/karty** | `#2A2A2A` ~ `#303030` | Ciemny grafitowy | | **Tło sekcji** | `#252525` ~ `#2C2C2C` | Nieco jaśniejszy ciemny | | **Tekst podstawowy** | `#E0E0E0` ~ `#F0F0F0` | Jasnoszary | | **Tekst drugorzędny** | `#A3A3A3` ~ `#9E9E9E` | Średni szary | | **Tekst etykiet** | `#BDBDBD` | Jasnoszary | | **Obramowanie inputów** | `#424242` ~ `#555555` | Ciemnoszare | | **Obramowanie focus** | `#016E46` | Zielony (taki sam jak w jasnym) | | **Tło wiersza zaznaczonego** | `rgba(46, 125, 50, 0.15)` | Lekki zielony tint na ciemnym | | **Tło wiersza hover** | `rgba(255, 255, 255, 0.05)` | Prawie przezroczysty biały | | **Separator/divider** | `#424242` | Ciemnoszara linia | | **Tło inputu** | `#2A2A2A` ~ `#333333` | Ciemny | | **Tło overlay/modal** | `rgba(0, 0, 0, 0.5)` ~ `rgba(0, 0, 0, 0.7)` | Półprzezroczysty czarny | ### 1.4 Kolory semantyczne (wspólne dla obu motywów) | Przeznaczenie | Kolor | Opis | |---------------|-------|------| | **Success / Primary action** | `#2E7D32` | Zielony - przyciski "Zapisz" | | **Danger / Zamknij** | `#C62828` ~ `#D32F2F` | Czerwony - przyciski "Zamknij", "X" | | **Warning** | `#F57C00` ~ `rgb(192, 64, 0)` | Pomarańczowy | | **Info** | `#1976D2` | Niebieski | | **Link** | `#016E46` | Ciemnozielony - linki "Nie pamiętasz hasła?" | | **Disabled text** | `#A3A3A3` | Szary z opacity | | **Error border/shadow** | Czerwony z shadow | Walidacja | | **Warning border/shadow** | Pomarańczowy z shadow | Ostrzeżenia | ### 1.5 Kolory ikon modułów (menu główne) Na ekranie menu głównego widoczne są kolorowe ikony modułów w kołach: | Moduł | Kolor ikony | |-------|-------------| | Terminarz | Zielony | | Ewidencja dokumentów | Niebieski | | Ewidencja Środków Pieniężnych | Cyjan | | Kadry i płace | Pomarańczowy | | Księgowość | Fioletowy | | Księga inwentarzowa | Oliwkowy | | Ewidencja pojazdów | Czerwony | | Handel | Żółty | | Produkcja zaawansowana | Magenta | | ServiceDesk | Różowy | | Business Intelligence | Złoty | | CRM | Zielonkawy | --- ## 2. TYPOGRAFIA ### 2.1 Rodziny czcionek | Przeznaczenie | Czcionka | Fallback | |---------------|----------|----------| | **Główna (primaryFont)** | `"SourceSans"` | `Arial, sans-serif` | | **Nagłówki/pogrubienia** | `"SourceSansSemiBold"` | `Arial, sans-serif` | | **Alternatywna** | `"Roboto"` | `sans-serif` | | **Branding/logo** | `"Lato"` | `sans-serif` | | **Monospace (kod)** | `Consolas` | `"Courier New", monospace` | ### 2.2 Rozmiary czcionek | Przeznaczenie | Rozmiar | |---------------|---------| | **Drobny tekst (captions)** | `10px` – `11px` | | **Etykiety pól formularza** | `12px` | | **Tekst w inputach** | `13px` – `14px` | | **Tekst podstawowy (body)** | `14px` | | **Nazwy zakładek/tabs** | `13px` – `14px` | | **Tytuł formularza** | `16px` – `18px` | | **Nagłówki sekcji** | `14px` – `16px` (z font-weight: 600) | | **Nazwa modułu (menu)** | `16px` – `18px` | | **Opis modułu (menu)** | `12px` – `13px` | | **Duże nagłówki** | `20px` – `24px` | | **Logo "enova365"** | `24px` – `32px` | | **Strona logowania – hasło** | `24px` – `32px` | | **Ekran logowania – "System ERP"** | `22px` – `26px` | ### 2.3 Grubości czcionek | Styl | Wartość | |------|---------| | **Light** | `300` | | **Regular** | `400` (domyślna) | | **Medium** | `500` | | **Semi-bold** | `600` (nagłówki sekcji, aktywne elementy menu) | | **Bold** | `bold` / `700` (tytuły, pogrubienia) | ### 2.4 Odstępy między literami | Kontekst | Wartość | |----------|---------| | **Normalny tekst** | `0` ~ `0.1px` | | **Etykiety** | `0.15px` ~ `0.25px` | | **Przyciski uppercase** | `0.6px` ~ `2px` | ### 2.5 Wysokość linii | Kontekst | Wartość | |----------|---------| | **Drobny tekst** | `14px` – `16px` | | **Tekst podstawowy** | `18px` – `20px` | | **Wiersze tabeli** | `20px` – `24px` | | **Inputy** | `24px` – `26px` | | **Nagłówki** | `28px` – `32px` | | **Duże elementy** | `48px` | --- ## 3. UKŁAD (LAYOUT) ### 3.1 Struktura główna ``` ┌──────────────────────────────────────────────────────┐ │ HEADER BAR (~48-56px) │ │ [Logo] [Nawigacja] [Play][Czas] [Ikony] [Avatar] │ ├──────────┬───────────────────────────────────────────┤ │ │ BREADCRUMB / PATH BAR (~32px) │ │ ├───────────────────────────────────────────┤ │ SIDEBAR │ TITLE BAR + TABS / TOOLBAR (~44-48px) │ │ (250px) ├───────────────────────────────────────────┤ │ │ │ │ Drzewo │ CONTENT AREA │ │ nawigacji│ (Formularz / Lista / Dashboard) │ │ │ │ │ │ │ ├──────────┴───────────────────────────────────────────┤ │ STATUS BAR (opcjonalnie) │ └──────────────────────────────────────────────────────┘ ``` ### 3.2 Wymiary główne | Element | Wymiar | |---------|--------| | **Header bar height** | `48px` – `56px` | | **Sidebar width (rozwinięty)** | `240px` – `260px` | | **Sidebar width (zwinięty)** | `48px` – `56px` | | **Breadcrumb bar height** | `28px` – `32px` | | **Toolbar / tab bar height** | `40px` – `48px` | | **Status bar height** | `24px` – `28px` | | **Minimalna szerokość okna** | `1024px` | ### 3.3 System layoutu - **Flexbox** jest dominującym modelem layoutu - `display: flex` z `flex-direction: row` dla głównego podziału (sidebar + content) - `display: flex` z `flex-direction: column` dla wertykalnego stackowania sekcji - **Grid** używany sporadycznie, głównie w dashboardzie modułów (siatka kafelków) - `justify-content: space-between` dla rozmieszczania elementów w toolbarze - `align-items: center` praktycznie wszędzie do verticalnego centrowania --- ## 4. KOMPONENTY UI ### 4.1 Przyciski (Buttons) #### Warianty | Wariant | Tło | Tekst | Obramowanie | Użycie | |---------|-----|-------|-------------|--------| | **Primary** | `#2E7D32` (zielony) | `#FFFFFF` | brak | "Zapisz", "Zaloguj" | | **Secondary** | przezroczyste | ciemny/jasny tekst | `1px solid` szary | "Wersja mobilna", "Czynności" | | **Tertiary** | przezroczyste | ciemny/jasny tekst | brak | Ikony w toolbarze | | **Danger** | `#C62828` (czerwony) | `#FFFFFF` | brak | "Zamknij" | | **Important** | zielony z wyróżnieniem | `#FFFFFF` | brak | Kluczowe akcje | #### Rozmiary i kształt | Właściwość | Wartość | |------------|---------| | **Wysokość przycisku** | `32px` – `38px` (standard), `40px` – `44px` (duży) | | **Padding** | `6px 12px` (mały), `8px 16px` (standard), `10px 20px` (duży) | | **Border-radius** | `4px` – `6px` (prostokątne z lekkim zaokrągleniem) | | **Font-size** | `13px` – `14px` | | **Font-weight** | `500` – `600` | | **Min-width** | brak (dopasowanie do treści) | | **Gap (ikona + tekst)** | `6px` – `8px` | #### Stany | Stan | Zmiana wizualna | |------|----------------| | **Hover** | Lekkie rozjaśnienie tła, zmiana kursora na pointer | | **Focus** | `box-shadow: inset 0 0 3px 1px #016E46` lub `outline: 2px solid #016E46` | | **Pressed/Active** | Lekkie przyciemnienie tła | | **Disabled** | Opacity `0.5` – `0.6`, brak interakcji, `cursor: default` | | **Selected** | Wyraźniejsze tło, pogrubiony tekst | #### Przycisk "Zapisz" (przykład Primary) ```css .btn-primary { background-color: #2E7D32; color: #FFFFFF; border: none; border-radius: 4px; padding: 6px 16px; font-size: 14px; font-weight: 500; cursor: pointer; } ``` #### Przycisk "Zamknij" (przykład Danger) ```css .btn-danger { background-color: #C62828; color: #FFFFFF; border: none; border-radius: 4px; padding: 6px 12px; font-size: 14px; font-weight: 500; display: flex; align-items: center; gap: 4px; } ``` ### 4.2 Pola formularza (Inputs) #### Tekst / Text Input | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Tło** | `#FFFFFF` | `#2A2A2A` | | **Tekst** | `#212121` | `#E0E0E0` | | **Obramowanie** | `1px solid #BDBDBD` | `1px solid #555555` | | **Border-radius** | `4px` | `4px` | | **Wysokość** | `30px` – `32px` | `30px` – `32px` | | **Padding** | `4px 8px` | `4px 8px` | | **Font-size** | `13px` – `14px` | `13px` – `14px` | #### Stany inputów | Stan | Opis | |------|------| | **Focus** | Border zmienia się na `#016E46` (zielony), opcjonalnie `box-shadow: inset 0 0 3px 1px #016E46` | | **Disabled** | Tło `#F5F5F5` (jasny) / `#1A1A1A` (ciemny), tekst przyszarzony | | **Error** | Czerwony shadow/border | | **Warning** | Pomarańczowy shadow/border | | **Read-only** | Bez border-bottom, wygląda jak tekst | #### Etykiety (Labels) | Właściwość | Wartość | |------------|---------| | **Pozycja** | Nad inputem lub po lewej stronie (inline) | | **Font-size** | `12px` | | **Color** | Szary (`#757575` jasny / `#BDBDBD` ciemny) | | **Font-weight** | `400` (regular) | | **Margin-bottom** | `2px` – `4px` (gdy nad inputem) | #### Układ pól w formularzu - Pola ułożone w siatce 2-4 kolumn - Etykieta po lewej, input po prawej (inline layout) - dominujący wzorzec - Etykieta ma stałą szerokość (~100-140px) - Input rozciąga się na dostępną przestrzeń (`flex: 1`) - Odstęp między wierszami: `8px` – `12px` - Sekcje oddzielone nagłówkami z większym marginesem górnym (`16px` – `24px`) ### 4.3 Checkbox | Właściwość | Wartość | |------------|---------| | **Rozmiar** | `16px` × `16px` ~ `18px` × `18px` | | **Border-radius** | `2px` – `3px` | | **Border** | `1px` – `2px solid` szary | | **Checked background** | Zielony (`#2E7D32`) | | **Checked checkmark** | Biały | | **Disabled** | Przyszarzony z zmniejszoną opacity | ### 4.4 Tabele / Listy #### Nagłówek tabeli | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Tło** | `#F5F5F5` ~ `#EEEEEE` | `#2A2A2A` ~ `#333333` | | **Tekst** | `#616161` | `#BDBDBD` | | **Font-size** | `12px` – `13px` | | **Font-weight** | `600` | | **Padding** | `8px 12px` | | **Border-bottom** | `1px solid #E0E0E0` / `#424242` | #### Wiersze tabeli | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Tło parzyste** | `#FFFFFF` | `#1E1E1E` | | **Tło nieparzyste** | `#FAFAFA` ~ `#F5F5F5` | `#252525` ~ `#2A2A2A` | | **Wysokość wiersza** | `30px` – `36px` | | **Padding komórki** | `4px 12px` ~ `6px 12px` | | **Font-size** | `13px` – `14px` | | **Border-bottom** | `1px solid #F0F0F0` / `#333333` | #### Stany wierszy | Stan | Motyw jasny | Motyw ciemny | |------|-------------|--------------| | **Hover** | `rgba(0,0,0,0.04)` | `rgba(255,255,255,0.05)` | | **Selected** | Lekki zielony tint `rgba(46,125,50,0.08)` | `rgba(46,125,50,0.15)` | | **Active/focused** | Wyraźniejszy zielony tint | Wyraźniejszy zielony tint | ### 4.5 Zakładki (Tabs) Na podstawie screenshotów widoczne są dwa style zakładek: #### Tabs w toolbarze (styl "pill/outline") | Właściwość | Wartość | |------------|---------| | **Styl** | Obramowane prostokąty (outline) | | **Padding** | `6px 12px` | | **Border-radius** | `4px` | | **Border** | `1px solid` szary | | **Font-size** | `13px` | | **Aktywna zakładka** | Zielone tło lub wyraźny zielony border | | **Gap między tabami** | `4px` – `6px` | #### Tabs w dokumencie (styl "page tabs") | Właściwość | Wartość | |------------|---------| | **Styl** | Zakładki z górnym paskiem jako sekcje | | **Gap** | `0px` (przylegające) | | **Aktywna** | Wyróżnione tło, pogrubiony tekst | ### 4.6 Nagłówek aplikacji (Header Bar) | Właściwość | Wartość | |------------|---------| | **Tło** | Szmaragdowy (`#016E46` — `--brand_500`) | | **Wysokość** | `48px` – `56px` | | **Logo** | Po lewej stronie headera. Używać pliku `logo_standard.svg` (patrz sekcja 8.5) osadzonego inline jako `` z `fill="#FFFFFF"` na obu elementach ``, `viewBox="0 0 200 33.5"`, wysokość `22px`, szerokość `auto`. Logo zawiera pełny napis „enova365" z ikoną play (kółko z trójkątem) zastępującą literę „o". **Nie odtwarzać logo z osobnych elementów (tekst + ikona)** — zawsze używać oficjalnego pliku SVG | | **Pole wyszukiwania** | Umieszczone w headerze po prawej od logo, ale z **jasnym/białym tłem** i ciemnym tekstem (nie przezroczyste/ciemne). Ikona lupy po lewej stronie inputa. Zaokrąglone rogi (`border-radius: 4px`) | | **Ikony** | Białe, liniowe SVG, `20px` – `24px` | | **Avatar** | Kółko `32px` – `36px`, zielone tło z białym inicjałem | | **Padding** | `0 16px` | | **Shadow** | Subtelny shadow na dole | | **Elementy środkowe** | Play/timer, zegar (format `00:00`) | | **Elementy prawe** | Ikona lupy (szukaj), ikona ustawień (trybik), ikona dzwonka (powiadomienia), avatar z nazwą użytkownika i rolą | ### 4.7 Sidebar / Panel nawigacji **WAŻNE:** W motywie jasnym sidebar ma **bardzo ciemne zielone tło** (`#003320`) z **białym tekstem** — jest **ciemniejszy niż header** (`#016E46`). Sidebar jest wizualnie "pływającym panelem" — posiada **zaokrąglone rogi** i **marginesy** oddzielające go od headera i content area. #### Kształt i pozycjonowanie sidebara | Właściwość | Wartość | |------------|---------| | **Border-radius** | `8px` ~ `12px` (zaokrąglone narożniki panelu) | | **Margin** | `4px` ~ `6px` od góry, lewej i dołu — tworzy widoczną szczelinę wokół panelu | | **Tło za sidebarem** | Takie samo jak content area (białe / ciemne) — widoczne w szczelinach marginesów | #### Struktura sidebara Sidebar składa się z trzech sekcji (od góry): 1. **Pasek sterowania** — przyciski "Zwiń" (strzałka w lewo) i "Odepnij" na tle identycznym z headerem 2. **Pole wyszukiwania** — input "Wyszukaj w menu" z ikoną lupy, białe tło, pełna szerokość 3. **Drzewo nawigacji** — lista pozycji z chevronami do rozwijania podpoziomów | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Tło całego sidebara** | `#003320` (bardzo ciemna zieleń, ciemniejszy niż header) | `#262626` (ciemny grafitowy) | | **Szerokość** | `240px` – `260px` | `240px` – `260px` | | **Tekst menu** | `#FFFFFF` (biały), `13px` – `14px` | `#E0E0E0` (jasnoszary), `13px` – `14px` | | **Pole wyszukiwania** | Białe tło (`#FFFFFF`), ciemny tekst, placeholder szary | Ciemne tło (`#2A2A2A`), jasny tekst | | **Aktywny element** | Pogrubiony biały tekst, subtelne jaśniejsze tło (`rgba(255,255,255,0.12)`) | Pogrubiony, zielony tekst | | **Hover** | `rgba(255,255,255,0.08)` — lekkie rozjaśnienie | `rgba(255,255,255,0.05)` | | **Ikona rozwinięcia** | Chevron `>` / `v`, biały, `12px` | Chevron `>` / `v`, szary, `12px` | | **Ikony pozycji menu** | Białe liniowe SVG, `16px` – `18px` | Szare liniowe SVG, `16px` – `18px` | | **Padding elementu** | `8px 16px` | `8px 16px` | | **Wcięcie podpoziomów** | +`16px` – `20px` na poziom | +`16px` – `20px` na poziom | | **Border-right** | Brak (sidebar jest wizualnie oddzielony marginesem i zaokrągleniem) | Brak | | **Border-radius panelu** | `8px` ~ `12px` | `8px` ~ `12px` | | **Margin panelu** | `4px` ~ `6px` (góra, lewo, dół) | `4px` ~ `6px` (góra, lewo, dół) | | **Przyciski "Zwiń"/"Odepnij"** | Białe ikony/tekst na zielonym tle, małe `12px` – `13px` | Szare ikony/tekst | ### 4.8 Breadcrumb / Ścieżka Breadcrumb wyświetla się w górnej części content area, bezpośrednio pod paskiem zakładek dokumentów. Zawiera ikonę domu (SVG `dom.svg`) jako link do strony głównej, po której następują segmenty ścieżki oddzielone separatorem `>`. | Właściwość | Wartość | |------------|---------| | **Tło** | Jak content area (`#FFFFFF` / `#1E1E1E`) | | **Wysokość** | `28px` – `32px` | | **Font-size** | `12px` | | **Kolor tekstu segmentów** | Szary (`#757575`), każdy segment jest linkiem | | **Kolor aktywnego (ostatni)** | Ciemniejszy tekst (`#212121`) — nie jest linkiem | | **Separator** | `>` (znak większości), kolor szary `#BDBDBD`, z `margin: 0 4px` | | **Ikona Home** | Liniowa ikona SVG domku (`dom.svg`), `14px` – `16px`, kolor szary | | **Padding** | `4px 16px` | | **Przykład** | `🏠 > Kadry i płace > Kadry > Pracownicy` | ### 4.9 Modal / Dialog | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Overlay** | `rgba(0,0,0,0.5)` | `rgba(0,0,0,0.7)` | | **Tło modala** | `#FFFFFF` | `#2A2A2A` | | **Border-radius** | `8px` – `12px` | | **Shadow** | `0 4px 20px rgba(0,0,0,0.25)` | `0 4px 20px rgba(0,0,0,0.5)` | | **Padding** | `20px` – `25px` | | **Nagłówek** | Osobne tło, border-bottom | | **Szerokość** | `400px` – `600px` (zależnie od treści) | ### 4.10 Menu kontekstowe / Dropdown Na screenshotach widoczne jest menu czynności z dwoma kolumnami: | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Tło** | `#FFFFFF` | `#2A2A2A` ~ `#1E1E1E` | | **Border** | `1px solid #E0E0E0` | `1px solid #424242` | | **Border-radius** | `8px` | | **Shadow** | `0 4px 12px rgba(0,0,0,0.15)` | `0 4px 12px rgba(0,0,0,0.4)` | | **Padding wewnętrzny** | `8px 0` | | **Padding elementu** | `8px 16px` | | **Font-size elementu** | `13px` – `14px` | | **Hover elementu** | Lekkie tło | | **Układ** | Dwie kolumny w dużym menu | | **Pole wyszukiwania** | Na górze menu, z ikoną lupy | | **Ikony elementów** | Kolorowe ikony `16px` – `20px` po lewej | ### 4.11 Ekran logowania (Login) | Element | Opis | |---------|------| | **Układ** | Dwuczęściowy: lewo - zdjęcie/branding, prawo - formularz | | **Podział** | ~50/50 lub 55/45 | | **Lewa strona** | Zdjęcie stockowe z logo enova365 nałożonym | | **Prawa strona** | Formularz logowania, wycentrowany w pionie | | **Logo** | "en**>**va 365" z kolorowymi akcentami | | **Hasło brandingowe** | "System ERP dla ambitnego biznesu", `22px`, kursywa | | **Input Login** | Z etykietą, border `1px`, focus zielony | | **Input Hasło** | Z etykietą, border `1px` | | **Checkbox "Zapamiętaj"** | Standardowy checkbox | | **Link "Nie pamiętasz hasła?"** | Zielony tekst, `#016E46` | | **Przycisk "Zaloguj"** | Zielony, pełna szerokość, `height: 40px`, `border-radius: 4px` | | **Przycisk "Wersja mobilna"** | Outline, pełna szerokość | | **"Baza danych"** | Mała etykieta + wartość | | **Footer** | "by Soneta ®" w prawym dolnym rogu | ### 4.12 Dashboard / Menu główne (Folder) — Kafelki (Tiles) Parametry kafelków pochodzą z `TileItem.module.scss`, `TileGroup.module.scss` i `PaletteBase.css`. **Tło content area (za kafelkami):** `rgb(230, 231, 231)` — jasnoszare (`--theme_bg`), wydziela białe kafelki z interfejsu. #### Kafelek (Tile Item) | Właściwość | Wartość | Źródło | |------------|---------|--------| | **Szerokość** | `352px` | `TileItem` | | **Min-height** | `80px` | `TileItem` | | **Border-radius** | `12px` | `TileItem` | | **Tło (jasny)** | `#FFFFFF` | `--tile_item_bg: --neutral_0` | | **Tło (ciemny)** | `#2A2A2A` – `#333333` | `--neutral_850` | | **Border-left** | `4px solid [kolor_modułu]` | Kolorowy akcent po lewej stronie — kolor odpowiada ikonowi modułu | | **Box-shadow** | `0px 0px 10px 1px rgba(229,229,229)` | `--tile_shadow` | | **Padding** | `10px 16px` | `TileItem .t-content` | | **Gap (ikona↔tekst)** | `10px` | `TileItem .t-content` | #### Ikona w kafelku | Właściwość | Wartość | |------------|---------| | **Rozmiar** | `20px` × `20px` — SVG liniowe | | **Kolor** | Taki sam jak `border-left` — kolor modułu (np. zielony, niebieski, pomarańczowy) | | **Pozycja** | Po lewej stronie, vertically centered | #### Typografia kafelka | Element | Font | Rozmiar | Waga | Kolor | |---------|------|---------|------|-------| | **Tytuł modułu** | `Roboto` (`--tertiaryFont`) | `16px` | `600` (`--tile_fw`) | `#000000` (czarny, `--pureBlack`) | | **Opis modułu** | `Roboto` (`--tertiaryFont`) | `14px` | `400` | `rgb(68, 70, 69)` (`--tile_desc_fg`) | | **Line-height tytułu** | — | `28px` | — | — | | **Line-height opisu** | — | `16px` | — | — | #### Layout kafelków | Właściwość | Wartość | Źródło | |------------|---------|--------| | **Układ** | Flex-wrap, wyrównanie do lewej | `TileGroup .tile-content` | | **Gap między kafelkami** | `8px` | `TileMenu .main-menu`, `TileGroup .tile-content` | | **Padding grupy** | `30px 10px 0 4px` (pierwszy: `10px 10px 0 4px`) | `TileGroup` | | **Tytuł grupy** | `16px`, `font-weight: 500`, uppercase | `TileGroup .title-group` | #### Stany kafelka | Stan | Efekt | |------|-------| | **Hover** | Tło zmienia się na `#F5F5F5` (`--tile_group_hover_bg`) | | **Active** | Brak shadow, tło `--tile_active_bg` | | **Focus** | Outline `2px` z offset `2px` | ### 4.13 Toolbar / Pasek narzędzi | Właściwość | Wartość | |------------|---------| | **Wysokość** | `40px` – `48px` | | **Tło** | Takie samo jak content area | | **Border-bottom** | `1px solid` separator | | **Układ** | Flex row, `align-items: center` | | **Gap** | `4px` – `8px` | | **Padding** | `4px 16px` | | **Przyciski w toolbarze** | Styl outline/tertiary, `height: 30px` – `32px` | | **Filtry** | Zielone tło ("Rozwiń filtry"), `border-radius: 16px` – `20px` (pill) | ### 4.14 Scrollbar (niestandardowy) | Właściwość | Motyw jasny | Motyw ciemny | |------------|-------------|--------------| | **Track** | Przezroczyste lub jasnoszare | Przezroczyste lub ciemnoszare | | **Thumb** | `#BDBDBD` | `#555555` | | **Thumb hover** | `#999999` | `#777777` | | **Szerokość** | `8px` – `10px` | | **Border-radius thumb** | `4px` – `5px` | --- ## 5. SPACING SYSTEM (SYSTEM ODSTĘPÓW) Aplikacja używa skali 4px: | Token | Wartość | Użycie | |-------|---------|--------| | **xs** | `2px` | Mikro-odstępy, gap między ikoną a tekstem | | **sm** | `4px` | Padding wewnętrzny małych elementów | | **md** | `8px` | Standardowy padding, gap w flexie | | **lg** | `12px` | Padding komórek tabeli, gap przycisków | | **xl** | `16px` | Padding sekcji, margin między grupami | | **2xl** | `20px` | Padding kart/modali | | **3xl** | `24px` | Margin między sekcjami formularza | | **4xl** | `32px` | Duże odstępy strukturalne | | **5xl** | `40px` | Bardzo duże odstępy | --- ## 6. BORDER-RADIUS (ZAOKRĄGLENIA) | Element | Wartość | |---------|---------| | **Inputy** | `4px` | | **Przyciski** | `4px` – `6px` | | **Karty/kafelki** | `8px` – `12px` | | **Modals** | `8px` – `12px` | | **Pill/badge** | `16px` – `20px` | | **Avatary** | `50%` (koła) | | **Tooltipy** | `4px` – `6px` | | **Tabs** | `4px` (góra) lub `0` | --- ## 7. CIENIE (SHADOWS) | Kontekst | Wartość | |----------|---------| | **Subtelny (karty)** | `0 1px 3px rgba(0,0,0,0.08)` | | **Standardowy (dropdown)** | `0 2px 8px rgba(0,0,0,0.15)` | | **Wyraźny (modal)** | `0 4px 20px rgba(0,0,0,0.25)` | | **Focus inset** | `inset 0 0 3px 1px #016E46` | | **Header shadow** | `0 2px 4px rgba(0,0,0,0.1)` | | **Ciemny motyw** | Intensywniejsze wartości alpha (×1.5 – ×2) | --- ## 8. IKONY ### 8.1 System ikon — liniowe SVG Aplikacja enova365 używa **własnego zestawu ikon SVG w stylu liniowym (outline/stroke)**. Ikony NIE są wypełnione (filled) — składają się z konturów i linii. Każda ikona jest zdefiniowana jako plik `.svg` z elementem `` i `viewBox="0 0 160 160"`. **Kluczowe cechy stylu ikon:** - **Liniowe / outline** — ikony rysowane konturem, nie wypełnieniem - **Jednolity kolor** — fill na elemencie ``, kolor zmieniany przez CSS (`fill: currentColor` lub bezpośrednie nadpisanie `fill`) - **ViewBox 160×160** — standardowy viewBox, ikony skalowane do wymaganego rozmiaru - **Brak stroke** — mimo liniowego wyglądu, ikony używają `fill` na ścieżkach o cienkich kształtach (nie `stroke`) ### 8.2 Rozmiary i kolory | Właściwość | Wartość | |------------|---------| | **Rozmiar mały** | `14px` – `16px` (inline z tekstem, sidebar) | | **Rozmiar standardowy** | `18px` – `20px` (toolbary, menu, breadcrumb) | | **Rozmiar duży** | `24px` – `32px` (nagłówki, dashboard kafelki) | | **Kolor (jasny motyw, content)** | `#616161` (szary), kontekstowy kolor semantyczny | | **Kolor (ciemny motyw)** | `#BDBDBD` (jasnoszary) | | **Kolor na zielonym tle (header, sidebar jasny)** | `#FFFFFF` (biały) | | **Kolor aktywny** | `#2E7D32` (zielony) | ### 8.3 Najważniejsze ikony i ich pliki SVG | Nazwa pliku | Zastosowanie | |-------------|-------------| | `logo.svg` | Ikona play w kole (sam symbol, biały fill) — używany w headerze jako element dekoracyjny | ### 8.5 Pliki logo w katalogu `SvgResources/Standard/` Gotowe, kompletne wersje logotypu enova365 do osadzenia w interfejsie: | Nazwa pliku | Opis | ViewBox | |-------------|------|---------| | `logo_standard.svg` | **Pełne logo tekstowe** "enova365" — tekst + ikona play (zastępuje "o"). Dwie ścieżki: jedna dla symbolu play z cyframi "365", druga dla liter "en_va". Kolor domyślny czarny, na ciemnym tle nadać `fill: #FFFFFF` | `0 0 200 33.5` | | `logo_full_standard.svg` | Logo z dopiskiem "business" poniżej — pełna wersja brandingowa z podtytułem | `0 0 200 44` | | `logo_icon_standard.svg` | Sam symbol — kółko z trójkątem play (ikona aplikacji) | `0 0 160 160` | | `ustawienia_logo.svg` | Logo w kontekście ustawień | — | **Użycie w headerze:** Osadzić `logo_standard.svg` inline jako `` z `fill="#FFFFFF"` na obu ``, wysokość `22px`, szerokość auto. | `szukaj.svg` | Ikona lupy — wyszukiwanie | | `dom.svg` | Ikona domu — breadcrumb, strona główna | | `ustawienia.svg` | Ikona trybiku — ustawienia | | `dzwonek.svg` | Ikona dzwonka — powiadomienia | | `osoba.svg` | Ikona osoby — użytkownicy, avatar | | `folder.svg` | Ikona folderu — nawigacja, moduły | | `dokument.svg` | Ikona dokumentu — dokumenty handlowe | | `kalendarz.svg` | Ikona kalendarza — terminarz | | `filtr.svg` | Ikona filtra — filtry list | | `dodaj.svg` | Ikona plus — dodawanie | | `usun.svg` | Ikona kosza — usuwanie | | `zapisz.svg` | Ikona dyskietki — zapisywanie | | `drukarka.svg` | Ikona drukarki — drukowanie | | `wykres.svg` | Ikona wykresu — raporty, BI | | `anuluj.svg` | Ikona X — anulowanie, zamykanie | | `rozwin.svg` | Ikona chevron — rozwijanie menu | | `wstecz.svg` / `naprzod.svg` | Strzałki — nawigacja | | `odswiez.svg` | Ikona odświeżania — przeładowanie | ### 8.4 Ikony modułów na dashboardzie Na ekranie menu głównego ikony modułów wyświetlane są w **kolorowych kółkach**. Ikona SVG jest biała, tło kółka ma kolor przypisany do modułu (patrz sekcja 1.5). Kółka mają `border-radius: 50%`, rozmiar `32px` – `40px`. --- ## 9. ANIMACJE I PRZEJŚCIA | Właściwość | Wartość | |------------|---------| | **Transition domyślny** | `all 0.2s ease` lub `0.15s` | | **Hover transition** | `background-color 0.2s, color 0.2s` | | **Opacity transition** | `opacity 0.3s ease` | | **Sidebar collapse** | `width 0.3s ease` | | **Skeleton loader** | Gradient shimmer `#f0f0f0` → `#e0e0e0` → `#f0f0f0` | | **Spinner** | SVG z gradient stops, rotacja | --- ## 10. RESPONSYWNOŚĆ | Breakpoint | Zachowanie | |------------|------------| | **Desktop (>1200px)** | Pełny layout: sidebar + content | | **Tablet (~768-1200px)** | Sidebar zwinięty domyślnie, rozwijany overlay | | **Mobile (<768px)** | "Wersja mobilna" - osobna aplikacja | --- ## 11. WZORCE NAZEWNICTWA CSS VARIABLES System ~830 zmiennych CSS stosuje konwencję: ``` --{komponent}_{wariant}_{stan}_{właściwość} ``` Przykłady: - `--command_primary_hover_bg` → przycisk primary, stan hover, tło - `--nav_tree_item_selected` → drzewo nawigacji, element zaznaczony - `--input_focused_border` → input, stan focus, border - `--modal_bar_title_fg` → modal, pasek tytułowy, kolor tekstu ### Główne prefiksy komponentów: | Prefiks | Komponent | |---------|-----------| | `command_` | Przyciski (primary, secondary, tertiary) | | `input_` | Pola formularza | | `nav_tree_` | Sidebar / drzewo nawigacji | | `headerbar_` | Górny pasek | | `modal_` | Okna dialogowe | | `tooltip_` | Podpowiedzi | | `popup_` | Menu kontekstowe / rozwijane | | `checkbox_` | Checkboxy | | `radio_` | Radio buttons | | `dp_` | Date picker | | `scroll_` | Paski przewijania | | `spinner_` | Loadery / spinnery | | `dashboard_` | Dashboard / kafelki modułów | | `bookmark_` | Zakładki | | `path_` | Breadcrumb | | `label_` | Etykiety statusowe | | `verifier_` | Komunikaty walidacji | | `recorder_` | Nagrywanie makr | --- ## 12. PODSUMOWANIE KLUCZOWYCH ZASAD PROJEKTOWYCH 1. **Zielony jako kolor wiodący** — ciemna zieleń (`#1B5E20` – `#2E7D32`) dominuje w nagłówku, sidebarze, przyciskach akcji, stanach focus i linkach. 2. **Minimalizm i profesjonalizm** — interfejs jest utrzymany w stylu enterprise, bez ozdobników, z naciskiem na czytelność danych. 3. **Gęstość informacji** — formularze i listy są kompaktowe (wiersze `30-36px`), pola blisko siebie, minimalne marginesy. 4. **Dwukolorowy kontrast** — w obu motywach kontrast opiera się na jasne tło + ciemny tekst (lub odwrotnie), z zielenią jako jedynym akcentem kolorystycznym. 5. **Spójność stanów** — każdy komponent ma zdefiniowane 6 stanów: default, hover, focus, pressed, selected, disabled. 6. **Płaski design z subtelnymi cieniami** — brak skeuomorfizmu, minimalne cienie, płaskie tła z delikatnymi borderami. 7. **Hierarchia typograficzna przez wagę, nie rozmiar** — różnice między elementami wynikają bardziej z `font-weight` (400 vs 600) niż z drastycznych zmian rozmiaru. 8. **Sidebar jako główna nawigacja** — drzewo nawigacji po lewej stronie z możliwością zwijania, z wbudowanym wyszukiwaniem. 9. **Kontekstowe toolbary** — pasek narzędzi zmienia się w zależności od widoku (lista vs formularz), z przyciskami outline. 10. **System zmiennych CSS** — pełna temowalność przez ~830 CSS custom properties, umożliwiająca łatwe przełączanie motywów.