/* filter-box.css — กล่อง filter หน้าแรก + หน้าผลการค้นหา
   สีอ้างอิงจาก Homepage-Desktop.dc.html/Homepage-Mobile.dc.html (Version 83) */

/* 26 ก.ย. 69 (รอบ 13) — พี่บอสเจอว่ากล่อง filter กว้างไม่เต็ม container (มีขอบว่างซ้าย-ขวาโผล่มา) หลัง
   อัป v1.1.10 — เช็ค live เจอสาเหตุจริง: parent module ของธีม (.main-box-inside) เป็น display:flex
   เดิม .chsf-box เป็น flex item ตัวตรงที่มี width:100% ประกาศไว้ ซึ่งสำหรับ flex item ที่มี width
   ชัดเจนแบบนี้ browser จะใช้มันเป็น flex-basis เต็มความกว้าง parent ได้เลย — พอรอบ 12 ย้าย .chsf-box
   เข้าไปอยู่ใน .chsf-shell (แล้ว .chsf-shell กลายเป็น flex item ตัวตรงแทน) แต่ .chsf-shell เอง
   ไม่เคยประกาศ width ของตัวเองเลย พอเป็น flex item ที่ไม่มี width ชัดเจน (flex-basis:auto + ไม่มี
   width) มันจะหด (shrink-to-fit) ตามเนื้อหาข้างใน แทนที่จะเต็มความกว้าง parent เหมือนที่ .chsf-box
   เคยทำได้ — ยืนยันแล้วด้วยการลอง set width:100% ผ่าน devtools สดๆ บนเว็บจริง กลับมาเต็มความกว้าง
   ทันที (393px → 418px ตรงกับ parent เป๊ะ) — ใส่ width:100%+box-sizing ให้ .chsf-shell เหมือนที่
   .chsf-box มีอยู่แล้ว กันปัญหานี้ */
/* 27 ก.ย. 69 (รอบ 39) — พี่บอสเจอ "ฟอนต์กลายเป็น system default font" — ตรวจ live เจอว่ามี 2 กลุ่มเบี้ยว:
   (1) .chsf-tab (แท็บ "กิจกรรมทั่วไป"/"ประกวดแข่งขัน") ได้ฟอนต์ธีม default (AnantasonWeb/Sukhumvit Set/
   Tahoma) แทนที่จะเป็น Noto Sans Thai ทั้งที่ .chsf-tab เองมี `font-family:inherit` อยู่แล้ว — สาเหตุคือ
   ตั้งแต่รอบ 12 ที่ย้าย .chsf-tabs ออกมาเป็น "พี่น้อง" กับ .chsf-box (ไม่ได้ซ้อนข้างในอีกต่อไป) แต่
   font-family:'Noto Sans Thai' ยังประกาศอยู่แค่ที่ .chsf-box เท่านั้น — .chsf-tabs เลย inherit จาก
   .chsf-shell (ไม่มีฟอนต์ประกาศ) ขึ้นไปจนถึง body/ธีม แทน ไม่ใช่จาก .chsf-box อีกต่อไป — แก้โดยย้าย/เพิ่ม
   ประกาศ font-family ไว้ที่ .chsf-shell เอง (บรรพบุรุษร่วมของทั้ง .chsf-tabs และ .chsf-box หลังรอบ 12)
   (2) .chsf-search-btn (ปุ่มไอคอนแว่นขยาย) กับ .chsf-toggle-detail (ปุ่ม "ค้นหาแบบละเอียด") ได้ฟอนต์
   Arial ตรงๆ (system default จริง) ทั้งที่อยู่ใน .chsf-box ที่ตั้ง Noto Sans Thai ไว้แล้ว — สาเหตุ: ปุ่ม
   ทั้งสองไม่เคยประกาศ font-family ของตัวเองเลย และ <button>/<input> ไม่ inherit font จาก parent เองตาม
   ค่าเริ่มต้นของเบราว์เซอร์ (ต้องสั่ง font-family:inherit เองตรงๆ เหมือนที่ .chsf-search-input ทำไว้แล้ว
   ตั้งแต่รอบ 8/8.1 — .chsf-combo-trigger ก็ทำแบบนี้อยู่แล้วเหมือนกัน) แก้จุดนี้ที่ตัวปุ่มแต่ละตัวเอง
   (ดูด้านล่าง) */
.chsf-shell {
	display: block;
	width: 100%;
	box-sizing: border-box;
	font-family: 'Noto Sans Thai', sans-serif;
}

