486 lines
24 KiB
Markdown
486 lines
24 KiB
Markdown
---
|
||
name: soneta-ui-style
|
||
description: "System projektowy (design system) Soneta / enova365 do budowania aplikacji webowych i stron internetowych wizualnie spójnych z enova365 ERP. Zawiera pełne specyfikacje: palety kolorów (motywy jasny/ciemny), typografię, layout, komponenty UI (przyciski, formularze, tabele, sidebar, header, kafelki, modale), system odstępów, cienie, ikony SVG, animacje i responsywność. Używaj tego skilla ZAWSZE gdy użytkownik: (1) prosi o zaprojektowanie, zbudowanie lub ostylowanie strony/aplikacji webowej w stylu Soneta lub enova365; (2) wspomina 'styl enova', 'styl Soneta', 'design system enova365', 'UI enova'; (3) chce stworzyć dashboard, formularz, stronę logowania lub panel administracyjny w estetyce enova365; (4) prosi o landing page, stronę firmową lub aplikację z zielonym motywem enterprise w stylu Soneta; (5) pyta o kolory, czcionki, komponenty lub wzorce UI platformy enova365/Soneta. Skill działa z każdym stosem technologicznym (HTML/CSS, React, Vue, Tailwind, itp.)."
|
||
---
|
||
|
||
# Soneta / enova365 — Design System
|
||
|
||
Ten skill opisuje reguły projektowania interfejsów użytkownika wizualnie spójnych z aplikacją enova365 ERP firmy Soneta. Stosuj te reguły budując strony internetowe, dashboardy, formularze i aplikacje webowe w estetyce Soneta.
|
||
|
||
## Zasady przewodnie
|
||
|
||
1. **Szmaragdowa zieleń jako kolor wiodący** — `#016E46` dominuje w headerze, sidebarze (motyw jasny), przyciskach akcji, stanach focus i linkach
|
||
2. **Enterprise minimalizm** — czysty, profesjonalny interfejs bez ozdobników, nacisk na czytelność danych
|
||
3. **Wysoka gęstość informacji** — kompaktowe wiersze (`30-36px`), pola blisko siebie, minimalne marginesy
|
||
4. **Płaski design z subtelnymi cieniami** — brak skeuomorfizmu, delikatne bordery i cienie
|
||
5. **Hierarchia przez wagę czcionki, nie rozmiar** — różnice wynikają z `font-weight` (400 vs 600), a nie drastycznych zmian rozmiaru
|
||
6. **Dwa motywy: jasny i ciemny** — oba używają tego samego systemu zmiennych CSS
|
||
7. **Spójność stanów** — każdy komponent definiuje 6 stanów: default, hover, focus, pressed, selected, disabled
|
||
|
||
---
|
||
|
||
## 1. Kolory
|
||
|
||
### 1.1 Brand (wspólne)
|
||
|
||
| Token | Wartość | Użycie |
|
||
|-------|---------|--------|
|
||
| `--brand_500` | `#016E46` | Kolor główny — header, focus, linki |
|
||
| `--brand_600` | `#015436` | Brand ciemny |
|
||
| `--brand_700` | `#01422A` | Brand najciemniejszy |
|
||
| `--brand_300` | `#3A8E6F` | Brand jasny |
|
||
| `--brand_200` | `#02E391` | Brand najjaśniejszy |
|
||
| Akcent cyjan | `#31e2b8` | Logo — turkusowy |
|
||
| Akcent błękitny | `#6acbf3` | Logo — jasny niebieski |
|
||
|
||
### 1.2 Motyw jasny (White)
|
||
|
||
| Przeznaczenie | Kolor |
|
||
|---------------|-------|
|
||
| Tło główne (content area) | `rgb(230, 231, 231)` — jasnoszare, wydziela białe karty |
|
||
| Tło headera | `#016E46` — szmaragdowy |
|
||
| Tło sidebara | `#003320` — bardzo ciemna zieleń, **ciemniejszy niż header** |
|
||
| Sidebar hover | `rgba(0, 70, 38)` |
|
||
| Sidebar selected | `rgba(0, 88, 48)` |
|
||
| Tekst sidebara | `#FFFFFF` |
|
||
| Tło surface/karty | `#FFFFFF` |
|
||
| Tło sekcji | `#F5F5F5` – `#FAFAFA` |
|
||
| Tekst podstawowy | `#212121` – `#333333` |
|
||
| Tekst drugorzędny | `#757575` – `#A3A3A3` |
|
||
| Tekst etykiet | `#616161` |
|
||
| Obramowanie inputów | `#BDBDBD` – `#E0E0E0` |
|
||
| Obramowanie focus | `#016E46` |
|
||
| Wiersz zaznaczony | `rgba(46, 125, 50, 0.08)` |
|
||
| Wiersz hover | `rgba(0, 0, 0, 0.04)` |
|
||
| Separator | `#E0E0E0` |
|
||
|
||
### 1.3 Motyw ciemny (Black)
|
||
|
||
| Przeznaczenie | Kolor |
|
||
|---------------|-------|
|
||
| Tło główne | `#1E1E1E` – `#212121` |
|
||
| Tło headera | `#1B5E20` – `#0D3B14` — ciemnozielony |
|
||
| Tło sidebara | `#262626` — **grafitowy, nie zielony** |
|
||
| Tło surface/karty | `#2A2A2A` – `#303030` |
|
||
| Tekst podstawowy | `#E0E0E0` – `#F0F0F0` |
|
||
| Tekst drugorzędny | `#A3A3A3` |
|
||
| Tekst etykiet | `#BDBDBD` |
|
||
| Obramowanie inputów | `#424242` – `#555555` |
|
||
| Obramowanie focus | `#016E46` — identyczny jak w jasnym |
|
||
| Wiersz zaznaczony | `rgba(46, 125, 50, 0.15)` |
|
||
| Wiersz hover | `rgba(255, 255, 255, 0.05)` |
|
||
| Separator | `#424242` |
|
||
| Overlay modal | `rgba(0, 0, 0, 0.7)` |
|
||
|
||
### 1.4 Kolory semantyczne
|
||
|
||
| Przeznaczenie | Kolor |
|
||
|---------------|-------|
|
||
| Success / Primary action | `#2E7D32` — przyciski "Zapisz" |
|
||
| Danger | `#C62828` – `#D32F2F` — przyciski "Zamknij" |
|
||
| Warning | `#F57C00` |
|
||
| Info | `#1976D2` |
|
||
| Link | `#016E46` |
|
||
| Disabled | `#A3A3A3` z opacity |
|
||
|
||
### 1.5 Paleta neutralna (z PaletteBase.css)
|
||
|
||
Wartości w formacie RGB (bez `rgb()`):
|
||
|
||
| Token | Wartość | HEX |
|
||
|-------|---------|-----|
|
||
| `--neutral_0` | `255, 255, 255` | `#FFFFFF` |
|
||
| `--neutral_100` | `245, 245, 245` | `#F5F5F5` |
|
||
| `--neutral_200` | `229, 229, 229` | `#E5E5E5` |
|
||
| `--neutral_300` | `212, 212, 212` | `#D4D4D4` |
|
||
| `--neutral_500` | `109, 115, 113` | `#6D7371` |
|
||
| `--neutral_700` | `77, 81, 80` | `#4D5150` |
|
||
| `--neutral_800` | `38, 38, 38` | `#262626` |
|
||
| `--neutral_850` | `33, 33, 33` | `#212121` |
|
||
| `--neutral_900` | `23, 23, 23` | `#171717` |
|
||
|
||
Semantyczne: `--red_600: #DC2626`, `--green_400: #10C200`, `--blue_500: #3B82F6`, `--orange_500: #F97316`, `--yellow_400: #F3D930`, `--emerald_400: #139041`.
|
||
|
||
---
|
||
|
||
## 2. Typografia
|
||
|
||
### Czcionki
|
||
|
||
| Przeznaczenie | Czcionka | Fallback |
|
||
|---------------|----------|----------|
|
||
| Główna (`--primaryFont`) | `"FiraSans"` | `Arial, sans-serif` |
|
||
| Alternatywna (`--tertiaryFont`) | `"ROBOTO"` | `sans-serif` |
|
||
| Nagłówki | `"SourceSansSemiBold"` | `Arial, sans-serif` |
|
||
| Branding/logo | `"Lato"` | `sans-serif` |
|
||
| Monospace | `Consolas` | `"Courier New", monospace` |
|
||
|
||
Gdy nie możesz załadować czcionek Soneta, użyj `"Roboto", "Segoe UI", Arial, sans-serif` jako bezpiecznego zamiennika.
|
||
|
||
### Rozmiary
|
||
|
||
| Przeznaczenie | Rozmiar |
|
||
|---------------|---------|
|
||
| Captions | `10px` – `11px` |
|
||
| Etykiety pól | `12px` (`--font_size_label: 9pt`) |
|
||
| Tekst w inputach | `13px` – `14px` |
|
||
| Body (podstawowy) | `14px` |
|
||
| Nagłówki sekcji | `14px` – `16px` + `font-weight: 600` |
|
||
| Tytuł formularza | `16px` – `18px` |
|
||
| Duże nagłówki | `20px` – `24px` |
|
||
| Logo / ekran logowania | `24px` – `32px` |
|
||
|
||
### Grubości
|
||
|
||
| Styl | Wartość | Użycie |
|
||
|------|---------|--------|
|
||
| Light | `300` | Delikatne teksty |
|
||
| Regular | `400` | Domyślna |
|
||
| Medium | `500` | Przyciski |
|
||
| Semi-bold | `600` | Nagłówki sekcji, aktywne menu |
|
||
| Bold | `700` | Tytuły |
|
||
|
||
### Wysokość linii
|
||
|
||
Body: `18-20px`, wiersze tabeli: `20-24px`, inputy: `24-26px`, nagłówki: `28-32px`.
|
||
|
||
### Letter-spacing
|
||
|
||
Normalny tekst: `0–0.1px`, etykiety: `0.15–0.25px`, przyciski uppercase: `0.6–2px`.
|
||
|
||
---
|
||
|
||
## 3. Layout
|
||
|
||
### Struktura główna
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────┐
|
||
│ HEADER BAR (~48-56px) │
|
||
│ [Logo] [Search] [Ikony] [Avatar] │
|
||
├──────────┬───────────────────────────────────────────┤
|
||
│ │ BREADCRUMB (~32px) │
|
||
│ ├───────────────────────────────────────────┤
|
||
│ SIDEBAR │ TOOLBAR + TABS (~44-48px) │
|
||
│ (250px) ├───────────────────────────────────────────┤
|
||
│ │ │
|
||
│ Drzewo │ CONTENT AREA │
|
||
│ nawigacji│ (Formularz / Lista / Dashboard) │
|
||
│ │ │
|
||
├──────────┴───────────────────────────────────────────┤
|
||
│ STATUS BAR (opcjonalnie) │
|
||
└──────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### Wymiary
|
||
|
||
| Element | Wymiar |
|
||
|---------|--------|
|
||
| Header bar | `48px` – `56px` |
|
||
| Sidebar rozwinięty | `240px` – `260px` |
|
||
| Sidebar zwinięty | `48px` – `56px` |
|
||
| Breadcrumb | `28px` – `32px` |
|
||
| Toolbar | `40px` – `48px` |
|
||
| Status bar | `24px` – `28px` |
|
||
| Min width | `1024px` |
|
||
|
||
### System layoutu
|
||
|
||
- **Flexbox** dominuje — `flex-direction: row` dla sidebar+content, `column` dla sekcji
|
||
- **Grid** sporadycznie — dashboard kafelków
|
||
- `justify-content: space-between` w toolbarze
|
||
- `align-items: center` praktycznie wszędzie
|
||
|
||
---
|
||
|
||
## 4. Komponenty UI
|
||
|
||
### 4.1 Przyciski
|
||
|
||
| Wariant | Tło | Tekst | Border | Użycie |
|
||
|---------|-----|-------|--------|--------|
|
||
| **Primary** | `#2E7D32` | `#FFF` | brak | "Zapisz", "Zaloguj" |
|
||
| **Secondary** | przezroczyste | inherit | `1px solid` szary | "Czynności" |
|
||
| **Tertiary** | przezroczyste | inherit | brak | Ikony toolbar |
|
||
| **Danger** | `#C62828` | `#FFF` | brak | "Zamknij" |
|
||
|
||
Wymiary: height `32-38px` (standard) / `40-44px` (duży), padding `6px 12px` / `8px 16px` / `10px 20px`, border-radius `4-6px`, font `13-14px` weight `500-600`, gap ikona+tekst `6-8px`.
|
||
|
||
Stany: hover — lekkie rozjaśnienie; focus — `box-shadow: inset 0 0 3px 1px #016E46`; pressed — przyciemnienie; disabled — opacity `0.5-0.6`.
|
||
|
||
```css
|
||
/* Przykład: przycisk Primary */
|
||
.btn-primary {
|
||
background-color: #2E7D32;
|
||
color: #FFFFFF;
|
||
border: none;
|
||
border-radius: 4px;
|
||
padding: 6px 16px;
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
cursor: pointer;
|
||
transition: background-color 0.2s ease;
|
||
}
|
||
.btn-primary:hover { filter: brightness(1.1); }
|
||
.btn-primary:focus { box-shadow: inset 0 0 3px 1px #016E46; }
|
||
.btn-primary:disabled { opacity: 0.5; cursor: default; }
|
||
```
|
||
|
||
### 4.2 Pola formularza
|
||
|
||
| Właściwość | Jasny | Ciemny |
|
||
|------------|-------|--------|
|
||
| Tło | `#FFFFFF` | `#2A2A2A` |
|
||
| Tekst | `#212121` | `#E0E0E0` |
|
||
| Border | `1px solid #BDBDBD` | `1px solid #555555` |
|
||
| Border-radius | `4px` | `4px` |
|
||
| Wysokość | `30-32px` | `30-32px` |
|
||
| Padding | `4px 8px` | `4px 8px` |
|
||
| Font-size | `13-14px` | `13-14px` |
|
||
|
||
Focus: border `#016E46` + opcjonalnie `box-shadow: inset 0 0 3px 1px #016E46`. Error: czerwony shadow. Warning: pomarańczowy shadow. Disabled: tło `#F5F5F5` / `#1A1A1A`.
|
||
|
||
**Etykiety**: font `12px`, kolor `#757575` (jasny) / `#BDBDBD` (ciemny), weight `400`.
|
||
|
||
**Układ formularza**: siatka 2-4 kolumn, etykieta po lewej (~100-140px stała szerokość), input `flex: 1`, gap między wierszami `8-12px`, sekcje oddzielone nagłówkami z marginesem `16-24px`.
|
||
|
||
### 4.3 Checkbox
|
||
|
||
Rozmiar `16-18px`, border-radius `2-3px`, checked: zielone tło `#2E7D32` z białym checkmarkiem.
|
||
|
||
### 4.4 Tabele / Listy
|
||
|
||
**Nagłówek**: tło `#F5F5F5` (jasny) / `#2A2A2A` (ciemny), tekst `#616161` / `#BDBDBD`, font `12-13px` weight `600`, padding `8px 12px`.
|
||
|
||
**Wiersze**: tło naprzemienne `#FFF` / `#FAFAFA` (jasny), `#1E1E1E` / `#252525` (ciemny), height `30-36px`, padding `4-6px 12px`, font `13-14px`. Hover: `rgba(0,0,0,0.04)` / `rgba(255,255,255,0.05)`. Selected: zielony tint `rgba(46,125,50,0.08)` / `0.15`.
|
||
|
||
### 4.5 Zakładki (Tabs)
|
||
|
||
Styl **outline**: padding `6px 12px`, border `1px solid szary`, border-radius `4px`, font `13px`, aktywna — zielone tło lub zielony border, gap `4-6px`.
|
||
|
||
Styl **page tabs**: przylegające (`gap: 0`), aktywna — wyróżnione tło + pogrubiony tekst.
|
||
|
||
### 4.6 Header Bar
|
||
|
||
- Tło: `#016E46` (jasny) / `#1B5E20` (ciemny)
|
||
- Wysokość: `48-56px`, padding: `0 16px`
|
||
- Logo: ZAWSZE osadzać poniższe oficjalne SVG inline (nie wymyślać własnego logo!):
|
||
|
||
```html
|
||
<svg viewBox="0 0 200 33.5" height="22" fill="#FFFFFF" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M69.7,0.1C60.5,0.1,53,7.6,53,16.7c0,9.2,7.5,16.7,16.7,16.7c9.2,0,16.7-7.5,16.7-16.7C86.4,7.6,78.9,0.1,69.7,0.1z M153.2,4.7c-2.8,0-5.4,0.9-6.7,1.8l1,3.2c1-0.6,2.9-1.5,4.8-1.5c2.6,0,3.7,1.3,3.7,3c0,2.3-2.6,3.2-4.6,3.2h-2v3.2h2c2.7,0,5.3,1.2,5.3,4c0,1.8-1.3,3.7-4.7,3.7c-2.2,0-4.4-0.9-5.3-1.4l-1,3.4c1.3,0.8,3.7,1.6,6.6,1.6c5.8,0,9.1-3.1,9.1-7.1c0-3.2-2.3-5.3-5.2-5.8v-0.1c2.9-1,4.3-3,4.3-5.5C160.5,7.3,158,4.7,153.2,4.7L153.2,4.7z M178.3,4.7c-0.4,0-0.8,0-1.3,0.1c-3.3,0.3-6.2,1.4-8.3,3.5c-2.4,2.3-4.1,5.9-4.1,10.4c0,5.8,3.1,10.1,8.8,10.1c5,0,8.3-3.9,8.3-8.4c0-4.8-3.1-7.6-7.2-7.6c-2.3,0-4.1,0.9-5.3,2.3h-0.1c0.6-3.2,2.9-6.2,7.9-6.8c0.9-0.1,1.6-0.1,2.2-0.1V4.7C179,4.7,178.7,4.7,178.3,4.7L178.3,4.7z M187.1,5.1l-1.5,11.8c0.9-0.1,1.9-0.2,3.2-0.2c4.7,0,6.6,1.8,6.6,4.5c0,2.8-2.5,4.3-5.1,4.3c-2.1,0-4.1-0.7-5.2-1.2l-0.9,3.4c1.2,0.7,3.5,1.4,6.2,1.4c5.7,0,9.4-3.6,9.4-8.1c0-2.8-1.3-4.8-3.1-5.9c-1.5-1-3.6-1.5-5.7-1.5c-0.7,0-1.2,0-1.7,0.1l0.7-4.7h9V5.1C199.3,5.1,187.1,5.1,187.1,5.1z M65.3,7.1c0.3,0,0.8,0.2,1.4,0.5l12.7,7.7c0.5,0.3,0.9,0.9,0.9,1.5c0,0.6-0.4,1.2-0.9,1.6l-13.1,7.9c-0.3,0.2-0.6,0.2-0.9,0.2c-1,0-1.8-0.8-1.8-1.8V8.9C63.5,7.9,64.4,7.1,65.3,7.1z M173.2,16.1c2.6,0,4.1,1.9,4.1,4.6c0,2.8-1.5,4.8-3.7,4.8c-2.9,0-4.4-2.5-4.4-5.6c0-0.6,0.1-1,0.3-1.4C170,17.1,171.5,16.1,173.2,16.1z"/>
|
||
<path d="M93.1,4.3c-0.2,0-0.3,0.1-0.5,0.1l-0.4,0.2c-0.7,0.4-1.1,1.3-0.8,2.1l9,21.1c0.5,0.6,1.6,1,2.8,1c1.2,0,2.3-0.4,2.8-1.1l8.5-21.3c0.1-0.8-0.3-1.7-1.1-2l-0.3-0.1c-0.1,0-0.2-0.1-0.3-0.1h-0.5c-0.5,0.1-1,0.3-1.3,0.8l-7.8,20.1L95,5.2c-0.3-0.5-0.8-0.9-1.4-0.9C93.6,4.3,93.1,4.3,93.1,4.3z M9.1,4.4C3,4.4,0,7.8,0,14.9v3c0,7.5,5.1,10.5,11.2,10.5h4.7c0.9-0.1,1.5-0.7,1.7-1.6v-0.5c-0.1-0.8-0.8-1.5-1.6-1.6h-4.8c-2.7,0-7.3,0-7.4-6h12.4c1,0,1.9-0.8,1.9-1.9v-1.8C18,7.7,15.2,4.4,9.1,4.4z M28.9,4.4c-1,0-1.9,0.8-1.9,1.9v20.3c0,0.9,0.7,1.6,1.6,1.8h0.5c0.8-0.1,1.5-0.8,1.6-1.6V8.1h3.8c3.2,0,7.5,0.4,7.5,6.8v12c0.2,0.8,0.9,1.4,1.7,1.4h0.3c0.9,0,1.6-0.7,1.7-1.5V14.9c0-7.4-5-10.5-11.3-10.5C34.6,4.4,28.9,4.4,28.9,4.4z M121.1,4.4c-0.9,0.1-1.6,0.9-1.6,1.8v0.1c0,0.9,0.7,1.7,1.6,1.8h6.4c2.9,0,4.8,0.4,5.2,5.2H128c-2.2,0-8.9,0-8.9,7.4c0,5.6,3.9,7.6,7.3,7.6h8.2c1,0,1.9-0.8,1.9-1.9V14.9c0-7.4-2.7-10.5-8.9-10.5L121.1,4.4L121.1,4.4z M9.1,8.1c2.8,0,5.2,0.5,5.2,6.7H3.7C3.7,8.6,6.3,8.1,9.1,8.1z M128,17h4.7v7.6h-6.4c-1.6,0-3.6-0.7-3.6-3.9C122.8,18.2,123.5,17,128,17z"/>
|
||
</svg>
|
||
```
|
||
- Search: **białe tło**, ciemny tekst, ikona lupy, border-radius `4px`
|
||
- Ikony: białe SVG `20-24px`
|
||
- Avatar: kółko `32-36px`, zielone tło + biały inicjał
|
||
- Shadow: `0 2px 4px rgba(0,0,0,0.1)` na dole
|
||
|
||
### 4.7 Sidebar
|
||
|
||
**Motyw jasny**: tło `#003320` (ciemniejsza zieleń niż header), biały tekst, białe ikony SVG `16-18px`. **Motyw ciemny**: tło `#262626` (grafitowy), jasnoszary tekst.
|
||
|
||
Kształt: border-radius `8-12px`, margin `4-6px` (góra/lewo/dół) — pływający panel z zaokrąglonymi rogami.
|
||
|
||
Struktura: (1) pasek sterowania "Zwiń"/"Odepnij", (2) pole wyszukiwania, (3) drzewo nawigacji z chevronami.
|
||
|
||
Hover: `rgba(255,255,255,0.08)` (jasny) / `0.05` (ciemny). Aktywny: `rgba(255,255,255,0.12)` + pogrubienie. Padding elementu: `8px 16px`, wcięcie podpoziomów: `+16-20px`.
|
||
|
||
### 4.8 Breadcrumb
|
||
|
||
Wysokość `28-32px`, font `12px`, kolor `#757575` (linki), ostatni segment `#212121` (nie-link), separator `>` kolor `#BDBDBD` z `margin: 0 4px`, ikona Home SVG `14-16px`, padding `4px 16px`.
|
||
|
||
### 4.9 Modal / Dialog
|
||
|
||
| Właściwość | Jasny | Ciemny |
|
||
|------------|-------|--------|
|
||
| Overlay | `rgba(0,0,0,0.5)` | `rgba(0,0,0,0.7)` |
|
||
| Tło | `#FFFFFF` | `#2A2A2A` |
|
||
| Border-radius | `8-12px` | `8-12px` |
|
||
| Shadow | `0 4px 20px rgba(0,0,0,0.25)` | `…0.5)` |
|
||
| Padding | `20-25px` | `20-25px` |
|
||
| Szerokość | `400-600px` | `400-600px` |
|
||
|
||
### 4.10 Dropdown / Menu kontekstowe
|
||
|
||
Tło białe/ciemne, border `1px solid #E0E0E0` / `#424242`, border-radius `8px`, shadow `0 4px 12px rgba(0,0,0,0.15)` / `0.4`, padding elementu `8px 16px`, font `13-14px`, ikony kolorowe `16-20px` po lewej.
|
||
|
||
### 4.11 Ekran logowania
|
||
|
||
Dwuczęściowy layout ~50/50: lewa — zdjęcie/branding z logo, prawa — formularz logowania wycentrowany w pionie. Logo "enova365" z akcentami kolorystycznymi. Hasło: "System ERP dla ambitnego biznesu" `22px` kursywa. Przycisk "Zaloguj": zielony, pełna szerokość, `40px` height. Footer: "by Soneta ®".
|
||
|
||
### 4.12 Dashboard — Kafelki (Tiles)
|
||
|
||
Tło content area: `rgb(230, 231, 231)` (jasny) — wydziela białe kafelki.
|
||
|
||
**Kafelek**: width `352px`, min-height `80px`, border-radius `12px`, tło białe/ciemne, **border-left `4px solid [kolor_modułu]`** — kolorowy akcent, shadow `0 0 10px 1px rgba(229,229,229)`, padding `10px 16px`.
|
||
|
||
**Układ wewnętrzny kafelka**: `display: flex; align-items: center; gap: 10px` — ikona po lewej, tekst (tytuł + opis) po prawej. Ikona jest wycentrowana w pionie względem bloku tekstowego.
|
||
|
||
**Ikona w kafelku**: rozmiar `20px` × `20px`, kolor = kolor modułu (taki sam jak border-left). Ikona to czyste SVG liniowe (outline) — same kontury, **bez koła/okręgu za ikoną**, bez żadnego tła pod ikoną. Ikona renderowana bezpośrednio na białym tle kafelka.
|
||
|
||
Katalog `SvgResources/` tego skilla zawiera ~370 gotowych ikon SVG enova365. Każda ikona ma `viewBox="0 0 160 160"` i używa `fill` na elementach `<path>` (cienkie kształty dające efekt liniowy). Aby użyć ikony w kafelku, skopiuj zawartość pliku SVG, ustaw `width="20" height="20"` i nadaj kolor modułu przez atrybut `fill` na elemencie `<svg>` lub `<path>`.
|
||
|
||
**Mapowanie modułów na pliki ikon SVG** (katalog `SvgResources/`):
|
||
|
||
| Moduł | Plik ikony | Kolor |
|
||
|-------|-----------|-------|
|
||
| Terminarz | `kalendarz.svg` | Zielony `#2E7D32` |
|
||
| Kadry i płace | `osoba.svg` | Pomarańczowy `#F57C00` |
|
||
| Księgowość | `kalkulator.svg` | Fioletowy `#7B1FA2` |
|
||
| Handel | `towar.svg` | Żółty `#F9A825` |
|
||
| CRM | `crm.svg` | Zielonkawy `#2E7D32` |
|
||
| Produkcja | `fabryka.svg` | Magenta `#C2185B` |
|
||
| Ewidencja dokumentów | `dokument.svg` | Niebieski `#1976D2` |
|
||
| Ewidencja Środków Pieniężnych | `monety.svg` | Cyjan `#00838F` |
|
||
| Księga inwentarzowa | `portfel.svg` | Oliwkowy `#827717` |
|
||
| Ewidencja pojazdów | `samochod.svg` | Czerwony `#C62828` |
|
||
| Business Intelligence | `wykres.svg` | Złoty `#F9A825` |
|
||
|
||
Przykład osadzenia ikony z pliku `kalendarz.svg` w kafelku:
|
||
```html
|
||
<svg width="20" height="20" viewBox="0 0 160 160" fill="#2E7D32" xmlns="http://www.w3.org/2000/svg">
|
||
<path d="M150 15.002h-40.035V5.037c0-2.762-2.237-5-5-5s-5 2.238-5 5V15h-40V5.037c0-2.762-2.238-5-5-5s-5 2.238-5 5V15H10C4.478 15 0 19.477 0 25v125c0 5.522 4.478 10 10 10h140c5.522 0 10-4.478 10-10V25c0-5.52-4.478-9.998-10-9.998zM150 150H10V25h39.965v5.038c0 2.762 2.238 5 5 5s5-2.238 5-5v-5.036h40v5.038c0 2.763 2.237 5 5 5s5-2.237 5-5v-5.037H150V150zm-35-69.998h10c2.76 0 5-2.24 5-5v-10c0-2.76-2.24-5-5-5h-10c-2.76 0-5 2.24-5 5v10c0 2.76 2.24 5 5 5zM115 120h10a5 5 0 0 0 5-5v-10c0-2.76-2.24-5-5-5h-10c-2.76 0-5 2.24-5 5v10c0 2.765 2.24 5 5 5zm-30-20H75c-2.76 0-5 2.24-5 5v10a5 5 0 0 0 5 5h10a5 5 0 0 0 5-5v-10c0-2.757-2.24-5-5-5zm0-39.998H75c-2.76 0-5 2.24-5 5v10c0 2.76 2.24 5 5 5h10c2.76 0 5-2.24 5-5v-10a5 5 0 0 0-5-5zm-40 0H35c-2.76 0-5 2.24-5 5v10c0 2.76 2.24 5 5 5h10c2.76 0 5-2.24 5-5v-10a5 5 0 0 0-5-5zM45 100H35c-2.76 0-5 2.24-5 5v10a5 5 0 0 0 5 5h10a5 5 0 0 0 5-5v-10c0-2.757-2.24-5-5-5z"/>
|
||
</svg>
|
||
```
|
||
|
||
Jeśli nie masz dostępu do plików SVG, narysuj prostą ikonę liniową inline — cienkie ścieżki `<path>` z `fill="[kolor_modułu]"`, viewBox `0 0 160 160`, bez tła i bez koła.
|
||
|
||
**Tytuł**: Roboto `16px` weight `600`, line-height `28px`. **Opis**: Roboto `14px` weight `400`, kolor `rgb(68, 70, 69)`, line-height `16px`.
|
||
|
||
Layout kafelków: flex-wrap, gap `8px`, tytuł grupy: `16px` weight `500` uppercase.
|
||
|
||
Hover: tło `#F5F5F5`, active: brak shadow, focus: outline `2px`.
|
||
|
||
### 4.13 Toolbar
|
||
|
||
Wysokość `40-48px`, border-bottom separator, flex row `align-items: center`, gap `4-8px`, padding `4px 16px`. Przyciski outline/tertiary `30-32px` height. Filtry: zielone tło, pill shape `border-radius: 16-20px`.
|
||
|
||
### 4.14 Scrollbar
|
||
|
||
Track przezroczysty, thumb `#BDBDBD` (jasny) / `#555555` (ciemny), thumb hover `#999` / `#777`, width `8-10px`, border-radius `4-5px`.
|
||
|
||
---
|
||
|
||
## 5. System odstępów (skala 4px)
|
||
|
||
| Token | Wartość | Użycie |
|
||
|-------|---------|--------|
|
||
| xs | `2px` | Mikro-gap ikona↔tekst |
|
||
| sm | `4px` | Padding małych elementów |
|
||
| md | `8px` | Standardowy padding/gap |
|
||
| lg | `12px` | Padding komórek, gap przycisków |
|
||
| xl | `16px` | Padding sekcji, margin grup |
|
||
| 2xl | `20px` | Padding kart/modali |
|
||
| 3xl | `24px` | Margin między sekcjami |
|
||
| 4xl | `32px` | Duże odstępy |
|
||
| 5xl | `40px` | Bardzo duże odstępy |
|
||
|
||
---
|
||
|
||
## 6. Border-radius
|
||
|
||
| Element | Wartość |
|
||
|---------|---------|
|
||
| Inputy | `4px` |
|
||
| Przyciski | `4-6px` |
|
||
| Karty/kafelki | `8-12px` |
|
||
| Modale | `8-12px` |
|
||
| Pill/badge | `16-20px` |
|
||
| Avatary | `50%` |
|
||
| Tooltipy | `4-6px` |
|
||
|
||
---
|
||
|
||
## 7. Cienie
|
||
|
||
| 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 | `0 2px 4px rgba(0,0,0,0.1)` |
|
||
| Ciemny motyw | Alpha ×1.5 – ×2 |
|
||
|
||
---
|
||
|
||
## 8. Ikony
|
||
|
||
System ikon enova365: **liniowe SVG (outline)**, viewBox `0 0 160 160`, kolor przez `fill` (nie stroke), `fill: currentColor` lub bezpośredni kolor.
|
||
|
||
| Rozmiar | Wartość | Użycie |
|
||
|---------|---------|--------|
|
||
| Mały | `14-16px` | Inline tekst, sidebar |
|
||
| Standardowy | `18-20px` | Toolbar, menu |
|
||
| Duży | `24-32px` | Nagłówki, dashboard |
|
||
|
||
Kolory: `#616161` (jasny content), `#BDBDBD` (ciemny), `#FFFFFF` (na zielonym tle), `#2E7D32` (aktywny).
|
||
|
||
Główne ikony: `szukaj.svg` (lupa), `dom.svg` (home), `ustawienia.svg` (trybik), `dzwonek.svg` (powiadomienia), `osoba.svg` (użytkownik), `folder.svg`, `dokument.svg`, `dodaj.svg` (+), `usun.svg` (kosz), `zapisz.svg` (dyskietka), `anuluj.svg` (X), `filtr.svg`.
|
||
|
||
**Logo**: Oficjalne SVG logo enova365 jest osadzone w sekcji 4.6 (Header Bar) powyżej. ZAWSZE kopiuj dokładnie ten kod SVG — nigdy nie wymyślaj własnej wersji logo ani nie próbuj odtwarzać go z tekstu + ikon. Na ciemnym tle użyj `fill="#FFFFFF"`, na jasnym `fill="#000000"`.
|
||
|
||
---
|
||
|
||
## 9. Animacje
|
||
|
||
| Właściwość | Wartość |
|
||
|------------|---------|
|
||
| Transition domyślny | `all 0.2s ease` |
|
||
| Hover | `background-color 0.2s, color 0.2s` |
|
||
| Opacity | `opacity 0.3s ease` |
|
||
| Sidebar collapse | `width 0.3s ease` |
|
||
|
||
---
|
||
|
||
## 10. Responsywność
|
||
|
||
| Breakpoint | Zachowanie |
|
||
|------------|------------|
|
||
| Desktop (>1200px) | Pełny layout: sidebar + content |
|
||
| Tablet (768–1200px) | Sidebar zwinięty, rozwijany overlay |
|
||
| Mobile (<768px) | Wersja mobilna — osobna aplikacja |
|
||
|
||
---
|
||
|
||
## 11. CSS Variables — konwencja nazewnictwa
|
||
|
||
Format: `--{komponent}_{wariant}_{stan}_{właściwość}`
|
||
|
||
Prefiksy: `command_` (przyciski), `input_` (formularze), `nav_tree_` (sidebar), `headerbar_`, `modal_`, `tooltip_`, `popup_`, `checkbox_`, `radio_`, `dp_` (date picker), `scroll_`, `spinner_`, `dashboard_`, `bookmark_` (zakładki), `path_` (breadcrumb), `label_`, `verifier_` (walidacja).
|
||
|
||
Przykłady: `--command_primary_hover_bg`, `--nav_tree_item_selected`, `--input_focused_border`, `--modal_bar_title_fg`.
|
||
|
||
---
|
||
|
||
## 12. Kolory ikon modułów (menu główne)
|
||
|
||
Na dashboardzie ikony w kolorowych kółkach (border-radius `50%`, `32-40px`):
|
||
|
||
| Moduł | Kolor |
|
||
|-------|-------|
|
||
| Terminarz | Zielony |
|
||
| Ewidencja dokumentów | Niebieski |
|
||
| Kadry i płace | Pomarańczowy |
|
||
| Księgowość | Fioletowy |
|
||
| Handel | Żółty |
|
||
| Produkcja | Magenta |
|
||
| CRM | Zielonkawy |
|
||
|
||
---
|
||
|
||
## Materiały referencyjne
|
||
|
||
Pełny przewodnik projektowy z większą ilością szczegółów: przeczytaj `enova365-design-guide.md` w katalogu tego skilla.
|
||
|
||
Pliki CSS z pełnymi paletami zmiennych:
|
||
- `wzorce/css/standard/PaletteBase.css` — paleta jasna (~830 zmiennych)
|
||
- `wzorce/css/standard/PaletteDark.css` — paleta ciemna
|
||
|
||
|
||
Ikony SVG: katalog `SvgResources/` zawiera ~370 ikon liniowych.
|
||
|
||
Pliki SCSS komponentów: katalog `wzorce/css/fullbrowser/` — style poszczególnych komponentów (TileItem, Login, HeaderBar, NavPanelTree, Grid, itd.).
|