diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md
index 43fc7ba..3b57564 100644
--- a/.paul/ROADMAP.md
+++ b/.paul/ROADMAP.md
@@ -50,8 +50,9 @@ Szczegóły w `wp-content/plugins/yacht-booking-system/PROJECT-STATUS.md`.
- [x] 09-04: Globalna sync iCal (tryb wspólny kalendarz, bez filtrowania) + nowy widget "wszystkie jachty" (kolory per-jacht, half-day, bez ukośników, formularz inquiry, privacy w REST) ✅ 2026-05-07
- [x] 09-05: UX rezerwacja — tytuły rezerwacji z GCal w paskach + per-day allDay events + tooltip na hover (cofa privacy z 09-04 per żądanie klienta) ✅ 2026-05-07
- [x] 09-06: UX rezerwacja — blokada nawigacji kalendarza (REST `/availability/bounds` + validRange w FC) ✅ 2026-05-08
-- [ ] 09-07: Security audit i poprawki
-- [ ] 09-08: Testy + tłumaczenia + dokumentacja
+- [ ] 09-07: Kolory per jacht w kalendarzu zbiorczym (color picker w settings + dopasowanie po nazwie w tytule globalnych eventów GCal)
+- [ ] 09-08: Security audit i poprawki
+- [ ] 09-09: Testy + tłumaczenia + dokumentacja
---
*Roadmap created: 2026-05-05*
diff --git a/.paul/STATE.md b/.paul/STATE.md
index 310af9e..3252648 100644
--- a/.paul/STATE.md
+++ b/.paul/STATE.md
@@ -10,21 +10,21 @@ See: .paul/PROJECT.md (updated 2026-05-05)
## Current Position
Milestone: v1.0 Production Release (v1.0.0)
-Phase: 9 of 9 (Finalizacja) — In progress
-Plan: 09-06 — Complete (blokada nawigacji kalendarza)
-Status: Loop closed, ready for next plan (09-07 Security audit)
-Last activity: 2026-05-08 — Closed loop 09-06 (validRange + REST /availability/bounds)
+Phase: 9 of 9 (Finalizacja) — Planning
+Plan: 09-07 created, awaiting approval (Kolory per jacht w kalendarzu zbiorczym)
+Status: PLAN created, ready for APPLY
+Last activity: 2026-05-10 — Created .paul/phases/09-finalizacja/09-07-PLAN.md
Progress:
- Milestone: [█████████░] 97%
-- Phase 9: [████████░░] 75% (6 of 8 plans complete)
+- Phase 9: [██████░░░░] 67% (6 of 9 plans complete — security i docs przesunięte na 09-08/09-09)
## Loop Position
Current loop state:
```
PLAN ──▶ APPLY ──▶ UNIFY
- ✓ ✓ ✓ [Loop 09-06 complete, ready for 09-07]
+ ✓ ○ ○ [Plan 09-07 created, awaiting approval]
```
## Accumulated Context
@@ -44,9 +44,9 @@ PLAN ──▶ APPLY ──▶ UNIFY
| Issue | Origin | Effort | Revisit |
|-------|--------|--------|---------|
-| Tłumaczenia PL | Phase 1-8 | M | Phase 9 (plan 09-08) |
-| Security audit | Phase 1-8 + privacy revert 09-05 + bounds 09-06 | M | Phase 9 (plan 09-07) |
-| Dokumentacja PHP Doc | Phase 1-8 | L | Phase 9 (plan 09-08) |
+| Tłumaczenia PL | Phase 1-8 | M | Phase 9 (plan 09-09) |
+| Security audit | Phase 1-8 + privacy revert 09-05 + bounds 09-06 | M | Phase 9 (plan 09-08) |
+| Dokumentacja PHP Doc | Phase 1-8 | L | Phase 9 (plan 09-09) |
### Blockers/Concerns
@@ -54,14 +54,14 @@ None.
## Session Continuity
-Last session: 2026-05-08
-Stopped at: Loop 09-06 zamknięty — blokada nawigacji kalendarza zatwierdzona
-Next action: Run /paul:plan to plan 09-07 (Security audit)
-Resume file: .paul/phases/09-finalizacja/09-06-SUMMARY.md
+Last session: 2026-05-10
+Stopped at: Plan 09-07 utworzony — kolory per jacht w kalendarzu zbiorczym
+Next action: Review and approve plan, then run /paul:apply .paul/phases/09-finalizacja/09-07-PLAN.md
+Resume file: .paul/phases/09-finalizacja/09-07-PLAN.md
Resume context:
-- Faza 9: 6/8 planów ukończonych (75%), milestone v1.0 97%
-- Plugin v1.2.1: validRange w widgecie zbiorczym (prev disabled na bieżącym miesiącu, next disabled po maxDate)
-- 09-07 (Security audit) ma TRZY publiczne endpointy do oceny: `/availability/{yacht_id}`, `/availability/all`, `/availability/bounds`; dodatkowo privacy revert (tytuły rezerwacji publicznie)
+- Plan 09-07 wstawiony przed security audit (per żądaniu klienta — kolory w `/rezerwacja/`)
+- Roadmap przesunięty: 09-07 kolory, 09-08 security, 09-09 docs
+- 1 checkpoint human-verify na końcu (autonomous: false)
- Brak open issues, brak blockers
---
diff --git a/.paul/governance/governance_2026-05-10.jsonl b/.paul/governance/governance_2026-05-10.jsonl
new file mode 100644
index 0000000..cfa0ee4
--- /dev/null
+++ b/.paul/governance/governance_2026-05-10.jsonl
@@ -0,0 +1,25 @@
+{"ts":"2026-05-10T11:56:04Z","tool":"Bash","cmd":"mkdir -p \".paul/phases/09-finalizacja\"\",\"description\":\"Ensure phase dir exists\"},\"tool_response\":{\"stdout\":\"\",\"stderr\":\"\",\"interrupted\":false,\"isImage\":false,\"noOutputExpected\":","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T11:57:43Z","tool":"Write","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\.paul\\\\phases\\\\09-finalizacja\\\\09-07-PLAN.md","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T11:57:51Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\.paul\\\\ROADMAP.md","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T11:57:58Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T11:58:02Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T11:58:10Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\.paul\\\\STATE.md","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:02:43Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\includes\\\\class-yacht.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:02:53Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\admin\\\\views\\\\yacht-edit.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:02:57Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\admin\\\\views\\\\yacht-edit.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:03:12Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\admin\\\\class-admin.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:03:18Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\includes\\\\class-yacht-booking.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:03:25Z","tool":"Bash","cmd":"php -l \"wp-content/plugins/yacht-booking-system/includes/class-yacht.php\" && php -l \"wp-content/plugins/yacht-booking-system/admin/class-admin.php\" && php -l \"wp-content/plugins/yacht-booking-sys","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:03:52Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\api\\\\class-rest-controller.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:04:15Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\api\\\\class-rest-controller.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:04:22Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\api\\\\class-rest-controller.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:04:31Z","tool":"Bash","cmd":"php -l \"wp-content/plugins/yacht-booking-system/api/class-rest-controller.php\"\",\"description\":\"PHP lint Task 2\"},\"tool_response\":{\"stdout\":\"No syntax errors detected in wp-content/plugins/","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:04:48Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\class-calendar-widget-all.php","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:04:54Z","tool":"Bash","cmd":"php -l \"wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php\"\",\"description\":\"PHP lint Task 3\"},\"tool_response\":{\"stdout\":\"No syntax errors detected in wp-content","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:08:06Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar.scss","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:08:16Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:52:44Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar-all.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:52:45Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar-all.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T12:54:48Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar-all.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T13:01:31Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar-all.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
+{"ts":"2026-05-10T13:01:34Z","tool":"Edit","file":"C:\\\\visual studio code\\\\projekty\\\\jachty3.pagedev.pl\\\\wp-content\\\\plugins\\\\yacht-booking-system\\\\frontend\\\\assets\\\\css\\\\calendar-all.css","cwd":"/c/visual studio code/projekty/jachty3.pagedev.pl"}
diff --git a/.paul/phases/09-finalizacja/09-07-PLAN.md b/.paul/phases/09-finalizacja/09-07-PLAN.md
new file mode 100644
index 0000000..d991e2e
--- /dev/null
+++ b/.paul/phases/09-finalizacja/09-07-PLAN.md
@@ -0,0 +1,225 @@
+---
+phase: 09-finalizacja
+plan: 07
+type: execute
+wave: 1
+depends_on: []
+files_modified:
+ - wp-content/plugins/yacht-booking-system/includes/class-yacht.php
+ - wp-content/plugins/yacht-booking-system/admin/class-admin.php
+ - wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php
+ - wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
+ - wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php
+ - wp-content/plugins/yacht-booking-system/yacht-booking-system.php
+ - .paul/ROADMAP.md
+autonomous: false
+delegation: off
+---
+
+
+## Goal
+Dodać administracyjny wybór koloru per jacht (`_yacht_color`) i zastosować go w widgecie zbiorczym `/rezerwacja/`. Dla rezerwacji bez przypisanego `yacht_id` (eventy z globalnego Google Calendar, source=`ical_global_calendar`) dopasować jacht po występowaniu jego nazwy/aliasu w tytule rezerwacji (case-insensitive, w dowolnym miejscu) i pokolorować event kolorem tego jachtu.
+
+## Purpose
+Klient chce rozróżniać jachty wzrokiem w jednym wspólnym kalendarzu — obecnie kolory są przydzielane automatycznie z palety i nie ma kontroli nad wyborem; dodatkowo eventy z globalnego GCal lecą jednym kolorem `GLOBAL_EVENT_COLOR`, mimo że tytuł zawiera nazwę jachtu.
+
+## Output
+- Pole color picker w formularzu jachtu (`yacht-edit.php`) zapisywane do meta `_yacht_color`
+- Backend `Rest_Controller::get_yacht_color_palette()` honoruje meta `_yacht_color` z fallbackiem na obecną paletę (deterministyczna paleta po `yacht_id` zachowana dla braków)
+- `get_all_availability()` dla eventów `is_global_event === true` próbuje dopasować jacht po nazwie/aliasie w `post_title` rezerwacji i ustawia `color` + dodaje `yacht_id` do eventu (tylko do kolorystyki frontendu, bez zmiany danych w DB)
+- Legenda widgetu zbiorczego pokazuje wybrane kolory
+- ROADMAP zaktualizowany: 09-07 = ten plan, 09-08 = security audit, 09-09 = testy/tłumaczenia/dokumentacja
+
+
+
+
+- **Numer planu** — Gdzie ten plan wpasować w roadmapę fazy 9?
+ → Odpowiedź: 09-07 (przed security audit). Security przesuwamy na 09-08, dokumentacja na 09-09.
+- **Fallback** — Jak ma działać brak ustawionego koloru?
+ → Odpowiedź: Auto z palety (jak teraz, deterministycznie po `yacht_id`).
+- **Zakres** — Czy kolor stosować również w widgecie pojedynczego jachtu?
+ → Odpowiedź: Tylko zbiorczy (`/rezerwacja/`). Pojedynczy widget bez zmian.
+- **Global iCal** — Czy eventy z yacht_id=0 mają korzystać z koloru jachtu?
+ → Odpowiedź: Tak — nazwa jachtu może wystąpić w dowolnym miejscu w tytule rezerwacji (case-insensitive, substring). Najdłuższe trafienie wygrywa, brak trafienia → `GLOBAL_EVENT_COLOR`.
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+
+## Source Files
+@wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
+@wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php
+@wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php
+@wp-content/plugins/yacht-booking-system/admin/class-admin.php
+@wp-content/plugins/yacht-booking-system/includes/class-yacht.php
+@wp-content/plugins/yacht-booking-system/integrations/ical/class-ical-import.php
+
+
+
+
+## AC-1: Admin może wybrać kolor jachtu
+```gherkin
+Given administrator otwiera formularz edycji jachtu (yacht-edit.php)
+When wybierze kolor w polu "Kolor jachtu w kalendarzu zbiorczym" i zapisze formularz
+Then meta `_yacht_color` jachtu zostaje zapisana jako sanitowany hex (`#rrggbb`)
+And po przeładowaniu formularza widzi zapisany kolor w polu
+```
+
+## AC-2: Kolor admina ma priorytet w widgecie zbiorczym
+```gherkin
+Given jacht ma ustawione `_yacht_color = #ff6600`
+When frontend pobiera `GET /availability/all`
+Then eventy tego jachtu (yacht_id > 0) mają `backgroundColor = #ff6600`
+And legenda widgetu pokazuje kolor #ff6600 obok jego nazwy
+```
+
+## AC-3: Fallback z palety dla jachtów bez ustawionego koloru
+```gherkin
+Given jacht nie ma `_yacht_color` (brak meta lub pusta wartość)
+When frontend pobiera `GET /availability/all`
+Then eventy tego jachtu otrzymują kolor z `YACHT_COLOR_PALETTE` (deterministycznie po posortowanym yacht_id, jak obecnie)
+```
+
+## AC-4: Globalne eventy GCal kolorowane po nazwie jachtu w tytule
+```gherkin
+Given event z globalnego kalendarza (yacht_id=0, source=`ical_global_calendar`) o tytule "Rezerwacja - Maja - Kowalski"
+And istnieje jacht o `post_title = "Maja"` z kolorem `#3498db` (lub fallback z palety)
+When frontend pobiera `GET /availability/all`
+Then ten event ma `backgroundColor = #3498db`
+And jeśli żadna nazwa/alias jachtu nie pojawia się w tytule → `backgroundColor = GLOBAL_EVENT_COLOR`
+And gdy w tytule pasuje wiele nazw → wybierany jest najdłuższy (np. "Maja Bis" wygrywa z "Maja")
+```
+
+
+
+
+
+
+ Task 1: Pole koloru w formularzu jachtu + meta `_yacht_color`
+
+ wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php,
+ wp-content/plugins/yacht-booking-system/admin/class-admin.php,
+ wp-content/plugins/yacht-booking-system/includes/class-yacht.php,
+ wp-content/plugins/yacht-booking-system/yacht-booking-system.php
+
+
+ 1. `class-yacht.php`: dodaj statyczne metody `get_color( $yacht_id ): string` (zwraca '' gdy brak meta) i `update_color( $yacht_id, $color )` z sanityzacją do `#rrggbb` (regex `/^#[0-9a-f]{6}$/i`, lowercase). Klucz meta: `_yacht_color`.
+ 2. `admin/views/yacht-edit.php`: w sekcji ustawień jachtu dodaj pole ` ` z labelem "Kolor jachtu (kalendarz zbiorczy)". Pod inputem krótki tekst pomocniczy: "Pozostaw puste, aby użyć automatycznego koloru z palety."
+ 3. `class-admin.php` → `save_yacht()`: po istniejących wpisach meta wywołaj `Yacht::update_color( $saved_id, $_POST['yacht_color'] ?? '' )`. Pusty string usuwa meta (delete_post_meta).
+ 4. `class-admin.php` → `enqueue_admin_assets()` lub punkt rejestrujący style admin: na stronie `yacht-bookings-add-yacht` enqueue `wp-color-picker` (style + script) oraz inline init: `jQuery('.yacht-color-picker').wpColorPicker();`. Inline JS wpięty przez `wp_add_inline_script( 'wp-color-picker', ... )`.
+ Avoid: zapisywanie surowej wartości z $_POST bez sanityzacji; nadpisywanie istniejącej meta gdy POST nie zawiera `yacht_color` (ale tutaj formularz zawsze wysyła to pole).
+
+
+ Edytuj jacht w panelu, ustaw kolor `#ff6600`, zapisz. Sprawdź `wp_postmeta`: `meta_key = _yacht_color`, `meta_value = #ff6600`. Wyczyść pole, zapisz → meta usunięta. `php -l` na każdym zmienionym pliku.
+
+ AC-1 satisfied.
+
+
+
+ Task 2: Backend — `_yacht_color` w palecie + matching globalnych eventów po nazwie
+
+ wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
+
+
+ 1. `get_yacht_color_palette( $yacht_ids )`: dla każdego `yacht_id` najpierw spróbuj `Yacht::get_color( $yacht_id )`; jeśli niepuste — użyj. Inaczej fallback na obecny algorytm `palette[i % count]` (i = pozycja w posortowanej tablicy ID, jak teraz). Wynik nadal `array`.
+ 2. `get_all_availability()`: zbuduj mapę dopasowań nazwa→yacht_id raz przed pętlą eventów:
+ - Pobierz wszystkie publish jachty z polami `ID, post_title`.
+ - Dla każdego: dodaj wpis `[strtolower(post_title) => yacht_id]` oraz, jeśli `Yacht::get_gcal_alias($id)` niepusty, `[strtolower($alias) => yacht_id]`.
+ - Posortuj klucze malejąco po długości (najdłuższy match wygrywa).
+ 3. W pętli eventów, gdy `$is_global_event === true` (yacht_id=0 lub source=GLOBAL_CALENDAR_SOURCE):
+ - Weź `post_title` rezerwacji (`$booking->post_title`), zlowercase'uj.
+ - Iteruj po posortowanej liście kluczy; pierwszy `mb_strpos($title_lower, $key) !== false` wygrywa → `$matched_yacht_id = mapa[key]`.
+ - Jeśli match → `$color = $color_map[$matched_yacht_id] ?? GLOBAL_EVENT_COLOR`. Brak → `$color = GLOBAL_EVENT_COLOR` (jak teraz).
+ - Nie modyfikuj `yacht_id` w odpowiedzi (zostaje 0); kolor wystarczy do wizualizacji.
+ 4. Zachowaj obecne zachowanie dla eventów per-yacht (`yacht_id > 0`) bez zmian.
+ Avoid: case-sensitive porównań; budowania mapy w pętli (perf); modyfikowania danych eventu poza polem `color`.
+
+
+ `php -l class-rest-controller.php`. Ręcznie: `curl '/wp-json/yacht-booking/v1/availability/all?start=2026-05-01&end=2026-06-01' | jq '.[] | {title, color}'` — eventy globalne z nazwą jachtu w tytule mają kolor jachtu, bez nazwy → `#7fb3d5`. Per-yacht jachty z ustawionym `_yacht_color` mają ten kolor.
+
+ AC-2, AC-3, AC-4 satisfied.
+
+
+
+ Task 3: Legenda widgetu zbiorczego + ROADMAP update
+
+ wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php,
+ .paul/ROADMAP.md
+
+
+ 1. `class-calendar-widget-all.php`: linia ~149-179 — `get_yacht_color_palette()` po Task 2 już honoruje `_yacht_color`, więc legenda dostanie poprawne kolory bez zmian logiki. Zweryfikuj że `$color_map` przekazywana do legendy jest taką samą referencją (jeśli nie — ujednolicić). Jeśli logika legendy oczekuje `palette[i % count]`, zaktualizować by używała tej samej funkcji co backend.
+ 2. `.paul/ROADMAP.md`: w sekcji "Plans" Phase 9:
+ - Dodaj `- [ ] 09-07: Kolory per jacht w kalendarzu zbiorczym (color picker + dopasowanie po nazwie)`
+ - Przesuń istniejące: `09-07: Security audit` → `09-08`, `09-08: Testy + tłumaczenia + dokumentacja` → `09-09`.
+ - Zaktualizuj nagłówek "Phases: 8 of 9 complete" oraz tabelę faz (Phase 9 plans count) jeśli to potrzebne.
+ Avoid: dotykania STATE.md tutaj — to robi krok update_state w workflow.
+
+
+ Otwórz `/rezerwacja/`, sprawdź wzrokowo: legenda u góry pokazuje kolory jachtów = wybranym w panelu (lub fallback z palety dla braków). `.paul/ROADMAP.md` zawiera 09-07 jako kolory, 09-08 jako security, 09-09 jako docs.
+
+ AC-2 (legenda) satisfied; roadmap zsynchronizowany z planem.
+
+
+
+
+ Pole koloru w formularzu jachtu + zastosowanie kolorów w widgecie zbiorczym (`/rezerwacja/`) z dopasowaniem nazwy jachtu w tytule eventów globalnych.
+
+
+ 1. Wejdź do panelu admina → Jachty → wybierz dwa jachty, ustaw różne kolory (np. `#ff6600`, `#1abc9c`). Trzeci zostaw bez koloru.
+ 2. Odśwież `https://jachty3.pagedev.pl/rezerwacja/`.
+ 3. Sprawdź:
+ - Rezerwacje pierwszych dwóch jachtów mają wybrane kolory.
+ - Rezerwacje trzeciego jachtu mają kolor z palety (auto).
+ - Eventy z globalnego GCal, których tytuł zawiera nazwę jednego z dwóch pierwszych jachtów, też dostają jego kolor.
+ - Legenda u góry kalendarza zbiorczego pokazuje te same kolory.
+ 4. Wyczyść kolor jednego jachtu w panelu, zapisz, odśwież `/rezerwacja/` → ten jacht wraca do koloru z palety.
+
+ Wpisz "approved" aby zamknąć plan przez `/paul:unify`, lub opisz zaobserwowane problemy.
+
+
+
+
+
+
+## DO NOT CHANGE
+- `wp-content/plugins/yacht-booking-system/integrations/ical/class-ical-import.php` (per-yacht prefix matching pozostaje bez zmian — zmieniamy tylko prezentację w `/availability/all`)
+- `wp_yacht_availability` (schemat)
+- Pojedynczy widget jachtu (`class-calendar-widget.php`) — kolory tam bez zmian
+- Endpoint `/availability/{yacht_id}` — bez zmian
+- `GLOBAL_EVENT_COLOR` jako fallback (nadal `#7fb3d5`)
+- `YACHT_COLOR_PALETTE` jako fallback (nadal 8 hex)
+
+## SCOPE LIMITS
+- Bez migracji DB (meta dodawana on-demand przez update_post_meta)
+- Bez zmian w warstwie GCal sync (push/pull do Google) — kolory są tylko widoczne w naszym widgecie zbiorczym
+- Bez tłumaczeń pól (PL hardcoded; tłumaczenia objęte planem 09-09)
+- Bez zmian w endpointach REST poza `get_all_availability()`
+- Brak wsparcia dla CSS gradient/secondary color — jeden hex per jacht
+
+
+
+
+- [ ] `php -l` przechodzi na wszystkich zmienionych plikach PHP
+- [ ] Po zapisie formularza jachtu z kolorem `_yacht_color` jest w `wp_postmeta`
+- [ ] Po wyczyszczeniu pola meta jest usuwana
+- [ ] `GET /wp-json/yacht-booking/v1/availability/all` zwraca `color` zgodny z meta lub paletą fallback
+- [ ] Globalne eventy GCal z nazwą jachtu w tytule kolorowane kolorem tego jachtu
+- [ ] Najdłuższe dopasowanie wygrywa (np. "Maja Bis" > "Maja")
+- [ ] Brak match → `GLOBAL_EVENT_COLOR`
+- [ ] Legenda widgetu zbiorczego spójna z kolorami eventów
+- [ ] ROADMAP.md odzwierciedla nową kolejność (07 kolory, 08 security, 09 docs)
+- [ ] Wszystkie kryteria akceptacji spełnione przy weryfikacji manualnej
+
+
+
+- Wszystkie zadania ukończone i zweryfikowane
+- Brak regresji w widgecie pojedynczego jachtu
+- Brak regresji w existing per-yacht iCal import (matching prefix nadal działa)
+- Klient akceptuje kolory na `/rezerwacja/`
+
+
+
+Po ukończeniu utwórz `.paul/phases/09-finalizacja/09-07-SUMMARY.md`.
+
diff --git a/wp-content/plugins/yacht-booking-system/admin/class-admin.php b/wp-content/plugins/yacht-booking-system/admin/class-admin.php
index 95e0e31..6282d48 100644
--- a/wp-content/plugins/yacht-booking-system/admin/class-admin.php
+++ b/wp-content/plugins/yacht-booking-system/admin/class-admin.php
@@ -412,6 +412,10 @@ class Admin {
$gcal_alias = isset( $data['yacht_gcal_alias'] ) ? sanitize_text_field( wp_unslash( $data['yacht_gcal_alias'] ) ) : '';
Yacht::update_gcal_alias( $saved_id, $gcal_alias );
+ // Save admin-selected color for aggregated calendar.
+ $yacht_color = isset( $data['yacht_color'] ) ? sanitize_text_field( wp_unslash( $data['yacht_color'] ) ) : '';
+ Yacht::update_color( $saved_id, $yacht_color );
+
return $saved_id;
}
diff --git a/wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php b/wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php
index 98ba488..092f1e6 100644
--- a/wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php
+++ b/wp-content/plugins/yacht-booking-system/admin/views/yacht-edit.php
@@ -13,7 +13,8 @@ if ( ! defined( 'ABSPATH' ) ) {
// Get yacht data
$title = $yacht ? $yacht->post_title : '';
$content = $yacht ? $yacht->post_content : '';
-$gcal_alias = $yacht ? \YachtBooking\Yacht::get_gcal_alias( $yacht->ID ) : '';
+$gcal_alias = $yacht ? \YachtBooking\Yacht::get_gcal_alias( $yacht->ID ) : '';
+$yacht_color = $yacht ? \YachtBooking\Yacht::get_color( $yacht->ID ) : '';
$page_title = $yacht ? __( 'Edytuj Jacht', 'yacht-booking' ) : __( 'Dodaj Jacht', 'yacht-booking' );
?>
@@ -86,6 +87,28 @@ $page_title = $yacht ? __( 'Edytuj Jacht', 'yacht-booking' ) : __( 'Dodaj Jacht'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wp-content/plugins/yacht-booking-system/api/class-rest-controller.php b/wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
index 8fb170b..bc320de 100644
--- a/wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
+++ b/wp-content/plugins/yacht-booking-system/api/class-rest-controller.php
@@ -376,18 +376,40 @@ class Rest_Controller extends \WP_REST_Controller {
$is_global_mode = ( 'global' === Settings::get_ical_sync_mode() );
- // Build yacht_id → color map (deterministic by ascending yacht_id).
- $yacht_posts = get_posts(
+ // Build yacht_id → color map (admin-selected `_yacht_color` lub fallback z palety po ID).
+ $yacht_posts_full = get_posts(
array(
'post_type' => 'yacht',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'ID',
'order' => 'ASC',
- 'fields' => 'ids',
)
);
- $color_map = self::get_yacht_color_palette( $yacht_posts );
+ $yacht_ids = array();
+ foreach ( $yacht_posts_full as $yp ) {
+ $yacht_ids[] = (int) $yp->ID;
+ }
+ $color_map = self::get_yacht_color_palette( $yacht_ids );
+
+ // Build name/alias → yacht_id map (lowercase keys, sorted by length DESC for longest match).
+ $name_map = array();
+ foreach ( $yacht_posts_full as $yp ) {
+ $title = mb_strtolower( trim( (string) $yp->post_title ) );
+ if ( '' !== $title ) {
+ $name_map[ $title ] = (int) $yp->ID;
+ }
+ $alias = mb_strtolower( trim( (string) \YachtBooking\Yacht::get_gcal_alias( $yp->ID ) ) );
+ if ( '' !== $alias ) {
+ $name_map[ $alias ] = (int) $yp->ID;
+ }
+ }
+ uksort(
+ $name_map,
+ function( $a, $b ) {
+ return mb_strlen( $b ) - mb_strlen( $a );
+ }
+ );
// Query bookings overlapping [start, end] with status confirmed or pending.
$bookings = get_posts(
@@ -437,15 +459,6 @@ class Rest_Controller extends \WP_REST_Controller {
$source = (string) get_post_meta( $booking_id, '_booking_source', true );
$is_global_event = ( 0 === $yacht_id || \YachtBooking\Integrations\ICal\ICal_Import::GLOBAL_CALENDAR_SOURCE === $source );
- // Color: zachowane z poprzedniej logiki (per-yacht paleta lub kolor global).
- if ( $is_global_mode || $is_global_event ) {
- $color = self::GLOBAL_EVENT_COLOR;
- $y_id = 0;
- } else {
- $color = isset( $color_map[ $yacht_id ] ) ? $color_map[ $yacht_id ] : self::GLOBAL_EVENT_COLOR;
- $y_id = $yacht_id;
- }
-
// Title: raw SUMMARY z _booking_notes (iCal) lub customer_name (frontend).
// Klient świadomie cofa privacy z 09-04 — tytuły rezerwacji widoczne publicznie.
if ( in_array( $source, $ical_sources, true ) ) {
@@ -457,6 +470,26 @@ class Rest_Controller extends \WP_REST_Controller {
}
$title = sanitize_text_field( $title );
+ // Color resolution:
+ // - per-yacht event (yacht_id > 0): admin color or palette fallback
+ // - global event (yacht_id = 0): match yacht name/alias anywhere in title (longest wins)
+ if ( ! $is_global_event ) {
+ $color = isset( $color_map[ $yacht_id ] ) ? $color_map[ $yacht_id ] : self::GLOBAL_EVENT_COLOR;
+ $y_id = $yacht_id;
+ } else {
+ $color = self::GLOBAL_EVENT_COLOR;
+ $y_id = 0;
+ $title_lower = mb_strtolower( $title );
+ foreach ( $name_map as $needle => $matched_id ) {
+ if ( '' !== $needle && false !== mb_strpos( $title_lower, $needle ) ) {
+ if ( isset( $color_map[ $matched_id ] ) ) {
+ $color = $color_map[ $matched_id ];
+ }
+ break;
+ }
+ }
+ }
+
// Split na N eventów per dzień (allDay = każdy event mieści się w jednej komórce).
// Iteracja od start_date do end_date INCLUSIVE — pierwszy i ostatni dzień
// mają half-day visual (yacht odbierany / zwracany w południe).
@@ -562,7 +595,8 @@ class Rest_Controller extends \WP_REST_Controller {
$map = array();
foreach ( $ids as $i => $yacht_id ) {
- $map[ $yacht_id ] = $palette[ $i % $count ];
+ $admin_color = \YachtBooking\Yacht::get_color( $yacht_id );
+ $map[ $yacht_id ] = '' !== $admin_color ? $admin_color : $palette[ $i % $count ];
}
return $map;
diff --git a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar-all.css b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar-all.css
index e70f413..aeaa79d 100644
--- a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar-all.css
+++ b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar-all.css
@@ -79,11 +79,20 @@
/* Event styling — pełne wypełnienie kafelka kolorem jachtu, bez kropek/czasu */
.yacht-calendar-all .fc-event {
border: none !important;
- padding: 2px 4px;
+ padding: 0 1px;
font-size: 12px;
font-weight: 500;
color: #fff;
cursor: default;
+ display: flex;
+ align-items: center;
+}
+
+.yacht-calendar-all .fc-event-main {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 100%;
}
.yacht-calendar-all .fc-daygrid-event-dot,
@@ -93,7 +102,7 @@
/* Custom kontener tytułu (renderowany przez eventContent w JS). */
.yacht-calendar-all .yc-event-title {
- padding: 1px 6px;
+ padding: 0 2px;
font-size: 11px;
font-weight: 600;
color: #fff;
@@ -102,13 +111,15 @@
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.3;
+ text-align: center;
+ width: 100%;
}
/* Pasek eventu wyższy + gap między dziennymi segmentami (rezerwacja wielonocna
= N osobnych pasków zamiast jednej belki — patrz REST split per-day). */
.yacht-calendar-all .fc-daygrid-event {
min-height: 18px;
- margin: 1px 2px !important;
+ margin: 1px 0 !important;
border-radius: 2px;
}
@@ -123,7 +134,7 @@
.yacht-calendar-all .yc-event-title {
font-size: 10px;
- padding: 1px 4px;
+ padding: 0 1px;
}
.yacht-calendar-all .fc-toolbar.fc-header-toolbar {
diff --git a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css
index 05302da..e80055a 100644
--- a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css
+++ b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css
@@ -1 +1 @@
-.yacht-calendar-wrapper{max-width:1200px;margin:0 auto 40px;padding:20px}.yacht-calendar-switcher{width:100vw;margin-left:50%;transform:translateX(-50%);border:none;padding:80px 20px;border-radius:0;display:flex;flex-direction:column;align-items:center;margin-bottom:0;justify-content:center;background:#0e2036;gap:30px}.yacht-calendar-switcher-label{font-family:"DM Sans",Sans-serif !important;font-size:80px;font-weight:500;letter-spacing:-0.04em;color:var(--e-global-color-7077776);line-height:.8}@media(max-width: 768px){.yacht-calendar-switcher-label{font-size:64px}}@media(max-width: 480px){.yacht-calendar-switcher-label{font-size:48px}}.yacht-calendar-switcher-buttons{display:flex;flex-wrap:wrap;gap:8px}.yacht-calendar-switcher-button{font-family:"JetBrains Mono",Sans-serif !important;font-size:.75rem !important;font-weight:500 !important;text-transform:uppercase;line-height:1 !important;letter-spacing:.25em !important;padding:16px 32px 16px 32px !important;border-radius:0 !important;background:#bc1834 !important;color:#fff !important;border:none !important;cursor:pointer !important}.yacht-calendar-switcher-button:hover{background:#a9000c !important}.yacht-calendar-switcher-button.is-active{background:#bc1834;border-color:#bc1834;color:#fff;box-shadow:0 8px 18px rgba(188,24,52,.18)}.yacht-calendar-header{margin-bottom:30px}.yacht-calendar-title{font-size:28px;font-weight:700;color:#021526;margin:0 0 15px 0}.yacht-calendar-description{color:#666;font-size:16px;line-height:1.6}.yacht-calendar-instructions{margin:0 0 30px 0;padding:12px 14px;color:#fff;border-left:1px solid red;background:#d40924;border:none;border-radius:0}.yacht-calendar-instructions p{margin:0;font-family:"Inter Tight",Sans-serif;font-size:1rem;font-weight:400}.yacht-calendar-legend{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;margin:0 0 18px 0}.yacht-legend-item{display:inline-flex;align-items:center;gap:8px;color:#fff;font-family:"Roboto",Sans-serif;font-size:15px;font-weight:300}.yacht-legend-swatch{width:16px;height:16px;border-radius:4px;border:1px solid rgba(0,0,0,.2)}.yacht-legend-swatch-past{background:#d0d5dd}.yacht-calendar{margin-bottom:30px;background:hsla(0,0%,100%,.1) f;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.08);padding:20px}.yacht-calendar .fc{font-family:inherit}.yacht-calendar .fc-button-primary{background:#bc1834;border-color:#bc1834;text-transform:uppercase;font-weight:600;font-size:13px;padding:8px 16px}.yacht-calendar .fc-button-primary:hover{background:#021526;border-color:#021526}.yacht-calendar .fc-button-primary:not(:disabled):active{background:#021526;border-color:#021526}.yacht-calendar .fc-button-primary:not(:disabled).fc-button-active{background:#021526;border-color:#021526}.yacht-calendar .fc-daygrid-day.fc-day-past{background:#f5f5f5;opacity:1}.yacht-calendar .fc-daygrid-day.fc-day-past .fc-daygrid-day-number{color:#6c757d}.yacht-calendar .fc-daygrid-day-number,.yacht-calendar a.fc-daygrid-day-number{color:#021526 !important;font-weight:600}.yacht-calendar .fc-daygrid-day:hover{background:#f8f9fa}.yacht-calendar .fc-highlight{background:rgba(188,24,52,.1) !important}.yacht-calendar .fc-daygrid-day-top{display:flex;justify-content:center;align-items:center;padding:5px}.yacht-calendar .fc-daygrid-day-number{padding:4px 6px;min-width:28px;text-align:center;display:inline-block;font-size:14px;line-height:1.2}.yacht-calendar .fc-daygrid-day-frame{min-height:80px;display:flex;flex-direction:column;position:relative}.yacht-calendar .fc-bg-event{opacity:.78 !important}.yacht-calendar .fc-bg-event.yacht-day-available{opacity:.66 !important}.yacht-calendar .fc-bg-event.yacht-day-booked{opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-blocked{opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-booked-start,.yacht-calendar .fc-bg-event.yacht-day-blocked-start{background:linear-gradient(135deg,var(--yacht-available-bg, #f5f9ff) 0%,var(--yacht-available-bg, #f5f9ff) 50%,var(--yacht-booked-bg, #bc1834) 50%,var(--yacht-booked-bg, #bc1834) 100%) !important;opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-booked-end,.yacht-calendar .fc-bg-event.yacht-day-blocked-end{background:linear-gradient(135deg,var(--yacht-booked-bg, #bc1834) 0%,var(--yacht-booked-bg, #bc1834) 50%,var(--yacht-available-bg, #f5f9ff) 50%,var(--yacht-available-bg, #f5f9ff) 100%) !important;opacity:.92 !important}.yacht-day-available{cursor:pointer}.yacht-day-booked{cursor:not-allowed}.yacht-day-blocked{cursor:not-allowed}.yacht-booking-form-container{background:#f9f9f9;padding:30px;border-radius:8px;margin-top:30px;border:1px solid #e0e0e0}.yacht-booking-form-container h4{margin:0 0 25px 0;font-size:22px;font-weight:700;color:#021526}.yacht-booking-form .form-row{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.yacht-booking-form .form-field{margin-bottom:20px}.yacht-booking-form label{display:block;font-weight:600;margin-bottom:8px;color:#333;font-size:14px}.yacht-booking-form label .required{color:#bc1834;margin-left:2px}.yacht-booking-form input[type=text]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=email]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=tel]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=date]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.1)}.yacht-booking-form input:-moz-read-only{background:#f5f5f5;cursor:not-allowed}.yacht-booking-form input:read-only{background:#f5f5f5;cursor:not-allowed}.yacht-booking-form .form-actions{margin-top:25px}.booking-terms{margin-top:18px;font-size:14px;line-height:1.5;color:#333}.booking-terms a{color:#bc1834;text-decoration:underline}.yacht-booking-submit{font-family:"JetBrains Mono",Sans-serif !important;font-size:.75rem !important;font-weight:500 !important;text-transform:uppercase;line-height:1 !important;letter-spacing:.25em !important;padding:16px 32px 16px 32px !important;border-radius:0 !important;background:#bc1834 !important;color:#fff !important;border:none !important;cursor:pointer !important;transition:all .3s ease;width:100%}.yacht-booking-submit:hover{background:#a9000c !important}.yacht-booking-submit:disabled{background:#ccc;cursor:not-allowed;transform:none;box-shadow:none}.yacht-booking-response{margin-top:20px}.booking-success{padding:15px;border-radius:4px;font-size:15px;line-height:1.5}.booking-success strong{display:block;margin-bottom:5px}.booking-error{padding:15px;border-radius:4px;font-size:15px;line-height:1.5}.booking-error strong{display:block;margin-bottom:5px}.yacht-calendar-error{padding:20px;border-radius:4px;margin-bottom:20px}.yacht-calendar-error p{margin:0;line-height:1.5}.yacht-calendar-notice{padding:20px;border-radius:4px;margin-bottom:20px}.yacht-calendar-notice p{margin:0;line-height:1.5}.yacht-calendar-view-only{max-width:1200px;padding:15px 15px 0 15px;margin-bottom:0}.yacht-calendar-view-only .yacht-calendar-header{margin-bottom:15px}.yacht-calendar-view-only .yacht-calendar-title{font-size:22px;margin-bottom:10px}.yacht-calendar-view-only .yacht-calendar-instructions{margin-bottom:30px;padding:8px 12px;font-size:13px}.yacht-calendar-view-only .yacht-calendar-legend{margin-bottom:10px;font-size:13px}.yacht-calendar-view-only .yacht-calendar{padding:10px;margin-bottom:0;height:auto !important;overflow:visible}.yacht-calendar-view-only .fc-daygrid-day-frame{min-height:36px}.yacht-calendar-view-only .fc-daygrid-day-top{padding:2px}.yacht-calendar-view-only .fc-daygrid-day-number{padding:2px 4px;min-width:22px;font-size:12px}.yacht-calendar-view-only .fc-col-header-cell{font-size:12px;padding:4px 0}.yacht-calendar-view-only .fc-button{font-size:11px !important;padding:5px 10px !important}.yacht-calendar-view-only .fc-toolbar-title{font-size:16px !important}.yacht-inquiry-layout{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start;margin-bottom:30px}.yacht-inquiry-form-container{background:#021526;padding:24px;border-radius:8px;border:none}.yacht-inquiry-form-container h4{margin:0 0 8px 0;font-size:20px;font-weight:700;color:#fff}.yacht-inquiry-desc{margin:0 0 18px 0;color:hsla(0,0%,100%,.7);font-size:14px;line-height:1.5}.yacht-inquiry-form .form-field{margin-bottom:14px}.yacht-inquiry-form label{display:block;font-weight:600;margin-bottom:5px;color:hsla(0,0%,100%,.9);font-size:13px}.yacht-inquiry-form label .required{color:#ff6b6b;margin-left:2px}.yacht-inquiry-form input[type=text]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form input[type=email]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form input[type=tel]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form textarea{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit;resize:vertical;min-height:60px}.yacht-inquiry-form textarea::-moz-placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form textarea::placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form textarea:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.3);background:hsla(0,0%,100%,.15)}.yacht-inquiry-form input::-moz-placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form input::placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form input:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.3);background:hsla(0,0%,100%,.15)}.yacht-inquiry-form .form-actions{margin-top:18px}.yacht-inquiry-form .booking-terms{color:hsla(0,0%,100%,.6);font-size:13px}.yacht-inquiry-form .booking-terms a{color:hsla(0,0%,100%,.85)}.yacht-inquiry-form .yacht-booking-submit{background:#bc1834;border-color:#bc1834;color:#fff}.yacht-inquiry-form .yacht-booking-submit:hover{background:#fff;color:#021526}.yacht-inquiry-response{margin-top:15px}@media(max-width: 992px){.yacht-calendar-title{font-size:24px}.yacht-calendar{padding:15px}.yacht-inquiry-layout{grid-template-columns:1fr}}@media(max-width: 768px){.yacht-inquiry-form-container{padding:18px}.yacht-calendar-title{font-size:22px}.yacht-calendar{padding:10px}.yacht-calendar .fc-toolbar{flex-direction:column;gap:10px}.yacht-calendar .fc-toolbar-chunk{display:flex;justify-content:center;width:100%}.yacht-calendar .fc-button{font-size:12px;padding:6px 12px}.yacht-calendar-legend{gap:8px 12px}.yacht-booking-form-container{padding:20px}.yacht-booking-form .form-row{grid-template-columns:1fr;gap:0}}@media(max-width: 480px){.yacht-calendar-switcher-button{width:100%;justify-content:center}.yacht-calendar-title{font-size:20px}.yacht-booking-form-container{padding:15px}.yacht-booking-form input[type=text]{font-size:14px;padding:10px 12px}.yacht-booking-form input[type=email]{font-size:14px;padding:10px 12px}.yacht-booking-form input[type=tel]{font-size:14px;padding:10px 12px}.yacht-booking-submit{padding:12px 20px;font-size:14px}}body a:not([href]):not([tabindex]),body a:not([href]):not([tabindex]):focus,body a:not([href]):not([tabindex]):hover{color:#fff}body .fc .fc-day-other .fc-daygrid-day-top{opacity:1}.yacht-calendar{--fc-border-color:#0e2036}.yacht-calendar .fc{--fc-border-color:#0e2036}.yacht-calendar .fc-theme-standard td,.yacht-calendar .fc-theme-standard th,.yacht-calendar .fc-theme-standard .fc-scrollgrid,.yacht-calendar .fc-scrollgrid,.yacht-calendar .fc-scrollgrid-section>*,.yacht-calendar .fc-daygrid-day,.yacht-calendar .fc-col-header-cell{border-color:#0e2036 !important}.yacht-calendar .fc-col-header-cell{background:#0e2036;color:#fff}.yacht-calendar .fc-col-header-cell .fc-col-header-cell-cushion{color:#fff;font-weight:600;padding:8px 4px}table{margin-bottom:0 !important}/*# sourceMappingURL=calendar.css.map */
\ No newline at end of file
+.yacht-calendar-wrapper{max-width:1200px;margin:0 auto 40px;padding:20px}.yacht-calendar-switcher{width:100vw;margin-left:50%;transform:translateX(-50%);border:none;padding:80px 20px;border-radius:0;display:flex;flex-direction:column;align-items:center;margin-bottom:0;justify-content:center;background:#0e2036;gap:30px}.yacht-calendar-switcher-label{font-family:"DM Sans",Sans-serif !important;font-size:80px;font-weight:500;letter-spacing:-0.04em;color:var(--e-global-color-7077776);line-height:.8}@media(max-width: 768px){.yacht-calendar-switcher-label{font-size:64px}}@media(max-width: 480px){.yacht-calendar-switcher-label{font-size:48px}}.yacht-calendar-switcher-buttons{display:flex;flex-wrap:wrap;gap:8px}.yacht-calendar-switcher-button{font-family:"JetBrains Mono",Sans-serif !important;font-size:.75rem !important;font-weight:500 !important;text-transform:uppercase;line-height:1 !important;letter-spacing:.25em !important;padding:16px 32px 16px 32px !important;border-radius:0 !important;background:#bc1834 !important;color:#fff !important;border:none !important;cursor:pointer !important}.yacht-calendar-switcher-button:hover{background:#a9000c !important}.yacht-calendar-switcher-button.is-active{background:#bc1834;border-color:#bc1834;color:#fff;box-shadow:0 8px 18px rgba(188,24,52,.18)}.yacht-calendar-header{margin-bottom:30px}.yacht-calendar-title{font-size:28px;font-weight:700;color:#021526;margin:0 0 15px 0}.yacht-calendar-description{color:#666;font-size:16px;line-height:1.6}.yacht-calendar-instructions{margin:0 0 30px 0;padding:12px 14px;color:#fff;border-left:1px solid red;background:#d40924;border:none;border-radius:0}.yacht-calendar-instructions p{margin:0;font-family:"Inter Tight",Sans-serif;font-size:1rem;font-weight:400}.yacht-calendar-legend{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;margin:0 0 18px 0}.yacht-legend-item{display:inline-flex;align-items:center;gap:8px;color:#fff;font-family:"Roboto",Sans-serif;font-size:15px;font-weight:300}.yacht-legend-swatch{width:16px;height:16px;border-radius:4px;border:1px solid rgba(0,0,0,.2)}.yacht-legend-swatch-past{background:#d0d5dd}.yacht-calendar{margin-bottom:30px;background:hsla(0,0%,100%,.1) f;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.08);padding:20px}.yacht-calendar .fc{font-family:inherit}.yacht-calendar .fc-button-primary{background:#bc1834;border-color:#bc1834;text-transform:uppercase;font-weight:600;font-size:13px;padding:8px 16px}.yacht-calendar .fc-button-primary:hover{background:#021526;border-color:#021526}.yacht-calendar .fc-button-primary:not(:disabled):active{background:#021526;border-color:#021526}.yacht-calendar .fc-button-primary:not(:disabled).fc-button-active{background:#021526;border-color:#021526}.yacht-calendar .fc-daygrid-day.fc-day-past{background:#f5f5f5;opacity:1}.yacht-calendar .fc-daygrid-day.fc-day-past .fc-daygrid-day-number{color:#6c757d}.yacht-calendar .fc-daygrid-day-number,.yacht-calendar a.fc-daygrid-day-number{color:#021526 !important;font-weight:600}.yacht-calendar .fc-daygrid-day:hover{background:#f8f9fa}.yacht-calendar .fc-highlight{background:rgba(188,24,52,.1) !important}.yacht-calendar .fc-daygrid-day-top{display:flex;justify-content:center;align-items:center;padding:5px}.yacht-calendar .fc-daygrid-day-number{padding:4px 6px;min-width:28px;text-align:center;display:inline-block;font-size:14px;line-height:1.2}.yacht-calendar .fc-daygrid-day-frame{min-height:80px;display:flex;flex-direction:column;position:relative}.yacht-calendar .fc-bg-event{opacity:.78 !important}.yacht-calendar .fc-bg-event.yacht-day-available{opacity:.66 !important}.yacht-calendar .fc-bg-event.yacht-day-booked{opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-blocked{opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-booked-start,.yacht-calendar .fc-bg-event.yacht-day-blocked-start{background:linear-gradient(135deg, var(--yacht-available-bg, #f5f9ff) 0%, var(--yacht-available-bg, #f5f9ff) 50%, var(--yacht-booked-bg, #bc1834) 50%, var(--yacht-booked-bg, #bc1834) 100%) !important;opacity:.92 !important}.yacht-calendar .fc-bg-event.yacht-day-booked-end,.yacht-calendar .fc-bg-event.yacht-day-blocked-end{background:linear-gradient(135deg, var(--yacht-booked-bg, #bc1834) 0%, var(--yacht-booked-bg, #bc1834) 50%, var(--yacht-available-bg, #f5f9ff) 50%, var(--yacht-available-bg, #f5f9ff) 100%) !important;opacity:.92 !important}.yacht-day-available{cursor:pointer}.yacht-day-booked{cursor:not-allowed}.yacht-day-blocked{cursor:not-allowed}.yacht-booking-form-container{background:#f9f9f9;padding:30px;border-radius:8px;margin-top:30px;border:1px solid #e0e0e0}.yacht-booking-form-container h4{margin:0 0 25px 0;font-size:22px;font-weight:700;color:#021526}.yacht-booking-form .form-row{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.yacht-booking-form .form-field{margin-bottom:20px}.yacht-booking-form label{display:block;font-weight:600;margin-bottom:8px;color:#333;font-size:14px}.yacht-booking-form label .required{color:#bc1834;margin-left:2px}.yacht-booking-form input[type=text]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=email]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=tel]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input[type=date]{width:100%;padding:12px 15px;border:1px solid #ddd;border-radius:4px;font-size:16px;transition:border-color .3s ease,box-shadow .3s ease;background:#fff;box-sizing:border-box}.yacht-booking-form input:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.1)}.yacht-booking-form input:-moz-read-only{background:#f5f5f5;cursor:not-allowed}.yacht-booking-form input:read-only{background:#f5f5f5;cursor:not-allowed}.yacht-booking-form .form-actions{margin-top:25px}.booking-terms{margin-top:18px;font-size:14px;line-height:1.5;color:#333}.booking-terms a{color:#bc1834;text-decoration:underline}.yacht-booking-submit{font-family:"JetBrains Mono",Sans-serif !important;font-size:.75rem !important;font-weight:500 !important;text-transform:uppercase;line-height:1 !important;letter-spacing:.25em !important;padding:16px 32px 16px 32px !important;border-radius:0 !important;background:#bc1834 !important;color:#fff !important;border:none !important;cursor:pointer !important;transition:all .3s ease;width:100%}.yacht-booking-submit:hover{background:#a9000c !important}.yacht-booking-submit:disabled{background:#ccc;cursor:not-allowed;transform:none;box-shadow:none}.yacht-booking-response{margin-top:20px}.booking-success{padding:15px;border-radius:4px;font-size:15px;line-height:1.5}.booking-success strong{display:block;margin-bottom:5px}.booking-error{padding:15px;border-radius:4px;font-size:15px;line-height:1.5}.booking-error strong{display:block;margin-bottom:5px}.yacht-calendar-error{padding:20px;border-radius:4px;margin-bottom:20px}.yacht-calendar-error p{margin:0;line-height:1.5}.yacht-calendar-notice{padding:20px;border-radius:4px;margin-bottom:20px}.yacht-calendar-notice p{margin:0;line-height:1.5}.yacht-calendar-view-only{max-width:1200px;padding:15px 15px 0 15px;margin-bottom:0}.yacht-calendar-view-only .yacht-calendar-header{margin-bottom:15px}.yacht-calendar-view-only .yacht-calendar-title{font-size:22px;margin-bottom:10px}.yacht-calendar-view-only .yacht-calendar-instructions{margin-bottom:30px;padding:8px 12px;font-size:13px}.yacht-calendar-view-only .yacht-calendar-legend{margin-bottom:10px;font-size:13px}.yacht-calendar-view-only .yacht-calendar{padding:10px;margin-bottom:0;height:auto !important;overflow:visible}.yacht-calendar-view-only .fc-daygrid-day-frame{min-height:36px}.yacht-calendar-view-only .fc-daygrid-day-top{padding:2px}.yacht-calendar-view-only .fc-daygrid-day-number{padding:2px 4px;min-width:22px;font-size:12px}.yacht-calendar-view-only .fc-col-header-cell{font-size:12px;padding:4px 0}.yacht-calendar-view-only .fc-button{font-size:11px !important;padding:5px 10px !important}.yacht-calendar-view-only .fc-toolbar-title{font-size:16px !important}.yacht-inquiry-layout{display:grid;grid-template-columns:2fr 1fr;gap:24px;align-items:start;margin-bottom:30px}.yacht-inquiry-form-container{background:#021526;border-radius:8px;border:none}.yacht-inquiry-form-container h4{margin:0 0 8px 0;font-size:20px;font-weight:700;color:#fff}.yacht-inquiry-desc{margin:0 0 18px 0;color:hsla(0,0%,100%,.7);font-size:14px;line-height:1.5}.yacht-inquiry-form .form-field{margin-bottom:14px}.yacht-inquiry-form label{display:block;font-weight:600;margin-bottom:5px;color:hsla(0,0%,100%,.9);font-size:13px}.yacht-inquiry-form label .required{color:#ff6b6b;margin-left:2px}.yacht-inquiry-form input[type=text]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form input[type=email]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form input[type=tel]{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit}.yacht-inquiry-form textarea{width:100%;padding:10px 12px;border:1px solid hsla(0,0%,100%,.2);border-radius:4px;font-size:14px;transition:border-color .3s ease,box-shadow .3s ease;background:hsla(0,0%,100%,.1);color:#fff;box-sizing:border-box;font-family:inherit;resize:vertical;min-height:60px}.yacht-inquiry-form textarea::-moz-placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form textarea::placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form textarea:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.3);background:hsla(0,0%,100%,.15)}.yacht-inquiry-form input::-moz-placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form input::placeholder{color:hsla(0,0%,100%,.4)}.yacht-inquiry-form input:focus{outline:none;border-color:#bc1834;box-shadow:0 0 0 3px rgba(188,24,52,.3);background:hsla(0,0%,100%,.15)}.yacht-inquiry-form .form-actions{margin-top:18px}.yacht-inquiry-form .booking-terms{color:hsla(0,0%,100%,.6);font-size:13px}.yacht-inquiry-form .booking-terms a{color:hsla(0,0%,100%,.85)}.yacht-inquiry-form .yacht-booking-submit{background:#bc1834;border-color:#bc1834;color:#fff}.yacht-inquiry-form .yacht-booking-submit:hover{background:#fff;color:#021526}.yacht-inquiry-response{margin-top:15px}@media(max-width: 992px){.yacht-calendar-title{font-size:24px}.yacht-calendar{padding:15px}.yacht-inquiry-layout{grid-template-columns:1fr}}@media(max-width: 768px){.yacht-calendar-title{font-size:22px}.yacht-calendar{padding:10px}.yacht-calendar .fc-toolbar{flex-direction:column;gap:10px}.yacht-calendar .fc-toolbar-chunk{display:flex;justify-content:center;width:100%}.yacht-calendar .fc-button{font-size:12px;padding:6px 12px}.yacht-calendar-legend{gap:8px 12px}.yacht-booking-form-container{padding:20px}.yacht-booking-form .form-row{grid-template-columns:1fr;gap:0}}@media(max-width: 480px){.yacht-calendar-switcher-button{width:100%;justify-content:center}.yacht-calendar-title{font-size:20px}.yacht-booking-form-container{padding:15px}.yacht-booking-form input[type=text]{font-size:14px;padding:10px 12px}.yacht-booking-form input[type=email]{font-size:14px;padding:10px 12px}.yacht-booking-form input[type=tel]{font-size:14px;padding:10px 12px}.yacht-booking-submit{padding:12px 20px;font-size:14px}}body a:not([href]):not([tabindex]),body a:not([href]):not([tabindex]):focus,body a:not([href]):not([tabindex]):hover{color:#fff}body .fc .fc-day-other .fc-daygrid-day-top{opacity:1}.yacht-calendar{--fc-border-color: #0e2036}.yacht-calendar .fc{--fc-border-color: #0e2036}.yacht-calendar .fc-theme-standard td,.yacht-calendar .fc-theme-standard th,.yacht-calendar .fc-theme-standard .fc-scrollgrid,.yacht-calendar .fc-scrollgrid,.yacht-calendar .fc-scrollgrid-section>*,.yacht-calendar .fc-daygrid-day,.yacht-calendar .fc-col-header-cell{border-color:#0e2036 !important}.yacht-calendar .fc-col-header-cell{background:#0e2036;color:#fff}.yacht-calendar .fc-col-header-cell .fc-col-header-cell-cushion{color:#fff;font-weight:600;padding:8px 4px}table{margin-bottom:0 !important}/*# sourceMappingURL=calendar.css.map */
\ No newline at end of file
diff --git a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css.map b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css.map
index 1de1e66..8d5b830 100644
--- a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css.map
+++ b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.css.map
@@ -1 +1 @@
-{"version":3,"sources":["calendar.scss"],"names":[],"mappings":"AAAA,wBACC,gBAAA,CACA,kBAAA,CACA,YAAA,CAED,yBAQC,WAAA,CACA,eAAA,CACA,0BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,QAAA,CAED,+BAIC,2CAAA,CACA,cAAA,CACA,eAAA,CACA,sBAAA,CACA,mCAAA,CACA,cAAA,CAEA,yBAXD,+BAYE,cAAA,CAAA,CAED,yBAdD,+BAeE,cAAA,CAAA,CAGF,iCACC,YAAA,CACA,cAAA,CACA,OAAA,CAED,gCACC,kDAAA,CACA,2BAAA,CACA,0BAAA,CACA,wBAAA,CACA,wBAAA,CACA,+BAAA,CACA,sCAAA,CACA,0BAAA,CACA,6BAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,sCACC,6BAAA,CA4BF,0CACC,kBAAA,CACA,oBAAA,CACA,UAAA,CACA,yCAAA,CAED,uBACC,kBAAA,CAED,sBACC,cAAA,CACA,eAAA,CACA,aAAA,CACA,iBAAA,CAED,4BACC,UAAA,CACA,cAAA,CACA,eAAA,CAED,6BACC,iBAAA,CACA,iBAAA,CAEA,UAAA,CACA,yBAAA,CACA,kBAAA,CACA,WAAA,CACA,eAAA,CAEA,+BACC,QAAA,CACA,oCAAA,CACA,cAAA,CACA,eAAA,CAGF,uBACC,YAAA,CACA,cAAA,CACA,aAAA,CACA,kBAAA,CACA,iBAAA,CAED,mBACC,mBAAA,CACA,kBAAA,CACA,OAAA,CAEA,UAAA,CACA,+BAAA,CACA,cAAA,CACA,eAAA,CAED,qBACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,+BAAA,CAED,0BACC,kBAAA,CAED,gBACC,kBAAA,CACA,+BAAA,CACA,iBAAA,CACA,qCAAA,CACA,YAAA,CACA,oBACC,mBAAA,CAED,mCACC,kBAAA,CACA,oBAAA,CACA,wBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,yCACC,kBAAA,CACA,oBAAA,CAGA,yDACC,kBAAA,CACA,oBAAA,CAGF,mEACC,kBAAA,CACA,oBAAA,CAGF,4CACC,kBAAA,CACA,SAAA,CAEA,mEACC,UAAA,CAID,sCACC,kBAAA,CAGF,8BACC,wCAAA,CAED,oCACC,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CAED,uCACC,eAAA,CACA,cAAA,CACA,iBAAA,CACA,oBAAA,CACA,cAAA,CACA,eAAA,CAED,sCACC,eAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAED,6BACC,sBAAA,CAED,iDACC,sBAAA,CAED,8CACC,sBAAA,CAED,+CACC,sBAAA,CAGF,qBACC,cAAA,CAED,kBACC,kBAAA,CAED,mBACC,kBAAA,CAED,8BACC,kBAAA,CACA,YAAA,CACA,iBAAA,CACA,eAAA,CACA,wBAAA,CACA,iCACC,iBAAA,CACA,cAAA,CACA,eAAA,CACA,aAAA,CAID,8BACC,YAAA,CACA,6BAAA,CACA,QAAA,CACA,kBAAA,CAED,gCACC,kBAAA,CAED,0BACC,aAAA,CACA,eAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CACA,oCACC,aAAA,CACA,eAAA,CAGF,qCACC,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,eAAA,CACA,qBAAA,CAED,sCACC,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,eAAA,CACA,qBAAA,CAED,oCACC,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,eAAA,CACA,qBAAA,CAED,qCACC,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,eAAA,CACA,qBAAA,CAGA,gCACC,YAAA,CACA,oBAAA,CACA,uCAAA,CAED,yCACC,kBAAA,CACA,kBAAA,CAFD,oCACC,kBAAA,CACA,kBAAA,CAGF,kCACC,eAAA,CAGF,eACC,eAAA,CACA,cAAA,CACA,eAAA,CACA,UAAA,CACA,iBACC,aAAA,CACA,yBAAA,CAGF,sBACC,kDAAA,CACA,2BAAA,CACA,0BAAA,CACA,wBAAA,CACA,wBAAA,CACA,+BAAA,CACA,sCAAA,CACA,0BAAA,CACA,6BAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CACA,uBAAA,CACA,UAAA,CAEA,4BACC,6BAAA,CAED,+BACC,eAAA,CACA,kBAAA,CACA,cAAA,CACA,eAAA,CAGF,wBACC,eAAA,CAED,iBACC,YAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,wBACC,aAAA,CACA,iBAAA,CAGF,eACC,YAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,sBACC,aAAA,CACA,iBAAA,CAGF,sBACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBACC,QAAA,CACA,eAAA,CAGF,uBACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,yBACC,QAAA,CACA,eAAA,CAGF,0BACC,gBAAA,CACA,wBAAA,CACA,eAAA,CACA,iDACC,kBAAA,CAED,gDACC,cAAA,CACA,kBAAA,CAED,uDACC,kBAAA,CACA,gBAAA,CACA,cAAA,CAED,iDACC,kBAAA,CACA,cAAA,CAED,0CACC,YAAA,CACA,eAAA,CACA,sBAAA,CACA,gBAAA,CAED,gDACC,eAAA,CAED,8CACC,WAAA,CAED,iDACC,eAAA,CACA,cAAA,CACA,cAAA,CAED,8CACC,cAAA,CACA,aAAA,CAED,qCACC,yBAAA,CACA,2BAAA,CAED,4CACC,yBAAA,CAGF,sBACC,YAAA,CACA,6BAAA,CACA,QAAA,CACA,iBAAA,CACA,kBAAA,CAED,8BACC,kBAAA,CACA,YAAA,CACA,iBAAA,CACA,WAAA,CACA,iCACC,gBAAA,CACA,cAAA,CACA,eAAA,CACA,UAAA,CAGF,oBACC,iBAAA,CACA,wBAAA,CACA,cAAA,CACA,eAAA,CAGA,gCACC,kBAAA,CAED,0BACC,aAAA,CACA,eAAA,CACA,iBAAA,CACA,wBAAA,CACA,cAAA,CACA,oCACC,aAAA,CACA,eAAA,CAGF,qCACC,UAAA,CACA,iBAAA,CACA,mCAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,6BAAA,CACA,UAAA,CACA,qBAAA,CACA,mBAAA,CAED,sCACC,UAAA,CACA,iBAAA,CACA,mCAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,6BAAA,CACA,UAAA,CACA,qBAAA,CACA,mBAAA,CAED,oCACC,UAAA,CACA,iBAAA,CACA,mCAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,6BAAA,CACA,UAAA,CACA,qBAAA,CACA,mBAAA,CAED,6BACC,UAAA,CACA,iBAAA,CACA,mCAAA,CACA,iBAAA,CACA,cAAA,CACA,oDAAA,CACA,6BAAA,CACA,UAAA,CACA,qBAAA,CACA,mBAAA,CACA,eAAA,CACA,eAAA,CACA,+CACC,wBAAA,CADD,0CACC,wBAAA,CAED,mCACC,YAAA,CACA,oBAAA,CACA,uCAAA,CACA,8BAAA,CAID,4CACC,wBAAA,CADD,uCACC,wBAAA,CAED,gCACC,YAAA,CACA,oBAAA,CACA,uCAAA,CACA,8BAAA,CAGF,kCACC,eAAA,CAED,mCACC,wBAAA,CACA,cAAA,CACA,qCACC,yBAAA,CAGF,0CACC,kBAAA,CACA,oBAAA,CACA,UAAA,CACA,gDACC,eAAA,CACA,aAAA,CAIH,wBACC,eAAA,CAED,yBACC,sBACC,cAAA,CAED,gBACC,YAAA,CAED,sBACC,yBAAA,CAAA,CAGF,yBACC,8BACC,YAAA,CAED,sBACC,cAAA,CAED,gBACC,YAAA,CACA,4BACC,qBAAA,CACA,QAAA,CAED,kCACC,YAAA,CACA,sBAAA,CACA,UAAA,CAED,2BACC,cAAA,CACA,gBAAA,CAGF,uBACC,YAAA,CAED,8BACC,YAAA,CAGA,8BACC,yBAAA,CACA,KAAA,CAAA,CAIH,yBACC,gCACC,UAAA,CACA,sBAAA,CAED,sBACC,cAAA,CAED,8BACC,YAAA,CAGA,qCACC,cAAA,CACA,iBAAA,CAED,sCACC,cAAA,CACA,iBAAA,CAED,oCACC,cAAA,CACA,iBAAA,CAGF,sBACC,iBAAA,CACA,cAAA,CAAA,CAIF,qHAGC,UAAA,CAGD,2CACC,SAAA,CAQD,MACC,0BAAA","file":"calendar.css"}
\ No newline at end of file
+{"version":3,"sources":["calendar.scss"],"names":[],"mappings":"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","file":"calendar.css","sourcesContent":[".yacht-calendar-wrapper {\r\n max-width: 1200px;\r\n margin: 0 auto 40px;\r\n padding: 20px;\r\n}\r\n\r\n.yacht-calendar-switcher {\r\n // display: flex;\r\n // flex-wrap: wrap;\r\n // align-items: center;\r\n // gap: 10px 14px;\r\n // margin: 0 0 22px 0;\r\n // padding: 14px 16px;\r\n // border-radius: 10px;\r\n width: 100vw;\r\n margin-left: 50%;\r\n transform: translateX(-50%);\r\n border: none;\r\n padding: 80px 20px;\r\n border-radius: 0;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n margin-bottom: 0;\r\n justify-content: center;\r\n background: #0e2036;\r\n gap: 30px;\r\n}\r\n\r\n.yacht-calendar-switcher-label {\r\n // font-size: 14px;\r\n // font-weight: 700;\r\n // color: #021526;\r\n font-family: 'DM Sans', Sans-serif !important;\r\n font-size: 80px;\r\n font-weight: 500;\r\n letter-spacing: -0.04em;\r\n color: var(--e-global-color-7077776);\r\n line-height: 0.8;\r\n\r\n @media (max-width: 768px) {\r\n font-size: 64px;\r\n }\r\n\r\n @media (max-width: 480px) {\r\n font-size: 48px;\r\n }\r\n}\r\n\r\n.yacht-calendar-switcher-buttons {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n}\r\n\r\n.yacht-calendar-switcher-button {\r\n font-family: 'JetBrains Mono', Sans-serif !important;\r\n font-size: 0.75rem !important;\r\n font-weight: 500 !important;\r\n text-transform: uppercase;\r\n line-height: 1 !important;\r\n letter-spacing: 0.25em !important;\r\n padding: 16px 32px 16px 32px !important;\r\n border-radius: 0 !important;\r\n background: #bc1834 !important;\r\n color: #fff !important;\r\n border: none !important;\r\n cursor: pointer !important;\r\n\r\n &:hover {\r\n background: #a9000c !important;\r\n }\r\n\r\n // display: inline-flex;\r\n // align-items: center;\r\n // padding: 9px 14px;\r\n // border: 1px solid #c8d4e3;\r\n // border-radius: 999px;\r\n // background: #fff;\r\n // color: #14324a;\r\n // font-size: 14px;\r\n // font-weight: 600;\r\n // line-height: 1.2;\r\n // cursor: pointer;\r\n // transition: background-color 0.2s ease, color 0.2s ease,\r\n // \tborder-color 0.2s ease, transform 0.2s ease;\r\n // &:hover {\r\n // \tborder-color: #bc1834;\r\n // \tcolor: #bc1834;\r\n // \toutline: none;\r\n // \ttransform: translateY(-1px);\r\n // }\r\n // &:focus {\r\n // \tborder-color: #bc1834;\r\n // \tcolor: #bc1834;\r\n // \toutline: none;\r\n // \ttransform: translateY(-1px);\r\n // }\r\n}\r\n\r\n.yacht-calendar-switcher-button.is-active {\r\n background: #bc1834;\r\n border-color: #bc1834;\r\n color: #fff;\r\n box-shadow: 0 8px 18px rgba(188, 24, 52, 0.18);\r\n}\r\n\r\n.yacht-calendar-header {\r\n margin-bottom: 30px;\r\n}\r\n\r\n.yacht-calendar-title {\r\n font-size: 28px;\r\n font-weight: 700;\r\n color: #021526;\r\n margin: 0 0 15px 0;\r\n}\r\n\r\n.yacht-calendar-description {\r\n color: #666;\r\n font-size: 16px;\r\n line-height: 1.6;\r\n}\r\n\r\n.yacht-calendar-instructions {\r\n margin: 0 0 30px 0;\r\n padding: 12px 14px;\r\n\r\n color: #fff;\r\n border-left: 1px solid red;\r\n background: #d40924;\r\n border: none;\r\n border-radius: 0;\r\n\r\n p {\r\n margin: 0;\r\n font-family: 'Inter Tight', Sans-serif;\r\n font-size: 1rem;\r\n font-weight: 400;\r\n }\r\n}\r\n\r\n.yacht-calendar-legend {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px 16px;\r\n align-items: center;\r\n margin: 0 0 18px 0;\r\n}\r\n\r\n.yacht-legend-item {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n color: #fff;\r\n font-family: 'Roboto', Sans-serif;\r\n font-size: 15px;\r\n font-weight: 300;\r\n}\r\n\r\n.yacht-legend-swatch {\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 4px;\r\n border: 1px solid rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.yacht-legend-swatch-past {\r\n background: #d0d5dd;\r\n}\r\n\r\n.yacht-calendar {\r\n margin-bottom: 30px;\r\n background: rgba(255, 255, 255, 0.1) f;\r\n border-radius: 8px;\r\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);\r\n padding: 20px;\r\n\r\n .fc {\r\n font-family: inherit;\r\n }\r\n\r\n .fc-button-primary {\r\n background: #bc1834;\r\n border-color: #bc1834;\r\n text-transform: uppercase;\r\n font-weight: 600;\r\n font-size: 13px;\r\n padding: 8px 16px;\r\n\r\n &:hover {\r\n background: #021526;\r\n border-color: #021526;\r\n }\r\n\r\n &:not(:disabled) {\r\n &:active {\r\n background: #021526;\r\n border-color: #021526;\r\n }\r\n }\r\n\r\n &:not(:disabled).fc-button-active {\r\n background: #021526;\r\n border-color: #021526;\r\n }\r\n }\r\n\r\n .fc-daygrid-day.fc-day-past {\r\n background: #f5f5f5;\r\n opacity: 1;\r\n\r\n .fc-daygrid-day-number {\r\n color: #6c757d;\r\n }\r\n }\r\n\r\n .fc-daygrid-day-number,\r\n a.fc-daygrid-day-number {\r\n color: #021526 !important;\r\n font-weight: 600;\r\n }\r\n\r\n .fc-daygrid-day {\r\n &:hover {\r\n background: #f8f9fa;\r\n }\r\n }\r\n\r\n .fc-highlight {\r\n background: rgba(188, 24, 52, 0.1) !important;\r\n }\r\n\r\n .fc-daygrid-day-top {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 5px;\r\n }\r\n\r\n .fc-daygrid-day-number {\r\n padding: 4px 6px;\r\n min-width: 28px;\r\n text-align: center;\r\n display: inline-block;\r\n font-size: 14px;\r\n line-height: 1.2;\r\n }\r\n\r\n .fc-daygrid-day-frame {\r\n min-height: 80px;\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n }\r\n\r\n .fc-bg-event {\r\n opacity: 0.78 !important;\r\n }\r\n\r\n .fc-bg-event.yacht-day-available {\r\n opacity: 0.66 !important;\r\n }\r\n\r\n .fc-bg-event.yacht-day-booked {\r\n opacity: 0.92 !important;\r\n }\r\n\r\n .fc-bg-event.yacht-day-blocked {\r\n opacity: 0.92 !important;\r\n }\r\n\r\n // Half-day rendering for first / last day of a booking or blockade.\r\n // Skos 45°. Pierwszy dzień: trójkąt bottom-left = wolny, top-right = zajęty (odbiór po południu).\r\n // Ostatni dzień: trójkąt top-left = zajęty, bottom-right = wolny (zwrot rano).\r\n .fc-bg-event.yacht-day-booked-start,\r\n .fc-bg-event.yacht-day-blocked-start {\r\n background: linear-gradient(135deg,\r\n var(--yacht-available-bg, #f5f9ff) 0%,\r\n var(--yacht-available-bg, #f5f9ff) 50%,\r\n var(--yacht-booked-bg, #bc1834) 50%,\r\n var(--yacht-booked-bg, #bc1834) 100%) !important;\r\n opacity: 0.92 !important;\r\n }\r\n\r\n .fc-bg-event.yacht-day-booked-end,\r\n .fc-bg-event.yacht-day-blocked-end {\r\n background: linear-gradient(135deg,\r\n var(--yacht-booked-bg, #bc1834) 0%,\r\n var(--yacht-booked-bg, #bc1834) 50%,\r\n var(--yacht-available-bg, #f5f9ff) 50%,\r\n var(--yacht-available-bg, #f5f9ff) 100%) !important;\r\n opacity: 0.92 !important;\r\n }\r\n}\r\n\r\n.yacht-day-available {\r\n cursor: pointer;\r\n}\r\n\r\n.yacht-day-booked {\r\n cursor: not-allowed;\r\n}\r\n\r\n.yacht-day-blocked {\r\n cursor: not-allowed;\r\n}\r\n\r\n.yacht-booking-form-container {\r\n background: #f9f9f9;\r\n padding: 30px;\r\n border-radius: 8px;\r\n margin-top: 30px;\r\n border: 1px solid #e0e0e0;\r\n\r\n h4 {\r\n margin: 0 0 25px 0;\r\n font-size: 22px;\r\n font-weight: 700;\r\n color: #021526;\r\n }\r\n}\r\n\r\n.yacht-booking-form {\r\n .form-row {\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n gap: 20px;\r\n margin-bottom: 20px;\r\n }\r\n\r\n .form-field {\r\n margin-bottom: 20px;\r\n }\r\n\r\n label {\r\n display: block;\r\n font-weight: 600;\r\n margin-bottom: 8px;\r\n color: #333;\r\n font-size: 14px;\r\n\r\n .required {\r\n color: #bc1834;\r\n margin-left: 2px;\r\n }\r\n }\r\n\r\n input[type='text'] {\r\n width: 100%;\r\n padding: 12px 15px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: #fff;\r\n box-sizing: border-box;\r\n }\r\n\r\n input[type='email'] {\r\n width: 100%;\r\n padding: 12px 15px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: #fff;\r\n box-sizing: border-box;\r\n }\r\n\r\n input[type='tel'] {\r\n width: 100%;\r\n padding: 12px 15px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: #fff;\r\n box-sizing: border-box;\r\n }\r\n\r\n input[type='date'] {\r\n width: 100%;\r\n padding: 12px 15px;\r\n border: 1px solid #ddd;\r\n border-radius: 4px;\r\n font-size: 16px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: #fff;\r\n box-sizing: border-box;\r\n }\r\n\r\n input {\r\n &:focus {\r\n outline: none;\r\n border-color: #bc1834;\r\n box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.1);\r\n }\r\n\r\n &:read-only {\r\n background: #f5f5f5;\r\n cursor: not-allowed;\r\n }\r\n }\r\n\r\n .form-actions {\r\n margin-top: 25px;\r\n }\r\n}\r\n\r\n.booking-terms {\r\n margin-top: 18px;\r\n font-size: 14px;\r\n line-height: 1.5;\r\n color: #333;\r\n\r\n a {\r\n color: #bc1834;\r\n text-decoration: underline;\r\n }\r\n}\r\n\r\n.yacht-booking-submit {\r\n font-family: 'JetBrains Mono', Sans-serif !important;\r\n font-size: 0.75rem !important;\r\n font-weight: 500 !important;\r\n text-transform: uppercase;\r\n line-height: 1 !important;\r\n letter-spacing: 0.25em !important;\r\n padding: 16px 32px 16px 32px !important;\r\n border-radius: 0 !important;\r\n background: #bc1834 !important;\r\n color: #fff !important;\r\n border: none !important;\r\n cursor: pointer !important;\r\n transition: all 0.3s ease;\r\n width: 100%;\r\n\r\n &:hover {\r\n background: #a9000c !important;\r\n }\r\n\r\n &:disabled {\r\n background: #ccc;\r\n cursor: not-allowed;\r\n transform: none;\r\n box-shadow: none;\r\n }\r\n}\r\n\r\n.yacht-booking-response {\r\n margin-top: 20px;\r\n}\r\n\r\n.booking-success {\r\n padding: 15px;\r\n border-radius: 4px;\r\n font-size: 15px;\r\n line-height: 1.5;\r\n\r\n strong {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n}\r\n\r\n.booking-error {\r\n padding: 15px;\r\n border-radius: 4px;\r\n font-size: 15px;\r\n line-height: 1.5;\r\n\r\n strong {\r\n display: block;\r\n margin-bottom: 5px;\r\n }\r\n}\r\n\r\n.yacht-calendar-error {\r\n padding: 20px;\r\n border-radius: 4px;\r\n margin-bottom: 20px;\r\n\r\n p {\r\n margin: 0;\r\n line-height: 1.5;\r\n }\r\n}\r\n\r\n.yacht-calendar-notice {\r\n padding: 20px;\r\n border-radius: 4px;\r\n margin-bottom: 20px;\r\n\r\n p {\r\n margin: 0;\r\n line-height: 1.5;\r\n }\r\n}\r\n\r\n.yacht-calendar-view-only {\r\n max-width: 1200px;\r\n padding: 15px 15px 0 15px;\r\n margin-bottom: 0;\r\n\r\n .yacht-calendar-header {\r\n margin-bottom: 15px;\r\n }\r\n\r\n .yacht-calendar-title {\r\n font-size: 22px;\r\n margin-bottom: 10px;\r\n }\r\n\r\n .yacht-calendar-instructions {\r\n margin-bottom: 30px;\r\n padding: 8px 12px;\r\n font-size: 13px;\r\n }\r\n\r\n .yacht-calendar-legend {\r\n margin-bottom: 10px;\r\n font-size: 13px;\r\n }\r\n\r\n .yacht-calendar {\r\n padding: 10px;\r\n margin-bottom: 0;\r\n height: auto !important;\r\n overflow: visible;\r\n }\r\n\r\n .fc-daygrid-day-frame {\r\n min-height: 36px;\r\n }\r\n\r\n .fc-daygrid-day-top {\r\n padding: 2px;\r\n }\r\n\r\n .fc-daygrid-day-number {\r\n padding: 2px 4px;\r\n min-width: 22px;\r\n font-size: 12px;\r\n }\r\n\r\n .fc-col-header-cell {\r\n font-size: 12px;\r\n padding: 4px 0;\r\n }\r\n\r\n .fc-button {\r\n font-size: 11px !important;\r\n padding: 5px 10px !important;\r\n }\r\n\r\n .fc-toolbar-title {\r\n font-size: 16px !important;\r\n }\r\n}\r\n\r\n.yacht-inquiry-layout {\r\n display: grid;\r\n grid-template-columns: 2fr 1fr;\r\n gap: 24px;\r\n align-items: start;\r\n margin-bottom: 30px;\r\n}\r\n\r\n.yacht-inquiry-form-container {\r\n background: #021526;\r\n border-radius: 8px;\r\n border: none;\r\n\r\n h4 {\r\n margin: 0 0 8px 0;\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #fff;\r\n }\r\n}\r\n\r\n.yacht-inquiry-desc {\r\n margin: 0 0 18px 0;\r\n color: rgba(255, 255, 255, 0.7);\r\n font-size: 14px;\r\n line-height: 1.5;\r\n}\r\n\r\n.yacht-inquiry-form {\r\n .form-field {\r\n margin-bottom: 14px;\r\n }\r\n\r\n label {\r\n display: block;\r\n font-weight: 600;\r\n margin-bottom: 5px;\r\n color: rgba(255, 255, 255, 0.9);\r\n font-size: 13px;\r\n\r\n .required {\r\n color: #ff6b6b;\r\n margin-left: 2px;\r\n }\r\n }\r\n\r\n input[type='text'] {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: #fff;\r\n box-sizing: border-box;\r\n font-family: inherit;\r\n }\r\n\r\n input[type='email'] {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: #fff;\r\n box-sizing: border-box;\r\n font-family: inherit;\r\n }\r\n\r\n input[type='tel'] {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: #fff;\r\n box-sizing: border-box;\r\n font-family: inherit;\r\n }\r\n\r\n textarea {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n border-radius: 4px;\r\n font-size: 14px;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: #fff;\r\n box-sizing: border-box;\r\n font-family: inherit;\r\n resize: vertical;\r\n min-height: 60px;\r\n\r\n &::placeholder {\r\n color: rgba(255, 255, 255, 0.4);\r\n }\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: #bc1834;\r\n box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);\r\n background: rgba(255, 255, 255, 0.15);\r\n }\r\n }\r\n\r\n input {\r\n &::placeholder {\r\n color: rgba(255, 255, 255, 0.4);\r\n }\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: #bc1834;\r\n box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);\r\n background: rgba(255, 255, 255, 0.15);\r\n }\r\n }\r\n\r\n .form-actions {\r\n margin-top: 18px;\r\n }\r\n\r\n .booking-terms {\r\n color: rgba(255, 255, 255, 0.6);\r\n font-size: 13px;\r\n\r\n a {\r\n color: rgba(255, 255, 255, 0.85);\r\n }\r\n }\r\n\r\n .yacht-booking-submit {\r\n background: #bc1834;\r\n border-color: #bc1834;\r\n color: #fff;\r\n\r\n &:hover {\r\n background: #fff;\r\n color: #021526;\r\n }\r\n }\r\n}\r\n\r\n.yacht-inquiry-response {\r\n margin-top: 15px;\r\n}\r\n\r\n@media (max-width: 992px) {\r\n .yacht-calendar-title {\r\n font-size: 24px;\r\n }\r\n\r\n .yacht-calendar {\r\n padding: 15px;\r\n }\r\n\r\n .yacht-inquiry-layout {\r\n grid-template-columns: 1fr;\r\n }\r\n}\r\n\r\n@media (max-width: 768px) {\r\n\r\n .yacht-calendar-title {\r\n font-size: 22px;\r\n }\r\n\r\n .yacht-calendar {\r\n padding: 10px;\r\n\r\n .fc-toolbar {\r\n flex-direction: column;\r\n gap: 10px;\r\n }\r\n\r\n .fc-toolbar-chunk {\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n }\r\n\r\n .fc-button {\r\n font-size: 12px;\r\n padding: 6px 12px;\r\n }\r\n }\r\n\r\n .yacht-calendar-legend {\r\n gap: 8px 12px;\r\n }\r\n\r\n .yacht-booking-form-container {\r\n padding: 20px;\r\n }\r\n\r\n .yacht-booking-form {\r\n .form-row {\r\n grid-template-columns: 1fr;\r\n gap: 0;\r\n }\r\n }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n .yacht-calendar-switcher-button {\r\n width: 100%;\r\n justify-content: center;\r\n }\r\n\r\n .yacht-calendar-title {\r\n font-size: 20px;\r\n }\r\n\r\n .yacht-booking-form-container {\r\n padding: 15px;\r\n }\r\n\r\n .yacht-booking-form {\r\n input[type='text'] {\r\n font-size: 14px;\r\n padding: 10px 12px;\r\n }\r\n\r\n input[type='email'] {\r\n font-size: 14px;\r\n padding: 10px 12px;\r\n }\r\n\r\n input[type='tel'] {\r\n font-size: 14px;\r\n padding: 10px 12px;\r\n }\r\n }\r\n\r\n .yacht-booking-submit {\r\n padding: 12px 20px;\r\n font-size: 14px;\r\n }\r\n}\r\n\r\nbody a:not([href]):not([tabindex]),\r\nbody a:not([href]):not([tabindex]):focus,\r\nbody a:not([href]):not([tabindex]):hover {\r\n color: #fff;\r\n}\r\n\r\nbody .fc .fc-day-other .fc-daygrid-day-top {\r\n opacity: 1;\r\n}\r\n\r\n.yacht-calendar {\r\n --fc-border-color: #0e2036;\r\n\r\n .fc {\r\n --fc-border-color: #0e2036;\r\n }\r\n\r\n .fc-theme-standard td,\r\n .fc-theme-standard th,\r\n .fc-theme-standard .fc-scrollgrid,\r\n .fc-scrollgrid,\r\n .fc-scrollgrid-section>*,\r\n .fc-daygrid-day,\r\n .fc-col-header-cell {\r\n border-color: #0e2036 !important;\r\n }\r\n\r\n .fc-col-header-cell {\r\n background: #0e2036;\r\n color: #fff;\r\n }\r\n\r\n .fc-col-header-cell .fc-col-header-cell-cushion {\r\n color: #fff;\r\n font-weight: 600;\r\n padding: 8px 4px;\r\n }\r\n}\r\n\r\ntable {\r\n margin-bottom: 0 !important;\r\n}"]}
\ No newline at end of file
diff --git a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.scss b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.scss
index 691b598..66bed69 100644
--- a/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.scss
+++ b/wp-content/plugins/yacht-booking-system/frontend/assets/css/calendar.scss
@@ -1,740 +1,850 @@
.yacht-calendar-wrapper {
- max-width: 1200px;
- margin: 0 auto 40px;
- padding: 20px;
+ max-width: 1200px;
+ margin: 0 auto 40px;
+ padding: 20px;
}
+
.yacht-calendar-switcher {
- // display: flex;
- // flex-wrap: wrap;
- // align-items: center;
- // gap: 10px 14px;
- // margin: 0 0 22px 0;
- // padding: 14px 16px;
- // border-radius: 10px;
- width: 100vw;
- margin-left: 50%;
- transform: translateX(-50%);
- border: none;
- padding: 80px 20px;
- border-radius: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- margin-bottom: 0;
- justify-content: center;
- background: #0e2036;
- gap: 30px;
+ // display: flex;
+ // flex-wrap: wrap;
+ // align-items: center;
+ // gap: 10px 14px;
+ // margin: 0 0 22px 0;
+ // padding: 14px 16px;
+ // border-radius: 10px;
+ width: 100vw;
+ margin-left: 50%;
+ transform: translateX(-50%);
+ border: none;
+ padding: 80px 20px;
+ border-radius: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 0;
+ justify-content: center;
+ background: #0e2036;
+ gap: 30px;
}
+
.yacht-calendar-switcher-label {
- // font-size: 14px;
- // font-weight: 700;
- // color: #021526;
- font-family: 'DM Sans', Sans-serif !important;
- font-size: 80px;
- font-weight: 500;
- letter-spacing: -0.04em;
- color: var(--e-global-color-7077776);
- line-height: 0.8;
+ // font-size: 14px;
+ // font-weight: 700;
+ // color: #021526;
+ font-family: 'DM Sans', Sans-serif !important;
+ font-size: 80px;
+ font-weight: 500;
+ letter-spacing: -0.04em;
+ color: var(--e-global-color-7077776);
+ line-height: 0.8;
- @media (max-width: 768px) {
- font-size: 64px;
- }
- @media (max-width: 480px) {
- font-size: 48px;
- }
+ @media (max-width: 768px) {
+ font-size: 64px;
+ }
+
+ @media (max-width: 480px) {
+ font-size: 48px;
+ }
}
+
.yacht-calendar-switcher-buttons {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
}
+
.yacht-calendar-switcher-button {
- font-family: 'JetBrains Mono', Sans-serif !important;
- font-size: 0.75rem !important;
- font-weight: 500 !important;
- text-transform: uppercase;
- line-height: 1 !important;
- letter-spacing: 0.25em !important;
- padding: 16px 32px 16px 32px !important;
- border-radius: 0 !important;
- background: #bc1834 !important;
- color: #fff !important;
- border: none !important;
- cursor: pointer !important;
+ font-family: 'JetBrains Mono', Sans-serif !important;
+ font-size: 0.75rem !important;
+ font-weight: 500 !important;
+ text-transform: uppercase;
+ line-height: 1 !important;
+ letter-spacing: 0.25em !important;
+ padding: 16px 32px 16px 32px !important;
+ border-radius: 0 !important;
+ background: #bc1834 !important;
+ color: #fff !important;
+ border: none !important;
+ cursor: pointer !important;
- &:hover {
- background: #a9000c !important;
- }
- // display: inline-flex;
- // align-items: center;
- // padding: 9px 14px;
- // border: 1px solid #c8d4e3;
- // border-radius: 999px;
- // background: #fff;
- // color: #14324a;
- // font-size: 14px;
- // font-weight: 600;
- // line-height: 1.2;
- // cursor: pointer;
- // transition: background-color 0.2s ease, color 0.2s ease,
- // border-color 0.2s ease, transform 0.2s ease;
- // &:hover {
- // border-color: #bc1834;
- // color: #bc1834;
- // outline: none;
- // transform: translateY(-1px);
- // }
- // &:focus {
- // border-color: #bc1834;
- // color: #bc1834;
- // outline: none;
- // transform: translateY(-1px);
- // }
+ &:hover {
+ background: #a9000c !important;
+ }
+
+ // display: inline-flex;
+ // align-items: center;
+ // padding: 9px 14px;
+ // border: 1px solid #c8d4e3;
+ // border-radius: 999px;
+ // background: #fff;
+ // color: #14324a;
+ // font-size: 14px;
+ // font-weight: 600;
+ // line-height: 1.2;
+ // cursor: pointer;
+ // transition: background-color 0.2s ease, color 0.2s ease,
+ // border-color 0.2s ease, transform 0.2s ease;
+ // &:hover {
+ // border-color: #bc1834;
+ // color: #bc1834;
+ // outline: none;
+ // transform: translateY(-1px);
+ // }
+ // &:focus {
+ // border-color: #bc1834;
+ // color: #bc1834;
+ // outline: none;
+ // transform: translateY(-1px);
+ // }
}
+
.yacht-calendar-switcher-button.is-active {
- background: #bc1834;
- border-color: #bc1834;
- color: #fff;
- box-shadow: 0 8px 18px rgba(188, 24, 52, 0.18);
+ background: #bc1834;
+ border-color: #bc1834;
+ color: #fff;
+ box-shadow: 0 8px 18px rgba(188, 24, 52, 0.18);
}
+
.yacht-calendar-header {
- margin-bottom: 30px;
+ margin-bottom: 30px;
}
+
.yacht-calendar-title {
- font-size: 28px;
- font-weight: 700;
- color: #021526;
- margin: 0 0 15px 0;
+ font-size: 28px;
+ font-weight: 700;
+ color: #021526;
+ margin: 0 0 15px 0;
}
+
.yacht-calendar-description {
- color: #666;
- font-size: 16px;
- line-height: 1.6;
+ color: #666;
+ font-size: 16px;
+ line-height: 1.6;
}
+
.yacht-calendar-instructions {
- margin: 0 0 30px 0;
- padding: 12px 14px;
+ margin: 0 0 30px 0;
+ padding: 12px 14px;
- color: #fff;
- border-left: 1px solid red;
- background: #d40924;
- border: none;
- border-radius: 0;
+ color: #fff;
+ border-left: 1px solid red;
+ background: #d40924;
+ border: none;
+ border-radius: 0;
- p {
- margin: 0;
- font-family: 'Inter Tight', Sans-serif;
- font-size: 1rem;
- font-weight: 400;
- }
+ p {
+ margin: 0;
+ font-family: 'Inter Tight', Sans-serif;
+ font-size: 1rem;
+ font-weight: 400;
+ }
}
+
.yacht-calendar-legend {
- display: flex;
- flex-wrap: wrap;
- gap: 10px 16px;
- align-items: center;
- margin: 0 0 18px 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px 16px;
+ align-items: center;
+ margin: 0 0 18px 0;
}
+
.yacht-legend-item {
- display: inline-flex;
- align-items: center;
- gap: 8px;
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
- color: #fff;
- font-family: 'Roboto', Sans-serif;
- font-size: 15px;
- font-weight: 300;
+ color: #fff;
+ font-family: 'Roboto', Sans-serif;
+ font-size: 15px;
+ font-weight: 300;
}
+
.yacht-legend-swatch {
- width: 16px;
- height: 16px;
- border-radius: 4px;
- border: 1px solid rgba(0, 0, 0, 0.2);
+ width: 16px;
+ height: 16px;
+ border-radius: 4px;
+ border: 1px solid rgba(0, 0, 0, 0.2);
}
+
.yacht-legend-swatch-past {
- background: #d0d5dd;
+ background: #d0d5dd;
}
+
.yacht-calendar {
- margin-bottom: 30px;
- background: rgba(255, 255, 255, 0.1) f;
- border-radius: 8px;
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
- padding: 20px;
- .fc {
- font-family: inherit;
- }
- .fc-button-primary {
- background: #bc1834;
- border-color: #bc1834;
- text-transform: uppercase;
- font-weight: 600;
- font-size: 13px;
- padding: 8px 16px;
- &:hover {
- background: #021526;
- border-color: #021526;
- }
- &:not(:disabled) {
- &:active {
- background: #021526;
- border-color: #021526;
- }
- }
- &:not(:disabled).fc-button-active {
- background: #021526;
- border-color: #021526;
- }
- }
- .fc-daygrid-day.fc-day-past {
- background: #f5f5f5;
- opacity: 1;
+ margin-bottom: 30px;
+ background: rgba(255, 255, 255, 0.1) f;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
+ padding: 20px;
- .fc-daygrid-day-number {
- color: #6c757d;
- }
- }
- .fc-daygrid-day-number,
- a.fc-daygrid-day-number {
- color: #021526 !important;
- font-weight: 600;
- }
- .fc-daygrid-day {
- &:hover {
- background: #f8f9fa;
- }
- }
- .fc-highlight {
- background: rgba(188, 24, 52, 0.1) !important;
- }
- .fc-daygrid-day-top {
- display: flex;
- justify-content: center;
- align-items: center;
- padding: 5px;
- }
- .fc-daygrid-day-number {
- padding: 4px 6px;
- min-width: 28px;
- text-align: center;
- display: inline-block;
- font-size: 14px;
- line-height: 1.2;
- }
- .fc-daygrid-day-frame {
- min-height: 80px;
- display: flex;
- flex-direction: column;
- position: relative;
- }
- .fc-bg-event {
- opacity: 0.78 !important;
- }
- .fc-bg-event.yacht-day-available {
- opacity: 0.66 !important;
- }
- .fc-bg-event.yacht-day-booked {
- opacity: 0.92 !important;
- }
- .fc-bg-event.yacht-day-blocked {
- opacity: 0.92 !important;
- }
- // Half-day rendering for first / last day of a booking or blockade.
- // Skos 45°. Pierwszy dzień: trójkąt bottom-left = wolny, top-right = zajęty (odbiór po południu).
- // Ostatni dzień: trójkąt top-left = zajęty, bottom-right = wolny (zwrot rano).
- .fc-bg-event.yacht-day-booked-start,
- .fc-bg-event.yacht-day-blocked-start {
- background: linear-gradient(
- 135deg,
- var(--yacht-available-bg, #f5f9ff) 0%,
- var(--yacht-available-bg, #f5f9ff) 50%,
- var(--yacht-booked-bg, #bc1834) 50%,
- var(--yacht-booked-bg, #bc1834) 100%
- ) !important;
- opacity: 0.92 !important;
- }
- .fc-bg-event.yacht-day-booked-end,
- .fc-bg-event.yacht-day-blocked-end {
- background: linear-gradient(
- 135deg,
- var(--yacht-booked-bg, #bc1834) 0%,
- var(--yacht-booked-bg, #bc1834) 50%,
- var(--yacht-available-bg, #f5f9ff) 50%,
- var(--yacht-available-bg, #f5f9ff) 100%
- ) !important;
- opacity: 0.92 !important;
- }
+ .fc {
+ font-family: inherit;
+ }
+
+ .fc-button-primary {
+ background: #bc1834;
+ border-color: #bc1834;
+ text-transform: uppercase;
+ font-weight: 600;
+ font-size: 13px;
+ padding: 8px 16px;
+
+ &:hover {
+ background: #021526;
+ border-color: #021526;
+ }
+
+ &:not(:disabled) {
+ &:active {
+ background: #021526;
+ border-color: #021526;
+ }
+ }
+
+ &:not(:disabled).fc-button-active {
+ background: #021526;
+ border-color: #021526;
+ }
+ }
+
+ .fc-daygrid-day.fc-day-past {
+ background: #f5f5f5;
+ opacity: 1;
+
+ .fc-daygrid-day-number {
+ color: #6c757d;
+ }
+ }
+
+ .fc-daygrid-day-number,
+ a.fc-daygrid-day-number {
+ color: #021526 !important;
+ font-weight: 600;
+ }
+
+ .fc-daygrid-day {
+ &:hover {
+ background: #f8f9fa;
+ }
+ }
+
+ .fc-highlight {
+ background: rgba(188, 24, 52, 0.1) !important;
+ }
+
+ .fc-daygrid-day-top {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 5px;
+ }
+
+ .fc-daygrid-day-number {
+ padding: 4px 6px;
+ min-width: 28px;
+ text-align: center;
+ display: inline-block;
+ font-size: 14px;
+ line-height: 1.2;
+ }
+
+ .fc-daygrid-day-frame {
+ min-height: 80px;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ }
+
+ .fc-bg-event {
+ opacity: 0.78 !important;
+ }
+
+ .fc-bg-event.yacht-day-available {
+ opacity: 0.66 !important;
+ }
+
+ .fc-bg-event.yacht-day-booked {
+ opacity: 0.92 !important;
+ }
+
+ .fc-bg-event.yacht-day-blocked {
+ opacity: 0.92 !important;
+ }
+
+ // Half-day rendering for first / last day of a booking or blockade.
+ // Skos 45°. Pierwszy dzień: trójkąt bottom-left = wolny, top-right = zajęty (odbiór po południu).
+ // Ostatni dzień: trójkąt top-left = zajęty, bottom-right = wolny (zwrot rano).
+ .fc-bg-event.yacht-day-booked-start,
+ .fc-bg-event.yacht-day-blocked-start {
+ background: linear-gradient(135deg,
+ var(--yacht-available-bg, #f5f9ff) 0%,
+ var(--yacht-available-bg, #f5f9ff) 50%,
+ var(--yacht-booked-bg, #bc1834) 50%,
+ var(--yacht-booked-bg, #bc1834) 100%) !important;
+ opacity: 0.92 !important;
+ }
+
+ .fc-bg-event.yacht-day-booked-end,
+ .fc-bg-event.yacht-day-blocked-end {
+ background: linear-gradient(135deg,
+ var(--yacht-booked-bg, #bc1834) 0%,
+ var(--yacht-booked-bg, #bc1834) 50%,
+ var(--yacht-available-bg, #f5f9ff) 50%,
+ var(--yacht-available-bg, #f5f9ff) 100%) !important;
+ opacity: 0.92 !important;
+ }
}
+
.yacht-day-available {
- cursor: pointer;
+ cursor: pointer;
}
-.yacht-day-booked {
- cursor: not-allowed;
-}
-.yacht-day-blocked {
- cursor: not-allowed;
-}
-.yacht-booking-form-container {
- background: #f9f9f9;
- padding: 30px;
- border-radius: 8px;
- margin-top: 30px;
- border: 1px solid #e0e0e0;
- h4 {
- margin: 0 0 25px 0;
- font-size: 22px;
- font-weight: 700;
- color: #021526;
- }
-}
-.yacht-booking-form {
- .form-row {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 20px;
- margin-bottom: 20px;
- }
- .form-field {
- margin-bottom: 20px;
- }
- label {
- display: block;
- font-weight: 600;
- margin-bottom: 8px;
- color: #333;
- font-size: 14px;
- .required {
- color: #bc1834;
- margin-left: 2px;
- }
- }
- input[type='text'] {
- width: 100%;
- padding: 12px 15px;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 16px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: #fff;
- box-sizing: border-box;
- }
- input[type='email'] {
- width: 100%;
- padding: 12px 15px;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 16px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: #fff;
- box-sizing: border-box;
- }
- input[type='tel'] {
- width: 100%;
- padding: 12px 15px;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 16px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: #fff;
- box-sizing: border-box;
- }
- input[type='date'] {
- width: 100%;
- padding: 12px 15px;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 16px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: #fff;
- box-sizing: border-box;
- }
- input {
- &:focus {
- outline: none;
- border-color: #bc1834;
- box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.1);
- }
- &:read-only {
- background: #f5f5f5;
- cursor: not-allowed;
- }
- }
- .form-actions {
- margin-top: 25px;
- }
-}
-.booking-terms {
- margin-top: 18px;
- font-size: 14px;
- line-height: 1.5;
- color: #333;
- a {
- color: #bc1834;
- text-decoration: underline;
- }
-}
-.yacht-booking-submit {
- font-family: 'JetBrains Mono', Sans-serif !important;
- font-size: 0.75rem !important;
- font-weight: 500 !important;
- text-transform: uppercase;
- line-height: 1 !important;
- letter-spacing: 0.25em !important;
- padding: 16px 32px 16px 32px !important;
- border-radius: 0 !important;
- background: #bc1834 !important;
- color: #fff !important;
- border: none !important;
- cursor: pointer !important;
- transition: all 0.3s ease;
- width: 100%;
- &:hover {
- background: #a9000c !important;
- }
- &:disabled {
- background: #ccc;
- cursor: not-allowed;
- transform: none;
- box-shadow: none;
- }
+.yacht-day-booked {
+ cursor: not-allowed;
}
+
+.yacht-day-blocked {
+ cursor: not-allowed;
+}
+
+.yacht-booking-form-container {
+ background: #f9f9f9;
+ padding: 30px;
+ border-radius: 8px;
+ margin-top: 30px;
+ border: 1px solid #e0e0e0;
+
+ h4 {
+ margin: 0 0 25px 0;
+ font-size: 22px;
+ font-weight: 700;
+ color: #021526;
+ }
+}
+
+.yacht-booking-form {
+ .form-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 20px;
+ margin-bottom: 20px;
+ }
+
+ .form-field {
+ margin-bottom: 20px;
+ }
+
+ label {
+ display: block;
+ font-weight: 600;
+ margin-bottom: 8px;
+ color: #333;
+ font-size: 14px;
+
+ .required {
+ color: #bc1834;
+ margin-left: 2px;
+ }
+ }
+
+ input[type='text'] {
+ width: 100%;
+ padding: 12px 15px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 16px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: #fff;
+ box-sizing: border-box;
+ }
+
+ input[type='email'] {
+ width: 100%;
+ padding: 12px 15px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 16px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: #fff;
+ box-sizing: border-box;
+ }
+
+ input[type='tel'] {
+ width: 100%;
+ padding: 12px 15px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 16px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: #fff;
+ box-sizing: border-box;
+ }
+
+ input[type='date'] {
+ width: 100%;
+ padding: 12px 15px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 16px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: #fff;
+ box-sizing: border-box;
+ }
+
+ input {
+ &:focus {
+ outline: none;
+ border-color: #bc1834;
+ box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.1);
+ }
+
+ &:read-only {
+ background: #f5f5f5;
+ cursor: not-allowed;
+ }
+ }
+
+ .form-actions {
+ margin-top: 25px;
+ }
+}
+
+.booking-terms {
+ margin-top: 18px;
+ font-size: 14px;
+ line-height: 1.5;
+ color: #333;
+
+ a {
+ color: #bc1834;
+ text-decoration: underline;
+ }
+}
+
+.yacht-booking-submit {
+ font-family: 'JetBrains Mono', Sans-serif !important;
+ font-size: 0.75rem !important;
+ font-weight: 500 !important;
+ text-transform: uppercase;
+ line-height: 1 !important;
+ letter-spacing: 0.25em !important;
+ padding: 16px 32px 16px 32px !important;
+ border-radius: 0 !important;
+ background: #bc1834 !important;
+ color: #fff !important;
+ border: none !important;
+ cursor: pointer !important;
+ transition: all 0.3s ease;
+ width: 100%;
+
+ &:hover {
+ background: #a9000c !important;
+ }
+
+ &:disabled {
+ background: #ccc;
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+ }
+}
+
.yacht-booking-response {
- margin-top: 20px;
+ margin-top: 20px;
}
+
.booking-success {
- padding: 15px;
- border-radius: 4px;
- font-size: 15px;
- line-height: 1.5;
- strong {
- display: block;
- margin-bottom: 5px;
- }
+ padding: 15px;
+ border-radius: 4px;
+ font-size: 15px;
+ line-height: 1.5;
+
+ strong {
+ display: block;
+ margin-bottom: 5px;
+ }
}
+
.booking-error {
- padding: 15px;
- border-radius: 4px;
- font-size: 15px;
- line-height: 1.5;
- strong {
- display: block;
- margin-bottom: 5px;
- }
+ padding: 15px;
+ border-radius: 4px;
+ font-size: 15px;
+ line-height: 1.5;
+
+ strong {
+ display: block;
+ margin-bottom: 5px;
+ }
}
+
.yacht-calendar-error {
- padding: 20px;
- border-radius: 4px;
- margin-bottom: 20px;
- p {
- margin: 0;
- line-height: 1.5;
- }
+ padding: 20px;
+ border-radius: 4px;
+ margin-bottom: 20px;
+
+ p {
+ margin: 0;
+ line-height: 1.5;
+ }
}
+
.yacht-calendar-notice {
- padding: 20px;
- border-radius: 4px;
- margin-bottom: 20px;
- p {
- margin: 0;
- line-height: 1.5;
- }
+ padding: 20px;
+ border-radius: 4px;
+ margin-bottom: 20px;
+
+ p {
+ margin: 0;
+ line-height: 1.5;
+ }
}
+
.yacht-calendar-view-only {
- max-width: 1200px;
- padding: 15px 15px 0 15px;
- margin-bottom: 0;
- .yacht-calendar-header {
- margin-bottom: 15px;
- }
- .yacht-calendar-title {
- font-size: 22px;
- margin-bottom: 10px;
- }
- .yacht-calendar-instructions {
- margin-bottom: 30px;
- padding: 8px 12px;
- font-size: 13px;
- }
- .yacht-calendar-legend {
- margin-bottom: 10px;
- font-size: 13px;
- }
- .yacht-calendar {
- padding: 10px;
- margin-bottom: 0;
- height: auto !important;
- overflow: visible;
- }
- .fc-daygrid-day-frame {
- min-height: 36px;
- }
- .fc-daygrid-day-top {
- padding: 2px;
- }
- .fc-daygrid-day-number {
- padding: 2px 4px;
- min-width: 22px;
- font-size: 12px;
- }
- .fc-col-header-cell {
- font-size: 12px;
- padding: 4px 0;
- }
- .fc-button {
- font-size: 11px !important;
- padding: 5px 10px !important;
- }
- .fc-toolbar-title {
- font-size: 16px !important;
- }
+ max-width: 1200px;
+ padding: 15px 15px 0 15px;
+ margin-bottom: 0;
+
+ .yacht-calendar-header {
+ margin-bottom: 15px;
+ }
+
+ .yacht-calendar-title {
+ font-size: 22px;
+ margin-bottom: 10px;
+ }
+
+ .yacht-calendar-instructions {
+ margin-bottom: 30px;
+ padding: 8px 12px;
+ font-size: 13px;
+ }
+
+ .yacht-calendar-legend {
+ margin-bottom: 10px;
+ font-size: 13px;
+ }
+
+ .yacht-calendar {
+ padding: 10px;
+ margin-bottom: 0;
+ height: auto !important;
+ overflow: visible;
+ }
+
+ .fc-daygrid-day-frame {
+ min-height: 36px;
+ }
+
+ .fc-daygrid-day-top {
+ padding: 2px;
+ }
+
+ .fc-daygrid-day-number {
+ padding: 2px 4px;
+ min-width: 22px;
+ font-size: 12px;
+ }
+
+ .fc-col-header-cell {
+ font-size: 12px;
+ padding: 4px 0;
+ }
+
+ .fc-button {
+ font-size: 11px !important;
+ padding: 5px 10px !important;
+ }
+
+ .fc-toolbar-title {
+ font-size: 16px !important;
+ }
}
+
.yacht-inquiry-layout {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 24px;
- align-items: start;
- margin-bottom: 30px;
+ display: grid;
+ grid-template-columns: 2fr 1fr;
+ gap: 24px;
+ align-items: start;
+ margin-bottom: 30px;
}
+
.yacht-inquiry-form-container {
- background: #021526;
- padding: 24px;
- border-radius: 8px;
- border: none;
- h4 {
- margin: 0 0 8px 0;
- font-size: 20px;
- font-weight: 700;
- color: #fff;
- }
+ background: #021526;
+ border-radius: 8px;
+ border: none;
+
+ h4 {
+ margin: 0 0 8px 0;
+ font-size: 20px;
+ font-weight: 700;
+ color: #fff;
+ }
}
+
.yacht-inquiry-desc {
- margin: 0 0 18px 0;
- color: rgba(255, 255, 255, 0.7);
- font-size: 14px;
- line-height: 1.5;
+ margin: 0 0 18px 0;
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 14px;
+ line-height: 1.5;
}
+
.yacht-inquiry-form {
- .form-field {
- margin-bottom: 14px;
- }
- label {
- display: block;
- font-weight: 600;
- margin-bottom: 5px;
- color: rgba(255, 255, 255, 0.9);
- font-size: 13px;
- .required {
- color: #ff6b6b;
- margin-left: 2px;
- }
- }
- input[type='text'] {
- width: 100%;
- padding: 10px 12px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 4px;
- font-size: 14px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: rgba(255, 255, 255, 0.1);
- color: #fff;
- box-sizing: border-box;
- font-family: inherit;
- }
- input[type='email'] {
- width: 100%;
- padding: 10px 12px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 4px;
- font-size: 14px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: rgba(255, 255, 255, 0.1);
- color: #fff;
- box-sizing: border-box;
- font-family: inherit;
- }
- input[type='tel'] {
- width: 100%;
- padding: 10px 12px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 4px;
- font-size: 14px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: rgba(255, 255, 255, 0.1);
- color: #fff;
- box-sizing: border-box;
- font-family: inherit;
- }
- textarea {
- width: 100%;
- padding: 10px 12px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 4px;
- font-size: 14px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- background: rgba(255, 255, 255, 0.1);
- color: #fff;
- box-sizing: border-box;
- font-family: inherit;
- resize: vertical;
- min-height: 60px;
- &::placeholder {
- color: rgba(255, 255, 255, 0.4);
- }
- &:focus {
- outline: none;
- border-color: #bc1834;
- box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);
- background: rgba(255, 255, 255, 0.15);
- }
- }
- input {
- &::placeholder {
- color: rgba(255, 255, 255, 0.4);
- }
- &:focus {
- outline: none;
- border-color: #bc1834;
- box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);
- background: rgba(255, 255, 255, 0.15);
- }
- }
- .form-actions {
- margin-top: 18px;
- }
- .booking-terms {
- color: rgba(255, 255, 255, 0.6);
- font-size: 13px;
- a {
- color: rgba(255, 255, 255, 0.85);
- }
- }
- .yacht-booking-submit {
- background: #bc1834;
- border-color: #bc1834;
- color: #fff;
- &:hover {
- background: #fff;
- color: #021526;
- }
- }
+ .form-field {
+ margin-bottom: 14px;
+ }
+
+ label {
+ display: block;
+ font-weight: 600;
+ margin-bottom: 5px;
+ color: rgba(255, 255, 255, 0.9);
+ font-size: 13px;
+
+ .required {
+ color: #ff6b6b;
+ margin-left: 2px;
+ }
+ }
+
+ input[type='text'] {
+ width: 100%;
+ padding: 10px 12px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ font-size: 14px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: rgba(255, 255, 255, 0.1);
+ color: #fff;
+ box-sizing: border-box;
+ font-family: inherit;
+ }
+
+ input[type='email'] {
+ width: 100%;
+ padding: 10px 12px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ font-size: 14px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: rgba(255, 255, 255, 0.1);
+ color: #fff;
+ box-sizing: border-box;
+ font-family: inherit;
+ }
+
+ input[type='tel'] {
+ width: 100%;
+ padding: 10px 12px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ font-size: 14px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: rgba(255, 255, 255, 0.1);
+ color: #fff;
+ box-sizing: border-box;
+ font-family: inherit;
+ }
+
+ textarea {
+ width: 100%;
+ padding: 10px 12px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 4px;
+ font-size: 14px;
+ transition: border-color 0.3s ease, box-shadow 0.3s ease;
+ background: rgba(255, 255, 255, 0.1);
+ color: #fff;
+ box-sizing: border-box;
+ font-family: inherit;
+ resize: vertical;
+ min-height: 60px;
+
+ &::placeholder {
+ color: rgba(255, 255, 255, 0.4);
+ }
+
+ &:focus {
+ outline: none;
+ border-color: #bc1834;
+ box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);
+ background: rgba(255, 255, 255, 0.15);
+ }
+ }
+
+ input {
+ &::placeholder {
+ color: rgba(255, 255, 255, 0.4);
+ }
+
+ &:focus {
+ outline: none;
+ border-color: #bc1834;
+ box-shadow: 0 0 0 3px rgba(188, 24, 52, 0.3);
+ background: rgba(255, 255, 255, 0.15);
+ }
+ }
+
+ .form-actions {
+ margin-top: 18px;
+ }
+
+ .booking-terms {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 13px;
+
+ a {
+ color: rgba(255, 255, 255, 0.85);
+ }
+ }
+
+ .yacht-booking-submit {
+ background: #bc1834;
+ border-color: #bc1834;
+ color: #fff;
+
+ &:hover {
+ background: #fff;
+ color: #021526;
+ }
+ }
}
+
.yacht-inquiry-response {
- margin-top: 15px;
+ margin-top: 15px;
}
+
@media (max-width: 992px) {
- .yacht-calendar-title {
- font-size: 24px;
- }
- .yacht-calendar {
- padding: 15px;
- }
- .yacht-inquiry-layout {
- grid-template-columns: 1fr;
- }
+ .yacht-calendar-title {
+ font-size: 24px;
+ }
+
+ .yacht-calendar {
+ padding: 15px;
+ }
+
+ .yacht-inquiry-layout {
+ grid-template-columns: 1fr;
+ }
}
+
@media (max-width: 768px) {
- .yacht-inquiry-form-container {
- padding: 18px;
- }
- .yacht-calendar-title {
- font-size: 22px;
- }
- .yacht-calendar {
- padding: 10px;
- .fc-toolbar {
- flex-direction: column;
- gap: 10px;
- }
- .fc-toolbar-chunk {
- display: flex;
- justify-content: center;
- width: 100%;
- }
- .fc-button {
- font-size: 12px;
- padding: 6px 12px;
- }
- }
- .yacht-calendar-legend {
- gap: 8px 12px;
- }
- .yacht-booking-form-container {
- padding: 20px;
- }
- .yacht-booking-form {
- .form-row {
- grid-template-columns: 1fr;
- gap: 0;
- }
- }
+
+ .yacht-calendar-title {
+ font-size: 22px;
+ }
+
+ .yacht-calendar {
+ padding: 10px;
+
+ .fc-toolbar {
+ flex-direction: column;
+ gap: 10px;
+ }
+
+ .fc-toolbar-chunk {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ }
+
+ .fc-button {
+ font-size: 12px;
+ padding: 6px 12px;
+ }
+ }
+
+ .yacht-calendar-legend {
+ gap: 8px 12px;
+ }
+
+ .yacht-booking-form-container {
+ padding: 20px;
+ }
+
+ .yacht-booking-form {
+ .form-row {
+ grid-template-columns: 1fr;
+ gap: 0;
+ }
+ }
}
+
@media (max-width: 480px) {
- .yacht-calendar-switcher-button {
- width: 100%;
- justify-content: center;
- }
- .yacht-calendar-title {
- font-size: 20px;
- }
- .yacht-booking-form-container {
- padding: 15px;
- }
- .yacht-booking-form {
- input[type='text'] {
- font-size: 14px;
- padding: 10px 12px;
- }
- input[type='email'] {
- font-size: 14px;
- padding: 10px 12px;
- }
- input[type='tel'] {
- font-size: 14px;
- padding: 10px 12px;
- }
- }
- .yacht-booking-submit {
- padding: 12px 20px;
- font-size: 14px;
- }
+ .yacht-calendar-switcher-button {
+ width: 100%;
+ justify-content: center;
+ }
+
+ .yacht-calendar-title {
+ font-size: 20px;
+ }
+
+ .yacht-booking-form-container {
+ padding: 15px;
+ }
+
+ .yacht-booking-form {
+ input[type='text'] {
+ font-size: 14px;
+ padding: 10px 12px;
+ }
+
+ input[type='email'] {
+ font-size: 14px;
+ padding: 10px 12px;
+ }
+
+ input[type='tel'] {
+ font-size: 14px;
+ padding: 10px 12px;
+ }
+ }
+
+ .yacht-booking-submit {
+ padding: 12px 20px;
+ font-size: 14px;
+ }
}
body a:not([href]):not([tabindex]),
body a:not([href]):not([tabindex]):focus,
body a:not([href]):not([tabindex]):hover {
- color: #fff;
+ color: #fff;
}
body .fc .fc-day-other .fc-daygrid-day-top {
- opacity: 1;
+ opacity: 1;
}
.yacht-calendar {
- --fc-border-color: #0e2036;
+ --fc-border-color: #0e2036;
- .fc {
- --fc-border-color: #0e2036;
- }
- .fc-theme-standard td,
- .fc-theme-standard th,
- .fc-theme-standard .fc-scrollgrid,
- .fc-scrollgrid,
- .fc-scrollgrid-section > *,
- .fc-daygrid-day,
- .fc-col-header-cell {
- border-color: #0e2036 !important;
- }
- .fc-col-header-cell {
- background: #0e2036;
- color: #fff;
- }
- .fc-col-header-cell .fc-col-header-cell-cushion {
- color: #fff;
- font-weight: 600;
- padding: 8px 4px;
- }
+ .fc {
+ --fc-border-color: #0e2036;
+ }
+
+ .fc-theme-standard td,
+ .fc-theme-standard th,
+ .fc-theme-standard .fc-scrollgrid,
+ .fc-scrollgrid,
+ .fc-scrollgrid-section>*,
+ .fc-daygrid-day,
+ .fc-col-header-cell {
+ border-color: #0e2036 !important;
+ }
+
+ .fc-col-header-cell {
+ background: #0e2036;
+ color: #fff;
+ }
+
+ .fc-col-header-cell .fc-col-header-cell-cushion {
+ color: #fff;
+ font-weight: 600;
+ padding: 8px 4px;
+ }
}
table {
- margin-bottom: 0 !important;
-}
+ margin-bottom: 0 !important;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php b/wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php
index 9c5a5e9..03321f9 100644
--- a/wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php
+++ b/wp-content/plugins/yacht-booking-system/frontend/class-calendar-widget-all.php
@@ -167,19 +167,18 @@ class Calendar_All_View {
+
+ ID ] ) ? $color_map[ $yacht->ID ] : $global_color; ?>
+
+
+ post_title ); ?>
+
+
-
+
-
-
- ID ] ) ? $color_map[ $yacht->ID ] : $global_color; ?>
-
-
- post_title ); ?>
-
-
diff --git a/wp-content/plugins/yacht-booking-system/includes/class-yacht-booking.php b/wp-content/plugins/yacht-booking-system/includes/class-yacht-booking.php
index 799cad2..fb56a67 100644
--- a/wp-content/plugins/yacht-booking-system/includes/class-yacht-booking.php
+++ b/wp-content/plugins/yacht-booking-system/includes/class-yacht-booking.php
@@ -218,6 +218,16 @@ class Yacht_Booking {
YACHT_BOOKING_VERSION
);
+ // WP color picker on yacht edit form.
+ if ( isset( $_GET['page'] ) && 'yacht-bookings-add-yacht' === $_GET['page'] ) {
+ wp_enqueue_style( 'wp-color-picker' );
+ wp_enqueue_script( 'wp-color-picker' );
+ wp_add_inline_script(
+ 'wp-color-picker',
+ 'jQuery(function($){ $(".yacht-color-picker").wpColorPicker(); });'
+ );
+ }
+
wp_enqueue_script(
'yacht-booking-admin',
YACHT_BOOKING_PLUGIN_URL . 'admin/assets/js/admin.js',
diff --git a/wp-content/plugins/yacht-booking-system/includes/class-yacht.php b/wp-content/plugins/yacht-booking-system/includes/class-yacht.php
index ca406c7..9894c40 100644
--- a/wp-content/plugins/yacht-booking-system/includes/class-yacht.php
+++ b/wp-content/plugins/yacht-booking-system/includes/class-yacht.php
@@ -152,4 +152,37 @@ class Yacht {
public static function update_features( $yacht_id, $features ) {
update_post_meta( $yacht_id, '_yacht_features', is_array( $features ) ? $features : array() );
}
+
+ /**
+ * Get admin-selected yacht color for the aggregated calendar.
+ *
+ * Returns sanitized hex (#rrggbb, lowercase) or '' when not set.
+ *
+ * @param int $yacht_id Yacht post ID.
+ * @return string
+ */
+ public static function get_color( $yacht_id ) {
+ $value = (string) get_post_meta( $yacht_id, '_yacht_color', true );
+ if ( '' === $value ) {
+ return '';
+ }
+ return preg_match( '/^#[0-9a-f]{6}$/i', $value ) ? strtolower( $value ) : '';
+ }
+
+ /**
+ * Update yacht color. Empty value removes the meta (fallback to palette).
+ *
+ * @param int $yacht_id Yacht post ID.
+ * @param string $color Hex color (#rrggbb) or empty string.
+ */
+ public static function update_color( $yacht_id, $color ) {
+ $color = trim( (string) $color );
+ if ( '' === $color ) {
+ delete_post_meta( $yacht_id, '_yacht_color' );
+ return;
+ }
+ if ( preg_match( '/^#[0-9a-f]{6}$/i', $color ) ) {
+ update_post_meta( $yacht_id, '_yacht_color', strtolower( $color ) );
+ }
+ }
}