128:     private function pageHeader($sheet, string $title, string $sub, string $darkBg = 'FF0F172A')
129:     {
130:         $sheet->mergeCells('A1:P1');
131:         $sheet->mergeCells('A2:P2');
132:         $sheet->mergeCells('A3:P3');
133:         $this->fill($sheet, 'A1:P3', $darkBg);
134:         $sheet->setCellValue('A1', '  ' . $title);
135:         $this->font($sheet, 'A1', ['bold' => true, 'size' => 16, 'color' => 'FFFFFFFF']);
136:         $this->align($sheet, 'A1', 'left', 'center');
137:         $sheet->setCellValue('A2', '  ' . $sub);
138:         $this->font($sheet, 'A2', ['size' => 10, 'color' => 'FF94A3B8']);
139:         $this->align($sheet, 'A2', 'left', 'center');
140:         $sheet->setCellValue('A3', '  Generated: ' . now()->format('d M Y H:i') . '   |   Panel Test App');
141:         $this->font($sheet, 'A3', ['size' => 8, 'color' => 'FF475569']);
142:         $sheet->getRowDimension(1)->setRowHeight(36);
143:         $sheet->getRowDimension(2)->setRowHeight(20);
144:         $sheet->getRowDimension(3)->setRowHeight(16);
145:     }
146: 
147:     // ============================================================
148:     // SHEET 1: KESIMPULAN EKSEKUTIF
149:     // ============================================================
150:     private function sheet1_executive($sheet, $panelTest, $sessions, $total)
151:     {
152:         $isMarketing = $panelTest->unit_type === 'marketing';
153:         $sheet->getColumnDimension('A')->setWidth(2);
154:         foreach (range('B', 'P') as $c) $sheet->getColumnDimension($c)->setWidth(13);
155:         $sheet->getColumnDimension('B')->setWidth(28);
156:         $sheet->getColumnDimension('C')->setWidth(18);
157: 
158:         $this->pageHeader(
159:             $sheet,
160:             $isMarketing
