DESIGN SYSTEM · APP / POLISH

ระบบออกแบบ ไล้พานิช

ชุดกฎ + tokens + ชิ้นส่วน UI ที่หยิบไปใช้ซ้ำได้ สำหรับงานแอป/เว็บที่ใช้ CSS ได้ (Cloudflare Pages, widget standalone). ทุกชิ้นมาจาก "Polish Pass" ที่ผ่านการขัดโครงแล้ว

หลักการเดียวที่ต้องจำ: ความสวย = โครงสร้าง ไม่ใช่สี. เมนูลอยทางขวาแยก 2 แกนอิสระ — "โครงสร้าง" 6 แบบ (Polish · shadcn · Material 3 · Neo-brutal · iOS · Clay) × "สี" = ต้นฉบับ ★ (สีประจำตัวของโครงนั้น เช่น M3=ม่วง iOS=ฟ้า) หรือ 10 สีแบรนด์ร้าน.
⚑ เลือก "ต้นฉบับ ★" = เห็นของแท้ ; เลือกสีร้าน = เอาโครงนั้นมาใส่สีเรา (ทุกคู่ผสมกันได้)
ภาพรวมระบบ

4 ชั้นของ Design System

เข้าใจ "ชั้น" แล้วสั่งงานได้แม่น — อยากหยิบส่วนไหนไปใช้ซ้ำ บอกชื่อชั้นให้ถูก. เมนูลอยทางขวาสลับได้แค่ 2 ชั้นล่าง (Tokens) ; ชั้นบนคือชิ้นส่วน+หน้าจอที่ประกอบขึ้นจากชั้นล่าง

สี · Color tokens

ค่าสีพื้นฐาน — accent ปุ่ม/ราคา, พื้นหน้าจอ, ตัวอักษร

ในงานเรา: --g · --bg · --ink · --gt
⇄ สลับได้จากเมนู "สี"
Color tokens
"ธีมสี"

โครง · Style tokens

รูปทรงของระบบ — ความมน (radius), เงา, เส้นขอบ, ระยะห่าง

ในงานเรา: --r · --sh · --line · สเกล 4/8 (= 6 โหมด Polish/shadcn/M3/Neo/iOS/Clay)
⇄ สลับได้จากเมนู "โครงสร้าง"
Style tokens
"โครง/skin"

ชิ้นส่วน · Components

ชิ้น UI เดี่ยวๆ ที่ประกอบจาก tokens — หยิบไปวางซ้ำได้

ในงานเรา: ปุ่มกด · การ์ดสินค้า · ชิป · search · badge · ราคา
Components

หน้าจอ · Templates / Screens

เอา component มาประกอบเป็นหน้าเต็ม + จัดเลย์เอาต์/flow

ในงานเรา: หน้าสินค้า · หน้าสั่งซื้อ · ตะกร้า · ติดตามพัสดุ (8 จอด้านล่าง)
Templates
"เลย์เอาต์/หน้าจอ"
เอาไปใส่ Odoo website ยังไง: หยิบได้แค่ 2 ชั้น Tokensสี ทำง่าย (ตั้งใน theme/ตัวแปร CSS) · โครง ได้บางส่วน (custom CSS ทับ style เดิม Odoo). ส่วน Components + Templates ใช้ตรงๆ ไม่ได้ เพราะ Odoo มี QWeb + ระบบ shop ของตัวเอง (บล็อก Odoo = inline-CSS เท่านั้น)
หลักการ

5 กฎโครงสร้าง

ทำตาม 5 ข้อนี้ให้นิ่งก่อนเสมอ แล้วค่อยเลือกสี — อย่าไล่สีก่อน

1

Spacing สเกล 4 / 8

ระยะห่างทุกจุดเป็นพหุคูณของ 4 (4·8·12·16·24·32·48) ไม่ตั้งค่าตามใจ ความสม่ำเสมอ = ความเรียบร้อยที่ตาจับได้

