---
phase: 101-aged-orders-row-highlight
plan: 01
subsystem: ui
tags: [orders-list, scss, php, visual-alert]

requires:
  - phase: 44-inline-status-change
    provides: table-list component used for /orders/list

provides:
  - Wizualna flaga wiekowa na liscie zamowien (4-7+ dni)
  - Opcjonalny `_row_class` na wierszach `components/table-list.php`

affects: []

tech-stack:
  added: []
  patterns:
    - "Row-level class propagowana z controllera przez `_row_class` w danych wiersza `table-list`"

key-files:
  created: []
  modified:
    - resources/views/components/table-list.php
    - src/Modules/Orders/OrdersController.php
    - resources/scss/app.scss
    - public/assets/css/app.css

key-decisions:
  - "Wiek liczony z `ordered_at` (to pole uzywa juz sortowanie/kolumna listy)"
  - "Poziomy ramki 4..7 hardcoded, starsze niz 7 dni = poziom 7 (nie dalsza eskalacja)"
  - "Ramka realizowana przez border na <td> — kompatybilna z kolorem tla statusu"

patterns-established:
  - "Kontroler listy moze dodac `_row_class` do rekordu w danych `rows` — `table-list.php` honoruje to jako klase <tr>"

duration: ~10min
started: 2026-04-13
completed: 2026-04-13
---

# Phase 101 Plan 01: Aged Orders Row Highlight Summary

**Wiersze zamowien na `/orders/list` starszych niz 4 dni dostaja czerwona ramke o rosnacej intensywnosci (4d=jasna → 7+d=bordowa).**

## Acceptance Criteria Results

| Criterion | Status | Notes |
|---|---|---|
| AC-1: <4 dni brak ramki | Pass | `agedRowClass()` zwraca `''` dla `$ageDays < 4` |
| AC-2: 4-7 dni rosnaca intensywnosc | Pass | Klasy `order-row-aged-4..7` z 4 odcieniami czerwieni (#f8b4b4 → #991b1b) |
| AC-3: >7 dni = poziom 7 | Pass | `$level = $ageDays >= 7 ? 7 : $ageDays` |
| AC-4: Wiek liczony z `ordered_at` | Pass | `floor((time() - strtotime($orderedAt)) / 86400)` |

## Accomplishments

- Dodano mechanizm row-class w uniwersalnym `components/table-list.php` (opcjonalny, nie lamie innych list)
- OrdersController liczy wiek zamowienia i wystawia klase na wierszu
- 4 poziomy SCSS + przebudowany `public/assets/css/app.css`

## Files Created/Modified

| File | Change | Purpose |
|---|---|---|
| `resources/views/components/table-list.php` | Modified | `<tr>` honoruje `$row['_row_class']` |
| `src/Modules/Orders/OrdersController.php` | Modified | `agedRowClass()` + wpiecie w `toTableRow` |
| `resources/scss/app.scss` | Modified | Reguly `.order-row-aged-{4..7}` na `<td>` |
| `public/assets/css/app.css` | Rebuild | `npm run build:css` |

## Decisions Made

| Decision | Rationale | Impact |
|---|---|---|
| Border na `<td>` zamiast `<tr>` | `<tr>` nie rysuje borderu spolnie z `border-collapse`; trzeba na komorkach | Wizualnie spojne, kompatybilne z tlem statusow |
| Klasy `order-row-aged-N` zamiast inline style | Zgodne z CLAUDE.md (brak styli w widokach) | Styl zyje w SCSS |
| Pole `ordered_at` jako data referencyjna | Uzywane juz w kolumnie listy i sortowaniu | Zero dodatkowego I/O |

## Deviations from Plan

| Type | Count | Impact |
|---|---|---|
| Auto-fixed | 0 | - |
| Scope additions | 0 | - |
| Deferred | 0 | - |

Plan wykonany 1:1.

## Issues Encountered

None.

## Next Phase Readiness

**Ready:**
- Lista zamowien z wizualnym sygnalem zalegajacych zamowien
- Wzorzec `_row_class` dostepny dla innych list w table-list.php

**Concerns:**
- Weryfikacja wizualna pozostaje po stronie uzytkownika (manualny test w przegladarce)

**Blockers:** None

---
*Phase: 101-aged-orders-row-highlight, Plan: 01*
*Completed: 2026-04-13*
