---
phase: 82-product-title-tooltip
plan: 01
type: execute
wave: 1
depends_on: []
files_modified: [src/Modules/Orders/OrdersController.php]
autonomous: true
---

<objective>
## Goal
Dodanie natywnego tooltipa (atrybut `title`) do uciętych nazw produktów na liście zamówień, aby po najechaniu myszką wyświetlała się pełna nazwa.

## Purpose
Na liście zamówień nazwy produktów są obcinane przez `text-overflow: ellipsis`. Użytkownik nie ma możliwości zobaczenia pełnej nazwy bez wchodzenia w szczegóły zamówienia. Tooltip rozwiązuje ten problem minimalnym kosztem.

## Output
Zmodyfikowany `OrdersController::productsHtml()` — atrybut `title` na elemencie `.orders-product__name`.
</objective>

<context>
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md

## Source Files
@src/Modules/Orders/OrdersController.php (metoda productsHtml(), linia 664)
</context>

<skills>
No specialized flows required.
</skills>

<acceptance_criteria>

## AC-1: Tooltip z pełną nazwą produktu
```gherkin
Given lista zamówień z produktem o długiej nazwie uciętej przez ellipsis
When użytkownik najedzie kursorem na uciętą nazwę produktu
Then pojawia się natywny tooltip przeglądarki z pełną nazwą produktu
```

## AC-2: Brak tooltipa dla pustych nazw
```gherkin
Given produkt bez nazwy (wyświetlany jako "-")
When użytkownik najedzie kursorem na "-"
Then nie pojawia się tooltip (brak atrybutu title lub pusty)
```

</acceptance_criteria>

<tasks>

<task type="auto">
  <name>Task 1: Dodanie atrybutu title do .orders-product__name</name>
  <files>src/Modules/Orders/OrdersController.php</files>
  <action>
    W metodzie `productsHtml()`, linia 664, dodać atrybut `title` do `<div class="orders-product__name">`:

    Zmienić:
    ```php
    . '<div class="orders-product__name">' . htmlspecialchars($name !== '' ? $name : '-', ENT_QUOTES, 'UTF-8') . '</div>'
    ```

    Na:
    ```php
    . '<div class="orders-product__name"' . ($name !== '' ? ' title="' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '"' : '') . '>' . htmlspecialchars($name !== '' ? $name : '-', ENT_QUOTES, 'UTF-8') . '</div>'
    ```

    - Atrybut `title` dodawany tylko gdy nazwa nie jest pusta
    - Wartość `title` escapowana przez `htmlspecialchars` (XSS safety)
    - Nie zmieniać żadnej innej logiki metody
  </action>
  <verify>Otworzyć /orders/list, najechać na uciętą nazwę produktu — powinien pojawić się tooltip z pełną nazwą</verify>
  <done>AC-1 i AC-2 spełnione: tooltip pokazuje pełną nazwę; brak tooltipa dla pustych nazw</done>
</task>

</tasks>

<boundaries>

## DO NOT CHANGE
- resources/scss/* (styl truncacji zostaje bez zmian)
- resources/views/orders/* (widoki bez zmian)
- Logika budowania `$itemsPreview` i reszta metody `productsHtml()`

## SCOPE LIMITS
- Tylko natywny tooltip HTML (`title`), bez custom JS tooltip library
- Tylko lista zamówień — nie strona szczegółów

</boundaries>

<verification>
Before declaring plan complete:
- [ ] Atrybut `title` obecny w renderowanym HTML produktów z długą nazwą
- [ ] Brak atrybutu `title` dla produktów bez nazwy
- [ ] Brak regresji — lista zamówień renderuje się poprawnie
- [ ] Wszystkie acceptance criteria spełnione
</verification>

<success_criteria>
- Tooltip z pełną nazwą produktu widoczny po hover na liście zamówień
- Brak zmian CSS ani JS
- Brak regresji w renderowaniu listy
</success_criteria>

<output>
After completion, create `.paul/phases/82-product-title-tooltip/82-01-SUMMARY.md`
</output>