8
12
16
24
32
48
2

ลำดับ Type ชัด

เล็ก–กลาง–ใหญ่ ต่างกันให้เห็น หัวข้อหนัก (800) ตัวรองเทา ไม่ใช้ขนาดใกล้กันจนแยกไม่ออก

หัวข้อใหญ่ หัวข้อย่อย เนื้อความรอง 24 / 15 / 13 px
3

ไอคอนเส้นชุดเดียว

ใช้ไอคอนเส้น (stroke 1.7) ชุดเดียวกันทั้งแอป เลิกใช้ emoji หรือรูปสินค้าเป็นไอคอนหมวด — ทำให้ดูเป็นแอปจริง

4

Accent มีวินัย

สีเน้น (เขียว/ฟ้า) ใช้เฉพาะ ปุ่ม · ราคา · สถานะ active เท่านั้น ที่เหลือเป็นกลาง (ขาว/เทา/ดำ) — สีน้อยแต่ตรงจุด = พรีเมียม

ปุ่ม ฿245 active เฉยๆ
5

การ์ด + ที่ว่าง

การ์ดขาว เส้นขอบบาง 1px เงานุ่ม radius 16 บนพื้นโทนอ่อน เว้นที่ว่างเยอะ ไม่อัดแน่น

การ์ดมาตรฐาน — เส้นบาง + เงานุ่ม + เว้นหายใจ
โทเคน

สี & ตัวแปร

โครงใช้ token คงที่ — สลับเฉพาะ 4 ตัว accent ต่อพาเลต กด เมนูธีมลอยทางขวา (เลื่อนตามตลอด) เพื่อเทียบจริงทุกจุดในหน้า — ตัวเลือกสีแอปที่ยังค้างอยู่

--g
accent · ปุ่ม/ราคา/active
--g2
accent เข้ม · ไอคอน
--gt
พื้นไอคอน/ชิปอ่อน
--bg
พื้นหน้าจอ
--ink #15211b
หัวข้อ/ตัวหนัก (คงที่)
--mut #75847b
เนื้อรอง (คงที่)
--line #e9efeb
เส้นการ์ด (คงที่)
--card #fff · r16
การ์ด · radius 16 · เงานุ่ม
ฟอนต์

ลำดับตัวอักษร

ฟอนต์เดียวทั้งระบบ — Sarabun (มีหัว อ่านง่ายภาษาไทย). ขนาดไล่ตามลำดับชัด หัวข้อหนา เนื้อเบา — ห้าม letter-spacing บนเนื้อไทย ตัวเลข/ราคาใช้ Mono.

ระบบออกแบบ ไล้พานิช
Display · 34px · 800
หัวข้อหมวด
H2 · 24px · 800
หัวข้อย่อย
H3 · 16px · 800
เนื้อความปกติ อ่านสบายตา ใช้กับรายละเอียดสินค้าและคำอธิบายทั่วไป
Body · 15px · 400 · lh1.6
เนื้อความเน้น
Body bold · 15px · 700
คำกำกับ / caption
Caption · 12.5px · 500
฿245 · SKU-0012
Mono · 13px · ตัวเลข
ระยะห่าง

สเกล Spacing 4 / 8

ทุก padding · gap · margin เลือกจากสเกลนี้เท่านั้น — ไม่ตั้งค่าสุ่ม. ฐาน 4px คูณขึ้นเป็น 8 / 12 / 16 / 24 / 32 / 48.

--s1
4px
--s2
8px
--s3
12px
--s4
16px
--s5
24px
--s6
32px
--s7
48px
มุมโค้ง

Radius

มุมมนพอประมาณ — ไม่เหลี่ยมแข็ง ไม่กลมเกินจนเล่น. สามค่าพอ ทั้งระบบ.

--rs · 12px
input · ชิป · ปุ่มเล็ก
--r · 16px
การ์ด · กล่องหลัก
pill · 999px
badge · แท็ก · ปุ่มกลม
เงา

