/* บ้านเดียวของฟอนต์ทั้งระบบ — DB Heavent
   ──────────────────────────────────────────────────────────────────────────
   🔴 คำสั่งเจ้าของงาน 20 ก.ย. 2569 — "Font ทั้งระบบต้องเป็น DB Heaven"
      ขอบเขตที่ตกลงกันคือ **เว็บอย่างเดียว** ไม่รวมเอกสาร PDF ที่ระบบสร้าง
      (เอกสารมีผลทางกฎหมายและมีโควตาแบ่งหน้าที่วัดไว้แล้ว — กับดักข้อ 41/49/56/57)

   🔑 **ทุกหน้าต้องโหลดไฟล์นี้** รวมจอเดี่ยวที่ไม่ได้อยู่ใต้ `_Layout`
      ก่อนรอบ 412 บล็อก `@font-face` อยู่ใน `site.css` ซึ่ง **9 จอเดี่ยวไม่โหลด**
      ⇒ หน้าเหล่านั้นขอ 'DB Heavent' แล้วไม่มีฟอนต์ให้ใช้ จึงตกไปใช้ฟอนต์สำรอง
      (พิสูจน์ที่เครื่องจริงแล้วว่า DB Heavent **ไม่ได้ติดตั้งในเครื่อง** ⇒ ไม่มีทางสำรองอื่น)

   🔴 **น้ำหนัก 400 ชี้ไปที่ `DB Heavent Med` ไม่ใช่ Regular — และนั่นคือของเดิม**
      ไฟล์ที่ฝัง base64 อยู่ใน `site.css` ก่อนรอบ 412 คือ `DB Heavent Med v3.2.1.ttf`
      (เทียบ sha1 ของไบต์แล้วตรงกันเป๊ะ) ⇒ ถ้าเปลี่ยนไปใช้ Regular ตัวอักษร**ทั้งระบบ
      จะบางลง** ซึ่งเป็นสิ่งที่ผู้ใช้เห็น (§9 ข้อ 5) ⇒ รอบ 412 คงของเดิมไว้

   🔤 **ตัวหนาจริง (รอบ 815 · คำสั่งเจ้าของงาน 8 ต.ค. 2569)** — เดิมลงทะเบียนแค่ 400 ⇒ ทุกที่ที่เขียน
      `font-weight: 600/700` (หัวตาราง · หัวการ์ด · หัวโมดัล · h1–h6 · <b> · ตัวหนาในกราฟ) เป็น
      **ตัวหนาจำลอง** ที่เบราว์เซอร์ป้ายเส้นเอง ⇒ รูในตัว ข อ ม ถูกถมจนตัน ตัวอักษรดูเบลอ
      ⇒ ลงทะเบียน `DB Heavent Bd` ที่ 700 · เบราว์เซอร์ใช้หน้านี้กับ 600/700/800 ด้วย (500 ยังใช้หน้า 400)
      🔴 **ตัวหนาจริงกว้างกว่าตัวปกติ 2–4%** ขณะที่ตัวหนาจำลองของ Chrome กว้างเท่าตัวปกติทุกพิกเซล
         (วัดที่จอจริง: "ชื่อผู้ประกอบการ" 99.39 ทั้ง 400/600/700) ⇒ คอลัมน์ที่ความกว้างผูกกับหัว
         ขยายตามสูตร TBL-03 (หัวตัวหนาจริง + 33) ในรอบเดียวกัน — ดู `tools/fonts/bold-header-columns.py`
      ไฟล์มาจากชุดเว็บฟอนต์ที่เจ้าของงานส่งมา (ใช้ตามสิทธิ์ใช้งานเดิม) ต้นฉบับอยู่ที่ `font/excise/webkit/`
   🔤 **รอบ 816 — ทุกหน้าของ DB Heavent มาจากชุดเว็บฟอนต์ที่เจ้าของงานส่งมา** (คัดลอกตามไบต์ · `tools/fonts/build-webfont.py`)
      · 400 เปลี่ยนจากไฟล์ที่แปลงเองจาก Med .ttf เป็น `DB Heavent Med v3.2.1.woff2` ของชุด (เส้น CFF · 34,460 → 22,428 ไบต์)
        ความกว้างทุกตัวอักษร (290/290) ระยะบน/ล่างของบรรทัด และ kerning เท่าเดิม ⇒ หน้าตาไม่ขยับ
        (วัดที่จอจริง: ตำแหน่ง/ขนาดกล่องของข้อความทุกชิ้นเท่าเดิม) ⇒ เบราว์เซอร์ที่ยังถือไฟล์เก่าในแคชก็แสดงเหมือนกัน
      · ลงทะเบียนตัวเอียงจริง 400/700 (Med It · Bd It) แทนตัวเอียงจำลอง — ความกว้างเท่าตัวตรงทุกตัวอักษร
        ใช้กับ `.italicFont`/`.positionFont` ของแถบหัว และแถวที่ขีดฆ่าของตาราง

   🛠 ไฟล์ `.woff2` สร้างจาก `.ttf` ด้วย `tools/fonts/build-webfont.py`
      **build ล่วงหน้าแล้ว commit ผลลัพธ์** แบบเดียวกับ `tools/tailwind`
      (`CLAUDE.md` §2 — ไม่มี build ตอนรัน · ห้าม CDN)
   ────────────────────────────────────────────────────────────────────────── */

