diff --git a/app/Services/MonthlyReportService.php b/app/Services/MonthlyReportService.php index 63ca74b..069e99f 100644 --- a/app/Services/MonthlyReportService.php +++ b/app/Services/MonthlyReportService.php @@ -191,7 +191,7 @@ class MonthlyReportService ], 'datasets' => [[ 'data' => [$free, $paid], - 'backgroundColor' => ['#8AB357', '#A5C87A'], + 'backgroundColor' => ['#A68966', '#C4A882'], ]], ], 'options' => [ @@ -249,8 +249,8 @@ class MonthlyReportService 'datasets' => [[ 'label' => __('report.consultations', [], $locale), 'data' => $data, - 'borderColor' => '#8AB357', - 'backgroundColor' => 'rgba(138, 179, 87, 0.1)', + 'borderColor' => '#A68966', + 'backgroundColor' => 'rgba(166, 137, 102, 0.1)', 'fill' => true, 'tension' => 0.3, ]], diff --git a/docs/stories/story-12.5-pdf-template-color-update.md b/docs/stories/story-12.5-pdf-template-color-update.md index 7ba9d64..c4238dd 100644 --- a/docs/stories/story-12.5-pdf-template-color-update.md +++ b/docs/stories/story-12.5-pdf-template-color-update.md @@ -152,13 +152,13 @@ $chartColors = [ ## Dev Checklist -- [ ] Update `users-export.blade.php` colors -- [ ] Update `consultations-export.blade.php` colors -- [ ] Update `timelines-export.blade.php` colors -- [ ] Update `monthly-report.blade.php` colors -- [ ] Update `MonthlyReportService.php` chart colors -- [ ] Review `monthly-report.blade.php` Livewire component -- [ ] Update `PdfBrandColorsTest.php` color assertions +- [x] Update `users-export.blade.php` colors +- [x] Update `consultations-export.blade.php` colors +- [x] Update `timelines-export.blade.php` colors +- [x] Update `monthly-report.blade.php` colors +- [x] Update `MonthlyReportService.php` chart colors +- [x] Review `monthly-report.blade.php` Livewire component +- [x] Update `PdfBrandColorsTest.php` color assertions - [ ] Test Users PDF export - [ ] Test Consultations PDF export - [ ] Test Timelines PDF export @@ -182,27 +182,38 @@ $chartColors = [ ## Dev Agent Record ### Status -Not Started - Ready for Implementation +Ready for Review ### Agent Model Used -(To be filled during implementation) +Claude Opus 4.5 (claude-opus-4-5-20251101) ### File List -**To be modified:** -- `resources/views/pdf/users-export.blade.php` -- `resources/views/pdf/consultations-export.blade.php` -- `resources/views/pdf/timelines-export.blade.php` -- `resources/views/pdf/monthly-report.blade.php` -- `app/Services/MonthlyReportService.php` -- `resources/views/livewire/admin/reports/monthly-report.blade.php` -- `tests/Feature/Admin/PdfBrandColorsTest.php` +**Modified:** +- `resources/views/pdf/users-export.blade.php` - Updated colors to new palette +- `resources/views/pdf/consultations-export.blade.php` - Updated colors to new palette +- `resources/views/pdf/timelines-export.blade.php` - Updated colors to new palette +- `resources/views/pdf/monthly-report.blade.php` - Updated colors to new palette +- `app/Services/MonthlyReportService.php` - Updated chart colors +- `resources/views/livewire/admin/reports/monthly-report.blade.php` - Updated TOC number badge colors +- `tests/Feature/Admin/PdfBrandColorsTest.php` - Updated color assertions ### Change Log | Date | Change | |------|--------| | 2026-01-04 | Story updated with new Dark Charcoal & Warm Gold palette | +| 2026-01-04 | Implementation complete: All PDF templates and service updated | ### Completion Notes -(To be filled during implementation) +- All 4 PDF templates updated with new color palette: + - Dark Forest Green (#2D3624) for headers and table header backgrounds + - Warm Gold (#A68966) for accent text and highlights + - Gold Light (#C4A882) for borders + - Warm Cream (#F4F1EA) for backgrounds + - Forest Green (#2D322A) for body text + - White (#FFFFFF) for table header text +- MonthlyReportService chart colors updated (pie chart and trend line) +- Livewire monthly-report component TOC badges updated +- Test file updated with new color assertions - all 6 tests pass (44 assertions) +- Manual testing of PDF exports and print preview still required diff --git a/resources/views/livewire/admin/reports/monthly-report.blade.php b/resources/views/livewire/admin/reports/monthly-report.blade.php index a747d7d..ab572f3 100644 --- a/resources/views/livewire/admin/reports/monthly-report.blade.php +++ b/resources/views/livewire/admin/reports/monthly-report.blade.php @@ -87,27 +87,27 @@ new class extends Component {{ __('report.table_of_contents') }}
- 1 + 1 {{ __('report.executive_summary') }}
- 2 + 2 {{ __('report.user_statistics') }}
- 3 + 3 {{ __('report.consultation_statistics') }}
- 4 + 4 {{ __('report.timeline_statistics') }}
- 5 + 5 {{ __('report.post_statistics') }}
- 6 + 6 {{ __('report.trends_chart') }}
diff --git a/resources/views/pdf/consultations-export.blade.php b/resources/views/pdf/consultations-export.blade.php index b540d14..53bc461 100644 --- a/resources/views/pdf/consultations-export.blade.php +++ b/resources/views/pdf/consultations-export.blade.php @@ -12,7 +12,7 @@ body { font-family: 'DejaVu Sans', sans-serif; font-size: 10px; - color: #1A1A1A; + color: #2D322A; direction: {{ $locale === 'ar' ? 'rtl' : 'ltr' }}; } @@ -22,7 +22,7 @@ left: 0; right: 0; height: 70px; - border-bottom: 3px solid #A5C87A; + border-bottom: 3px solid #C4A882; padding-bottom: 10px; } @@ -47,7 +47,7 @@ .brand-name { font-size: 22px; font-weight: bold; - color: #8AB357; + color: #2D3624; } .brand-subtitle { @@ -59,7 +59,7 @@ .report-title { font-size: 14px; font-weight: bold; - color: #8AB357; + color: #2D3624; } footer { @@ -68,7 +68,7 @@ left: 0; right: 0; height: 50px; - border-top: 2px solid #A5C87A; + border-top: 2px solid #C4A882; padding-top: 10px; font-size: 9px; color: #666; @@ -97,8 +97,8 @@ } .filters-section { - background-color: #E8E4DC; - border: 1px solid #A5C87A; + background-color: #F4F1EA; + border: 1px solid #C4A882; border-radius: 4px; padding: 10px 15px; margin-bottom: 20px; @@ -106,7 +106,7 @@ .filters-title { font-weight: bold; - color: #8AB357; + color: #A68966; margin-bottom: 5px; } @@ -118,11 +118,11 @@ .summary { margin-bottom: 15px; - color: #8AB357; + color: #2D3624; } .summary strong { - color: #8AB357; + color: #A68966; } table { @@ -132,8 +132,8 @@ } th { - background-color: #8AB357; - color: #E8E4DC; + background-color: #2D3624; + color: #FFFFFF; padding: 10px 8px; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-weight: bold; @@ -143,17 +143,17 @@ td { padding: 8px; - border-bottom: 1px solid #A5C87A; + border-bottom: 1px solid #C4A882; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-size: 9px; } tr:nth-child(even) { - background-color: #E8E4DC; + background-color: #F4F1EA; } tr:hover { - background-color: #E8E4DC; + background-color: #F4F1EA; } .status-pending { @@ -187,7 +187,7 @@ } .consultation-type { - background-color: #E8E4DC; + background-color: #F4F1EA; padding: 2px 6px; border-radius: 3px; font-size: 8px; diff --git a/resources/views/pdf/monthly-report.blade.php b/resources/views/pdf/monthly-report.blade.php index 4b4d6dc..99eac3d 100644 --- a/resources/views/pdf/monthly-report.blade.php +++ b/resources/views/pdf/monthly-report.blade.php @@ -12,7 +12,7 @@ body { font-family: 'DejaVu Sans', sans-serif; font-size: 11px; - color: #1A1A1A; + color: #2D322A; direction: {{ $locale === 'ar' ? 'rtl' : 'ltr' }}; line-height: 1.6; } @@ -23,7 +23,7 @@ left: 0; right: 0; height: 70px; - border-bottom: 3px solid #A5C87A; + border-bottom: 3px solid #C4A882; padding-bottom: 10px; } @@ -48,7 +48,7 @@ .brand-name { font-size: 24px; font-weight: bold; - color: #8AB357; + color: #2D3624; } .brand-subtitle { @@ -68,7 +68,7 @@ left: 0; right: 0; height: 50px; - border-top: 2px solid #A5C87A; + border-top: 2px solid #C4A882; padding-top: 10px; font-size: 9px; color: #666; @@ -105,7 +105,7 @@ .cover-brand { font-size: 48px; font-weight: bold; - color: #8AB357; + color: #2D3624; margin-bottom: 10px; } @@ -118,13 +118,13 @@ .cover-title { font-size: 28px; font-weight: bold; - color: #8AB357; + color: #2D3624; margin-bottom: 20px; } .cover-period { font-size: 22px; - color: #8AB357; + color: #A68966; margin-bottom: 60px; } @@ -141,8 +141,8 @@ .section-title { font-size: 18px; font-weight: bold; - color: #8AB357; - border-bottom: 2px solid #A5C87A; + color: #2D3624; + border-bottom: 2px solid #C4A882; padding-bottom: 8px; margin-bottom: 20px; margin-top: 30px; @@ -165,7 +165,7 @@ display: table-cell; width: 30px; font-weight: bold; - color: #8AB357; + color: #A68966; } .toc-title { @@ -176,7 +176,7 @@ display: table-cell; width: 40px; text-align: {{ $locale === 'ar' ? 'left' : 'right' }}; - color: #8AB357; + color: #A68966; } /* Stats Grid */ @@ -198,8 +198,8 @@ } .stat-box { - background-color: #E8E4DC; - border: 1px solid #A5C87A; + background-color: #F4F1EA; + border: 1px solid #C4A882; border-radius: 4px; padding: 15px; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; @@ -215,11 +215,11 @@ .stat-value { font-size: 24px; font-weight: bold; - color: #8AB357; + color: #2D3624; } .stat-value-gold { - color: #8AB357; + color: #A68966; } /* Data Table */ @@ -230,8 +230,8 @@ } .data-table th { - background-color: #8AB357; - color: #E8E4DC; + background-color: #2D3624; + color: #FFFFFF; padding: 10px 12px; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-weight: bold; @@ -241,18 +241,18 @@ .data-table td { padding: 10px 12px; - border-bottom: 1px solid #A5C87A; + border-bottom: 1px solid #C4A882; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; } .data-table tr:nth-child(even) { - background-color: #E8E4DC; + background-color: #F4F1EA; } /* Highlights */ .highlight-box { - background-color: #E8E4DC; - border: 1px solid #A5C87A; + background-color: #F4F1EA; + border: 1px solid #C4A882; border-radius: 4px; padding: 15px; margin-bottom: 20px; @@ -260,7 +260,7 @@ .highlight-item { padding: 5px 0; - border-bottom: 1px solid rgba(165, 200, 122, 0.5); + border-bottom: 1px solid rgba(196, 168, 130, 0.5); } .highlight-item:last-child { @@ -268,7 +268,7 @@ } .highlight-bullet { - color: #8AB357; + color: #A68966; font-weight: bold; margin-{{ $locale === 'ar' ? 'left' : 'right' }}: 8px; } @@ -294,14 +294,14 @@ margin: 20px 0; padding: 15px; background-color: #fff; - border: 1px solid #A5C87A; + border: 1px solid #C4A882; border-radius: 4px; } .chart-title { font-size: 12px; font-weight: bold; - color: #8AB357; + color: #2D3624; margin-bottom: 15px; } @@ -350,7 +350,7 @@ text-align: center; padding: 30px; color: #666; - background-color: #E8E4DC; + background-color: #F4F1EA; border-radius: 4px; } diff --git a/resources/views/pdf/timelines-export.blade.php b/resources/views/pdf/timelines-export.blade.php index b4e6ad7..b9d6654 100644 --- a/resources/views/pdf/timelines-export.blade.php +++ b/resources/views/pdf/timelines-export.blade.php @@ -12,7 +12,7 @@ body { font-family: 'DejaVu Sans', sans-serif; font-size: 10px; - color: #1A1A1A; + color: #2D322A; direction: {{ $locale === 'ar' ? 'rtl' : 'ltr' }}; } @@ -22,7 +22,7 @@ left: 0; right: 0; height: 70px; - border-bottom: 3px solid #A5C87A; + border-bottom: 3px solid #C4A882; padding-bottom: 10px; } @@ -47,7 +47,7 @@ .brand-name { font-size: 22px; font-weight: bold; - color: #8AB357; + color: #2D3624; } .brand-subtitle { @@ -59,7 +59,7 @@ .report-title { font-size: 14px; font-weight: bold; - color: #8AB357; + color: #2D3624; } footer { @@ -68,7 +68,7 @@ left: 0; right: 0; height: 50px; - border-top: 2px solid #A5C87A; + border-top: 2px solid #C4A882; padding-top: 10px; font-size: 9px; color: #666; @@ -97,8 +97,8 @@ } .filters-section { - background-color: #E8E4DC; - border: 1px solid #A5C87A; + background-color: #F4F1EA; + border: 1px solid #C4A882; border-radius: 4px; padding: 10px 15px; margin-bottom: 20px; @@ -106,7 +106,7 @@ .filters-title { font-weight: bold; - color: #8AB357; + color: #A68966; margin-bottom: 5px; } @@ -118,11 +118,11 @@ .summary { margin-bottom: 15px; - color: #8AB357; + color: #2D3624; } .summary strong { - color: #8AB357; + color: #A68966; } table { @@ -132,8 +132,8 @@ } th { - background-color: #8AB357; - color: #E8E4DC; + background-color: #2D3624; + color: #FFFFFF; padding: 10px 8px; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-weight: bold; @@ -143,13 +143,13 @@ td { padding: 8px; - border-bottom: 1px solid #A5C87A; + border-bottom: 1px solid #C4A882; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-size: 9px; } tr:nth-child(even) { - background-color: #E8E4DC; + background-color: #F4F1EA; } .status-active { @@ -163,16 +163,16 @@ } .updates-section { - background-color: #E8E4DC; + background-color: #F4F1EA; padding: 10px; margin: 5px 0; - border-{{ $locale === 'ar' ? 'right' : 'left' }}: 3px solid #8AB357; + border-{{ $locale === 'ar' ? 'right' : 'left' }}: 3px solid #A68966; } .update-entry { margin-bottom: 8px; padding-bottom: 8px; - border-bottom: 1px dashed #A5C87A; + border-bottom: 1px dashed #C4A882; } .update-entry:last-child { @@ -189,7 +189,7 @@ .update-text { font-size: 9px; - color: #1A1A1A; + color: #2D322A; } .no-data { diff --git a/resources/views/pdf/users-export.blade.php b/resources/views/pdf/users-export.blade.php index eaaf4e9..402aabe 100644 --- a/resources/views/pdf/users-export.blade.php +++ b/resources/views/pdf/users-export.blade.php @@ -12,7 +12,7 @@ body { font-family: 'DejaVu Sans', sans-serif; font-size: 10px; - color: #1A1A1A; + color: #2D322A; direction: {{ $locale === 'ar' ? 'rtl' : 'ltr' }}; } @@ -22,7 +22,7 @@ left: 0; right: 0; height: 70px; - border-bottom: 3px solid #A5C87A; + border-bottom: 3px solid #C4A882; padding-bottom: 10px; } @@ -47,7 +47,7 @@ .brand-name { font-size: 22px; font-weight: bold; - color: #8AB357; + color: #2D3624; } .brand-subtitle { @@ -59,7 +59,7 @@ .report-title { font-size: 14px; font-weight: bold; - color: #8AB357; + color: #2D3624; } footer { @@ -68,7 +68,7 @@ left: 0; right: 0; height: 50px; - border-top: 2px solid #A5C87A; + border-top: 2px solid #C4A882; padding-top: 10px; font-size: 9px; color: #666; @@ -97,8 +97,8 @@ } .filters-section { - background-color: #E8E4DC; - border: 1px solid #A5C87A; + background-color: #F4F1EA; + border: 1px solid #C4A882; border-radius: 4px; padding: 10px 15px; margin-bottom: 20px; @@ -106,7 +106,7 @@ .filters-title { font-weight: bold; - color: #8AB357; + color: #A68966; margin-bottom: 5px; } @@ -118,11 +118,11 @@ .summary { margin-bottom: 15px; - color: #8AB357; + color: #2D3624; } .summary strong { - color: #8AB357; + color: #A68966; } table { @@ -132,8 +132,8 @@ } th { - background-color: #8AB357; - color: #E8E4DC; + background-color: #2D3624; + color: #FFFFFF; padding: 10px 8px; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-weight: bold; @@ -143,17 +143,17 @@ td { padding: 8px; - border-bottom: 1px solid #A5C87A; + border-bottom: 1px solid #C4A882; text-align: {{ $locale === 'ar' ? 'right' : 'left' }}; font-size: 9px; } tr:nth-child(even) { - background-color: #E8E4DC; + background-color: #F4F1EA; } tr:hover { - background-color: #E8E4DC; + background-color: #F4F1EA; } .status-active { @@ -167,7 +167,7 @@ } .user-type { - background-color: #E8E4DC; + background-color: #F4F1EA; padding: 2px 6px; border-radius: 3px; font-size: 8px; diff --git a/tests/Feature/Admin/PdfBrandColorsTest.php b/tests/Feature/Admin/PdfBrandColorsTest.php index a673ef7..e4a23d9 100644 --- a/tests/Feature/Admin/PdfBrandColorsTest.php +++ b/tests/Feature/Admin/PdfBrandColorsTest.php @@ -4,87 +4,100 @@ // PDF Template Brand Color Tests // =========================================== // Verifies that all PDF templates use the new brand colors: -// - Olive Green: #8AB357 (primary/header background) -// - Light Olive: #A5C87A (accent/borders) -// - Light Background: #E8E4DC -// - Deep Black: #1A1A1A (text) +// - Dark Forest Green: #2D3624 (primary/header background) +// - Warm Gold: #A68966 (accent/highlight) +// - Gold Light: #C4A882 (borders/accents) +// - Warm Cream: #F4F1EA (backgrounds) +// - Forest Green: #2D322A (text) test('users-export PDF template uses new brand colors', function () { $template = file_get_contents(resource_path('views/pdf/users-export.blade.php')); - // Should contain new olive green colors - expect($template)->toContain('#8AB357'); // Olive Green - expect($template)->toContain('#A5C87A'); // Light Olive - expect($template)->toContain('#E8E4DC'); // Light Background - expect($template)->toContain('#1A1A1A'); // Deep Black text + // Should contain new Dark Forest Green and Warm Gold colors + expect($template)->toContain('#2D3624'); // Dark Forest Green + expect($template)->toContain('#A68966'); // Warm Gold + expect($template)->toContain('#C4A882'); // Gold Light + expect($template)->toContain('#F4F1EA'); // Warm Cream + expect($template)->toContain('#2D322A'); // Forest Green text // Should NOT contain old colors - expect($template)->not->toContain('#4A4A42'); // Old Charcoal - expect($template)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($template)->not->toContain('#8AB357'); // Old Olive Green + expect($template)->not->toContain('#A5C87A'); // Old Light Olive + expect($template)->not->toContain('#E8E4DC'); // Old Light Background + expect($template)->not->toContain('#1A1A1A'); // Old Deep Black }); test('consultations-export PDF template uses new brand colors', function () { $template = file_get_contents(resource_path('views/pdf/consultations-export.blade.php')); - // Should contain new olive green colors - expect($template)->toContain('#8AB357'); // Olive Green - expect($template)->toContain('#A5C87A'); // Light Olive - expect($template)->toContain('#E8E4DC'); // Light Background - expect($template)->toContain('#1A1A1A'); // Deep Black text + // Should contain new Dark Forest Green and Warm Gold colors + expect($template)->toContain('#2D3624'); // Dark Forest Green + expect($template)->toContain('#A68966'); // Warm Gold + expect($template)->toContain('#C4A882'); // Gold Light + expect($template)->toContain('#F4F1EA'); // Warm Cream + expect($template)->toContain('#2D322A'); // Forest Green text // Should NOT contain old colors - expect($template)->not->toContain('#4A4A42'); // Old Charcoal - expect($template)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($template)->not->toContain('#8AB357'); // Old Olive Green + expect($template)->not->toContain('#A5C87A'); // Old Light Olive + expect($template)->not->toContain('#E8E4DC'); // Old Light Background + expect($template)->not->toContain('#1A1A1A'); // Old Deep Black }); test('timelines-export PDF template uses new brand colors', function () { $template = file_get_contents(resource_path('views/pdf/timelines-export.blade.php')); - // Should contain new olive green colors - expect($template)->toContain('#8AB357'); // Olive Green - expect($template)->toContain('#A5C87A'); // Light Olive - expect($template)->toContain('#E8E4DC'); // Light Background - expect($template)->toContain('#1A1A1A'); // Deep Black text + // Should contain new Dark Forest Green and Warm Gold colors + expect($template)->toContain('#2D3624'); // Dark Forest Green + expect($template)->toContain('#A68966'); // Warm Gold + expect($template)->toContain('#C4A882'); // Gold Light + expect($template)->toContain('#F4F1EA'); // Warm Cream + expect($template)->toContain('#2D322A'); // Forest Green text // Should NOT contain old colors - expect($template)->not->toContain('#4A4A42'); // Old Charcoal - expect($template)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($template)->not->toContain('#8AB357'); // Old Olive Green + expect($template)->not->toContain('#A5C87A'); // Old Light Olive + expect($template)->not->toContain('#E8E4DC'); // Old Light Background + expect($template)->not->toContain('#1A1A1A'); // Old Deep Black }); test('monthly-report PDF template uses new brand colors', function () { $template = file_get_contents(resource_path('views/pdf/monthly-report.blade.php')); - // Should contain new olive green colors - expect($template)->toContain('#8AB357'); // Olive Green - expect($template)->toContain('#A5C87A'); // Light Olive - expect($template)->toContain('#E8E4DC'); // Light Background - expect($template)->toContain('#1A1A1A'); // Deep Black text + // Should contain new Dark Forest Green and Warm Gold colors + expect($template)->toContain('#2D3624'); // Dark Forest Green + expect($template)->toContain('#A68966'); // Warm Gold + expect($template)->toContain('#C4A882'); // Gold Light + expect($template)->toContain('#F4F1EA'); // Warm Cream + expect($template)->toContain('#2D322A'); // Forest Green text // Should NOT contain old colors - expect($template)->not->toContain('#4A4A42'); // Old Charcoal - expect($template)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($template)->not->toContain('#8AB357'); // Old Olive Green + expect($template)->not->toContain('#A5C87A'); // Old Light Olive + expect($template)->not->toContain('#E8E4DC'); // Old Light Background + expect($template)->not->toContain('#1A1A1A'); // Old Deep Black }); test('MonthlyReportService uses new brand colors for charts', function () { $service = file_get_contents(app_path('Services/MonthlyReportService.php')); - // Should contain new olive green colors for charts - expect($service)->toContain('#8AB357'); // Olive Green - expect($service)->toContain('#A5C87A'); // Light Olive + // Should contain new Warm Gold colors for charts + expect($service)->toContain('#A68966'); // Warm Gold + expect($service)->toContain('#C4A882'); // Gold Light // Should NOT contain old colors - expect($service)->not->toContain('#4A4A42'); // Old Charcoal - expect($service)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($service)->not->toContain('#8AB357'); // Old Olive Green + expect($service)->not->toContain('#A5C87A'); // Old Light Olive }); test('monthly-report Livewire component uses new brand colors', function () { $template = file_get_contents(resource_path('views/livewire/admin/reports/monthly-report.blade.php')); - // Should contain new olive green colors - expect($template)->toContain('#8AB357'); // Olive Green - expect($template)->toContain('#A5C87A'); // Light Olive + // Should contain new Dark Forest Green and Warm Gold colors + expect($template)->toContain('#2D3624'); // Dark Forest Green + expect($template)->toContain('#A68966'); // Warm Gold // Should NOT contain old colors - expect($template)->not->toContain('#4A4A42'); // Old Charcoal - expect($template)->not->toContain('#C9C4BA'); // Old Warm Gray + expect($template)->not->toContain('#8AB357'); // Old Olive Green + expect($template)->not->toContain('#A5C87A'); // Old Light Olive });