/*!
 * CompareX v1.2.1
 * ทุกคลาสขึ้นต้นด้วย cx- เพื่อไม่ให้ชนกับ CSS ของธีม
 * สีทั้งหมดอยู่ใน :root ด้านล่าง — เปลี่ยนธีมได้จากจุดเดียว
 *
 * ชุดสีอ้างอิงจากธีม Kashiwa (Flatsome → Customize → Style → Colors)
 *   Primary  #1F2F7F  น้ำเงินกรมท่า — หัวข้อ ชื่อรุ่น ขอบปุ่มเทียบ
 *   Cyan     #00AEEF  ฟ้าสด (สี link hover ของเว็บ) — ปุ่มดูสินค้า
 *   Red      #D92B1F  แดง — ราคา
 */
:root{
  /* แบรนด์ */
  --cx-navy:#1F2F7F;      --cx-navy-dk:#182561;   --cx-navy-bd:#C3CDE8;  --cx-navy-bg:#EEF1F9;
  --cx-cyan:#00AEEF;      --cx-cyan-dk:#0090C8;
  --cx-red:#D92B1F;

  /* ข้อความและพื้นผิว */
  --cx-ink:#333333;       --cx-ink2:#5A5A5A;      --cx-ink3:#7A7A7A;     --cx-ink4:#BBBBBB;
  --cx-bg:#FAFAFA;        --cx-sf:#FFFFFF;        --cx-sf2:#F7F7F7;
  --cx-line:#EDEDED;      --cx-line2:#DDDDDD;

  --cx-r:12px; --cx-r-sm:8px;
}
.cx-root *,.cx-ov *,.cx-single *{box-sizing:border-box}
body.cx-lock{overflow:hidden}

/* ── ปุ่มเทียบในกรอบรูป เผยตอนชี้เมาส์ ───────────────────
   ซ่อนด้วย opacity/visibility ไม่ใช่เลื่อนออกนอกกรอบ
   เพราะเราไม่รู้ว่าธีมตัด overflow หรือเปล่า                        */
cx-bar.cx-ov{position:absolute;z-index:7;
  display:inline-flex;box-sizing:border-box;margin:0;padding:0;width:auto;max-width:calc(100% - 16px);
  background:#FFFFFF;border:1px solid var(--cx-navy-bd);border-radius:999px;
  box-shadow:0 1px 5px rgba(20,28,60,.14);
  opacity:0;visibility:hidden;transform:translateY(4px);pointer-events:none;
  transition:opacity .18s ease,transform .18s ease,visibility .18s}

cx-bar.cx-at-bottom-right{bottom:8px;right:8px}
cx-bar.cx-at-bottom-left {bottom:8px;left:8px}
cx-bar.cx-at-top-right   {top:8px;right:8px}
cx-bar.cx-at-top-left    {top:8px;left:8px}

/* ⚠ ปุ่มขึ้นเฉพาะตอนลูกค้าเปิดโหมดเปรียบเทียบเท่านั้น
   คลาส cx-mode-on อยู่ที่ <html> ใส่ตั้งแต่เฟรมแรกด้วย JS
   ไม่งั้นปุ่มจะแวบขึ้นมาก่อนแล้วค่อยหายไป

   เดิมปุ่มโผล่ตอนชี้เมาส์ ซึ่งลูกค้าที่ไม่บังเอิญชี้โดนจะไม่รู้เลยว่ามีฟีเจอร์นี้
   ตอนนี้ให้สวิตช์เป็นตัวบอกว่าฟีเจอร์มีอยู่ แล้วเปิดเมื่อต้องการ            */
html.cx-mode-on .cx-has cx-bar.cx-ov{
  opacity:1;visibility:visible;transform:none;pointer-events:auto}
html.cx-mode-on .cx-has:hover cx-bar.cx-ov,
html.cx-mode-on .cx-has:focus-within cx-bar.cx-ov{
  opacity:1;visibility:visible;transform:none;pointer-events:auto}

cx-bar.cx-ov .cx-ov-b{display:inline-flex;align-items:center;gap:5px;width:auto;
  min-height:30px;line-height:1;padding:0 13px;margin:0;
  border:0;border-radius:999px;background:none;box-shadow:none;
  text-transform:none;letter-spacing:0;white-space:nowrap;
  color:var(--cx-navy);font-size:12.5px;font-weight:600;cursor:pointer;
  font-family:inherit;text-align:center}