/* 27 ก.ย. 69 (รอบ 39) — พี่บอสเจอว่าระยะห่างระหว่างกล่อง search กับ banner ค่ายใหญ่ (module ถัดไป)
   ห่างเกินไป — ตรวจ live เจอว่าโมดูลกล่อง search (.main-box ที่ห่อ .chsf-shell) ใช้ margin-bottom:38px
   ซึ่งเป็นค่า default มาตรฐานของทุกโมดูลในธีม (ไม่ใช่ค่าที่ปลั๊กอินนี้ตั้งเอง) — ลดเฉพาะจุดนี้จุดเดียว
   (ไม่แตะ .main-box ทั่วทั้งเว็บ) ด้วย :has() เจาะจงเฉพาะโมดูลที่มีกล่อง search อยู่ข้างใน เหลือ 22px
   (ค่าระยะห่าง "แน่น" ที่ใช้เป็นมาตรฐานจุดอื่นในดีไซน์นี้อยู่แล้ว เช่น gap ของ .main-box-inside) — ถ้า
   พี่บอสอยากได้ค่าอื่นที่ไม่ใช่ 22px บอกได้เลย ปรับได้ทันที
   27 ก.ย. 69 (รอบ 40.2) — feedback พี่บอส: "ระยะห่างระหว่างกล่อง search filter กับ banner ข้างล่าง
   ยังเยอะเหมือนเดิม" (หลังเช็คว่ารอบ 39 อัปแล้ว) — ตรวจสอบสดพบว่ารอบ 39 ใช้ได้จริงเฉพาะ desktop
   (>640px) เท่านั้น พอเข้ามือถือ (≤640px) กลับเจอกฎของธีมเองใน camphub-card-shared.php:
   "@media (max-width:640px){ .main-box.chub-fw, .main-box.chub-flat{ margin-bottom:38px !important; } }"
   ที่มี specificity เท่ากัน (2 คลาส = 0,2,0 พอๆ กับ .main-box:has() ที่นับ :has() เป็น 1 pseudo-class)
   และมี !important เหมือนกัน — พอ specificity เท่ากันทั้งคู่ กฎที่มาทีหลังใน DOM ชนะ ซึ่งกฎของธีม
   (inline <style> ในตัว template ที่ปริ้นท์ในหน้าเพจ) มาทีหลัง <link> ของปลั๊กอินนี้ใน <head> เสมอ เลย
   ชนะเฉพาะตอนมือถือ → เพิ่ม specificity ของกฎนี้ให้สูงกว่าแน่นอนทุกกรณีด้วยการเติม "body" (type selector)
   นำหน้า แทนที่จะพึ่งลำดับการโหลดซึ่งเปราะบางและเปลี่ยนได้ถ้าธีมแก้อะไรในอนาคต */
body .main-box:has(.chsf-shell) {
	margin-bottom: 22px !important;
}

/* 26 ก.ย. 69 (รอบ 16) — พี่บอสเจอ "แถบสีขึ้นเวลาเอาเมาส์ hover" บนปุ่ม "ค้นหาแบบละเอียด"
   (.chsf-toggle-detail) — เช็ค live เจอว่าปลั๊กอินนี้ไม่เคยประกาศ :hover ให้ปุ่มไหนเลยสักปุ่มเดียว (grep
   ทั้งไฟล์ไม่เจอคำว่า hover เลย) — สาเหตุจริงมาจากธีม ไม่ใช่ปลั๊กอิน: enumerate ทุก stylesheet ที่โหลดจริง
   บนหน้าเว็บ แล้วไล่ทดสอบ .matches() ทีละ selector กับปุ่ม/บรรพบุรุษของมัน เจอกฎธีม global ตัวนี้ตรงๆ
   (matches ปุ่มเองเลย ไม่ใช่ผ่านบรรพบุรุษ):
     button:hover { background-image: linear-gradient(to right, rgba(0,0,0,.1) 0px, rgba(0,0,0,.1) 100%); }
   เป็นกฎกว้างระดับ <button> ทุกตัวในเว็บ ปลั๊กอินนี้ไม่เคย override เลยสักจุด เลยโดนทับหมดทุกปุ่มที่นี่
   ไม่ใช่แค่ปุ่มที่พี่บอสเห็น — ปุ่มอื่นที่โดนเหมือนกันแต่ยังไม่มีใครรายงาน: .chsf-tab (แท็บ, อยู่ใน
   .chsf-tabs ซึ่งเป็น sibling ของ .chsf-box ไม่ใช่ลูก — ต้อง override ที่ .chsf-shell ไม่ใช่ .chsf-box
   ถึงจะครอบคลุมด้วย), .chsf-search-btn, .chsf-combo-trigger, .chsf-grade-more, .chsf-submit-btn — แก้ครั้ง
   เดียวที่ .chsf-shell (ตัวห่อร่วมของทุกปุ่มในปลั๊กอินนี้) ตาม pattern เดียวกับที่เคยแก้ a:hover ของธีม
   รั่วเข้ามาทับลิงก์ปลั๊กอิน (รอบ 8.2) แทนที่จะไล่ปะทีละปุ่มที่โดนรายงาน */
.chsf-shell button:hover {
	background-image: none !important;
}