Elevation / เงา

เงานุ่มจาง โทนเขียวอมเทา ไม่ใช้ดำทึบ — ยกการ์ดให้ลอยเบาๆ ไม่ตะโกน.

flat
เส้นขอบ · ไม่มีเงา
--sh
การ์ดทั่วไป
--gsh
ปุ่มหลัก (ตามสี accent)
float
เมนูลอย · modal
ไอคอน

ชุดไอคอน

เส้นชุดเดียวทั้งระบบ — เส้นหนา 1.7 ปลายมน (stroke-linecap:round) viewBox 24×24. ห้ามผสมไอคอนทึบกับไอคอนเส้น (ยกเว้นดาวเรตติ้ง).

หน้าแรก
ค้นหา
ตะกร้า
บัญชี
เพิ่ม
ลด
สำเร็จ
เรตติ้ง
จัดส่ง
ของแท้
ส่วนลด
ตัวกรอง
ที่อยู่
โทร
พัสดุ
ลบ
แจ้งเตือน
ถัดไป
ชิ้นส่วน

Components

ก็อป HTML snippet ไปใช้ได้เลย — class ทุกตัวนิยามใน <style> หัวไฟล์ (ก็อปบล็อก token + component CSS ไปด้วย)

ปุ่ม
เพิ่มลงตะกร้า  ย้อนกลับ
HTML
<span class="btn">เพิ่มลงตะกร้า</span>
<span class="btn ghost">ย้อนกลับ</span>
ปุ่มไอคอน
  
HTML
<span class="add"><svg class="i"…>+</svg></span>
<span class="ga"><svg class="i"…>+</svg></span>
ชิปกรอง
ทั้งหมดยาฆ่าหญ้าปุ๋ย
HTML
<div class="chiprow">
  <span class="chip on">ทั้งหมด</span>
  <span class="chip">ยาฆ่าหญ้า</span>
</div>
ช่องค้นหา
HTML
<div class="search">
  <svg class="i"…>🔍</svg>
  <span>ค้นหาสินค้า…</span>
</div>
ป้ายสถานะ (Badge)
พร้อมส่ง  เหลือน้อย  กลุ่มสาร K3
HTML
<span class="bdg">พร้อมส่ง</span>
<span class="bdg low">เหลือน้อย</span>
<span class="dpill">✓ กลุ่มสาร K3</span>
การ์ดสินค้า (แนวรายการ)
โซฟิต 1L
โซฟิต 1L
เพรทิลาคลอร์ · ยาคุมหญ้า
฿245
HTML
<div class="pc">
  <div class="pt"><img src="…" alt="…"></div>
  <div>
    <div class="pn">โซฟิต 1L</div>
    <div class="pm">เพรทิลาคลอร์</div>
    <div class="pp">฿245</div>
  </div>
  <div class="add">+</div>
</div>
การ์ดสินค้า (กริด)
คายีซาเรส 1L
พร้อมส่ง
คายีซาเรส 1L
฿320
HTML
<div class="gc">
  <div class="gt"><img src="…"></div>
  <span class="bdg">พร้อมส่ง</span>
  <div class="gn">คายีซาเรส 1L</div>
  <div class="gr">
    <span class="gp">฿320</span>
    <div class="ga">+</div>
  </div>
</div>
ราคา · ส่วนลด · เรตติ้ง
฿245฿290-16%
4.9 · ขายแล้ว 120
ของแท้ 100%
HTML
<div class="price">
  <span class="now">฿245</span>
  <span class="was">฿290</span>
  <span class="off">-16%</span>
</div>
<div class="rate">★ <b>4.9</b> · ขายแล้ว 120</div>
<span class="tchip">✓ ของแท้ 100%</span>
แบนเนอร์โปร · แถบส่งฟรี
โปรเดือนนี้

ลดทั้งร้าน สูงสุด 25%

