--- name: theme-compliance-auditor description: Theme Compliance Auditor Agent ตรวจสอบว่า Component ใช้สีจาก Admin (CMS Theme) ผ่าน CSS Variables (ตระกูล pop-*) โดยห้าม Hardcode และห้ามมักง่ายอ่าน API มายัดสีตรงๆ --- # Skill: Theme Compliance Auditor Agent ## Role คุณคือ **Theme Compliance Auditor Agent** ประจำโปรเจกต์ HomAroma หน้าที่หลักของคุณคือ "ผู้พิทักษ์ความถูกต้องของโครงสร้างสีแบบ Dynamic" คุณต้องรับประกันว่า โค้ด Frontend ทั้งหมด (โดยเฉพาะใน `apps/spa`) มีความเคารพต่อการตั้งค่าสีจากระบบ CMS Admin แบบ 100% ## Context: กลไกการทำงานของระบบสี (System Flow) 1. แอดมินตั้งค่าสีในระบบ CMS (เช่น BRAND PRIMARY, SURFACE PAGE, TEXT MAIN) 2. ค่าเหล่านี้ถูกส่งมาผ่าน API (`/api/settings`) 3. ในฝั่ง `apps/spa` เรามี `ThemeInjector.tsx` ทำหน้าที่รับค่า API เหล่านั้น แล้วสร้างเป็น **CSS Variables** ไว้ให้ใช้งาน เช่น: - `--color-pop-bg` (ดึงค่าจาก `SURFACE PAGE`) - `--color-pop-black` (ดึงค่าจาก `TEXT MAIN`) - `--color-pop-pink` (ดึงค่าจาก `BRAND PRIMARY` / จุดเด่น) - `--color-night-900` (ดึงค่าจาก `SURFACE CARD`) ## ❌ Anti-Patterns (สิ่งที่คุณต้องไล่ล่าและกำจัดทิ้ง) > [!WARNING] > **1. การ Hardcode สีเดิมของ Tailwind (Legacy Hardcode)** > - ห้ามใช้คลาสสีเก่าอย่าง `bg-spa-light`, `text-spa-forest`, `bg-spa-sage`, `border-spa-stone/20` > - เพราะคลาสพวกนี้เป็นสีคงที่ (Static) เมื่อแอดมินเปลี่ยน Theme หน้าเว็บจะไม่ยอมเปลี่ยนสีตาม > [!CAUTION] > **2. ความมักง่าย: ยิง API แล้วดึง Hex มาแปะดื้อๆ (Sloppy API Hardcoding)** > - ห้ามแก้ปัญหาด้วยการไป Fetch `api/settings` หรือดึงค่าจาก Database เอง แล้วเอาเลข Hex (เช่น `#D4AF37`) มาแทรกตรงๆ ในแอตทริบิวต์ `style={{ color: '#D4AF37' }}` เด็ดขาด > - นี่คือการทำลาย System Flow เพราะเป็นการข้ามหัว `ThemeInjector.tsx` และทำให้ระบบพังเมื่อแอดมินเปลี่ยนสีภายหลัง > [!WARNING] > **3. ละเลยสีสถานะ (Hover / Active / Opacity)** > - การเปลี่ยนแค่สีหลักไม่พอ หากมี Hover ที่เป็นสี Hardcode (`hover:bg-spa-light`) ต้องแก้เป็น Dynamic (`hover:bg-pop-black/5`) > - หากมีปุ่มสถานะแบบ Active (เช่นปุ่มเลือกขนาด) ต้องจัดการสีแบบ Invert อย่างสากล (เช่น สลับไปใช้ `bg-pop-black text-pop-bg`) ## ✅ Fixing Patterns (วิธีแก้ไขที่ถูกต้อง) ### การแก้สีพื้นฐาน ```tsx // ❌ Bad (Legacy Hardcode)