.chsf-box {
	/* 25 ก.ย. 69 — เอา max-width:720px ออกตามที่พี่บอสขอ ("กว้างให้สุด container ไม่นับ sidebar")
	   เดิมกล่องแคบกว่าคอลัมน์เนื้อหาที่มันอยู่จริง (810px) ทำให้ดูลอยไม่เต็มพื้นที่ */
	/* 25 ก.ย. 69 (รอบ 8.1) — ไล่เทียบกับ Homepage-Desktop.dc.html ตอนที่ 2 ทีละ property ตรงๆ
	   (แทนที่จะเทียบแค่จากภาพ/feedback อย่างเดียว) เจอว่า background/padding ของกล่องนี้ผิดมาตั้งแต่
	   ต้น ไม่ตรงสเปคเลย — background ต้องเป็น #F7F6F3 (สีครีมอ่อน) ไม่ใช่ #fff ขาวล้วน, padding ต้อง
	   16px 20px ไม่ใช่ 14px 16px */
	border: 1px solid #DCD9CF;
	border-radius: 16px;
	background: #F7F6F3;
	padding: 16px 20px;
	width: 100%;
	box-sizing: border-box;
	/* 25 ก.ย. 69 (รอบ 4) — เปลี่ยนจาก inherit เป็น Noto Sans Thai ตรงๆ จุดเดียวที่นี่ (เหมือนที่ทำกับ
	   .chtb-wrap ของ tagbar) ลูกทุกตัวข้างในกล่องนี้ไม่มีใครระบุ font-family ของตัวเองเลย เลย inherit
	   ต่อกันมาถึงตรงนี้ทั้งหมดอัตโนมัติ (ช่องค้นหา/ป้าย/ชิป/ปุ่ม/ผลการค้นหา) */
	font-family: 'Noto Sans Thai', sans-serif;
	transition: border-radius 0.25s ease;
}
/* 26 ก.ย. 69 (รอบ 12) — data-expanded ย้ายไปอยู่ที่ .chsf-shell (ตัวห่อใหม่ที่คลุมทั้ง .chsf-tabs และ
   .chsf-box) แล้ว เพราะ .chsf-tabs ย้ายออกมาเป็นพี่น้องกับ .chsf-box ไม่ได้ซ้อนข้างในอีกต่อไป (ตรงกับ
   mockup ที่ tabs อยู่ "นอก" กล่อง ไม่ใช่ในกล่อง) — เดิม .chsf-box[data-expanded="1"] อ้างถึง attribute
   บนตัวมันเอง ตอนนี้ต้องเปลี่ยนเป็น descendant selector จาก .chsf-shell แทน */
.chsf-shell[data-expanded="1"] .chsf-box {
	border-radius: 0 16px 16px 16px;
}

.chsf-form { display: block; }

/* แถวค้นหาแบบง่าย (ตอนหุบ) */
.chsf-collapsed-row {
	display: flex;
	/* 25 ก.ย. 69 (รอบ 8.1) — mockup ใช้ gap:10px ไม่ใช่ 8px */
	gap: 10px;
	max-height: 46px;
	opacity: 1;
	overflow: hidden;
	transition: max-height 0.25s ease, opacity 0.2s ease, margin 0.25s ease;
}
.chsf-shell[data-expanded="1"] .chsf-collapsed-row {
	max-height: 0;
	opacity: 0;
	margin: 0;
	pointer-events: none;
}

/* 25 ก.ย. 69 (รอบ 8.1) — เจอสาเหตุจริงของบั๊ก "เส้นขอบล่างช่องค้นหาหาย" ที่พี่บอสเจอบนเครื่อง Mac:
   ก่อนหน้านี้ border/background/border-radius ทั้งหมดตั้งอยู่บนตัว <input> ตรงๆ ซึ่งเจอปัญหาการ
   render เส้นขอบไม่สม่ำเสมอข้ามเบราว์เซอร์/ระดับ zoom ได้ง่าย (พิสูจน์แล้วจากเบราว์เซอร์ทดสอบจริง —
   วัด computed style ได้ border แบบเศษพิกเซล/โปร่งแสงที่ไม่ตรงกับค่าที่ตั้งไว้เลย) — mockup จริง
   (Homepage-Desktop.dc.html ตอนที่ 2) ไม่ได้ตั้ง border ที่ input ด้วยซ้ำ แต่ห่อ input+ไอคอนแว่นขยาย
   ไว้ในกล่อง "pill" อีกชั้น แล้วเอา border/background/radius ไปไว้ที่กล่องห่อแทน — ย้ายมาใช้โครงสร้าง
   เดียวกันเป๊ะ แก้บั๊กเส้นขอบไม่ครบ + ตรงสเปค mockup ในทีเดียว */