@font-face {
    font-family: 'DB Heavent';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../font/web/db-heavent-400.woff2') format('woff2');
}

@font-face {
    font-family: 'DB Heavent';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('../font/web/db-heavent-700.woff2') format('woff2');
}

@font-face {
    font-family: 'DB Heavent';
    font-style: italic;
    font-weight: 400;
    font-display: swap;
    src: url('../font/web/db-heavent-400-italic.woff2') format('woff2');
}

@font-face {
    font-family: 'DB Heavent';
    font-style: italic;
    font-weight: 700;
    font-display: swap;
    src: url('../font/web/db-heavent-700-italic.woff2') format('woff2');
}

/* 🔑 **ตัวบังคับให้ทั้งหน้าใช้ฟอนต์นี้ ไม่ใช่แค่ประกาศว่ามีฟอนต์**
   ใช้ `html body` (0,0,0,2) ไม่ใช่ `body` (0,0,0,1) โดยเจตนา — วัดที่จอจริงแล้ว
   หน้าก่อนเข้าสู่ระบบโหลด `reset.css` ของ antd ซึ่งตั้ง `body { font-family: ... }`
   ของตัวเอง ⇒ ถ้าเจาะจงเท่ากันจะแพ้ให้ไฟล์ที่มาทีหลัง และลำดับลิงก์ของแต่ละหน้าไม่เหมือนกัน
   ⇒ เจาะจงกว่าหนึ่งขั้น แปลว่า**ชนะโดยไม่ขึ้นกับลำดับโหลด** ซึ่งเป็นสิ่งเดียวที่คุมได้จริง
   📌 กฎที่เจาะจงกว่านี้ของแต่ละจอยังชนะตามปกติ (เช่น `!important` ของหน้า /qr
      และ `'JetBrains Mono'` ของเครื่องมือ base64 ที่ต้องเป็นฟอนต์ความกว้างคงที่จริง ๆ) */
html body {
    font-family: 'DB Heavent', 'Segoe UI', Tahoma, 'Noto Sans Thai', sans-serif;
}

/* 🔤 FND-07 (รอบ 770) — ฟอนต์ของรายงาน: ภาพตัวอย่างบนเว็บเป็น TH Sarabun New เหมือน PDF และ Excel
   ต้นทางเดียวกับที่ฝังใน PDF (`External/fonts/THSarabunNew/*.ttf`) แปลงเป็น .woff2 ด้วย `tools/fonts/build-webfont.py`
   · เบราว์เซอร์โหลดเฉพาะหน้าที่มีกล่องตัวอย่างรายงาน
   🔑 `!important` จำเป็น — HTML ของรายงานตั้ง `font-family` ไว้ใน `style=` ของตัวเอง (Tahoma ฯลฯ) และ EXC-01 ห้ามรื้อมาร์กอัปนั้น
   ⇒ กฎ `!important` ในไฟล์ชนะ `style=` ที่ไม่ได้ประกาศ `!important` · ขนาดตัวอักษรบนเว็บคงเดิม (21px ฐานของเปลือก) */
@font-face {
    font-family: 'TH Sarabun New';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('../font/web/th-sarabun-new-400.woff2') format('woff2');
}

@font-face {
    font-family: 'TH Sarabun New';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('../font/web/th-sarabun-new-700.woff2') format('woff2');
}

.stamp-report-preview,
.stamp-report-preview * {
    font-family: 'TH Sarabun New', sans-serif !important;
}

