เฟส 2 แก้สิ่งที่ audit เจอโดยตรง — รวม “5 น้ำเงิน” เป็นระบบสีเดียว, ตั้ง spacing/type scale, และทำ Light + Dark ผ่าน semantic token ตั้งแต่ราก. ทุกค่าเป็นตัวแปร แก้ที่เดียวกระเพื่อมทั้ง Web และ Mobile
กุญแจที่ทำให้แก้แบรนด์/ทำ dark/เพิ่มประเทศ ได้โดยไม่ต้องรื้อ — แยก “ค่าดิบ” ออกจาก “ความหมาย”
พาเลตต์จริง ไม่ผูกความหมาย เช่น สเกลสีน้ำเงิน 50–900
ตั้งชื่อตามหน้าที่ ชี้ไป primitive — เปลี่ยน theme ที่ชั้นนี้
เรียกเฉพาะ semantic ไม่แตะค่าดิบ — สลับ theme อัตโนมัติ
เพราะ component เรียกแค่ color.primary ไม่ใช่ #244B86 ตรงๆ — วันที่ลูกค้าอยากเปลี่ยนแบรนด์หรือเปิด dark mode เราแก้แค่ Tier 2 ชั้นเดียว ทั้งระบบเปลี่ยนตาม
พาเลตต์ primitive ที่คุมด้วยสเกล + semantic token ที่ map ทั้ง Light และ Dark
| Semantic token | Light | Dark | คอนทราสต์ |
|---|---|---|---|
| bg / page | #F5F7FB | #0F1623 | base |
| bg / surface | #FFFFFF | #1B2433 | base |
| text / primary | #16233B | #EAEEF5 | 13:1 ✓ |
| text / secondary | #67728A | #99A3B5 | 4.6:1 ✓ |
| color / primary | #244B86 | #4C82D6 | 7:1 ✓ |
| color / accent | #F2994A | #F9B574 | AA ✓ |
| border / default | #DCE2EC | #2E3A4F | 3:1 ✓ |
คอมโพเนนต์เดียวกัน เรนเดอร์ทั้ง Light และ Dark จาก token ชุดเดียว — แก้สิ่งที่ audit เจอ (“0 dark mode”)
โค้ดเดียวกัน — ต่างแค่ค่า token ที่ semantic ชี้ไป. Dark ใช้สีอ่อนขึ้น (blue-300) เพื่อคงคอนทราสต์ AA บนพื้นเข้ม
จาก “4 ขนาด body + 2 ฟอนต์ปน” → ระบบเดียว: Kanit (หัวข้อ) · IBM Plex Sans Thai (เนื้อหา) · Space Grotesk (ตัวเลข)
จาก “5 ค่าสุ่ม” → สเกล 4/8px ที่คาดเดาได้ · จังหวะหน้าจอนิ่ง ดูเป็นระบบ
มุมโค้งและเงาเป็นสเกลเดียว — ปุ่ม/การ์ด/โมดัล ดูเป็นชุดเดียวกันทั้งระบบ
จาก “2 ชุดปน filled/outline” → ชุดเดียว: outline · grid 24px · เส้น 1.8 · ปลายมน — สม่ำเสมอทุกไอคอน
ทุกไอคอนยึด grid + stroke เดียวกัน → วาง side-by-side แล้วน้ำหนักเท่ากัน ไม่มีตัวหนา-บางสลับ
token ไม่ได้อยู่แค่ใน Figma — export เป็นโค้ดให้ทีม dev (React/RN) ใช้ตรง · ลดช่องว่างดีไซน์↔โค้ด (เป้า velocity +30%)
📦 ส่งมอบเป็น Style Dictionary → export พร้อมกันเป็น CSS variables (Web) · React Native (Mobile) · JSON — แหล่งจริงที่เดียว ป้อนเข้าเฟส 3 (Components) ทันที
เฟส 2 ให้ “แหล่งความจริงที่เดียว” — สี (light/dark) · type · spacing · radius · icon เป็น token พร้อมโค้ด. นี่คือ จุดแก้ครั้งที่ 2. พออนุมัติ เราลงเฟส 3 ประกอบ token เป็น component library จริง (Button · Input · Table · Modal · Card · Nav) ครบ state/variant ทั้ง Web และ Mobile
รอ R2 จากคุณวิชญ์ (และ ICE) — ติตรงไหนปรับได้ แล้วลุยเฟส 3 ครับ