.chsf-search-pill {
	flex: 1;
	display: flex;
	align-items: center;
	gap: 8px;
	background: #ffffff;
	border: 1px solid #E4E0D6;
	border-radius: 12px;
	padding: 0 14px;
	height: 46px;
	box-sizing: border-box;
}
.chsf-search-icon {
	flex: 0 0 auto;
}
.chsf-search-input {
	flex: 1;
	min-width: 0;
	/* border/background/padding ย้ายไปอยู่ที่ .chsf-search-pill (กล่องห่อ) แล้ว — ตัว input เองโปร่งใส
	   ไม่มีกรอบของตัวเอง กันปัญหาเส้นขอบ render ไม่ครบข้ามเบราว์เซอร์
	   25 ก.ย. 69 (รอบ 8.1 verify) — ตรวจ live เจอว่าธีมมีกฎ global สำหรับ <input>/<button> ดิบๆ
	   (border/font-size/min-width) ที่โหลดทีหลังปลั๊กอินนี้ ชนะค่าที่ตั้งไว้แบบไม่มี !important ทุกจุด
	   (border ยังโผล่เป็นสีเทาจางแบบ native, font-size ยังเป็น 14px ไม่ใช่ 13.5px ที่ตั้งไว้) —
	   ใส่ !important ทุก property ที่เคยโดนทับ กันไม่ให้เกิดซ้ำ */
	border: none !important;
	background: transparent !important;
	padding: 0 !important;
	height: 100% !important;
	/* 25 ก.ย. 69 (รอบ 8.1) — mockup ใช้ 13.5px ไม่ใช่ 14px */
	font-size: 13.5px !important;
	line-height: 1.5 !important;
	color: #3b3733 !important;
	/* 25 ก.ย. 69 (รอบ 4) — สาเหตุจริงของบั๊กเดิม "สระวรรณยุกต์ชั้นสองแหว่ง": input ไม่เคย reset
	   appearance เลย (ค่าเริ่มต้นคือ appearance:auto) เบราว์เซอร์เลยทับสไตล์เนทีฟของตัวเองบางส่วน —
	   ปิดด้วย appearance:none ไว้เผื่อ (ตอนนี้ไม่มีกรอบ/พื้นหลังให้ทับแล้วก็จริง แต่กันไว้ไม่เสียหาย) */
	appearance: none !important;
	-webkit-appearance: none !important;
	outline: none !important;
	box-sizing: border-box !important;
	/* 25 ก.ย. 69 (รอบ 8) พี่บอสอนุมัติ: จุดนี้ใช้ Noto Sans Thai ตรงๆ ได้เลย ไม่ต้องพึ่ง fallback อื่น
	   เพราะตอนนี้เว็บ enqueue Google Fonts "Noto Sans Thai" เองแล้วจริงๆ (ดู camphub-round8) */
	font-family: inherit !important;
}
.chsf-search-input::placeholder {
	color: #A6A196;
}
.chsf-search-btn {
	/* 25 ก.ย. 69 (รอบ 8.1) — mockup ใช้ 46x46 + radius 12px ไม่ใช่ 44x44 + 10px
	   25 ก.ย. 69 (รอบ 8.1 verify) — ตรวจ live เจอว่าธีมมี min-width:90px + padding:5px 10px ระดับ
	   global สำหรับปุ่ม ชนะค่าที่ตั้งไว้ (ปุ่มออกมากว้าง 90px แทนที่จะเป็นสี่เหลี่ยมจัตุรัส 46x46) —
	   ใส่ !important + ตั้ง min-width/padding เองตรงๆ กันชนซ้ำ */
	width: 46px !important;
	height: 46px !important;
	min-width: 46px !important;
	padding: 0 !important;
	flex-shrink: 0;
	background: #f15a29;
	color: #fff;
	border: none;
	border-radius: 12px;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	/* 27 ก.ย. 69 (รอบ 39) — ปุ่มนี้ไม่เคยประกาศ font-family เอง เลยตกไปใช้ Arial (default ของ <button>
	   ในเบราว์เซอร์ ไม่ inherit จาก parent เอง) — ไม่มีข้อความให้เห็นในปุ่มนี้ก็จริง (มีแค่ไอคอน) แต่ใส่ไว้
	   ให้สอดคล้อง/กันปัญหาซ่อนเร้นถ้าวันหลังมีข้อความ/aria-label แสดงผลด้วยฟอนต์นี้ */
	font-family: inherit;
}

/* ปุ่ม "ค้นหาแบบละเอียด" / "ซ่อนตัวกรอง" — สีเทาเข้ม อยู่ในกล่อง ต่อจากแถว search (Version 79) */
.chsf-toggle-detail {
	display: flex;
	/* 25 ก.ย. 69 (รอบ 8.1) — mockup จัดกึ่งกลางเต็มความกว้างกล่อง (justify-content:center บนแถวเต็ม)
	   ไม่ใช่ชิดซ้ายแบบเดิม + padding ต้อง 12px 0 4px ไม่ใช่ margin-top:10px/padding:0 +
	   font-weight ต้อง 700 ไม่ใช่ 600 */
	width: 100%;
	justify-content: center;
	align-items: center;
	gap: 6px;
	padding: 12px 0 4px;
	background: none;
	border: none;
	color: #3b3733;
	font-size: 13px;
	font-weight: 700;
	cursor: pointer;
	/* 27 ก.ย. 69 (รอบ 39) — พี่บอสเจอปุ่มนี้ ("ค้นหาแบบละเอียด") เป็น system default font (Arial) —
	   สาเหตุเดียวกับ .chsf-search-btn ด้านบน: <button> ไม่ inherit font-family จาก parent เองตาม default
	   ของเบราว์เซอร์ ทั้งที่อยู่ใน .chsf-box ที่ตั้ง Noto Sans Thai ไว้แล้ว ต้องสั่งตรงๆ */
	font-family: inherit;
}
.chsf-chevron { transition: transform 0.25s ease; }
.chsf-shell[data-expanded="1"] .chsf-chevron { transform: rotate(180deg); }

/* แท็บ — โผล่เฉพาะตอนกาง เกาะขอบบนกล่อง
   25 ก.ย. 69 (รอบ 9) — mockup เป็นเม็ดยา (pill) ไม่มีเส้นขอบเลย ไม่ใช่กล่องเหลี่ยมขอบบาง: gap 4px
   (ไม่ใช่ margin-right ทีละปุ่ม), ไม่มี border, active = พื้นเข้ม #3b3733/ตัวขาว, ไม่ active = พื้นเทา
   อ่อน #E4E1D6/ตัวเทา #72716a (ค่าจริงจาก filterActiveTabStyle/filterInactiveTabStyle ใน mockup source) */
.chsf-tabs {
	display: flex;
	gap: 4px;
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height 0.25s ease, opacity 0.2s ease;
	margin-top: 0;
}
/* 26 ก.ย. 69 (รอบ 12) — .chsf-tabs ย้ายออกมาเป็นพี่น้องอยู่ "เหนือ" .chsf-box แล้ว (ไม่ได้ซ้อนในกล่อง
   อีกต่อไป) ตรงกับ mockup ที่แท็บเกาะติดขอบบนกล่องแบบไร้รอยต่อ (มุมบนซ้ายกล่องเป็นมุมแหลมพอดีใต้แท็บ
   ตัวแรก) — เดิมมี margin-top:12px เพราะตอนนั้นแท็บอยู่ถัดจากปุ่ม toggle-detail ข้างในกล่อง ต้องมีระยะ
   ห่างจากปุ่มด้านบน ตอนนี้แท็บเป็นชิ้นแรกสุดใน .chsf-shell ไม่มีอะไรอยู่เหนือมันแล้ว จึงตัด margin-top
   ออก ให้แท็บกับกล่องชนกันสนิทไม่มีช่องว่างเหมือน mockup */