cx-bar.cx-ov .cx-ov-b svg{width:14px;height:14px;flex:0 0 14px}
cx-bar.cx-ov .cx-ov-b:hover,
cx-bar.cx-ov .cx-ov-b:focus{background:var(--cx-navy);color:#fff;outline:none}

/* จอสัมผัสไม่มี hover → พอเปิดโหมดแล้วแสดงตลอด
   ⚠ ต้องมี html.cx-mode-on กำกับด้วย ไม่งั้นบนมือถือปุ่มจะขึ้นทุกใบ
     ตั้งแต่ยังไม่ได้เปิดโหมด ซึ่งผิดจากที่ตกลงกันไว้                  */
@media (hover:none){
  html.cx-mode-on cx-bar.cx-ov{opacity:1;visibility:visible;transform:none;pointer-events:auto}
}

/* ═══════════════════════════════════════════════════════════
   สวิตช์เปิด-ปิดโหมดเปรียบเทียบ (ลูกค้าเป็นคนกด)
   ═══════════════════════════════════════════════════════════ */
.cx-modesw,.cx-modesw *{box-sizing:border-box}
.cx-tg-box{border:1px solid var(--cx-line2);border-radius:10px;padding:11px 12px;
  background:var(--cx-sf);transition:.18s}
html.cx-mode-on .cx-tg-box{border-color:var(--cx-navy);background:var(--cx-navy-bg)}

/* ── แบบย่อ สำหรับวางเหนือรายการสินค้า ──────────────────────
   พื้นที่เหนือรายการสินค้ากว้างเต็มจอ ถ้าใช้กล่องเต็มความกว้าง
   จะได้กล่องโล่งที่มีสวิตช์เล็กๆ อยู่มุมซ้าย ดูเหมือนลืมใส่อะไรไว้
   แบบนี้ย่อพอดีเนื้อหา และย้ายคำอธิบายมาต่อท้ายในบรรทัดเดียวกัน  */
.cx-modesw-inline{margin:0 0 16px}
.cx-modesw-inline .cx-tg-box{display:inline-flex;align-items:center;gap:12px;
  flex-wrap:wrap;padding:9px 14px;border-radius:999px}
.cx-modesw-inline .cx-tg{width:auto}
.cx-modesw-inline .cx-tg-h{margin:0;padding-left:12px;
  border-left:1px solid var(--cx-line2)}
html.cx-mode-on .cx-modesw-inline .cx-tg-h{border-left-color:var(--cx-navy-bd)}
@media(max-width:560px){
  .cx-modesw-inline .cx-tg-box{display:flex;border-radius:10px}
  .cx-modesw-inline .cx-tg-h{padding-left:0;border-left:0;margin-top:6px;flex-basis:100%}
}

.cx-tg{display:flex;align-items:center;gap:9px;width:100%;
  margin:0;padding:0;border:0;background:none;box-shadow:none;
  cursor:pointer;font-family:inherit;text-align:left;min-height:24px}
.cx-tg-t{flex:0 0 38px;width:38px;height:21px;border-radius:999px;
  background:var(--cx-line2);padding:2px;display:flex;justify-content:flex-start;
  transition:background .18s}
.cx-tg-k{width:17px;height:17px;border-radius:50%;background:#fff;
  box-shadow:0 1px 2px rgba(0,0,0,.18);transition:transform .18s}
.cx-tg.on .cx-tg-t{background:var(--cx-navy)}
.cx-tg.on .cx-tg-k{transform:translateX(17px)}
.cx-tg-l{font-size:13.5px;color:var(--cx-ink);font-weight:600;line-height:1.3}
.cx-tg.on .cx-tg-l{color:var(--cx-navy)}
.cx-tg:focus-visible{outline:2px solid var(--cx-navy);outline-offset:3px;border-radius:4px}
.cx-tg-h{margin:7px 0 0;font-size:11.5px;color:var(--cx-ink3);line-height:1.55}
html.cx-mode-on .cx-tg-h{color:var(--cx-navy)}

/* แถบบอกสถานะเหนือรายการสินค้า */
.cx-notice{display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:var(--cx-navy-bg);border:1px solid var(--cx-navy-bd);
  border-radius:10px;padding:10px 12px;margin:0 0 16px;box-sizing:border-box}
.cx-notice span{display:flex;align-items:center;gap:8px;min-width:0;
  font-size:13px;color:var(--cx-ink2);line-height:1.5}
.cx-notice b{color:var(--cx-navy);font-weight:600}
.cx-notice svg{flex:0 0 auto;color:var(--cx-navy)}
.cx-notice-x{flex:0 0 auto;width:30px;height:30px;min-height:30px;padding:0;margin:0;
  border:0;border-radius:50%;background:none;box-shadow:none;color:var(--cx-ink3);
  cursor:pointer;display:flex;align-items:center;justify-content:center}
.cx-notice-x:hover{background:#fff;color:var(--cx-ink)}
@media(max-width:560px){
  .cx-notice{padding:9px 10px}
  .cx-notice span{font-size:12px}
}

/* ── ปุ่มเทียบในหน้าสินค้า ─────────────────────────────────
   ปุ่มอยู่ข้างปุ่มหยิบใส่ตะกร้า ในฟอร์มเดียวกัน

   ⚠ ธีมหลายตัวไม่ได้ตั้ง box-sizing ให้ทุก element
     ถ้าไม่บังคับตรงนี้ padding จะไปบวกกับความกว้าง แล้วปุ่มล้นคอลัมน์
   ⚠ ต้องเขียนทับสไตล์ปุ่มของธีมให้ครบทุกช่อง (margin/box-shadow/
     text-transform/letter-spacing) ธีมอย่าง Flatsome ตั้งค่าพวกนี้
     ให้ปุ่มทุกตัวในเว็บ ถ้าไม่ล้างจะได้ปุ่มตัวใหญ่พิมพ์ใหญ่ไม่เข้าพวก   */
.cx-single,.cx-single *{box-sizing:border-box}
.cx-single-button{display:inline-flex;vertical-align:middle;align-self:center;margin:0 0 0 10px}

/* ทางออกสุดท้าย — ใส่ให้เฉพาะกล่องที่วัดแล้วพบว่าปุ่มยังตกบรรทัดล่าง
   ⚠ JS เป็นคนเติมคลาสนี้ ไม่ได้เขียนดักไว้ตามชื่อคลาสของธีม
     เพราะเราไม่รู้ล่วงหน้าว่าธีมไหนตั้ง flex-direction:column ไว้ตรงไหน
   บังคับเท่าที่จำเป็นจริงๆ ไม่แตะ justify หรือ gap เดิมของธีม     */
.cx-cartrow{display:flex;flex-wrap:wrap;align-items:center;flex-direction:row}

.cx-cta{display:inline-flex;align-items:center;justify-content:center;gap:7px;
  width:auto;min-height:42px;padding:0 18px;margin:0;line-height:1;
  border:1px solid var(--cx-navy);border-radius:999px;
  background:var(--cx-sf);color:var(--cx-navy);box-shadow:none;
  font-family:inherit;font-size:13.5px;font-weight:600;
  text-transform:none;letter-spacing:0;white-space:nowrap;
  cursor:pointer;transition:.15s}
.cx-cta:hover,.cx-cta:focus{background:var(--cx-navy);color:#fff;outline:none}
.cx-cta:focus-visible{outline:2px solid var(--cx-navy);outline-offset:3px}
.cx-cta .cx-ico{flex:0 0 auto}

/* บรรทัดบอกจำนวนรุ่น — ใต้ฟอร์มตะกร้าทั้งก้อน
   ต้องเบากว่าข้อความ "จัดส่งฟรีทั่วไทย" ที่อยู่ถัดลงไป
   ไม่งั้นสองบรรทัดนี้จะแย่งสายตากันเอง                         */
.cx-single-note{margin:10px 0 0}
.cx-nline{display:inline-flex;align-items:flex-start;gap:6px;
  font-size:12.5px;color:var(--cx-ink3);line-height:1.6}
.cx-nline svg{flex:0 0 auto;margin-top:2px}
.cx-nline b{color:var(--cx-navy);font-weight:600}
.cx-nline em{font-style:normal;color:var(--cx-ink4)}

/* จอแคบ — ปุ่มตะกร้าของธีมมักกินเต็มความกว้าง ปุ่มเทียบจึงตกลงมาบรรทัดล่าง
   ให้กินเต็มความกว้างตามไปด้วย จะได้ไม่เป็นปุ่มเล็กลอยอยู่ข้างซ้าย */
@media(max-width:549.98px){
  .cx-single-button{display:flex;margin:10px 0 0;width:100%}
  .cx-cta{width:100%}
}

/* ── ชีต / แผง ───────────────────────────────────────────── */
.cx-scrim{position:fixed;inset:0;z-index:99990;background:rgba(20,24,32,.45);
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .25s,visibility .25s}
.cx-root.open .cx-scrim,.cx-root.open2 .cx-scrim{opacity:1;visibility:visible;pointer-events:auto}

/* ⚠ ซ่อนด้วย visibility เสมอ ห้ามพึ่ง translateY อย่างเดียว
   บั๊กจริงที่เจอใน 1.2.0: บนเดสก์ท็อปแผงตั้งจาก top:4vh แต่ซ่อนด้วย
   translateY(101%) ของความสูงตัวเอง ซึ่งไม่พอจะพ้นจอ เหลือขอบบน
   กับที่จับโผล่ค้างอยู่ประมาณ 3% ของความสูงหน้าจอ                     */
.cx-picker,.cx-sheet{position:fixed;left:0;right:0;bottom:0;z-index:99991;background:var(--cx-bg);
  border-radius:16px 16px 0 0;display:flex;flex-direction:column;overflow:hidden;
  transform:translateY(101%);opacity:0;visibility:hidden;pointer-events:none;
  transition:transform .3s cubic-bezier(.2,.85,.25,1),opacity .25s,visibility .3s;
  font-family:inherit;color:var(--cx-ink);font-size:15px;line-height:1.6}
.cx-picker{max-height:86vh}
.cx-sheet{height:93vh}
.cx-root.open  .cx-picker,
.cx-root.open2 .cx-sheet{transform:none;opacity:1;visibility:visible;pointer-events:auto}

@media(min-width:900px){
  /* ตั้ง bottom:auto ให้ชัด ไม่งั้น top+bottom+height ตีกัน */
  .cx-sheet{left:4vw;right:4vw;top:4vh;bottom:auto;height:92vh;
    max-width:1180px;margin:0 auto;border-radius:14px;
    transform:translateY(24px) scale(.99)}
  .cx-root.open2 .cx-sheet{transform:none}
  .cx-picker{left:auto;right:50%;bottom:0;width:520px;transform:translate(50%,101%)}
  .cx-root.open .cx-picker{transform:translate(50%,0)}
}

.cx-grab{width:38px;height:4px;background:var(--cx-line2);border-radius:2px;margin:9px auto 0;flex:none}
@media(min-width:900px){.cx-sheet .cx-grab{display:none}}

.cx-head{display:flex;align-items:center;gap:12px;padding:12px 16px 14px;flex:none}
.cx-head h3{flex:1;margin:0;font-size:17px;font-weight:700;min-width:0;color:var(--cx-navy)}
/* ปุ่มปิด — วงกลมพอดีนิ้ว ไม่ใหญ่จนแย่งความสนใจจากหัวข้อ
   บังคับ padding:0 และ flex กลาง เพราะธีมมักตั้ง padding ให้ button ทุกตัว
   ถ้าไม่บังคับ เครื่องหมายกากบาทจะเบี้ยวออกจากกลางวง */
.cx-x,.cx-x2{width:36px;height:36px;min-height:36px;padding:0;margin:0;
  border-radius:50%;border:1px solid var(--cx-line2);
  background:var(--cx-sf);color:var(--cx-ink2);line-height:1;cursor:pointer;flex:none;
  display:flex;align-items:center;justify-content:center;box-shadow:none}
.cx-x:hover,.cx-x2:hover{background:var(--cx-sf2);border-color:var(--cx-ink4);color:var(--cx-ink)}
.cx-x:focus-visible,.cx-x2:focus-visible{outline:2px solid var(--cx-navy);outline-offset:2px}

/* ── ช่องค้นหา ─────────────────────────────────────────────
   ⚠ ไอคอนกับ input เป็นพี่น้องกันใน flex ห้ามกลับไปวางไอคอนแบบ absolute
     เดิมวางลอยแล้วเว้น padding-left ให้ข้อความหลบ แต่ธีมเขียนทับ padding
     ของ input ได้ ข้อความเลยวิ่งไปทับไอคอน (เจอจริงบนหน้า Kashiwa)
     จัดเป็น flex แล้วสองอันนี้ไม่มีทางซ้อนกันได้ ไม่ว่าธีมจะตั้งอะไรมา     */
.cx-search{padding:0 16px 10px}
.cx-sbox{display:flex;align-items:center;gap:9px;padding:0 13px;
  min-height:46px;border:1px solid var(--cx-line2);
  border-radius:var(--cx-r-sm);background:var(--cx-sf)}
.cx-sbox:focus-within{border-color:var(--cx-navy);box-shadow:0 0 0 3px var(--cx-navy-bg)}
.cx-mag{flex:0 0 auto;display:flex;align-items:center;color:var(--cx-ink3);pointer-events:none}
.cx-sbox input{flex:1 1 auto;min-width:0;width:100%;
  margin:0;padding:0;border:0;background:none;box-shadow:none;outline:none;
  min-height:44px;height:44px;font:inherit;font-size:15px;color:var(--cx-ink)}
.cx-sbox input:focus{border:0;box-shadow:none;outline:none}
/* ปุ่มกากบาทที่เบราว์เซอร์ใส่มาเองใน input[type=search] — ซ่อน ใช้ของเราแทน */
.cx-sbox input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.cx-sub{margin:0;padding:0 16px 10px;font-size:13px;color:var(--cx-ink3)}
.cx-list{flex:1;overflow-y:auto;padding:0 16px 12px}
.cx-item{display:flex;align-items:center;gap:11px;background:var(--cx-sf);
  border:1px solid var(--cx-line);border-radius:var(--cx-r-sm);padding:9px 11px;
  margin-bottom:8px;cursor:pointer}
.cx-item:has(input:checked){border-color:var(--cx-navy);background:var(--cx-navy-bg)}
.cx-item.off{opacity:.45;cursor:not-allowed}
.cx-item input{width:20px;height:20px;flex:none;accent-color:var(--cx-navy);margin:0}
.cx-thumb{width:46px;height:46px;flex:none;background:var(--cx-sf2);border-radius:6px;padding:4px;
  display:flex;align-items:center;justify-content:center}
.cx-thumb img{max-width:100%;max-height:100%;object-fit:contain}
.cx-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.cx-meta b{font-size:14px;font-weight:600;color:var(--cx-navy)}
.cx-cat{font-size:11.5px;color:var(--cx-ink3)}
.cx-price{text-align:right;flex:none;font-size:15px;font-weight:700;white-space:nowrap;
  display:flex;flex-direction:column;gap:1px;color:var(--cx-red)}
.cx-diff{font-size:11.5px;font-weight:500;color:var(--cx-ink3)}
.cx-empty{text-align:center;padding:26px 12px;color:var(--cx-ink3);font-size:14px}
.cx-foot{flex:none;background:var(--cx-sf);border-top:1px solid var(--cx-line);padding:12px 16px}
.cx-go{width:100%;min-height:48px;border:0;border-radius:var(--cx-r-sm);background:var(--cx-cyan);
  color:#fff;font-size:15px;font-weight:700;cursor:pointer;font-family:inherit}
.cx-go:hover{background:var(--cx-cyan-dk)}
.cx-go:disabled{background:var(--cx-line2);color:#fff;cursor:default}

/* ── เนื้อหาตารางเทียบ ───────────────────────────────────── */
.cx-body{flex:1;overflow-y:auto;padding:0 16px 28px}
.cx-lead{font-size:13px;font-weight:600;color:var(--cx-ink3);margin:2px 0 10px;letter-spacing:.3px}
.cx-grid{display:grid;gap:12px}
@media(min-width:760px){.cx-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));align-items:start}}
.cx-card{background:var(--cx-sf);border:1px solid var(--cx-line);border-radius:var(--cx-r);
  overflow:hidden;display:flex;flex-direction:column}
.cx-card-top{display:flex;gap:13px;padding:14px}
.cx-card-img{width:70px;height:70px;flex:none;background:var(--cx-sf2);border-radius:var(--cx-r-sm);
  padding:6px;display:flex;align-items:center;justify-content:center}
.cx-card-img img{max-width:100%;max-height:100%;object-fit:contain}
.cx-card-i{flex:1;min-width:0}
.cx-card-i h4{margin:0;font-size:14.5px;line-height:1.45;font-weight:700;color:var(--cx-navy)}
.cx-card-p{font-size:20px;font-weight:700;margin-top:6px;color:var(--cx-red)}
.cx-oos{font-size:12px;color:var(--cx-ink3);margin-top:2px}

/* สเปกบนการ์ด — แถวสลับสี ทุกใบแสดงชุดเดียวกัน */
.cx-pts{border-top:1px solid var(--cx-line);flex:1}
.cx-kv{display:flex;justify-content:space-between;gap:10px;padding:9px 14px;font-size:12.5px;
  background:var(--cx-sf)}
.cx-kv:nth-child(even){background:var(--cx-sf2)}

/* สเปกส่วนที่เกิน 5 บรรทัดแรก — ซ่อนไว้จนกว่าจะกดปุ่มกาง
   ⚠ ต้องซ่อนด้วย display:none ไม่ใช่ visibility หรือ max-height
     เพราะการ์ดทุกใบต้องสูงเท่ากันเป๊ะ ไม่งั้นแถวจะเหลื่อมกันตอนกวาดตาเทียบ
   ลายสลับสีไม่เพี้ยน เพราะที่ซ่อนเป็นแถวท้ายเสมอ ไม่ใช่แถวกลาง */
.cx-more{display:none}
.cx-grid.cx-all .cx-more{display:flex}

/* ส่วนล่างที่พับเก็บไว้ — ใช้คลาส ไม่ใช้แอตทริบิวต์ hidden
   เพราะจอแคบต้องเปิดค้างไว้ด้วย CSS ถ้าใช้ hidden แล้วมาสั่ง display ทับ
   โปรแกรมอ่านหน้าจอบางตัวยังถือว่าเนื้อหาถูกซ่อนอยู่ */
.cx-detail.cx-hid{display:none}

/* สเปกเหมือนกันทุกข้อ — เกิดกับสินค้าลายลิขสิทธิ์ที่ใช้เครื่องเดียวกัน
   บอกตรงๆ ดีกว่าปล่อยให้ตารางว่างจนลูกค้าคิดว่าระบบพัง */
.cx-same{background:var(--cx-navy-bg);border:1px solid var(--cx-navy-bd);
  border-radius:10px;padding:12px 14px;margin:0 0 12px}
.cx-same b{display:block;font-size:14px;color:var(--cx-navy);margin-bottom:3px}
.cx-same span{font-size:12.5px;color:var(--cx-ink2);line-height:1.6}

/* สเปกที่ยังไม่มีรุ่นไหนเขียนไว้ — บอกให้รู้ว่าขาดอะไร แต่ไม่ให้เด่นกว่าข้อมูลจริง */
.cx-blank{background:var(--cx-sf);border:1px dashed var(--cx-line2);border-radius:10px;
  padding:12px 14px;margin:0 0 12px}
.cx-bchip{display:inline-flex;align-items:baseline;gap:6px;background:var(--cx-sf2);
  border:1px solid var(--cx-line);border-radius:999px;padding:4px 11px;
  margin:0 6px 6px 0;font-size:13px;color:var(--cx-ink2)}
.cx-bchip em{font-style:normal;color:var(--cx-ink4);font-size:12px}
.cx-bnote{margin:6px 0 0;font-size:12px;color:var(--cx-ink3);line-height:1.6}
.cx-kv+.cx-kv{border-top:1px solid var(--cx-line)}
.cx-k{color:var(--cx-ink3);flex:none}
.cx-vv{color:var(--cx-ink);font-weight:600;text-align:right;min-width:0}
.cx-na{color:var(--cx-ink4);font-weight:400}
.cx-pts-empty{font-size:13px;color:var(--cx-ink3);padding:12px 14px}
.cx-card-act{padding:11px 14px;border-top:1px solid var(--cx-line)}
.cx-buy{display:block;text-align:center;min-height:42px;line-height:42px;border-radius:var(--cx-r-sm);
  background:var(--cx-cyan);color:#fff!important;font-size:13.5px;font-weight:700;text-decoration:none}
.cx-buy:hover{background:var(--cx-cyan-dk);color:#fff!important}

.cx-toggle{width:100%;min-height:50px;background:var(--cx-sf);border:1px solid var(--cx-navy-bd);
  border-radius:var(--cx-r);font-size:14.5px;font-weight:600;color:var(--cx-navy);margin:20px 0 0;
  cursor:pointer;font-family:inherit}
.cx-toggle:hover{background:var(--cx-navy-bg)}
.cx-detail{margin-top:16px}
.cx-gt{font-size:12.5px;font-weight:700;color:var(--cx-ink3);letter-spacing:.4px;
  margin:20px 0 9px}
.cx-srow{background:var(--cx-sf);border:1px solid var(--cx-line);border-radius:var(--cx-r);
  overflow:hidden;margin-bottom:10px}
.cx-srow h5{margin:0;padding:11px 14px 10px;font-size:13.5px;font-weight:700;color:var(--cx-ink);
  border-bottom:1px solid var(--cx-line)}
.cx-srow h5 em{display:block;font-style:normal;font-size:12px;font-weight:400;
  color:var(--cx-ink3);margin-top:3px;line-height:1.5}

/* รายละเอียดอื่นที่ระบุไว้ — แยกกล่องต่อรุ่นตามเดิม (แบบ 1)
   จุดนำหน้าทำด้วย ::before เพื่อให้บรรทัดที่ยาวเกินหนึ่งบรรทัด
   ย่อหน้าเข้าไปตรงกัน ไม่ไหลกลับมาชิดขอบซ้ายใต้จุด */
.cx-extra{font-size:12.5px;color:var(--cx-ink2);line-height:1.9;padding:10px 14px}
.cx-extra>div{padding-left:14px;position:relative}
.cx-extra>div::before{content:"•";position:absolute;left:0;color:var(--cx-ink4)}
.cx-note{background:var(--cx-sf);border:1px solid var(--cx-line);border-radius:var(--cx-r);
  padding:13px 15px;font-size:12.5px;color:var(--cx-ink2);line-height:1.7;margin-top:16px}
.cx-note b{color:var(--cx-ink)}

/* ═══════════════════════════════════════════════════════════
   จอแคบ — กางทุกอย่างไว้ให้ตั้งแต่แรก ไม่ต้องกดปุ่ม

   ที่ 760px ขึ้นไป การ์ดวางเรียงข้างกัน ปุ่มกางอยู่ใต้แถวการ์ด
   เห็นได้ทันทีโดยไม่ต้องเลื่อน กดแล้วการ์ดยืดลงพร้อมกันทุกใบ

   ต่ำกว่านั้นการ์ดเรียงลงมาทีละใบ ปุ่มจึงไปอยู่ใต้การ์ดใบสุดท้าย
   เทียบ 4 รุ่นก็ต้องปัดผ่านการ์ดทั้ง 4 ใบไปกดปุ่ม แล้วปัดกลับขึ้นมาอ่าน
   ซึ่งไม่มีเหตุผลอะไรเลย เพราะบนจอแคบยังไงก็ต้องเลื่อนอ่านอยู่แล้ว
   จึงกางไว้ให้เลย แล้วซ่อนปุ่มทิ้ง

   ⚠ ใช้เบรกพอยต์เดียวกับที่ .cx-grid สลับเป็นหลายคอลัมน์ (บรรทัด 239)
     ถ้าแก้ที่หนึ่งต้องแก้อีกที่ด้วย ไม่งั้นจะมีช่วงความกว้างที่การ์ด
     เรียงลงมาทีละใบ แต่ปุ่มยังโผล่อยู่ใต้ใบสุดท้าย                    */
@media(max-width:759.98px){
  .cx-toggle{display:none}
  .cx-more{display:flex}
  .cx-detail.cx-hid{display:block}
  .cx-detail{margin-top:20px}
}

/* ── toast ───────────────────────────────────────────────── */
.cx-toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,12px);z-index:99999;
  background:var(--cx-navy);color:#fff;padding:12px 18px;border-radius:var(--cx-r-sm);
  font-size:14px;opacity:0;visibility:hidden;pointer-events:none;transition:.26s;
  max-width:88vw;text-align:center}
.cx-toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
@media (prefers-reduced-motion:reduce){
  cx-bar.cx-ov,.cx-picker,.cx-sheet,.cx-scrim,.cx-toast{transition:none}
}
