diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md
index a1bce0f..948ae41 100644
--- a/.paul/PROJECT.md
+++ b/.paul/PROJECT.md
@@ -1,60 +1,62 @@
-# orderPRO
+# orderPRO
## What This Is
-Aplikacja do zarządzania zamówieniami pobieranymi z wielu źródeł sprzedaży (Allegro, Erli, własne sklepy internetowe). Umożliwia generowanie etykiet przewozowych u kurierów oraz docelowo zarządzanie produktami i stanami magazynowymi w jednym miejscu.
+Aplikacja do zarządzania zamówieniami pobieranymi z wielu źródeł sprzedaży (Allegro, Erli, własne sklepy internetowe). Umożliwia generowanie etykiet przewozowych u kurierów oraz docelowo zarządzanie produktami i stanami magazynowymi w jednym miejscu.
## Core Value
-Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami.
+Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami.
## Current State
| Attribute | Value |
|-----------|-------|
| Version | 1.0.0 |
-| Status | v1.0 Complete |
-| Last Updated | 2026-03-22 |
+| Status | v1.4 Complete |
+| Last Updated | 2026-03-25 |
## Requirements
### Validated (Shipped)
-- [x] Integracja z Allegro — pobieranie zamówień
+- [x] Integracja z Allegro — pobieranie zamówień
- [x] Generowanie etykiet (InPost)
-- [x] Performance: N+1 subqueries fix, DB indexes — Phase 7
-- [x] Stability: SSL verification, cron throttle — Phase 7
-- [x] UX: orderpro-to-allegro disable, lista zamówień poprawki — Phase 7
-- [x] Unit tests: AllegroTokenManager, AllegroOrderImportService (12 testów) — Phase 7
-- [x] InPost ShipX API: natywny provider niezależny od Allegro — Phase 7
-- [x] DB Foundation: tabele receipts, receipt_configs, receipt_number_counters + company_settings extended — Phase 8
-- [x] Konfiguracja paragonów (CRUD w Ustawienia > Księgowość) — Phase 9
-- [x] Wystawianie paragonów z zamówienia (formularz, snapshoty, atomowe numerowanie) — Phase 10
-- [x] Podgląd i wydruk paragonu (HTML+PDF, dompdf) — Phase 11
-- [x] Sekcja Księgowość — lista paragonów z filtrami, paginacją, eksportem XLSX — Phase 12
-- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13
-- [x] Skrzynki pocztowe SMTP (CRUD + test połączenia) — Phase 13
-- [x] Szablony wiadomości e-mail (CRUD + Quill.js + system zmiennych + załączniki) — Phase 14
-- [x] Wysyłka e-mail z zamówień (resolwer zmiennych, załączniki, log) — Phase 15
-- [x] Zadania automatyczne — reguły zdarzenie/warunki/akcje (CRUD + watcher/executor) — Phase 16
-- [x] Ostrzeżenie i potwierdzenie przy duplikacie paragonu — Phase 17
-- [x] Print Queue Backend: REST API + API key auth + CRUD kluczy — Phase 18
-- [x] UI Integration: przycisk Drukuj, bulk print, kolejka wydruku — Phase 19
-- [x] Windows Client: C# WinForms tray app, polling API, druk etykiet PDF — Phase 20
-- [x] Wyświetlanie nazwy integracji zamiast generycznego "shopPRO" na liście i szczegółach zamówienia — Phase 21
-- [x] Naprawa zapisu REGON, BDO, KRS i logo w ustawieniach firmy — Phase 22
-- [x] Presety przesyłek — customowe przyciski szybkiego wypełniania formularza (CRUD + autofill + zarządzanie) — Phase 23-25
-- [x] Ręczny numer przesyłki — dodawanie tracking number bez API przewoźnika — Phase 26
-- [x] Tracking backend — dwupoziomowe statusy dostawy, 3 implementacje providerów, cron handler — Phase 27
+- [x] Performance: N+1 subqueries fix, DB indexes — Phase 7
+- [x] Stability: SSL verification, cron throttle — Phase 7
+- [x] UX: orderpro-to-allegro disable, lista zamówień poprawki — Phase 7
+- [x] Unit tests: AllegroTokenManager, AllegroOrderImportService (12 testów) — Phase 7
+- [x] InPost ShipX API: natywny provider niezależny od Allegro — Phase 7
+- [x] DB Foundation: tabele receipts, receipt_configs, receipt_number_counters + company_settings extended — Phase 8
+- [x] Konfiguracja paragonów (CRUD w Ustawienia > Księgowość) — Phase 9
+- [x] Wystawianie paragonów z zamówienia (formularz, snapshoty, atomowe numerowanie) — Phase 10
+- [x] Podgląd i wydruk paragonu (HTML+PDF, dompdf) — Phase 11
+- [x] Sekcja Księgowość — lista paragonów z filtrami, paginacją, eksportem XLSX — Phase 12
+- [x] DB Foundation: tabele email_mailboxes, email_templates, email_logs — Phase 13
+- [x] Skrzynki pocztowe SMTP (CRUD + test połączenia) — Phase 13
+- [x] Szablony wiadomości e-mail (CRUD + Quill.js + system zmiennych + załączniki) — Phase 14
+- [x] Wysyłka e-mail z zamówień (resolwer zmiennych, załączniki, log) — Phase 15
+- [x] Zadania automatyczne — reguły zdarzenie/warunki/akcje (CRUD + watcher/executor) — Phase 16
+- [x] Ostrzeżenie i potwierdzenie przy duplikacie paragonu — Phase 17
+- [x] Print Queue Backend: REST API + API key auth + CRUD kluczy — Phase 18
+- [x] UI Integration: przycisk Drukuj, bulk print, kolejka wydruku — Phase 19
+- [x] Windows Client: C# WinForms tray app, polling API, druk etykiet PDF — Phase 20
+- [x] Wyświetlanie nazwy integracji zamiast generycznego "shopPRO" na liście i szczegółach zamówienia — Phase 21
+- [x] Naprawa zapisu REGON, BDO, KRS i logo w ustawieniach firmy — Phase 22
+- [x] Presety przesyłek — customowe przyciski szybkiego wypełniania formularza (CRUD + autofill + zarządzanie) — Phase 23-25
+- [x] Ręczny numer przesyłki — dodawanie tracking number bez API przewoźnika — Phase 26
+- [x] Tracking backend — dwupoziomowe statusy dostawy, 3 implementacje providerów, cron handler — Phase 27
+- [x] Tracking UI i ustawienia crona — statusy dostawy i konfiguracja harmonogramu — Phase 28-29
+- [x] UI readability tweak - rozdzielenie koloru przyciskow akcji od naglowkow sekcji (button primary distinction) - Phase 30
### Active (In Progress)
-- [ ] Śledzenie przesyłek UI — wyświetlanie statusów, ustawienia crona — Phase 28
+- [ ] Brak aktywnych zadan - gotowe na nowy milestone
### Planned (Next)
-- [ ] Zarządzanie produktami
-- [ ] Zarządzanie stanami magazynowymi
+- [ ] ZarzÄ…dzanie produktami
+- [ ] ZarzÄ…dzanie stanami magazynowymi
### Out of Scope
@@ -62,28 +64,28 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i n
## Target Users
-**Primary:** Sprzedawcy wielokanałowi (Allegro, Erli, własny sklep)
-- Obsługują zamówienia z wielu platform jednocześnie
-- Potrzebują szybkiego nadawania przesyłek
-- Chcą jednego miejsca do zarządzania sprzedażą
+**Primary:** Sprzedawcy wielokanałowi (Allegro, Erli, własny sklep)
+- Obsługują zamówienia z wielu platform jednocześnie
+- Potrzebują szybkiego nadawania przesyłek
+- ChcÄ… jednego miejsca do zarzÄ…dzania sprzedaĹĽÄ…
## Context
**Business Context:**
-Rynek narzędzi do zarządzania sprzedażą wielokanałową (podobne rozwiązania: base.com, apilo.com). Aplikacja budowana jako własne rozwiązanie.
+Rynek narzędzi do zarządzania sprzedażą wielokanałową (podobne rozwiązania: base.com, apilo.com). Aplikacja budowana jako własne rozwiązanie.
**Technical Context:**
-PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API przewoźników (InPost i inne).
+PHP (XAMPP/Laravel), integracje z API marketplace'Ăłw (Allegro, Erli) oraz API przewoĹşnikĂłw (InPost i inne).
## Constraints
### Technical Constraints
-- PHP/XAMPP — środowisko Windows lokalne
+- PHP/XAMPP — środowisko Windows lokalne
- Medoo + prepared statements (bez sklejania SQL)
-- Brak natywnych `alert()`/`confirm()` — używać `window.OrderProAlerts`
-- Metody pomocnicze string/date/color → `App\Core\Support\StringHelper` (nie powielać w klasach)
-- Zarządzanie tokenami OAuth Allegro → `App\Modules\Settings\AllegroTokenManager`
-- Kompozycja obiektów crona → `App\Modules\Cron\CronHandlerFactory` (jedyne miejsce `new AllegroIntegrationRepository` i in. w kontekście crona)
+- Brak natywnych `alert()`/`confirm()` — używać `window.OrderProAlerts`
+- Metody pomocnicze string/date/color → `App\Core\Support\StringHelper` (nie powielać w klasach)
+- Zarządzanie tokenami OAuth Allegro → `App\Modules\Settings\AllegroTokenManager`
+- Kompozycja obiektów crona → `App\Modules\Cron\CronHandlerFactory` (jedyne miejsce `new AllegroIntegrationRepository` i in. w kontekście crona)
- Pole CSRF w formularzach HTTP: zawsze `_token` (nie `_csrf_token`)
### Business Constraints
@@ -93,30 +95,30 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p
| Decision | Rationale | Date | Status |
|----------|-----------|------|--------|
-| Własne rozwiązanie zamiast gotowego SaaS | Pełna kontrola nad funkcjonalnością | 2026-03-12 | Active |
-| AllegroTokenManager wydzielony z 4 klas OAuth | Eliminacja duplikacji logiki odświeżania tokenów | 2026-03-12 | Active |
-| StringHelper jako final static class w Core/Support | Centralizacja 19 kopii helperów string/date/color z 15+ klas | 2026-03-12 | Active |
-| CronHandlerFactory jako jedyne miejsce kompozycji crona | Application.php i bin/cron.php były rozsynchronizowane — 2 bugi w bin/cron.php | 2026-03-13 | Active |
-| Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Standardyzacja na nazwę używaną przez większość kodu (10+ kontrolerów); eliminacja ryzyka pomyłki przy nowych formularzach | 2026-03-13 | Active |
-| Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Jeden wzorzec w całej aplikacji; eliminacja bezpośrednich zapisów $_SESSION | 2026-03-13 | Active |
-| validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Redukcja return statements do ≤3; spójny wzorzec kontrolerów | 2026-03-13 | Active |
-| God class split via move-method bez zmiany logiki | ShopproOrdersSyncService 39→9 metod; AllegroIntegrationController 35→25 — czysty podział przez ekstrakcję klas | 2026-03-13 | Active |
-| AllegroIntegrationController pozostaje przy 25 metodach (nie ≤15) | Pełny podział wymaga AllegroImportScheduleService — poza zakresem v0.1 | 2026-03-13 | Active |
-| dg/bypass-finals do testów final classes | Wszystkie klasy final — mockowanie przez bypass-finals zamiast usuwania final | 2026-03-15 | Active |
-| InPost ShipX API zamiast Allegro WZA remap | InpostIntegrationRepository jest pod ShipX; niezależność od Allegro | 2026-03-15 | Active |
-| vendor/ w ftp-kr ignore | Auto-upload dev deps na serwer powodował Fatal Error | 2026-03-15 | Active |
-| Snapshot pattern: seller/buyer/items jako JSON w receipts | Dane zamrożone w momencie wystawienia — niezależne od przyszłych zmian źródła | 2026-03-15 | Active |
-| Atomowe numerowanie paragonów: INSERT ON DUPLICATE KEY UPDATE | Bezpieczne generowanie kolejnych numerów bez race conditions | 2026-03-15 | Active |
-| Moduł Accounting w osobnym namespace | App\Modules\Accounting — separacja od Settings | 2026-03-15 | Active |
-| ATTACHMENT_TYPES jako centralna mapa typów załączników | Rozszerzalność: nowy typ = 1 linia w tablicy PHP, bez zmian DB/widoku | 2026-03-16 | Active |
-| Quill.js 2.0.3 CDN dla edytora szablonów | Brak build pipeline w projekcie; CDN prostszy | 2026-03-16 | Active |
+| Własne rozwiązanie zamiast gotowego SaaS | Pełna kontrola nad funkcjonalnością | 2026-03-12 | Active |
+| AllegroTokenManager wydzielony z 4 klas OAuth | Eliminacja duplikacji logiki odświeżania tokenów | 2026-03-12 | Active |
+| StringHelper jako final static class w Core/Support | Centralizacja 19 kopii helperĂłw string/date/color z 15+ klas | 2026-03-12 | Active |
+| CronHandlerFactory jako jedyne miejsce kompozycji crona | Application.php i bin/cron.php były rozsynchronizowane — 2 bugi w bin/cron.php | 2026-03-13 | Active |
+| Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Standardyzacja na nazwę używaną przez większość kodu (10+ kontrolerów); eliminacja ryzyka pomyłki przy nowych formularzach | 2026-03-13 | Active |
+| Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Jeden wzorzec w całej aplikacji; eliminacja bezpośrednich zapisów $_SESSION | 2026-03-13 | Active |
+| validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Redukcja return statements do ≤3; spójny wzorzec kontrolerów | 2026-03-13 | Active |
+| God class split via move-method bez zmiany logiki | ShopproOrdersSyncService 39→9 metod; AllegroIntegrationController 35→25 — czysty podział przez ekstrakcję klas | 2026-03-13 | Active |
+| AllegroIntegrationController pozostaje przy 25 metodach (nie ≤15) | Pełny podział wymaga AllegroImportScheduleService — poza zakresem v0.1 | 2026-03-13 | Active |
+| dg/bypass-finals do testów final classes | Wszystkie klasy final — mockowanie przez bypass-finals zamiast usuwania final | 2026-03-15 | Active |
+| InPost ShipX API zamiast Allegro WZA remap | InpostIntegrationRepository jest pod ShipX; niezależność od Allegro | 2026-03-15 | Active |
+| vendor/ w ftp-kr ignore | Auto-upload dev deps na serwer powodował Fatal Error | 2026-03-15 | Active |
+| Snapshot pattern: seller/buyer/items jako JSON w receipts | Dane zamrożone w momencie wystawienia — niezależne od przyszłych zmian źródła | 2026-03-15 | Active |
+| Atomowe numerowanie paragonĂłw: INSERT ON DUPLICATE KEY UPDATE | Bezpieczne generowanie kolejnych numerĂłw bez race conditions | 2026-03-15 | Active |
+| Moduł Accounting w osobnym namespace | App\Modules\Accounting — separacja od Settings | 2026-03-15 | Active |
+| ATTACHMENT_TYPES jako centralna mapa typów załączników | Rozszerzalność: nowy typ = 1 linia w tablicy PHP, bez zmian DB/widoku | 2026-03-16 | Active |
+| Quill.js 2.0.3 CDN dla edytora szablonĂłw | Brak build pipeline w projekcie; CDN prostszy | 2026-03-16 | Active |
## Success Metrics
| Metric | Target | Current | Status |
|--------|--------|---------|--------|
-| Liczba zintegrowanych źródeł zamówień | ≥3 | 2 (Allegro, Erli) | In progress |
-| Generowanie etykiet | Działa | InPost | In progress |
+| Liczba zintegrowanych źródeł zamówień | ≥3 | 2 (Allegro, Erli) | In progress |
+| Generowanie etykiet | Działa | InPost | In progress |
## Tech Stack
@@ -126,7 +128,7 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p
| Frontend | HTML/CSS/JS + SCSS | jQuery Alerts module |
| Database | MySQL (Medoo) | Prepared statements |
| Auth | Sesje PHP | |
-| Integracje | Allegro API, Erli API | Przewoźnicy: InPost (ShipX), Apaczka |
+| Integracje | Allegro API, Erli API | PrzewoĹşnicy: InPost (ShipX), Apaczka |
| Testing | PHPUnit 11.5 + dg/bypass-finals | Unit tests w tests/Unit/ |
## Specialized Flows
@@ -134,11 +136,12 @@ PHP (XAMPP/Laravel), integracje z API marketplace'ów (Allegro, Erli) oraz API p
See: .paul/SPECIAL-FLOWS.md
Quick Reference:
-- /feature-dev → Nowe funkcjonalności i integracje (optional)
-- /code-review → Przegląd kodu przed UNIFY (optional)
-- /frontend-design → Komponenty UI i widoki (optional)
-- /simplify → Refaktoryzacja po implementacji (optional)
+- /feature-dev → Nowe funkcjonalności i integracje (optional)
+- /code-review → Przegląd kodu przed UNIFY (optional)
+- /frontend-design → Komponenty UI i widoki (optional)
+- /simplify → Refaktoryzacja po implementacji (optional)
---
-*PROJECT.md — Updated when requirements or context change*
-*Last updated: 2026-03-23 after Phase 26 (Manual Tracking Number complete)*
+*PROJECT.md — Updated when requirements or context change*
+*Last updated: 2026-03-25 after Phase 30 (Button Primary Color Distinction complete)*
+
diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md
index eeac909..a62373c 100644
--- a/.paul/ROADMAP.md
+++ b/.paul/ROADMAP.md
@@ -1,19 +1,32 @@
-# Roadmap: orderPRO
+# Roadmap: orderPRO
## Overview
-orderPRO to narzędzie do wielokanałowego zarządzania sprzedażą. Projekt przechodzi od podstawowych integracji z marketplace'ami i generowania etykiet, przez rozbudowę o nowe źródła zamówień i przewoźników, aż do pełnego zarządzania produktami i stanami magazynowymi.
+orderPRO to narzędzie do wielokanałowego zarządzania sprzedażą. Projekt przechodzi od podstawowych integracji z marketplace'ami i generowania etykiet, przez rozbudowę o nowe źródła zamówień i przewoźników, aż do pełnego zarządzania produktami i stanami magazynowymi.
## Current Milestone
-None — ready for next milestone.
+None - ready for next milestone.
## Completed Milestones
-v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan)
+v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)
-Konfiguracja mapowania statusów dostawy z API przewoźników na znormalizowane statusy widoczne w aplikacji. Użytkownik może dostosować tłumaczenia i przypisania statusów bez zmian w kodzie.
+Rozdzielenie semantyki kolorow UI: glowny kolor przyciskow akcji zostal oddzielony od koloru naglowkow sekcji, aby poprawic czytelnosc i szybkosc skanowania interfejsu.
+
+| Phase | Name | Plans | Completed |
+|-------|------|-------|-----------|
+| 30 | Button Primary Color Distinction | 1/1 | 2026-03-25 |
+
+Archive: `.paul/phases/30-button-primary-color/`
+
+
+
+
+v1.3 Konfiguracja śledzenia przesyłek — 2026-03-23 (1 phase, 1 plan)
+
+Konfiguracja mapowania statusów dostawy z API przewoźników na znormalizowane statusy widoczne w aplikacji. Użytkownik może dostosować tłumaczenia i przypisania statusów bez zmian w kodzie.
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -24,9 +37,9 @@ Archive: `.paul/phases/29-delivery-status-mapping-ui/`
-v1.2 Śledzenie przesyłek — 2026-03-23 (2 phases, 2 plans)
+v1.2 Śledzenie przesyłek — 2026-03-23 (2 phases, 2 plans)
-Automatyczne śledzenie statusu dostawy przesyłek przez API przewoźników (InPost ShipX, Apaczka, Allegro WZA). Cykliczne odpytywanie przez cron z konfigurowalnym interwałem. Dwupoziomowy system statusów: znormalizowany + surowy z API. Badge'e w UI, linki śledzenia, ustawienia interwału.
+Automatyczne śledzenie statusu dostawy przesyłek przez API przewoźników (InPost ShipX, Apaczka, Allegro WZA). Cykliczne odpytywanie przez cron z konfigurowalnym interwałem. Dwupoziomowy system statusów: znormalizowany + surowy z API. Badge'e w UI, linki śledzenia, ustawienia interwału.
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -38,9 +51,9 @@ Archive: `.paul/phases/27-shipment-tracking-backend/`, `.paul/phases/28-shipment
-v1.1 Ręczny numer przesyłki — 2026-03-23 (1 phase, 1 plan)
+v1.1 Ręczny numer przesyłki — 2026-03-23 (1 phase, 1 plan)
-Możliwość ręcznego dodania numeru śledzenia przesyłki do zamówienia (bez tworzenia przesyłki przez API przewoźnika).
+Możliwość ręcznego dodania numeru śledzenia przesyłki do zamówienia (bez tworzenia przesyłki przez API przewoźnika).
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -51,9 +64,9 @@ Archive: `.paul/phases/26-manual-tracking-number/`
-v1.0 Presety przesyłek — 2026-03-22 (3 phases, 3 plans)
+v1.0 Presety przesyłek — 2026-03-22 (3 phases, 3 plans)
-Customowe przyciski szybkiego wypełniania formularza przygotowania przesyłki. Presety globalne z nazwą i kolorem — tworzenie, autofill, edycja, usuwanie.
+Customowe przyciski szybkiego wypełniania formularza przygotowania przesyłki. Presety globalne z nazwą i kolorem — tworzenie, autofill, edycja, usuwanie.
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -66,9 +79,9 @@ Archive: `.paul/phases/23-shipment-presets-backend/`, `.paul/phases/24-shipment-
-v0.9 Poprawki ustawień firmy — 2026-03-22 (1 phase, 1 plan)
+v0.9 Poprawki ustawień firmy — 2026-03-22 (1 phase, 1 plan)
-Naprawa buga: pola REGON, BDO, KRS i logo nie zapisywały się w ustawieniach firmy (kontroler nie przekazywał ich do repozytorium).
+Naprawa buga: pola REGON, BDO, KRS i logo nie zapisywały się w ustawieniach firmy (kontroler nie przekazywał ich do repozytorium).
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -79,9 +92,9 @@ Archive: `.paul/phases/22-regon-save-fix/`
-v0.8 Poprawki wyświetlania źródła zamówień — 2026-03-22 (1 phase, 1 plan)
+v0.8 Poprawki wyświetlania źródła zamówień — 2026-03-22 (1 phase, 1 plan)
-Na liście zamówień i stronie szczegółów: wyświetlanie nazwy konkretnej integracji (z tabeli `integrations`) zamiast generycznego "shopPRO". Korekta kolejności source/ID.
+Na liście zamówień i stronie szczegółów: wyświetlanie nazwy konkretnej integracji (z tabeli `integrations`) zamiast generycznego "shopPRO". Korekta kolejności source/ID.
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -92,9 +105,9 @@ Archive: `.paul/phases/21-order-source-display/`
-v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans)
+v0.7 Zdalne drukowanie etykiet — 2026-03-22 (3 phases, 3 plans)
-System zdalnego drukowania etykiet przesyłek na drukarce termicznej. Aplikacja Windows w system tray odpytuje API orderPRO, pobiera zlecenia i drukuje etykiety A6.
+System zdalnego drukowania etykiet przesyłek na drukarce termicznej. Aplikacja Windows w system tray odpytuje API orderPRO, pobiera zlecenia i drukuje etykiety A6.
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -107,7 +120,7 @@ Archive: `.paul/phases/18-print-queue-backend/`, `.paul/phases/19-ui-integration
-v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan)
+v0.6 Poprawki UX — 2026-03-22 (1 phase, 1 plan)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -120,7 +133,19 @@ Archive: `.paul/phases/17-receipt-duplicate-guard/`
## Completed Milestones
-v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans)
+v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)
+
+Rozdzielenie semantyki kolorow UI: glowny kolor przyciskow akcji zostal oddzielony od koloru naglowkow sekcji, aby poprawic czytelnosc i szybkosc skanowania interfejsu.
+
+| Phase | Name | Plans | Completed |
+|-------|------|-------|-----------|
+| 30 | Button Primary Color Distinction | 1/1 | 2026-03-25 |
+
+Archive: .paul/phases/30-button-primary-color/
+
+
+
+v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -131,35 +156,35 @@ Archive: `.paul/phases/16-automated-tasks/`
-v0.4 Moduł E-mail — 2026-03-17 (3 phases, 4 plans)
+v0.4 Moduł E-mail — 2026-03-17 (3 phases, 4 plans)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
| 13 | DB + Skrzynki pocztowe | 1/1 | 2026-03-17 |
-| 14 | Szablony wiadomości | 2/2 | 2026-03-17 |
-| 15 | Wysyłka e-mail z zamówień | 1/1 | 2026-03-17 |
+| 14 | Szablony wiadomości | 2/2 | 2026-03-17 |
+| 15 | Wysyłka e-mail z zamówień | 1/1 | 2026-03-17 |
Archive: `.paul/milestones/v0.4-ROADMAP.md`
-v0.3 Moduł Paragonów — 2026-03-15 (5 phases, 5 plans)
+v0.3 Moduł Paragonów — 2026-03-15 (5 phases, 5 plans)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
| 8 | DB Foundation + Company Settings | 1/1 | 2026-03-15 |
-| 9 | Konfiguracja paragonów (Ustawienia) | 1/1 | 2026-03-15 |
-| 10 | Wystawianie paragonów z zamówienia | 1/1 | 2026-03-15 |
-| 11 | Podgląd i wydruk paragonu (HTML+PDF) | 1/1 | 2026-03-15 |
-| 12 | Sekcja Księgowość — lista + eksport XLSX | 1/1 | 2026-03-15 |
+| 9 | Konfiguracja paragonĂłw (Ustawienia) | 1/1 | 2026-03-15 |
+| 10 | Wystawianie paragonĂłw z zamĂłwienia | 1/1 | 2026-03-15 |
+| 11 | PodglÄ…d i wydruk paragonu (HTML+PDF) | 1/1 | 2026-03-15 |
+| 12 | Sekcja Księgowość — lista + eksport XLSX | 1/1 | 2026-03-15 |
Archive: `.paul/milestones/v0.3-ROADMAP.md`
-v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans)
+v0.2 Pre-Expansion Fixes — 2026-03-15 (1 phase, 5 plans)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -168,8 +193,8 @@ Archive: `.paul/milestones/v0.3-ROADMAP.md`
Plans:
- 07-01: Performance (N+1 subqueries, DB indexes, information_schema cache)
- 07-02: Stability (SSL verification, cron throttle DB, migration 000014b)
-- 07-03: UX (orderpro_to_allegro disable, lista zamówień fixes)
-- 07-04: Tests (AllegroTokenManager + AllegroOrderImportService — 12 testów)
+- 07-03: UX (orderpro_to_allegro disable, lista zamówień fixes)
+- 07-04: Tests (AllegroTokenManager + AllegroOrderImportService — 12 testów)
- 07-05: InPost ShipmentProviderInterface (natywne ShipX API)
Archive: `.paul/phases/07-pre-expansion-fixes/`
@@ -177,7 +202,7 @@ Archive: `.paul/phases/07-pre-expansion-fixes/`
-v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans)
+v0.1 Initial Release — 2026-03-13 (6 phases, 15 plans)
| Phase | Name | Plans | Completed |
|-------|------|-------|-----------|
@@ -194,4 +219,7 @@ Archive: `.paul/milestones/v0.1-ROADMAP.md`
---
*Roadmap created: 2026-03-12*
-*Last updated: 2026-03-23 — v1.3 milestone complete*
+*Last updated: 2026-03-25 - v1.4 milestone complete*
+
+
+
diff --git a/.paul/STATE.md b/.paul/STATE.md
index 2cbc560..beeddba 100644
--- a/.paul/STATE.md
+++ b/.paul/STATE.md
@@ -1,245 +1,248 @@
-# Project State
+# Project State
## Project Reference
See: .paul/PROJECT.md (updated 2026-03-12)
-**Core value:** Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami.
-**Current focus:** v1.3 complete — ready for next milestone
+**Core value:** Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami.
+**Current focus:** v1.4 complete - ready for next milestone
## Current Position
-Milestone: v1.3 complete
-Phase: [1] of [1] (Delivery Status Mapping UI) — Complete ✓
-Plan: 29-01 complete
-Status: Milestone v1.3 complete — ready for next milestone
-Last activity: 2026-03-23 — Phase 29 transition complete, v1.3 done
+Milestone: v1.4 complete
+Phase: [1] of [1] (Button Primary Color Distinction) - Complete
+Plan: 30-01 complete
+Status: Milestone v1.4 complete - ready for next milestone
+Last activity: 2026-03-25 22:05 - Unified .paul/phases/30-button-primary-color/30-01-SUMMARY.md
Progress:
-- v0.1 Initial Release: [██████████] 100% ✓
-- v0.2 Pre-Expansion Fixes: [██████████] 100% ✓
-- v0.3 Moduł Paragonów: [██████████] 100% ✓
-- v0.4 Moduł E-mail: [██████████] 100% ✓
-- v0.5 Moduł Automatyzacji: [██████████] 100% ✓
-- v0.6 Poprawki UX: [██████████] 100% ✓
-- v0.7 Zdalne drukowanie etykiet: [██████████] 100% ✓
-- v0.8 Poprawki źródła zamówień: [██████████] 100% ✓
-- v0.9 Poprawki ustawień firmy: [██████████] 100% ✓
-- v1.0 Presety przesyłek: [██████████] 100% ✓
-- v1.1 Ręczny numer przesyłki: [██████████] 100% ✓
-- v1.2 Śledzenie przesyłek: [██████████] 100% ✓
- - Phase 27: [██████████] 100% ✓ (1/1 plans)
- - Phase 28: [██████████] 100% ✓ (1/1 plans)
-- v1.3 Konfiguracja śledzenia przesyłek: [██████████] 100% ✓
- - Phase 29: [██████████] 100% ✓ (1/1 plans)
+- v0.1 Initial Release: [##########] 100% done
+- v0.2 Pre-Expansion Fixes: [##########] 100% done
+- v0.3 Moduł Paragonów: [##########] 100% done
+- v0.4 Moduł E-mail: [##########] 100% done
+- v0.5 Moduł Automatyzacji: [##########] 100% done
+- v0.6 Poprawki UX: [##########] 100% done
+- v0.7 Zdalne drukowanie etykiet: [##########] 100% done
+- v0.8 Poprawki źródła zamówień: [##########] 100% done
+- v0.9 Poprawki ustawień firmy: [##########] 100% done
+- v1.0 Presety przesyłek: [##########] 100% done
+- v1.1 Ręczny numer przesyłki: [##########] 100% done
+- v1.2 Śledzenie przesyłek: [##########] 100% done
+ - Phase 27: [##########] 100% done (1/1 plans)
+ - Phase 28: [##########] 100% done (1/1 plans)
+- v1.3 Konfiguracja śledzenia przesyłek: [##########] 100% done
+ - Phase 29: [##########] 100% done (1/1 plans)
+- v1.4 UI Readability Tweaks: [##########] 100% done
+ - Phase 30: [##########] 100% done (1/1 plans)
## Loop Position
Current loop state:
```
-PLAN ──▶ APPLY ──▶ UNIFY
- ✓ ✓ ✓ [Loop complete]
+PLAN --> APPLY --> UNIFY
+ done done done [Loop complete - ready for next PLAN]
```
## Accumulated Context
### Decisions
-| Data | Decyzja | Faza | Wpływ |
+| Data | Decyzja | Faza | Wpływ |
|------|---------|------|-------|
-| 2026-03-23 | Dwupoziomowy system statusów: normalized + raw z API | Faza 27 | Max szczegółowość dla usera + spójna logika filtrowania |
-| 2026-03-23 | Osobny ShipmentTrackingInterface (nie rozszerzenie ShipmentProviderInterface) | Faza 27 | Czysta separacja tracking vs creation; łatwe dodawanie providerów |
+| 2026-03-25 | Rozdzielenie tokenow kolorow akcji (`--c-action-primary`) od naglowkow (`--c-primary`) | Faza 30 | Lepsza czytelnosc UI i szybsze rozpoznanie CTA |
+| 2026-03-23 | Dwupoziomowy system statusów: normalized + raw z API | Faza 27 | Max szczegółowość dla usera + spójna logika filtrowania |
+| 2026-03-23 | Osobny ShipmentTrackingInterface (nie rozszerzenie ShipmentProviderInterface) | Faza 27 | Czysta separacja tracking vs creation; łatwe dodawanie providerów |
| 2026-03-23 | Idempotentne migracje (IF NOT EXISTS + INSERT IGNORE) | Faza 27 | Bezpieczne re-run migracji |
-| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenów, brak duplikacji |
-| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas |
+| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenĂłw, brak duplikacji |
+| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas |
| 2026-03-13 | CronHandlerFactory jako jedyne miejsce kompozycji crona | Faza 02 | Application.php i bin/cron.php zsynchronizowane; 2 bugi naprawione |
| 2026-03-13 | Pole CSRF w formularzach: `_token` (nie `_csrf_token`) | Faza 03 | Ustandaryzowane w OrdersController, ShipmentController i 2 widokach |
-| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji |
-| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach |
-| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockują final classes bez zmiany konwencji projektu |
-| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie |
-| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty |
-| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze |
-| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamrożone w momencie wystawienia paragonu |
-| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 |
-| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec |
-| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka |
-| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonów |
-| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings |
-| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze |
+| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji |
+| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach |
+| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockujÄ… final classes bez zmiany konwencji projektu |
+| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie |
+| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty |
+| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze |
+| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamroĹĽone w momencie wystawienia paragonu |
+| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 |
+| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec |
+| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka |
+| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonĂłw |
+| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings |
+| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze |
| 2026-03-15 | ftp-kr vendor/ nie ignorowany (zmiana na /vendor/bin) | Faza 11 | Automatyczny upload vendor/ przy zmianach; rewizja decyzji z fazy 07 |
-| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości |
+| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości |
| 2026-03-15 | POST eksport z CSRF + dwa tryby (zaznaczone/wszystkie z filtra) | Faza 12 | Bezpieczny eksport; selectable table-list reuse |
-| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typów załączników | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP |
-| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonów | Faza 14 | Brak build pipeline; CDN prostszy |
-| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zależność composer; in-memory attachments (addStringAttachment) |
-| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji |
-| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezależny od kontrolera szablonów |
+| 2026-03-16 | ATTACHMENT_TYPES jako centralna mapa typów załączników | Faza 14 | Rozszerzalność: nowy typ = 1 linia w tablicy PHP |
+| 2026-03-16 | Quill.js 2.0.3 CDN dla edytora szablonĂłw | Faza 14 | Brak build pipeline; CDN prostszy |
+| 2026-03-17 | PHPMailer v7.0.2 jako SMTP transport | Faza 15 | Nowa zależność composer; in-memory attachments (addStringAttachment) |
+| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji |
+| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezaleĹĽny od kontrolera szablonĂłw |
### Skill Audit (Faza 29, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych unikalnych issues; 3x S1192 pre-existing DeliveryStatus, 1x S1142 pre-existing matchCarrierByName, 2x accessibility minor (pre-existing pattern) |
+| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3x S1192 pre-existing DeliveryStatus, 1x S1142 pre-existing matchCarrierByName, 2x accessibility minor (pre-existing pattern) |
### Skill Audit (Faza 28, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych unikalnych issues; 1x S1448 CronRepository (22 metod, pre-existing pattern) |
+| sonar-scanner | âś“ | 0 nowych unikalnych issues; 1x S1448 CronRepository (22 metod, pre-existing pattern) |
### Skill Audit (Faza 27, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych unikalnych issues; 3 pre-existing patterns (2x S1192 DeliveryStatus, 1x S1172 handler) |
+| sonar-scanner | âś“ | 0 nowych unikalnych issues; 3 pre-existing patterns (2x S1192 DeliveryStatus, 1x S1172 handler) |
### Skill Audit (Faza 26, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues; 8 pre-existing na ShipmentController (S3776, S1192, S1142, S3358) |
+| sonar-scanner | âś“ | 0 nowych issues; 8 pre-existing na ShipmentController (S3776, S1192, S1142, S3358) |
### Skill Audit (Faza 25, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach |
+| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
### Skill Audit (Faza 24, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach |
+| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
### Skill Audit (Faza 23, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 issues na nowych plikach |
+| sonar-scanner | âś“ | 0 issues na nowych plikach |
### Skill Audit (Faza 22, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues na zmienionym pliku; 1 pre-existing S1172 |
+| sonar-scanner | âś“ | 0 nowych issues na zmienionym pliku; 1 pre-existing S1172 |
### Skill Audit (Faza 21, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach; 18 pre-existing |
+| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach; 18 pre-existing |
### Skill Audit (Faza 20, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | n/a | Projekt C# — poza zakresem skanera PHP |
+| sonar-scanner | n/a | Projekt C# — poza zakresem skanera PHP |
### Skill Audit (Faza 19, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md |
+| sonar-scanner | âś“ | 0 nowych blocker/critical; 4 minor/major zalogowane w DOCS/todo.md |
### Skill Audit (Faza 18, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 17, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ✓ | 0 nowych issues na zmienionych plikach |
+| sonar-scanner | âś“ | 0 nowych issues na zmienionych plikach |
### Skill Audit (Faza 15, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym milestone |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym milestone |
### Skill Audit (Faza 14, Plan 02)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 13, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 12, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 11, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 10, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
+| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
### Skill Audit (Faza 07, Plan 05)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie |
+| sonar-scanner | â—‹ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie |
### Skill Audit (Faza 07, Plan 04)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
### Skill Audit (Faza 07, Plan 03)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
### Skill Audit (Faza 07, Plan 02)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
### Skill Audit (Faza 07, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
### Skill Audit (Faza 06, Plan 06)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
### Skill Audit (Faza 06, Plan 02)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu |
+| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu |
### Skill Audit (Faza 05, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP |
+| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP |
### Skill Audit (Faza 04, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem |
+| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem |
### Skill Audit (Faza 03, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie |
+| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie |
### Skill Audit (Faza 02, Plan 01)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code |
-| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna |
+| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code |
+| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna |
### Skill Audit (Faza 01, Plan 02)
-| Oczekiwany | Wywołany | Uwagi |
+| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
-| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny |
-| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY |
-| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md |
+| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny |
+| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY |
+| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md |
### Deferred Issues
-- **CI/CD SonarQube** — dodać GitHub Actions workflow (`.github/workflows/sonarqube.yml`) który odpala `sonar-scanner` automatycznie przy każdym pushu. Token projektu: `sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d` (dodać jako GitHub Secret `SONAR_TOKEN`). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane.
-- **code-review** — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01).
-- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
+- **CI/CD SonarQube** — dodać GitHub Actions workflow (`.github/workflows/sonarqube.yml`) który odpala `sonar-scanner` automatycznie przy każdym pushu. Token projektu: `sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d` (dodać jako GitHub Secret `SONAR_TOKEN`). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane.
+- **code-review** — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01).
+- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
### Git State
-Last commit: pending — feat(29-delivery-status-mapping-ui)
+Last commit: pending — feat(29-delivery-status-mapping-ui)
Branch: main
Feature branches merged: none
@@ -248,13 +251,15 @@ Brak.
## Session Continuity
-Last session: 2026-03-23
-Stopped at: v1.3 milestone complete
-Next action: /paul:discuss-milestone — ustalić zakres v1.4
+Last session: 2026-03-25 22:05
+Stopped at: v1.4 milestone complete
+Next action: /paul:discuss-milestone - ustalic zakres kolejnego milestone
Resume file: .paul/ROADMAP.md
Resume context:
-- v0.1–v1.3: COMPLETE ✓ (29 phases, 41 plans)
+- v0.1-v1.4: COMPLETE done (30 phases, 42 plans)
- Ready for next milestone
-
---
-*STATE.md — Updated after every significant action*
+*STATE.md — Updated after every significant action*
+
+
+
diff --git a/.paul/phases/30-button-primary-color/30-01-PLAN.md b/.paul/phases/30-button-primary-color/30-01-PLAN.md
new file mode 100644
index 0000000..b5e90b8
--- /dev/null
+++ b/.paul/phases/30-button-primary-color/30-01-PLAN.md
@@ -0,0 +1,163 @@
+---
+phase: 30-button-primary-color
+plan: 01
+type: execute
+wave: 1
+depends_on: []
+files_modified:
+ - resources/scss/shared/_ui-components.scss
+ - resources/scss/modules/_printing.scss
+ - public/assets/css/app.css
+ - DOCS/ARCHITECTURE.md
+ - DOCS/TECH_CHANGELOG.md
+ - DOCS/todo.md
+autonomous: true
+---
+
+
+## Goal
+Zaplanowac wdrozenie zmiany z `DOCS/todo.md` pkt 39: glowny kolor przyciskow ma zostac zmieniony z niebieskiego na inny, aby nie mylil sie wizualnie z naglowkami sekcji.
+
+## Purpose
+Poprawa czytelnosci interfejsu i szybsze rozroznianie elementow akcji (przyciski) od elementow informacyjnych (naglowki `section-title`).
+
+## Output
+Gotowa implementacja nowego koloru akcji w warstwie SCSS (bez inline CSS), przebudowany `public/assets/css/app.css`, oraz aktualizacja dokumentacji technicznej i statusu punktu 39 na liscie TODO.
+
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+@DOCS/todo.md
+@DOCS/ARCHITECTURE.md
+@DOCS/DB_SCHEMA.md
+
+## Source Files
+@resources/scss/shared/_ui-components.scss
+@resources/scss/modules/_printing.scss
+@resources/scss/app.scss
+@public/assets/css/app.css
+
+
+
+## Required Skills (from SPECIAL-FLOWS.md)
+
+| Skill | Priority | When to Invoke | Loaded? |
+|-------|----------|----------------|---------|
+| `sonar-scanner` | required | Po APPLY, przed UNIFY | done |
+| /frontend-design | optional | Przy finalnym dopracowaniu kontrastu i czytelnosci UI | pending |
+| /code-review | optional | Po implementacji, przed UNIFY | pending |
+
+**BLOCKING:** Required skills MUST be loaded before APPLY proceeds.
+Run each skill command or confirm already loaded.
+
+## Skill Invocation Checklist
+- [x] `sonar-scanner` uruchomiony po APPLY
+- [ ] /frontend-design (opcjonalnie) jesli potrzebna korekta kontrastu
+- [ ] /code-review (opcjonalnie) przed UNIFY
+
+
+
+
+
+## AC-1: Rozdzielenie kolorow naglowkow i przyciskow
+```gherkin
+Given interfejs korzysta z globalnych tokenow kolorow
+When widok renderuje `section-title` oraz `btn btn--primary`
+Then glowny przycisk nie uzywa niebieskiego koloru bazowego naglowkow i jest latwo odroznialny wizualnie
+```
+
+## AC-2: Spojne stany przyciskow akcji
+```gherkin
+Given przyciski glownych akcji (`.btn--primary` i `.btn--outline-primary`)
+When uzytkownik wejdzie w hover/focus
+Then wszystkie stany korzystaja z nowej palety akcji i zachowuja czytelnosc
+```
+
+## AC-3: Zmiana wdrozona zgodnie ze standardem projektu
+```gherkin
+Given standard frontendowy orderPRO
+When zmiana zostanie zakonczona
+Then style sa utrzymane w plikach SCSS, assets sa zbudowane do `public/assets/css/app.css`, a dokumentacja i TODO sa zaktualizowane
+```
+
+
+
+
+
+
+ Task 1: Wydzielenie palety kolorow dla akcji (buttons)
+ resources/scss/shared/_ui-components.scss
+
+ Wprowadz oddzielne tokeny kolorystyczne dla przyciskow akcji (np. `--c-action-primary`, `--c-action-primary-dark`, opcjonalny token focus-ring),
+ pozostawiajac `--c-primary` dla elementow informacyjnych (naglowki/linki), aby nie mieszac semantyki.
+ Podlacz nowe tokeny do `.btn--primary` oraz focusa przyciskow.
+ Unikaj zmian w HTML/PHP - zakres to warstwa stylow.
+
+ rg -n "c-action-primary|btn--primary|focus-ring" resources/scss/shared/_ui-components.scss
+ AC-1 satisfied: primary button nie korzysta juz z tej samej niebieskiej bazy co `section-title`.
+
+
+
+ Task 2: Ujednolicenie wariantow przyciskow zaleznych od primary
+ resources/scss/modules/_printing.scss, resources/scss/shared/_ui-components.scss
+
+ Zaktualizuj miejsca, ktore semantycznie reprezentuja glowna akcje, aby korzystaly z nowej palety akcji
+ (w szczegolnosci `.btn--outline-primary` i pokrewne stany), bez zmiany logiki UI.
+ Zachowaj kompaktowosc interfejsu i aktualne rozmiary komponentow.
+
+ rg -n "btn--outline-primary|c-primary|c-action-primary" resources/scss/modules/_printing.scss resources/scss/shared/_ui-components.scss
+ AC-2 satisfied: stany hover/focus dla przyciskow sa spojne i oparte o nowy kolor akcji.
+
+
+
+ Task 3: Build assets i aktualizacja dokumentacji zmiany
+ public/assets/css/app.css, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md, DOCS/todo.md
+
+ Zbuduj CSS (`npm run build:css`) po zmianach SCSS.
+ Zaktualizuj dokumentacje techniczna (ARCHITECTURE + TECH_CHANGELOG) o nowy standard rozdzielenia kolorow akcji i naglowkow.
+ Oznacz punkt 39 w `DOCS/todo.md` jako zrealizowany po pozytywnej weryfikacji.
+
+ npm run build:css oraz manualny check ekranow z przyciskami i naglowkami (np. orders/list, settings/*)
+ AC-3 satisfied: assets + dokumentacja + status TODO sa zgodne z wymaganiami projektu.
+
+
+
+
+
+
+## DO NOT CHANGE
+- `database/migrations/*`
+- Logika backendu PHP (kontrolery/repozytoria/serwisy)
+- Moduly alertow `resources/modules/jquery-alerts/*` (poza zakresem tej zmiany)
+
+## SCOPE LIMITS
+- Zakres dotyczy tylko zmiany glównego koloru przyciskow i powiazanych tokenow wizualnych.
+- Bez redesignu layoutu, bez zmian spacingu i bez realizacji innych punktow z `DOCS/todo.md`.
+- Brak zmian kontraktow API i brak zmian schematu DB.
+
+
+
+
+Before declaring plan complete:
+- [ ] `npm run build:css` przechodzi bez bledow
+- [ ] Widoczna roznica miedzy `section-title` i `btn--primary` na kluczowych ekranach
+- [ ] Brak inline CSS w widokach
+- [ ] `DOCS/ARCHITECTURE.md` i `DOCS/TECH_CHANGELOG.md` zaktualizowane
+- [ ] `DOCS/todo.md` punkt 39 oznaczony jako zrealizowany
+- [ ] All acceptance criteria met
+
+
+
+- Wszystkie taski zakonczone
+- Build CSS zakonczony sukcesem
+- Kontrast semantyczny: naglowki i glowny CTA nie myla sie kolorystycznie
+- Zmiana udokumentowana i gotowa do UNIFY
+
+
+
+
diff --git a/.paul/phases/30-button-primary-color/30-01-SUMMARY.md b/.paul/phases/30-button-primary-color/30-01-SUMMARY.md
new file mode 100644
index 0000000..2804114
--- /dev/null
+++ b/.paul/phases/30-button-primary-color/30-01-SUMMARY.md
@@ -0,0 +1,133 @@
+---
+phase: 30-button-primary-color
+plan: 01
+subsystem: ui
+tags: [scss, css, ui, design]
+requires:
+ - phase: 29-delivery-status-mapping-ui
+ provides: global UI conventions based on section-title and shared button classes
+provides:
+ - separated color tokens for action buttons vs section headings
+ - updated primary/outline button styles in SCSS and built CSS assets
+affects: [frontend-styling, visual-consistency, docs]
+tech-stack:
+ added: [none]
+ patterns: [semantic-color-tokens]
+key-files:
+ created: [.paul/phases/30-button-primary-color/30-01-SUMMARY.md]
+ modified:
+ - resources/scss/shared/_ui-components.scss
+ - resources/scss/modules/_printing.scss
+ - public/assets/css/app.css
+ - DOCS/ARCHITECTURE.md
+ - DOCS/TECH_CHANGELOG.md
+ - DOCS/todo.md
+key-decisions:
+ - "Action colors decoupled from informational heading colors"
+ - "Primary/outline buttons now consume action tokens"
+patterns-established:
+ - "Use --c-primary for informational accents (links/section-title)"
+ - "Use --c-action-primary for call-to-action buttons"
+duration: 11min
+started: 2026-03-25T21:40:00+01:00
+completed: 2026-03-25T21:51:00+01:00
+---
+
+# Phase 30 Plan 01: Button Primary Color Distinction Summary
+
+**Wydzielono semantyczna palete kolorow akcji, dzieki czemu przyciski glownych akcji nie myla sie wizualnie z naglowkami sekcji.**
+
+## Performance
+
+| Metric | Value |
+|--------|-------|
+| Duration | 11 min |
+| Started | 2026-03-25T21:40:00+01:00 |
+| Completed | 2026-03-25T21:51:00+01:00 |
+| Tasks | 3 completed |
+| Files modified | 10 |
+
+## Acceptance Criteria Results
+
+| Criterion | Status | Notes |
+|-----------|--------|-------|
+| AC-1: Rozdzielenie kolorow naglowkow i przyciskow | Pass | `btn--primary` przeniesiony na `--c-action-primary`, `section-title` pozostaje na `--c-primary`. |
+| AC-2: Spojne stany przyciskow akcji | Pass | `btn--primary`, focus i `btn--outline-primary` korzystaja z tej samej palety akcji. |
+| AC-3: Zmiana wdrozona zgodnie ze standardem projektu | Pass | Zmiany w SCSS + build do `public/assets/css/app.css` + aktualizacje dokumentacji i TODO. |
+
+## Accomplishments
+
+- Wprowadzono dedykowane tokeny akcji (`--c-action-primary`, `--c-action-primary-dark`, `--focus-ring-action`) bez naruszania koloru informacyjnego `--c-primary`.
+- Ujednolicono przyciski glownych akcji i ich stany hover/focus w calym UI.
+- Zakonczono wymagania planu wraz ze skanem `sonar-scanner` i aktualizacja dokumentacji technicznej.
+
+## Verification Results
+
+- `rg -n "c-action-primary|btn--primary|focus-ring-action" resources/scss/shared/_ui-components.scss` -> PASS
+- `rg -n "btn--outline-primary|c-action-primary" resources/scss/modules/_printing.scss` -> PASS
+- `npm run build:css` -> PASS
+- `sonar-scanner` -> PASS (`ANALYSIS SUCCESSFUL`, project `orderPRO`)
+
+## Files Created/Modified
+
+| File | Change | Purpose |
+|------|--------|---------|
+| `.paul/phases/30-button-primary-color/30-01-SUMMARY.md` | Created | Podsumowanie UNIFY planu 30-01 |
+| `resources/scss/shared/_ui-components.scss` | Modified | Dodanie tokenow akcji + przepiecie `btn--primary` i focus |
+| `resources/scss/modules/_printing.scss` | Modified | Przepiecie `btn--outline-primary` na token akcji |
+| `public/assets/css/app.css` | Modified | Build CSS po zmianach SCSS |
+| `public/assets/css/login.css` | Modified | Rebuild assets (`npm run build:css`) |
+| `DOCS/ARCHITECTURE.md` | Modified | Aktualizacja standardu kolorow UI |
+| `DOCS/TECH_CHANGELOG.md` | Modified | Log zmian technicznych dla fazy 30 |
+| `DOCS/todo.md` | Modified | Punkt 39 oznaczony jako wykonany |
+| `.paul/STATE.md` | Modified | Zamkniecie loopa i aktualizacja pozycji |
+| `.paul/ROADMAP.md` | Modified | Status fazy/milestone po UNIFY |
+
+## Decisions Made
+
+| Decision | Rationale | Impact |
+|----------|-----------|--------|
+| Action colors decoupled from heading colors | Niebieskie CTA mylilo sie z naglowkami `section-title` | Lepsza czytelnosc i szybsze rozpoznanie akcji |
+| Keep `--c-primary` for informational accents | Zachowanie dotychczasowej semantyki linkow i naglowkow | Mniejsza skala zmian i brak regresji semantycznej |
+
+## Deviations from Plan
+
+### Summary
+
+| Type | Count | Impact |
+|------|-------|--------|
+| Auto-fixed | 1 | Niski - naprawa formatowania wpisu w changelogu bez zmian zakresu |
+| Scope additions | 0 | Brak |
+| Deferred | 0 | Brak |
+
+**Total impact:** Minimalny, bez scope creep.
+
+### Auto-fixed Issues
+
+1. Wpis changeloga po pierwszym zapisie mial artefakty formatowania; zostal nadpisany poprawna trescia UTF-8.
+
+### Deferred Items
+
+None — plan executed exactly as written.
+
+## Skill Audit
+
+| Expected | Invoked | Notes |
+|----------|---------|-------|
+| `sonar-scanner` | ✓ | Wymagany skill uruchomiony po APPLY |
+
+## Next Phase Readiness
+
+**Ready:**
+- Standard kolorow akcji jest zdefiniowany i udokumentowany.
+- Todo item 39 zamkniety.
+
+**Concerns:**
+- Optional `/frontend-design` i `/code-review` nie byly wymagane do domkniecia zakresu tej mikro-zmiany.
+
+**Blockers:**
+- None.
+
+---
+*Phase: 30-button-primary-color, Plan: 01*
+*Completed: 2026-03-25*
diff --git a/DOCS/ARCHITECTURE.md b/DOCS/ARCHITECTURE.md
index 43d5b5e..1d4cf6e 100644
--- a/DOCS/ARCHITECTURE.md
+++ b/DOCS/ARCHITECTURE.md
@@ -3,6 +3,7 @@
## Status
- Projekt po resecie do trybu `users-only`.
- UI korzysta z globalnego standardu naglowkow sekcji (`h2/h3/h4.section-title`) definiowanego centralnie w `resources/scss/app.scss` i buildowanego do `public/assets/css/app.css`.
+- Kolory akcji UI (przyciski `btn--primary` i warianty `btn--outline-primary`) sa odseparowane od koloru naglowkow (`section-title`) przez dedykowane tokeny `--c-action-primary` i `--c-action-primary-dark` w `resources/scss/shared/_ui-components.scss`.
## Moduly aktywne
- `App\Modules\Auth`
diff --git a/DOCS/TECH_CHANGELOG.md b/DOCS/TECH_CHANGELOG.md
index e4f2c82..89a6718 100644
--- a/DOCS/TECH_CHANGELOG.md
+++ b/DOCS/TECH_CHANGELOG.md
@@ -1,44 +1,51 @@
-# Tech Changelog
+# Tech Changelog
-## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01)
-- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`.
-- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`.
+## 2026-03-25 (Phase 30 - Button Primary Color Distinction, Plan 01)
+- Rozdzielono palete kolorow naglowkow i przyciskow akcji w warstwie SCSS:
+ - `resources/scss/shared/_ui-components.scss` ma nowe tokeny `--c-action-primary`, `--c-action-primary-dark`, `--focus-ring-action`,
+ - `btn--primary` i `btn:focus-visible` korzystaja z tokenow akcji, bez zmiany koloru `section-title` opartego o `--c-primary`.
+- `resources/scss/modules/_printing.scss`: `btn--outline-primary` zostal przepiety z twardego niebieskiego (`#4a90d9`) na token `--c-action-primary`.
+- Przebudowano assety frontendowe komenda `npm run build:css`, co zaktualizowalo `public/assets/css/app.css`.
+
+## 2026-03-23 (Phase 26 — Manual Tracking Number, Plan 01)
+- Nowa metoda `ShipmentPackageRepository::createManual(int, string, ?string): int` — INSERT do `shipment_packages` z `provider='manual'`, `status='created'`.
+- Nowa metoda `ShipmentController::createManual(Request): Response` — endpoint `POST /orders/{id}/shipment/manual`, walidacja CSRF + tracking_number, activity log `shipment_manual`.
- Nowa route w `routes/web.php`: `POST /orders/{id}/shipment/manual`.
-- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety).
-- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px).
+- `resources/views/orders/show.php` — formularz inline do dodawania recznego numeru przesylki w zakladce Przesylki; zmienione wyswietlanie przesylek manualnych (status "Dodana recznie", przewoznik z carrier_id, brak etykiety).
+- `resources/scss/app.scss` — nowa klasa `.manual-tracking-form` (flex, gap 8px).
-## 2026-03-22 (Phase 21 — Order Source Display, Plan 01)
-- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`.
-- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia.
-- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`.
-- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default).
-- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego.
+## 2026-03-22 (Phase 21 — Order Source Display, Plan 01)
+- `OrdersRepository::buildListSql()` — LEFT JOIN `integrations ig ON ig.id = o.integration_id`, nowa kolumna `ig.name AS integration_name`.
+- `OrdersRepository::findDetails()` — analogiczny LEFT JOIN dla strony szczegolow zamowienia.
+- `OrdersRepository::transformOrderRow()` — nowe pole `integration_name`.
+- `OrdersController::toTableRow()` — wyswietla `integration_name` gdy niepuste, fallback na `sourceLabel()` (Allegro/Erli/default).
+- `resources/views/orders/show.php` — naglowek zamowienia: dwa osobne spany (nazwa integracji + "ID: identyfikator") zamiast jednego.
-## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor)
-- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji.
+## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 02: Watcher/Executor)
+- Nowa klasa `App\Modules\Automation\AutomationService` — trigger + ewaluacja warunkow (AND) + wykonanie akcji.
- Flow: `ReceiptController::store()` -> `AutomationService::trigger('receipt.created', orderId)` -> sprawdzenie warunkow (integration_id) -> `EmailSendingService::send()`.
- Rozszerzenie `EmailSendingService::send()` o opcjonalne parametry `$recipientEmailOverride` i `$recipientNameOverride` (kompatybilnosc wsteczna).
- 3 tryby odbiorcy: 'client' (kupujacy), 'company' (e-mail firmy z company_settings), 'client_and_company' (oba).
-- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu.
+- Trigger w try/catch — blad automatyzacji nie blokuje sukcesu tworzenia paragonu.
- Activity log: automation_email_sent / automation_email_failed z actor_type='system'.
-## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD)
+## 2026-03-18 (Phase 16 — Zadania automatyczne, Plan 01: DB + CRUD)
- Nowe tabele: `automation_rules`, `automation_conditions`, `automation_actions` (migracja 000057).
- Nowy modul `App\Modules\Automation` z 2 klasami:
- - `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus).
- - `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera.
+ - `AutomationController` — CRUD regul automatyzacji (index, create, store, edit, update, destroy, toggleStatus).
+ - `AutomationRepository` — operacje DB z transakcjami (create/update atomowe z conditions+actions), findActiveByEvent dla watchera.
- 7 nowych route'ow: `/settings/automation/*`.
- Widoki: `resources/views/automation/index.php` (lista regul), `resources/views/automation/form.php` (formularz z dynamicznymi warunkami/akcjami).
- Nowy JS: `public/assets/js/modules/automation-form.js` (dodawanie/usuwanie wierszy warunkow i akcji).
- Nowy SCSS: `resources/scss/modules/_automation.scss` (style formularza dynamicznego).
- Menu nawigacji: dodany link "Zadania automatyczne" w sekcji Ustawienia.
-## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien)
+## 2026-03-17 (Phase 15 — Wysylka e-mail z zamowien)
- Nowa zaleznosc: `phpmailer/phpmailer` v7.0.2 (SMTP transport).
- Nowy modul `App\Modules\Email` z 3 klasami:
- - `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default).
- - `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy.
- - `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment).
+ - `EmailSendingService` — wysylka e-mail (send, preview), logowanie do email_logs, resolwer skrzynki (mailboxId → template → default).
+ - `VariableResolver` — zamiana `{{grupa.zmienna}}` na dane zamowienia/kupujacego/adresu/firmy.
+ - `AttachmentGenerator` — generowanie PDF paragonu (dompdf) jako zalacznik in-memory (addStringAttachment).
- `OrdersController`: nowe metody `sendEmail()`, `emailPreview()`, `loadEmailLogs()`.
- Nowe route'y: `POST /orders/{id}/send-email`, `POST /orders/{id}/email-preview`.
- Widok `orders/show.php`: przycisk "Wyslij e-mail" + modal (wybor szablonu/skrzynki, podglad, wysylka AJAX).
@@ -46,28 +53,28 @@
- Nowy partial: `resources/views/orders/partials/email-send-modal.php`.
- Nowy SCSS: `resources/scss/modules/_email-send.scss` (modal overlay, podglad, style).
-## 2026-03-15 (Phase 13 — DB + Skrzynki pocztowe)
+## 2026-03-15 (Phase 13 — DB + Skrzynki pocztowe)
- Dodano 3 migracje email: `000054_create_email_mailboxes_table`, `000055_create_email_templates_table`, `000056_create_email_logs_table`.
- Nowe klasy: `EmailMailboxController` (index, save, delete, toggleStatus, testConnection), `EmailMailboxRepository` (listAll, findById, save, delete, toggleStatus, listActive).
-- Test polaczenia SMTP przez natywny `stream_socket_client` z pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek.
+- Test polaczenia SMTP przez natywny `stream_socket_client` z pelnym handshake (EHLO → STARTTLS → AUTH LOGIN) — bez zewnetrznych bibliotek.
- Hasla SMTP szyfrowane przez `IntegrationSecretCipher` (AES-256-CBC + HMAC-SHA256).
-- Widok `settings/email-mailboxes.php` — lista skrzynek + formularz CRUD + AJAX test polaczenia.
+- Widok `settings/email-mailboxes.php` — lista skrzynek + formularz CRUD + AJAX test polaczenia.
- Nawigacja: link "Skrzynki pocztowe" w sidebar Settings.
- 5 nowych route'ow: GET/POST `/settings/email-mailboxes/*`.
## 2026-03-14
- Zoptymalizowano zapytanie listy zamowien (`OrdersRepository::buildListSql()`):
- - 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) zastapiono aggregating LEFT JOINami — eliminuje N+1 na kazdym wierszu listy.
-- `OrdersRepository::canResolveMappedMedia()` — zamiana instance property na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja.
-- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `source`, `external_status_id`, `ordered_at`, composite `(source, external_status_id)`.
-- Dodano SSL verification (`CURLOPT_SSL_VERIFYPEER => true`, `CURLOPT_SSL_VERIFYHOST => 2`, `CURLOPT_CAINFO`) do 4 klas ApiClient: AllegroApiClient (3 metody), AllegroOAuthClient, ShopproApiClient, ApaczkaApiClient. Fallback: `$_ENV['CURL_CA_BUNDLE_PATH']` → XAMPP cacert.pem → system CA bundle.
-- Cron web throttle (`isWebCronThrottled()`) przeniesiony z `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach.
-- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`).
+ - 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) zastapiono aggregating LEFT JOINami — eliminuje N+1 na kazdym wierszu listy.
+- `OrdersRepository::canResolveMappedMedia()` — zamiana instance property na `static` — `information_schema` odpytywany co najwyzej raz na cykl PHP zamiast raz per instancja.
+- Dodano migracje `20260314_000048_add_orders_performance_indexes.sql` — indeksy na `orders`: `source`, `external_status_id`, `ordered_at`, composite `(source, external_status_id)`.
+- Dodano SSL verification (`CURLOPT_SSL_VERIFYPEER => true`, `CURLOPT_SSL_VERIFYHOST => 2`, `CURLOPT_CAINFO`) do 4 klas ApiClient: AllegroApiClient (3 metody), AllegroOAuthClient, ShopproApiClient, ApaczkaApiClient. Fallback: `$_ENV['CURL_CA_BUNDLE_PATH']` → XAMPP cacert.pem → system CA bundle.
+- Cron web throttle (`isWebCronThrottled()`) przeniesiony z `$_SESSION` do `app_settings` (klucz `cron_web_last_run_at`) — eliminuje wielokrotne uruchamianie crona przy wielu aktywnych sesjach.
+- Deduplikacja migracji `000014` → `000014b` (kolizja z `create_product_integration_translations`).
- `AllegroStatusSyncService::sync()` zwraca `ok:false` dla kierunku `orderpro_to_allegro` (wczesniej false-positive `ok:true`). Opcja UI oznaczona jako `disabled` z `(wkrotce)`.
-- Lista zamowien: source wyswietlany przed ID z prefixem `ID:`; `sourceLabel()` mapuje shoppro→shopPRO, allegro→Allegro.
-- Statusy zamowien na liscie kolorowane kolorem grupy z konfiguracji (`statusColorMap()` → inline `background-color`).
+- Lista zamowien: source wyswietlany przed ID z prefixem `ID:`; `sourceLabel()` mapuje shoppro→shopPRO, allegro→Allegro.
+- Statusy zamowien na liscie kolorowane kolorem grupy z konfiguracji (`statusColorMap()` → inline `background-color`).
- Ciemniejsze obramowanie pol formularzy: `--c-border` zmieniony z `#e2e8f0` na `#b0bec5`.
-- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze.
+- Hotfix SSL: `getCaBundlePath()` zwraca `null` gdy zaden CA bundle nie znaleziony — `CURLOPT_CAINFO` ustawiany warunkowo, cURL uzywa systemowego CA na serwerze.
## 2026-03-08
- Poprawiono date podjazdu kuriera w payloadzie Apaczka:
@@ -128,7 +135,7 @@
- Poprawiono diagnostyke bledow tworzenia przesylki Apaczka:
- `ApaczkaShipmentService` przekazuje teraz `receiver_point_id` do payloadu `receiver.point` (oraz `sender_point_id` do `sender.point`),
- dodano walidacje wymagan uslugi na podstawie `service_structure` (np. wymagany punkt odbioru/nadania),
- - dla bledu API `Brak wyceny dla podanych parametrów zamówienia` komunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu.
+ - dla bledu API `Brak wyceny dla podanych parametrĂłw zamĂłwienia` komunikat zawiera rozszerzona diagnostyke (service_id/nazwa/supplier, punkt odbioru/nadania, gabaryt/waga) i hint o niedopasowaniu uslugi do typu punktu.
- Poprawiono import danych faktury z shopPRO:
- `ShopproOrdersSyncService` wykrywa fakture nie tylko po `is_invoice`/`invoice.required`, ale takze po danych firmowych (`firm_name`/`firm_nip`),
- `ShopproOrdersSyncService::mapAddresses(...)` zapisuje adres `invoice` (firma, NIP, adres) na podstawie pol `invoice`/`billing*`/`firm_*`,
@@ -142,7 +149,7 @@
- widok `resources/views/shipments/prepare.php` wyswietla ten komunikat bezposrednio pod informacja o metodzie z zamowienia.
- Poprawiono UX wyszukiwania w selectach mapowania form dostawy (zakladki `Formy dostawy`):
- `resources/views/settings/allegro.php` przeszlo z przebudowy opcji `