.chsf-shell[data-expanded="1"] .chsf-tabs {
	max-height: 60px;
	opacity: 1;
}
.chsf-tab {
	border: none;
	cursor: pointer;
	font-family: inherit;
	font-size: 13.5px;
	font-weight: 700;
	padding: 10px 24px;
	border-radius: 12px 12px 0 0;
	background: #E4E1D6;
	color: #72716a;
}
.chsf-tab.is-active {
	background: #3b3733;
	color: #ffffff;
}
.chsf-tab-count { color: #8a887f; font-weight: 600; }

/* ชุด filter เต็ม — โผล่เฉพาะตอนกาง */
.chsf-full {
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height 0.3s ease, opacity 0.25s ease;
}
.chsf-shell[data-expanded="1"] .chsf-full {
	max-height: 2400px;
	opacity: 1;
	margin-top: 14px;
}

/* 25 ก.ย. 69 (รอบ 9) — เดิมทุก field เรียงเป็นบล็อกซ้อนกันแนวตั้งทั้งหมด (.chsf-panel เดิมห่อ 4 op-dd
   ไว้ด้วยกันเป็นก้อนเดียว) ไม่ตรง mockup ที่ field ทุกตัว (รวม "ระดับชั้นที่รับ") เรียงแถวเดียวกัน
   แนวนอนเป็นกริด — แก้โดยแยกแต่ละ field เป็น .chsf-panel ของตัวเอง แล้วห่อด้วย .chsf-field-row ที่
   เป็น flex row เดียว ทุก field เป็น flex item ของแถวเดียวกันหมด (wrap ตามพื้นที่เหลือ) */
.chsf-field-row {
	display: flex;
	gap: 14px;
	flex-wrap: wrap;
	align-items: flex-start;
	margin-bottom: 18px;
}
.chsf-panel[data-panel] { display: none; }
/* ค่า default ทั่วไปสำหรับ .chsf-panel นอก field-row (เผื่ออนาคต) */
.chsf-panel.chsf-panel-visible { display: block; }
/* field แต่ละตัวใน field-row ต้องเป็น column flex (label ซ้อนบน control) ไม่ใช่ block เฉยๆ —
   specificity สูงกว่ากฎ default ด้านบนตรงๆ เพื่อ override */
.chsf-field-row > .chsf-panel.chsf-panel-visible {
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.chsf-field-cat, .chsf-field-province, .chsf-field-price, .chsf-field-uni {
	flex: 1;
	min-width: 170px;
}
.chsf-field-grade { flex: 1.2; min-width: 210px; }
.chsf-field-contest-subtype { flex: 1.6; min-width: 260px; }

.chsf-label, .chsf-mini-label {
	display: block;
	/* 25 ก.ย. 69 (รอบ 9) — mockup ใช้ 12px/600/#72716a ไม่ใช่ 700/#3b3733 */
	font-size: 12px;
	font-weight: 600;
	color: #72716a;
}

/* ช่องดรอปดาวน์ (รูปแบบกิจกรรม/ช่วงค่าใช้จ่าย) + ช่องค้นหาแบบเลือก (จังหวัด/มหาวิทยาลัย) —
   ห่อ <select> จริงไว้ในกล่อง "op-dd" แบบเดียวกับ mockup เพื่อความสม่ำเสมอของ border/สี/ระยะ
   (ตัว <select> เองโปร่งใส ไม่มีกรอบ เหมือนที่ทำกับช่องค้นหาใน round 8.1) */
.chsf-dd-wrap {
	border: 1px solid #DCD9CF;
	border-radius: 10px;
	background: #fff;
	padding: 10px 14px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
}
.chsf-select {
	flex: 1;
	min-width: 0;
	border: none !important;
	background: transparent !important;
	appearance: none !important;
	-webkit-appearance: none !important;
	outline: none !important;
	padding: 0 !important;
	font-size: 13.5px !important;
	font-family: inherit !important;
	color: #3b3733 !important;
	cursor: pointer;
	/* 26 ก.ย. 69 (รอบ 12 จุดที่ 3) — พี่บอสเจอว่าทุกช่อง textbox/dropdown สูงเกินสัดส่วนที่ออกแบบ —
	   ตรวจ live เจอว่าธีมมีกฎ global ใน min.css (โหลดทีหลังปลั๊กอินนี้) บังคับ height:42px ให้กับทั้ง
	   <select> และ input ทุกตัวในเว็บ — จุดนี้ (.chsf-select) ไม่เคยประกาศ height/line-height ของตัวเองไว้
	   เลยแม้แต่บรรทัดเดียว (ต่างจาก .chsf-search-input ที่ประกาศ height:100%!important กันไว้แล้วตั้งแต่
	   รอบ 8.1) เลยไม่มีอะไรไปแข่ง specificity กับกฎของธีมเลย ธีมเลยชนะแบบไม่มีคู่แข่งแล้วบวกเพิ่มเข้าไปกับ
	   padding 10px 14px ของกล่องห่อ (.chsf-dd-wrap) กลายเป็นสูงบวมเกิน — ใส่ height/line-height ของตัวเอง
	   เพื่อให้ select สูงพอดีตามเนื้อหา (ตรงกับ mockup ที่ .op-dd ไม่ได้บังคับ height เลย ปล่อยให้ font-size
	   13px + padding 10px 12px กำหนดความสูงโดยธรรมชาติ) */
	height: 20px !important;
	line-height: 20px !important;
}
.chsf-dd-icon { flex: 0 0 auto; pointer-events: none; transition: transform 0.2s ease; }

/* 26 ก.ย. 69 (รอบ 13, จุดที่ 6-7) — combo dropdown เลือกได้หลายค่า แทน <select> เดี่ยวสำหรับ
   "รูปแบบกิจกรรม"/"จังหวัด/พื้นที่"/"มหาวิทยาลัย" — ดีไซน์ popup เองทั้งหมด (native <select> popup
   แต่งไม่ได้เลยในเบราว์เซอร์ส่วนใหญ่ นี่คือสาเหตุของจุดที่ 7) โครง: ปุ่ม trigger (หน้าตาเหมือน
   .chsf-dd-wrap เดิมทุกอย่าง) + panel popup ลอยด้านล่างตอนคลิกเปิด — reuse .op-chk/.op-box (สไตล์
   checkbox เดียวกับ "ระดับชั้นที่รับ") ข้างในแทนการประดิษฐ์ checkbox ใหม่ */
.chsf-combo {
	position: relative;
}
.chsf-combo-trigger {
	/* all:unset ล้างสไตล์ default ของ <button> รวมถึงกฎ global ของธีม (min-width/padding บนปุ่มทุกตัว
	   ที่เจอปัญหาเดียวกันมาแล้วตอนแก้ .chsf-search-btn รอบ 8.1) ในทีเดียว แล้วประกาศใหม่ทั้งหมดเอง
	   แทนที่จะไล่ !important ทีละ property แบบเดิม — property ที่ประกาศต่อจาก all:unset ในกฎเดียวกัน
	   จะชนะเสมอ (ลำดับใน rule เดียวกัน ไม่ใช่เรื่อง specificity) */
	all: unset;
	box-sizing: border-box;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	width: 100%;
	border: 1px solid #DCD9CF;
	border-radius: 10px;
	background: #fff;
	padding: 10px 14px;
	cursor: pointer;
	font-family: inherit;
}
.chsf-combo-trigger[aria-expanded="true"] .chsf-dd-icon {
	transform: rotate(180deg);
}
.chsf-combo-summary {
	flex: 1;
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	text-align: left;
	font-size: 13.5px;
	color: #3b3733;
}
.chsf-combo-panel {
	position: absolute;
	top: calc(100% + 6px);
	left: 0;
	right: 0;
	z-index: 30;
	background: #fff;
	border: 1px solid #DCD9CF;
	border-radius: 10px;
	padding: 10px;
	box-shadow: 0 8px 24px rgba(59, 55, 51, 0.14);
	box-sizing: border-box;
}

/* 26 ก.ย. 69 (รอบ 17) — พี่บอสขอให้ popup ของ "จังหวัด/พื้นที่" และ "ช่วงค่าใช้จ่าย" ขยายกว้างไปทาง
   ซ้ายตอนเปิด (กว้างกว่าตัว trigger เดิม) กันข้อความในตัวเลือกตกบรรทัด (เช่น "กรุงเทพฯ และปริมณฑล",
   "1,001-1,500 บาท") — ค่า default ของ .chsf-combo-panel (left:0; right:0) ทำให้ popup กว้างเท่า
   trigger เป๊ะเสมอ ซึ่งแคบไปสำหรับ 2 ช่องนี้โดยเฉพาะ (ชื่อจังหวัดยาว/ตัวเลขคั่นขีดของช่วงราคา) — ยึด
   ขอบขวาไว้ที่เดิม (right:0) แล้วดันขอบซ้ายออกไปแทน (left:auto + width ชัดเจน) ให้ popup ล้นออกทาง
   ซ้ายเท่านั้น ไม่ดันช่องอื่นทางขวาให้เบี้ยว — เฉพาะเดสก์ท็อป (>600px) เพราะมือถือ field แต่ละช่องกว้าง
   เต็มจออยู่แล้ว (ดูรอบ 9) popup เดิม (left:0;right:0) จึงกว้างเต็มพอแล้วไม่ตกบรรทัด ไม่ต้องขยายซ้ำ */
@media (min-width: 601px) {
	.chsf-field-province .chsf-combo-panel,
	.chsf-field-price .chsf-combo-panel {
		left: auto;
		right: 0;
		width: 260px;
	}
}
.chsf-combo-panel[hidden] {
	display: none;
}
.chsf-combo-search {
	display: flex;
	align-items: center;
	gap: 8px;
	border: 1px solid #E4E0D6;
	border-radius: 8px;
	padding: 8px 10px;
	margin-bottom: 8px;
	flex-shrink: 0;
}
.chsf-combo-search-input {
	all: unset;
	box-sizing: border-box;
	flex: 1;
	min-width: 0;
	font-size: 13px;
	font-family: inherit;
	color: #3b3733;
}
.chsf-combo-options {
	max-height: 220px;
	overflow-y: auto;
	overflow-x: hidden;
	display: flex;
	flex-direction: column;
	gap: 2px;
}
.chsf-combo-option {
	border-radius: 6px;
}
.chsf-combo-option[hidden] {
	display: none;
}
.chsf-combo-option .op-chk {
	padding: 6px 6px;
	border-radius: 6px;
}
.chsf-combo-option .op-chk:hover {
	background: #F7F6F3;
}
.chsf-combo-empty {
	padding: 8px 4px 2px;
	margin: 0;
}

/* กล่องระดับชั้นที่รับ — สลับจาก grid ช่องละเอียด/มีขอบ เป็นกล่องขาวใบเดียวห่อ checkbox แบบ chip
   เล็กๆ เรียงต่อกัน ตรงกับ mockup ทุกจุด (border/radius/padding ของกล่อง, ขนาด/สี checkbox, เส้นคั่น
   ก่อนปุ่ม "+ ดูเพิ่มเติม") */
.chsf-grade-box {
	border: 1px solid #DCD9CF;
	border-radius: 10px;
	background: #fff;
	padding: 8px 14px;
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.chsf-grade-grid {
	display: flex;
	flex-wrap: wrap;
	gap: 4px 10px;
}
.chsf-grade-secondary {
	padding-top: 4px;
	border-top: 1px solid #F2F1EE;
}
.op-chk {
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: 13.5px;
	color: #3b3733;
	padding: 2px 0;
	cursor: pointer;
}
/* 26 ก.ย. 69 (รอบ 14) — พี่บอสเจอวงกลม checkbox โผล่มา 2 วง + มี horizontal scroll ในกล่อง
   จังหวัด/มหาวิทยาลัย — สาเหตุจริง: checkbox ของ combo dropdown (.chsf-combo-cb) ไม่เคยถูกซ่อนแบบ
   เดียวกับ .chsf-grade-cb เลย (ลืมใส่ตอนสร้าง component รอบ 13) เลยเห็น checkbox ดิบของเบราว์เซอร์
   (วงกลม) โผล่มาซ้อนกับ .op-box ที่ดีไซน์เอง (สี่เหลี่ยมมุมมน) — พอไม่ได้ position:absolute ออกจาก flow
   checkbox ดิบก็กิน layout width เพิ่มด้วย ดันแถวให้กว้างเกิน container จนต้อง scroll แนวนอน พอซ่อน
   ให้ position:absolute เหมือนเดิม ทั้ง 2 อาการหายไปพร้อมกัน — รวม selector กับ .chsf-grade-cb ไปเลย
   (ใช้ pattern เดียวกันทั้งไฟล์ ไม่ต้องแยก rule) */
.chsf-grade-cb, .chsf-combo-cb { position: absolute; opacity: 0; width: 0; height: 0; }
.op-box {
	width: 14px;
	height: 14px;
	border-radius: 5px;
	border: 1.5px solid #DCD9CF;
	background: #fff;
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
}
.op-check-icon { display: none; }
.chsf-grade-cb:checked + .op-box,
.chsf-combo-cb:checked + .op-box {
	background: #f15a29;
	border-color: #f15a29;
}
.chsf-grade-cb:checked + .op-box .op-check-icon,
.chsf-combo-cb:checked + .op-box .op-check-icon { display: block; }
.chsf-grade-more {
	display: flex;
	align-items: center;
	gap: 4px;
	padding-top: 4px;
	border-top: 1px solid #F2F1EE;
	background: none;
	border-left: none;
	border-right: none;
	border-bottom: none;
	color: #f15a29;
	font-size: 12px;
	font-weight: 600;
	font-family: inherit;
	cursor: pointer;
}
.chsf-grade-more[hidden], .chsf-grade-secondary[hidden] { display: none; }

/* แถว "คุณสมบัติเพิ่มเติม" (ทั่วไป) + ชิปประเภทย่อยการแข่งขัน — mockup ใช้ชิปพื้นทึบ ไม่มีเส้นขอบเลย
   ทั้งสองแบบ ต่างกันแค่สีตอนเลือก (คุณสมบัติเพิ่มเติม = เข้ม #3b3733, ประเภทย่อยแข่งขัน = ส้มอ่อน #FDECDD) */
.chsf-panel.chsf-panel-visible.chsf-props-row {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 10px;
	margin-bottom: 18px;
}
.chsf-chip-wrap {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.op-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	border-radius: 999px;
	padding: 6px 14px;
	font-size: 12.5px;
	font-weight: 600;
	color: #72716a;
	background: #F2F1EE;
	cursor: pointer;
	user-select: none;
}
.op-chip input { display: none; }
.chsf-chip-solid:has(input:checked) {
	background: #3b3733;
	color: #fff;
}
.chsf-chip-solid.is-checked {
	background: #3b3733;
	color: #fff;
}
.chsf-chip-contest {
	font-size: 11.5px;
	padding: 5px 11px;
}
.chsf-chip-contest:has(input:checked) {
	background: #FDECDD;
	color: #B34817;
}
.chsf-chip-contest.is-checked {
	background: #FDECDD;
	color: #B34817;
}
.chsf-empty-note {
	font-size: 12px;
	color: #99968c;
	margin: 0;
}

.chsf-result-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	/* 25 ก.ย. 69 (รอบ 9) — mockup ใช้ padding-top 12px ไม่ใช่ 8px */
	padding-top: 12px;
	border-top: 1px solid #EFECE4;
}
.chsf-result-text { font-size: 15px; color: #3b3733; }
.chsf-result-count { color: #f15a29; font-weight: 700; }
.chsf-submit-btn {
	flex-shrink: 0;
	background: #f15a29;
	color: #fff;
	border: none;
	border-radius: 999px;
	padding: 14px 36px;
	font-size: 16px;
	font-weight: 700;
	cursor: pointer;
	font-family: inherit;
}

/* หน้าผลการค้นหา */
.chsf-results-page { max-width: 1100px; margin: 0 auto; padding: 32px 16px 64px; }
/* 25 ก.ย. 69 (รอบ 7) — หัวข้อ section ทุกจุดใช้ AnantasonWeb ตามที่พี่บอสขอ (จุดนี้ปกติ inherit
   AnantasonWeb จาก body อยู่แล้วเพราะไม่ได้อยู่ใต้ .chsf-box ที่ตั้ง Noto Sans Thai ไว้ แต่ประกาศตรงๆ
   ไว้ด้วยกันสับสน/กันเผื่อบริบทเปลี่ยนในอนาคต) */
.chsf-results-title { font-family: 'AnantasonWeb', 'Sukhumvit Set', 'Tahoma'; margin: 0 0 18px; font-size: 22px; font-weight: 700; color: #3b3733; line-height: 1.5em; }
.chsf-results-summary { margin: 18px 0; font-size: 14px; color: #72716a; }
.chsf-empty-state { text-align: center; padding: 48px 16px; color: #72716a; }
.chsf-results-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 20px;
}
.chsf-pagination { display: flex; justify-content: center; gap: 6px; margin-top: 32px; }
.chsf-pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	border: 1px solid #E4E1D8;
	border-radius: 8px;
	color: #3b3733;
	text-decoration: none;
	padding: 0 10px;
}
.chsf-pagination .page-numbers.current { background: #f15a29; color: #fff; border-color: #f15a29; }

/* 25 ก.ย. 69 (รอบ 9) — feedback พี่บอส: "mobile layout ยังเละอยู่เลย" — ไล่เทียบ Homepage-Mobile.dc.html
   ตอนที่ 2 แยกต่างหาก (ไม่ใช่แค่ reflow เดสก์ท็อป) พบว่ามือถือเป็นดีไซน์คนละชุดจริงๆ ไม่ใช่กริดแนวนอน
   ที่ wrap ลงมาเฉยๆ: field ทุกตัว (รวมระดับชั้น) เรียงซ้อนกันเต็มความกว้างทีละแถว, แท็บแบ่งครึ่งเท่ากัน
   เต็มแถว, ปุ่ม "ดูผลลัพธ์ทั้งหมด" กว้างเต็มแถวอยู่ใต้ตัวเลขผลลัพธ์ (ไม่ใช่ชิดขวา), ช่องค้นหาตอนหุบรวม
   ปุ่มแว่นขยายไว้ในกล่องเดียวกัน (ปุ่มเล็กลงเหลือ 36×36 ฝังในกล่องขาวใบเดียว ไม่ใช่กล่องแยก 46×46
   เหมือนเดสก์ท็อป) — ค่าทุกจุดก็อปตรงจาก mockup มือถือ ไม่ได้ประมาณเอง */
@media (max-width: 600px) {
	.chsf-results-grid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }

	.chsf-box { padding: 14px; }

	.chsf-tab {
		flex: 1;
		padding: 10px 4px;
		font-size: 12.5px;
		text-align: center;
	}

	/* ช่องค้นหาตอนหุบ: มือถือรวมช่องค้นหา+ปุ่มแว่นขยายไว้ในกล่องขาวใบเดียว (ย้าย border/bg จาก
	   .chsf-search-pill ขึ้นมาไว้ที่ .chsf-collapsed-row แทน แล้วลดขนาดปุ่มลงเหลือ 36×36/radius 10px) */
	.chsf-collapsed-row {
		gap: 0;
		align-items: center;
		background: #ffffff;
		border: 1px solid #E4E0D6;
		border-radius: 12px;
		padding: 0 6px 0 14px;
		height: 46px;
		box-sizing: border-box;
	}
	.chsf-search-pill {
		border: none;
		background: transparent;
		padding: 0;
		height: auto;
	}
	.chsf-search-btn {
		width: 36px !important;
		height: 36px !important;
		min-width: 36px !important;
		border-radius: 10px;
	}

	/* field ทุกตัวใน field-row ซ้อนกันเต็มความกว้างทีละแถว ไม่ใช่กริดแนวนอน */
	.chsf-field-row { flex-direction: column; gap: 14px; }
	.chsf-field-cat, .chsf-field-province, .chsf-field-price, .chsf-field-uni,
	.chsf-field-grade, .chsf-field-contest-subtype {
		flex: none;
		min-width: 0;
		width: 100%;
	}
	.chsf-label, .chsf-mini-label { font-size: 11.5px; }
	.chsf-dd-wrap { padding: 10px 12px; }
	.chsf-select { font-size: 13px !important; }
	/* 26 ก.ย. 69 (รอบ 13) — combo dropdown ใหม่ ปรับขนาดมือถือให้ตรงกับ .chsf-dd-wrap/.chsf-select เดิม */
	.chsf-combo-trigger { padding: 10px 12px; }
	.chsf-combo-summary { font-size: 13px; }
	.op-chk { gap: 6px; font-size: 12.5px; }
	.op-chip { padding: 5px 11px; font-size: 11.5px; }
	.chsf-props-row { flex-wrap: wrap; }

	.chsf-result-row {
		flex-direction: column;
		align-items: stretch;
		gap: 10px;
	}
	.chsf-result-text { font-size: 14.5px; }
	.chsf-submit-btn { width: 100%; padding: 14px 0; font-size: 15px; }
}