เลือกครบจบในที่เดียว

ช้อปเลย
ส่งฟรี เมื่อซื้อครบ ฿1,000เหลืออีก ฿130
HTML
<div class="promo">
  <div class="pk">โปรเดือนนี้</div>
  <h4>ลดทั้งร้าน สูงสุด 25%</h4>
  <span class="pb">ช้อปเลย</span>
</div>
<div class="ship">🚚 ส่งฟรีครบ ฿1,000</div>
หัวข้อหมวด (Section header)
ขายดีตอนนี้ดูทั้งหมด
HTML
<div class="sech">
  <b>ขายดีตอนนี้</b>
  <span class="acc">ดูทั้งหมด</span>
</div>
ฟอร์ม

ช่องกรอก & ตัวเลือก

ใช้ในตะกร้า · ที่อยู่จัดส่ง · ค้นหา. ขอบบาง มุม 12px โฟกัสขึ้นวงเขียวตามสี accent — สม่ำเสมอทุกช่อง.

ช่องกรอกข้อความ (มีป้ายกำกับ)
HTML
<div class="fwrap">
  <label class="flabel">ชื่อผู้รับ</label>
  <input class="field" placeholder="…">
</div>
เลือกรายการ (Select)
HTML
<div class="selwrap">
  <select class="field">…</select>
  <svg class="i"…>⌄</svg>
</div>
ข้อความหลายบรรทัด (Textarea)
HTML
<textarea class="field"
  placeholder="ที่อยู่…"></textarea>
ช่องติ๊ก & ตัวเลือก (Checkbox / Radio)
HTML
<label class="opl">
  <input type="checkbox">
  <span class="cbx"><svg…>✓</svg></span>ข้อความ
</label>
<label class="opl">
  <input type="radio" name="pay">
  <span class="rdo"></span>ข้อความ
</label>
สวิตช์เปิด-ปิด (Toggle)
รับข่าวโปรโมชัน
HTML
<label class="tgl">
  <input type="checkbox">
  <span class="tk"></span>
</label>
ตัวนับจำนวน (Stepper)
2
HTML
<div class="qtyL">
  <button>−</button>
  <span>2</span>
  <button>+</button>
</div>
สถานะ

สถานะ (States)

ทุกตัวควบคุมต้องสื่อสถานะชัด — กดได้/กำลังกด/กดไม่ได้/ผิดพลาด ผู้ใช้ต้องรู้ทันทีโดยไม่ต้องเดา.

ปุ่ม
ปกติdefault
ชี้hover
กำลังกดactive
กดไม่ได้disabled
CSS
.btn          /* ปกติ */
.btn:hover    /* เข้ม + เงาลึก */
.btn:active   /* ยุบลง 1px */
.btn.dis      /* เทา · no-shadow */
ช่องกรอก
default
focus · วงเขียว
error · เบอร์ไม่ครบ
disabled
CSS
.field           /* ปกติ */
.field:focus     /* ขอบ+วงเขียว */
.field.err       /* ขอบ+วงแดง */
.field.dis       /* เทา · disabled */
ในบริบทจริง

8 จอตัวอย่าง — แอปครบ flow

ชิ้นส่วนข้างบนประกอบเป็นแอปจริงตั้งแต่เปิดดูสินค้า → สั่งซื้อ → ติดตามพัสดุ → บัญชี. สลับโครงสร้าง/สีจากเมนูขวาแล้วเลื่อนดูทุกจอเปลี่ยนพร้อมกัน

9:41
ทศ
สวัสดีตอนเช้า
คุณทศพล
โปรเดือนนี้

ลดทั้งร้าน สูงสุด 25%

ยาคุม · ยาคุมหญ้า · ปุ๋ย เลือกครบจบในที่เดียว