/* 📐 สเปกพิมพ์ของรายงาน (FND-07 · รอบ 772) — ภาพตัวอย่างบนเว็บใช้ขนาดเดียวกับ PDF
   · 📐 รอบ 864 (คำตัดสินเจ้าของงาน 11 ต.ค. 2569) — ตั้งแต่รอบ 862 PDF พิมพ์ที่ค่าในสเปก × 0.75 (ReportFont.PrintedPt · กับดักข้อ 186)
     ⇒ ภาพตัวอย่างใช้ขนาดที่พิมพ์จริงเหมือนกัน: ตาราง 16 → 12 · 14 → 10.5 · 12 → 9 · ชื่อ 20 → 15 · บรรทัดรอง 18 → 13.5 · ข้อมูล ณ วันที่/ผู้พิมพ์ 16 → 12
   · ส่วนของรายงานบอกด้วยคลาสที่ตัวสร้างใส่ไว้ (rpt-title · rpt-sub · rpt-asof · rpt-wrap · ตาราง rpt-t14/rpt-t16)
   · มีผลเฉพาะรายงานที่ย้ายไปสเปกแล้ว รายงานอื่นไม่มีคลาสเหล่านี้ จึงคงขนาดเดิม
   🔴 ต้อง !important เพราะตัวสร้างเขียน font-size ไว้ใน style= ของเซลล์เอง (เช่นหัวรายงาน 16/14/12px) */
.stamp-report-preview table.rpt-t12 td,
.stamp-report-preview table.rpt-t12 th { font-size: 9pt !important; }
.stamp-report-preview table.rpt-t14 td,
.stamp-report-preview table.rpt-t14 th { font-size: 10.5pt !important; }
.stamp-report-preview table.rpt-t16 td,
.stamp-report-preview table.rpt-t16 th { font-size: 12pt !important; }
.stamp-report-preview table.rpt-t12 th,
.stamp-report-preview table.rpt-t14 th,
.stamp-report-preview table.rpt-t16 th { font-weight: 700 !important; }
/* หัวรายงานอยู่ในแถวของตารางเดียวกัน ⇒ ต้องเจาะจงเท่ากฎตาราง (table … td) และมาทีหลังถึงจะชนะ */
.stamp-report-preview table td.rpt-title { font-size: 15pt !important; font-weight: 700 !important; }
.stamp-report-preview table td.rpt-sub { font-size: 13.5pt !important; }
.stamp-report-preview table td.rpt-asof { font-size: 12pt !important; }
/* วันที่พิมพ์/ผู้พิมพ์ที่ตัวสร้างต่อท้ายภาพตัวอย่าง (รอบ 781 · รายงาน 4 — เดิม 10px ใน style=) · ใน PDF ตัวแปลงวาดท้ายกระดาษเองที่ 12pt (รอบ 862) */
.stamp-report-preview table td.rpt-print { font-size: 12pt !important; }
/* คอลัมน์ที่ให้ตัดบรรทัด ต้องมีพื้นขั้นต่ำ — ไม่งั้นจอแคบบีบเหลือราว 70px (วัดที่ 1280: ชนิดแสตมป์ 71px · 10em = 187px
   ⇒ ตารางรายงาน 1 กว้าง 1,209px พอดีกล่องตั้งแต่ 1600 ขึ้นไป · 1280/1366 กล่องเลื่อนแนวนอนในตัว) */
.stamp-report-preview .rpt-wrap { white-space: normal !important; min-width: 10em; }
/* หัวคอลัมน์ที่ให้ตัดบรรทัด — ไม่มีพื้นขั้นต่ำ (รอบ 775 · รายงาน 2) */
.stamp-report-preview .rpt-hwrap { white-space: normal !important; }

/* 📐 ระยะระหว่างตารางของรายงานที่แบ่งกลุ่มละหนึ่งหน้า (FND-07 · รอบ 773) — ในภาพตัวอย่างบนเว็บ ตัวแบ่งหน้า (rpt-page-break) สูง 0
   ⇒ โลโก้ของตารางถัดไปชิดแถวรวมของตารางก่อน (วัด: 0px) · 32px = ขั้น "ก่อน/หลังบล็อกใหญ่" ของมาตรฐานระยะห่าง และเท่าช่องไฟของหน้า
   · กฎนี้อยู่ที่เว็บอย่างเดียว PDF ไม่โหลดไฟล์นี้ ⇒ การขึ้นหน้าใหม่ของ PDF ไม่ขยับ */
.stamp-report-preview .rpt-page-break { height: 32px; }
