--- phase: 01-product-variants-fix plan: 01 subsystem: ui tags: [prestashop, smarty, jquery, scss, product-variants, ajax-refresh] requires: [] provides: - Działający wariant kolorystyczny w nowym layoucie strony produktu (IP-gated `== '89.69.31.86'`) - Grid 3×1 (desktop) / 2×1 (<768 px) kafelków wariantów wg Figma 27:9867 - In-place refresh wariantu (obraz + cena + URL) bez przeładowania strony affects: - Phase 02+ — kolejne naprawy nowego layoutu (add-to-cart, konfigurator rozmiaru, odbicie, zakładki) tech-stack: added: [] patterns: - "Scoped CSS pod body#product .product-variants-data--new — izoluje nowy layout od globalnych reguł" - "Własny AJAX PS refresh (action=refresh) + manual DOM replace jako fallback gdy PS core handler nie znajduje wymaganych selektorów" - "Dwa IP-gated branche w product.tpl renderują się wzajemnie wyłącznie — duplikaty ID (np. add-to-cart-or-refresh) OK" key-files: created: - .paul/PROJECT.md - .paul/ROADMAP.md - .paul/STATE.md - .paul/phases/01-product-variants-fix/01-01-PLAN.md - .claude/memory/feedback_scss_only.md - .claude/memory/MEMORY.md modified: - themes/ayon/templates/catalog/product.tpl - themes/ayon/assets/css/custom.scss - themes/ayon/assets/js/custom.js key-decisions: - "Ręczny AJAX refresh w custom.js zamiast fake .product-actions — unika kolizji stylów ze starym layoutem" - "action=refresh (nie productrefresh) — odkryte empirycznie przez probing endpointów" - "Edytuj tylko custom.scss, nie custom.css — user ma lokalny watcher SCSS (zapisane jako feedback memory)" - "In-place update (history.pushState + manual DOM replace) zamiast full redirect — user feedback o starym layoucie" patterns-established: - "IP-gated layout switching: nowy layout pod REMOTE_ADDR == '89.69.31.86', stary dla reszty. Zmiany CSS/JS scope'owane pod .product-variants-data--new aby nie dotykać starego layoutu" - "Fallback graceful: próba in-place update → przy wyjątku/błędzie HTTP fallback na window.location.href = resp.product_url lub reload" duration: ~2h started: 2026-04-23T17:50:00Z completed: 2026-04-23T18:25:00Z --- # Phase 01 Plan 01: Product variants (nowy layout) — Summary **Wariant kolorystyczny w nowym layoucie: 3-kafelkowy grid wg Figma + klik zmienia kombinację produktu w miejscu (AJAX refresh, bez reloadu).** ## Performance | Metric | Value | |--------|-------| | Duration | ~2h | | Started | 2026-04-23T17:50:00Z | | Completed | 2026-04-23T18:25:00Z | | Tasks | 3 auto + 1 checkpoint (ok) | | Files modified | 3 source + 6 PAUL/memory meta | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Wizualny kształt bloku wariantów (3 kafelki, responsive) | Pass | Grid 3×1 desktop / 2×1 <768 px; Inter 14/25 `#8c8c8c` left-aligned; active outline `#7d6e4f`. Zgodnie z Figma 27:9867. | | AC-2: Klik zmienia wariant produktu (URL/cena/obrazy) | Pass | Test live w Playwright: klik wariant 2 → obraz `919/...` → `920/...`, URL `202-2306-...` → `202-2289-...`, bez reloadu. | | AC-3: Brak regresji w starym layoucie i innych funkcjach | Pass | Stara gałąź `!= '89.69.31.86'` nietknięta, partial `product-variants.tpl` nietknięty, istniejące handlery w custom.js (`~225`, `~619`) nietknięte, CSS scope'owany. | ## Accomplishments - Dopasowany wygląd sekcji wariantów w nowym layoucie do makiety Figma (3-kafelkowy grid z podpisami, minimalistyczny styling). - Przywrócona funkcjonalność zmiany wariantu (nowy layout nie miał `