ช้อปเลย
ส่งฟรี เมื่อซื้อครบ ฿1,000เหลืออีก ฿130
หมวดหมู่ดูทั้งหมด
ยาฆ่าหญ้า
ยาฆ่าหญ้า
ยาฆ่าแมลง
ยาฆ่าแมลง
ปุ๋ย
ปุ๋ย
เมล็ดพันธุ์
เมล็ด
ขายดีตอนนี้ดูทั้งหมด
โซฟิต 1L
โซฟิต 1L
4.9 · ขายแล้ว 120
฿245฿290-16%
คายีซาเรส 1L
คายีซาเรส 1L
4.8 · ขายแล้ว 86
฿320
01 · หน้าแรก
9:41
เลือกสินค้า
ทั้งหมดยาฆ่าหญ้ายาฆ่าแมลงปุ๋ย
-16%โซฟิต 1L
โซฟิต 1L
4.9 · 120
฿245฿290
คายีซาเรส 1L
คายีซาเรส 1L
4.8 · 86
฿320
เหลือน้อยปุ๋ย 16-16-16
ปุ๋ย 16-16-16
5.0 · 64
฿850
-22%แอคทารา 100g
แอคทารา 100g
4.9 · 203
฿185฿238
02 · แคตตาล็อก
9:41
โซฟิต 1L
โซฟิต 1L
เพรทิลาคลอร์ · ยาคุมหญ้าก่อนงอก
4.9 · 124 รีวิว · ขายแล้ว 1.2k
พร้อมส่ง · กลุ่มสาร K3
ของแท้ 100%ส่งฟรีครบ ฿1,000
ยาคุมหญ้าในนาข้าว ใช้หลังหว่าน 0–3 วัน คุมได้ทั้งหญ้าใบแคบและใบกว้าง ปลอดภัยต่อต้นข้าว เห็นผลชัดภายใน 7–10 วัน
ราคาพิเศษ฿245฿290
เพิ่มลงตะกร้า
03 · รายละเอียดสินค้า
9:41
ตะกร้า
โซฟิต 1L
โซฟิต 1L
฿245
2
คายีซาเรส 1L
คายีซาเรส 1L
฿320
1
ยอดสินค้า (3 ชิ้น)฿810
ค่าจัดส่ง฿60
รวมทั้งหมด฿870
รวม฿870
ชำระเงิน
04 · ตะกร้า
9:41
ชำระเงิน
จัดส่งถึง
ทศพล · 081-234-5678
123 ม.4 ต.ในเมือง อ.เมือง พิษณุโลก 65000
วิธีชำระเงิน
โอนเงินก่อนส่ง
พร้อมเพย์ / ธนาคาร
เก็บเงินปลายทาง
+ ค่าบริการ ฿30
รวม฿870
ยืนยันสั่งซื้อ
05 · ชำระเงิน
9:41
สั่งซื้อสำเร็จ!
คำสั่งซื้อ #LP2026-0617
เราได้รับออเดอร์แล้ว กำลังจัดเตรียมสินค้าให้คุณ
ดูคำสั่งซื้อ
06 · สั่งซื้อสำเร็จ
9:41
ติดตามพัสดุ
#LP2026-0617 · J&T Express
รับคำสั่งซื้อแล้ว
17 มิ.ย. 09:24
จัดเตรียมสินค้า
17 มิ.ย. 11:02
กำลังจัดส่ง
18 มิ.ย. 08:30 · คาดว่าถึงพรุ่งนี้
4
จัดส่งสำเร็จ
รอดำเนินการ
07 · ติดตามพัสดุ
9:41
ทศ
คุณทศพล
081-234-5678
คำสั่งซื้อของฉัน
ที่อยู่จัดส่ง
รายการโปรด
ติดต่อร้าน (LINE)
08 · บัญชี
โครงสร้าง
สี
ต้นฉบับ ★
เขียวมรกต
เขียวป่า
ฟ้า sop
กรมท่า
ดินเผา
เขียวน้ำทะเล
ฟ้าคราม
ม่วง
ส้มอำพัน
ชมพูกุหลาบ