/* ==========================================================================
   Tiện ích dùng chung của lõi CMS – nạp cho MỌI theme qua _SeoHead (trước CSS của theme):
   đồng ý cookie, nút liên hệ nổi, popup / thanh thông báo, chọn biến thể, so sánh, gợi ý tìm kiếm,
   giỏ & báo giá online, đánh giá sản phẩm. Theme muốn đổi kiểu chỉ cần viết đè cùng class,
   hoặc đặt biến --cms-primary / --cms-text / --cms-muted.
   ========================================================================== */
/* ---------- Đồng ý cookie ---------- */
.cookie-consent { position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 1080; max-width: 560px; margin: 0 auto; padding: 16px 18px; border-radius: 18px; background: rgba(255,255,255,.92); -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%); box-shadow: 0 20px 50px -12px rgba(15,23,42,.35), 0 0 0 1px rgba(15,23,42,.06); font-size: 14px; animation: cookie-in .5s cubic-bezier(.34,1.4,.64,1); }
.cookie-consent p { margin: 0 0 12px; color: #1c1c1e; }
.cookie-consent a { font-weight: 600; }
.cookie-actions { display: flex; gap: 8px; justify-content: flex-end; }
.cookie-btn { border: 0; border-radius: 10px; padding: 8px 16px; font-weight: 600; background: rgba(118,118,128,.12); color: #1c1c1e; }
.cookie-btn.primary { background: var(--cms-primary, #007aff); color: #fff; }
@keyframes cookie-in { from { opacity: 0; transform: translateY(20px); } }

/* ---------- Nút liên hệ nổi ---------- */
.fc { position: fixed; bottom: 18px; z-index: 1040; display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
.fc-right { right: 18px; } .fc-left { left: 18px; align-items: flex-start; }
.fc-items { display: flex; flex-direction: column; gap: 10px; align-items: inherit; }
.fc-btn { position: relative; width: 52px; height: 52px; border-radius: 50%; border: 0; display: grid; place-items: center; color: #fff; background: var(--fc); box-shadow: 0 8px 22px -6px color-mix(in srgb, var(--fc) 70%, transparent), 0 2px 6px rgba(0,0,0,.12); transition: transform .25s cubic-bezier(.34,1.4,.64,1); text-decoration: none; }
.fc-btn:hover { color: #fff; transform: scale(1.08); }
.fc-zalo { font-weight: 800; font-size: 12px; letter-spacing: -.02em; }
.fc-label { position: absolute; right: calc(100% + 10px); top: 50%; translate: 6px -50%; white-space: nowrap; background: rgba(28,28,30,.88); color: #fff; font-size: 13px; font-weight: 600; padding: 5px 10px; border-radius: 9px; opacity: 0; pointer-events: none; transition: opacity .2s, translate .25s; }
.fc-left .fc-label { right: auto; left: calc(100% + 10px); translate: -6px -50%; }
.fc-btn:hover .fc-label { opacity: 1; translate: 0 -50%; }
.fc-menu .fc-items { opacity: 0; pointer-events: none; transform: translateY(10px) scale(.9); transform-origin: bottom right; transition: opacity .25s, transform .3s cubic-bezier(.34,1.4,.64,1); }
.fc-menu.open .fc-items { opacity: 1; pointer-events: auto; transform: none; }
.fc-menu.open .fc-label { opacity: 1; translate: 0 -50%; }
.fc-toggle .fc-i-close, .fc-menu.open .fc-toggle .fc-i-open { display: none; }
.fc-menu.open .fc-toggle .fc-i-close { display: grid; }
.fc-pulse { animation: fc-pulse 2.2s infinite; }
@keyframes fc-pulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--fc) 55%, transparent); } 70% { box-shadow: 0 0 0 16px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } }
@media (prefers-reduced-motion: reduce) { .fc-pulse, .fc-items .fc-btn { animation: none !important; } }

/* ---------- Popup / thanh thông báo ---------- */
.cms-popup[hidden] { display: none !important; }
.cms-popup-modal { position: fixed; inset: 0; z-index: 1090; display: grid; place-items: center; padding: 16px; background: rgba(0,0,0,0); -webkit-backdrop-filter: blur(0); backdrop-filter: blur(0); transition: background .3s, backdrop-filter .3s; }
.cms-popup-modal.show { background: rgba(0,0,0,.4); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.cms-popup-box { position: relative; width: min(460px, 100%); max-height: 90vh; overflow: auto; background: #fff; border-radius: 22px; box-shadow: 0 30px 80px -20px rgba(0,0,0,.45); transform: translateY(20px) scale(.95); opacity: 0; transition: transform .45s cubic-bezier(.34,1.3,.64,1), opacity .3s; }
.show .cms-popup-box { transform: none; opacity: 1; }
.cms-popup-img { display: block; width: 100%; max-height: 260px; object-fit: cover; }
.cms-popup-body { padding: 22px 24px 24px; text-align: center; }
.cms-popup-body h3 { font-size: 1.35rem; font-weight: 750; margin-bottom: 8px; }
.cms-popup-content { color: #4b5563; }
.cms-popup-content p:last-child { margin-bottom: 0; }
.cms-popup-btn { display: inline-block; margin-top: 16px; padding: 11px 26px; border-radius: 12px; background: var(--pc); color: #fff; font-weight: 650; text-decoration: none; }
.cms-popup-btn:hover { color: #fff; filter: brightness(1.08); }
.cms-popup-close { position: absolute; top: 10px; right: 10px; z-index: 2; width: 32px; height: 32px; border-radius: 50%; border: 0; background: rgba(0,0,0,.45); color: #fff; font-size: 20px; line-height: 1; }
.cms-popup-slidein { position: fixed; right: 18px; bottom: 90px; z-index: 1085; width: min(360px, calc(100vw - 36px)); }
.cms-popup-slidein .cms-popup-box { transform: translateX(30px); }
.cms-popup-bar { position: fixed; left: 0; right: 0; top: 0; z-index: 1085; background: var(--pc); color: #fff; transform: translateY(-100%); transition: transform .4s cubic-bezier(.22,1,.36,1); }
.cms-popup-bar.show { transform: none; }
.cms-bar-inner { display: flex; align-items: center; justify-content: center; gap: 14px; padding: 10px 52px 10px 16px; font-size: 14.5px; flex-wrap: wrap; text-align: center; }
.cms-bar-inner p { margin: 0; display: inline; }
.cms-popup-bar .cms-popup-btn { margin: 0; padding: 6px 14px; background: #fff; color: var(--pc); font-size: 13.5px; }
.cms-popup-bar .cms-popup-close { top: 50%; translate: 0 -50%; background: rgba(255,255,255,.2); }
body.has-popup-bar { padding-top: 44px; transition: padding .4s; }
.cms-popup-box:not(:has(.cms-popup-img)) .cms-popup-body { padding-top: 30px; } .cms-popup-body h3 { padding: 0 22px; }
.lang-code { display: inline-block; min-width: 24px; padding: 1px 5px; border-radius: 5px; background: rgba(0,0,0,.08); font-size: 11px; font-weight: 700; letter-spacing: .03em; text-align: center; }

/* Thông số, biến thể, bộ lọc, so sánh */
.stock-out { display: inline-block; background: #fff1f2; color: #be123c; font-weight: 600; border-radius: 8px; padding: .25rem .75rem; font-size: .9rem; }
.variant-group { margin-bottom: 1rem; }
.variant-label { font-size: .95rem; margin-bottom: .4rem; color: var(--cms-muted, #6b7280); }
.variant-label b { color: var(--cms-text, #1f2933); }
.variant-options { display: flex; flex-wrap: wrap; gap: .5rem; }
.variant-opt { border: 1.5px solid #d1d5db; background: #fff; color: var(--cms-text, #1f2933); border-radius: 10px; padding: .45rem .9rem; font-weight: 500; transition: border-color .15s, box-shadow .15s; }
.variant-opt:hover { border-color: var(--cms-primary, #0d6efd); }
.variant-opt.active { border-color: var(--cms-primary, #0d6efd); box-shadow: 0 0 0 2px rgba(13,110,253,.18); color: var(--cms-primary, #0d6efd); }
.variant-opt.unavailable { opacity: .45; text-decoration: line-through; }
.compare-bar { position: fixed; left: 50%; bottom: 16px; translate: -50% 0; z-index: 1040; display: flex; align-items: center; gap: .75rem; background: #fff; border-radius: 14px; padding: .6rem .9rem; box-shadow: 0 8px 30px rgba(0,0,0,.18); font-size: .9rem; max-width: calc(100vw - 24px); }
.compare-table { min-width: 640px; }
.compare-table th.compare-label, .compare-table tbody th { width: 180px; color: var(--cms-muted, #6b7280); font-weight: 600; background: #f8fafc; }
.compare-table thead th { vertical-align: top; min-width: 180px; }
.compare-img { width: 140px; height: 140px; object-fit: cover; border-radius: 10px; }
.compare-table tr.compare-diff td { background: #fffbeb; }
.price-from { color: var(--cms-muted, #6b7280); font-size: .85em; }

/* ---------- Gợi ý tìm kiếm (phase 21) ---------- */
.search-suggest { position: absolute; left: 0; right: 0; top: calc(100% + 6px); z-index: 1050; background: #fff; border-radius: 14px; box-shadow: 0 12px 40px rgba(15,23,42,.16); padding: 6px; max-height: 70vh; overflow-y: auto; }
.search-suggest a { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 10px; color: inherit; }
.search-suggest a:hover, .search-suggest a.active { background: #f1f5f9; }
.search-suggest img, .search-suggest .ss-ph { width: 40px; height: 40px; border-radius: 8px; object-fit: cover; flex: none; background: #f1f5f9; }
.search-suggest .ss-text { display: flex; flex-direction: column; min-width: 0; }
.search-suggest .ss-title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.search-suggest .ss-title b { color: var(--cms-primary, #0d6efd); }
.search-suggest small { color: #64748b; }
.search-suggest .ss-all { justify-content: center; color: var(--cms-primary, #0d6efd); font-weight: 600; border-top: 1px solid #eef2f7; border-radius: 0 0 10px 10px; margin-top: 4px; }
mark { background: #fff3bf; padding: 0 2px; border-radius: 3px; }

/* ---------- Giỏ yêu cầu báo giá (phase 21) ---------- */
.quote-fab { position: fixed; left: 16px; bottom: 16px; z-index: 1039; background: var(--cms-primary, #0d6efd); color: #fff !important; padding: .6rem 1rem; border-radius: 999px; box-shadow: 0 8px 24px color-mix(in srgb, var(--cms-primary, #0d6efd) 35%, transparent); font-weight: 600; }
.quote-fab b { display: inline-block; min-width: 1.5em; padding: 0 .4em; margin-left: .25rem; border-radius: 999px; background: #fff; color: var(--cms-primary, #0d6efd); text-align: center; }
.quote-table td { vertical-align: middle; }
.quote-table .q-prod { display: flex; align-items: center; gap: .75rem; min-width: 240px; }
.quote-table .q-prod img { width: 56px; height: 56px; object-fit: cover; border-radius: 10px; }
.quote-table .q-prod small { display: block; color: #64748b; }
.quote-table .q-price, .quote-table .q-sum { white-space: nowrap; }
.q-qty { display: inline-flex; align-items: center; border: 1px solid #dfe3ea; border-radius: 10px; overflow: hidden; }
.q-qty button { border: 0; background: #f6f7f9; width: 34px; height: 36px; font-size: 1.1rem; }
.q-qty input { width: 56px; border: 0; text-align: center; height: 36px; -moz-appearance: textfield; }
.q-qty input::-webkit-inner-spin-button { -webkit-appearance: none; }
.q-del { border: 0; background: none; color: #94a3b8; font-size: 1rem; }
.q-del:hover { color: #dc2626; }
.variant-picker.need-choose { animation: need-choose .4s 2; border-radius: 12px; outline: 2px solid #f59e0b; outline-offset: 6px; }
@keyframes need-choose { 50% { transform: translateX(6px); } }

/* ---------- Báo giá xem online (phase 22) ---------- */
.qo-card { background: #fff; border-radius: 18px; box-shadow: 0 6px 30px rgba(15,23,42,.08); padding: 32px; }
.qo-head { display: flex; justify-content: space-between; gap: 24px; flex-wrap: wrap; border-bottom: 2px solid var(--cms-primary, #0d6efd); padding-bottom: 18px; margin-bottom: 18px; }
.qo-logo { max-height: 56px; max-width: 220px; margin-bottom: 8px; display: block; }
.qo-company { font-weight: 700; font-size: 1.2rem; }
.qo-title { font-size: 2rem; font-weight: 800; color: var(--cms-primary, #0d6efd); letter-spacing: .02em; }
.qo-muted { color: #64748b; }
.qo-customer { background: #f1f5f9; border-radius: 12px; padding: 14px 18px; margin-bottom: 18px; }
.qo-table thead th { background: var(--cms-primary, #0d6efd); color: #fff; border: 0; font-weight: 600; }
.qo-totals { max-width: 380px; margin-left: auto; }
.qo-totals > div:not(.qo-muted) { display: flex; justify-content: space-between; padding: 4px 0; }
.qo-totals .grand { border-top: 1px solid #e2e8f0; margin-top: 6px; padding-top: 10px !important; font-weight: 800; font-size: 1.25rem; color: var(--cms-primary, #0d6efd); }
.qo-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 22px; }
.qo-accept { display: flex; gap: 10px; flex: 1 1 420px; }
@media (max-width: 575.98px) { .qo-card { padding: 18px; } .qo-accept { flex-direction: column; } }
@media print { .site-header, .site-footer, .qo-actions, .breadcrumb-wrap, [data-fc], .quote-fab { display: none !important; } .qo-card { box-shadow: none; padding: 0; } }

/* ---------- Đánh giá sản phẩm (phase 23) ---------- */
.stars { color: #f59e0b; letter-spacing: 1px; }
.stars.big { font-size: 1.4rem; }
.reviews-top { display: grid; grid-template-columns: 180px 1fr auto; gap: 28px; align-items: center; margin: 18px 0; }
.reviews-score { text-align: center; }
.reviews-score .score { font-size: 3rem; font-weight: 800; line-height: 1; }
.reviews-bars { display: flex; flex-direction: column; gap: 4px; max-width: 420px; }
.rb-row { display: grid; grid-template-columns: 42px 1fr 36px; align-items: center; gap: 10px; border: 0; background: none; padding: 3px 6px; border-radius: 8px; font-size: .9rem; color: inherit; }
.rb-row:hover, .rb-row.active { background: #f1f5f9; }
.rb-bar { height: 8px; background: #e2e8f0; border-radius: 4px; overflow: hidden; }
.rb-bar i { display: block; height: 100%; background: #f59e0b; border-radius: 4px; }
.rb-n { color: #64748b; text-align: right; }
.reviews-tools { display: flex; align-items: center; gap: 10px; margin: 18px 0 6px; }
.review { border-bottom: 1px solid #eef2f7; padding: 16px 0; }
.review-head { display: flex; gap: 12px; align-items: center; }
.review-avatar { width: 40px; height: 40px; border-radius: 50%; background: #e0ecff; color: var(--cms-primary, #0d6efd); display: grid; place-items: center; font-weight: 700; flex: none; }
.review-meta { font-size: .85rem; color: #64748b; }
.review-verified { font-size: .78rem; color: #15803d; background: #dcfce7; border-radius: 999px; padding: 1px 8px; margin-left: 4px; }
.review-title { font-weight: 700; margin-top: 10px; }
.review-body { white-space: pre-wrap; margin-top: 4px; }
.review-images { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.review-images img { width: 96px; height: 96px; object-fit: cover; border-radius: 10px; }
.review-reply { background: #f8fafc; border-left: 3px solid var(--cms-primary, #0d6efd); border-radius: 0 10px 10px 0; padding: 10px 14px; margin-top: 12px; font-size: .95rem; }
.review-reply div { white-space: pre-wrap; }
.review-helpful { border: 1px solid #e2e8f0; background: #fff; border-radius: 999px; font-size: .8rem; padding: 3px 12px; margin-top: 10px; color: #475569; }
.review-helpful:disabled { opacity: .7; }
.star-input { display: inline-flex; flex-direction: row-reverse; gap: 4px; }
.star-input input { position: absolute; opacity: 0; pointer-events: none; }
.star-input label { font-size: 2rem; color: #cbd5e1; cursor: pointer; transition: color .15s, transform .15s; line-height: 1; }
.star-input label:hover, .star-input label:hover ~ label, .star-input input:checked ~ label { color: #f59e0b; }
.star-input label:active { transform: scale(.9); }
.star-input input:focus-visible + label { outline: 2px solid var(--cms-primary, #0d6efd); border-radius: 4px; }
.card-rating { font-size: .82rem; color: #64748b; }
@media (max-width: 767.98px) { .reviews-top { grid-template-columns: 1fr; } .reviews-score { text-align: left; } }

/* ---------- Captcha (captcha.js) ---------- */
.cms-captcha:empty { display: none; }
.cms-captcha.is-active { margin: 4px 0 2px; }
.cms-captcha-label { display: block; font-weight: 600; font-size: .88rem; margin-bottom: 6px; }
.cms-captcha-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.cms-captcha-img { width: 180px; height: 60px; border-radius: 10px; border: 1px solid rgba(15, 23, 42, .12); background: #eef3f9; object-fit: cover; }
.cms-captcha.is-loading .cms-captcha-img { opacity: .4; }
.cms-captcha-refresh { width: 40px; height: 40px; border-radius: 10px; border: 1px solid rgba(15, 23, 42, .15); background: #fff; font-size: 1.2rem; line-height: 1; color: var(--cms-text, #1f2933); cursor: pointer; transition: transform .3s; }
.cms-captcha-refresh:hover { transform: rotate(90deg); color: var(--cms-primary, #0d6efd); }
.cms-captcha-input { width: 150px !important; max-width: 100%; text-transform: uppercase; letter-spacing: .2em; font-weight: 700; }
.cms-captcha-input::placeholder { letter-spacing: normal; text-transform: none; font-weight: 400; }
.cms-captcha-msg { margin-top: 8px; font-size: .88rem; font-weight: 600; color: #c0262d; }
.cms-captcha-note, .cms-captcha-error { font-size: .78rem; color: var(--cms-muted, #6b7280); margin-top: 6px; }
.cms-captcha-error { color: #c0262d; }

/* ---------- Trung tâm tải về (phase 33) ---------- */
.cms-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.cms-dl-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 420px), 1fr)); gap: 14px; }
.cms-dl { display: flex; align-items: center; gap: 14px; min-width: 0; padding: 14px 16px; border-radius: 16px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); box-shadow: 0 1px 2px rgba(15, 23, 42, .04); transition: border-color .2s, box-shadow .2s, transform .2s; }
.cms-dl:hover { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 40%, transparent); box-shadow: 0 10px 28px -14px rgba(15, 23, 42, .3); transform: translateY(-1px); }
.cms-dl-icon { position: relative; flex: 0 0 56px; width: 56px; height: 56px; border-radius: 14px; display: grid; place-items: center; overflow: hidden; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, #fff); text-decoration: none; }
.cms-dl-icon img { width: 100%; height: 100%; object-fit: cover; }
.cms-dl-icon svg { margin-top: -10px; }
.cms-dl-ext { position: absolute; bottom: 6px; left: 50%; translate: -50% 0; font-size: 10px; font-weight: 800; letter-spacing: .04em; line-height: 1; padding: 2px 5px; border-radius: 5px; color: #fff; background: var(--cms-primary, #007aff); }
.cms-dl-ext-pdf { color: #d93025; background: #fdecea; } .cms-dl-ext-pdf .cms-dl-ext { background: #d93025; }
.cms-dl-ext-zip, .cms-dl-ext-rar, .cms-dl-ext-7z { color: #b26a00; background: #fff4e0; } :is(.cms-dl-ext-zip, .cms-dl-ext-rar, .cms-dl-ext-7z) .cms-dl-ext { background: #b26a00; }
.cms-dl-ext-exe, .cms-dl-ext-msi, .cms-dl-ext-apk, .cms-dl-ext-dmg { color: #1b7f3b; background: #e7f6ec; } :is(.cms-dl-ext-exe, .cms-dl-ext-msi, .cms-dl-ext-apk, .cms-dl-ext-dmg) .cms-dl-ext { background: #1b7f3b; }
.cms-dl-ext-xlsx, .cms-dl-ext-xls, .cms-dl-ext-csv { color: #107c41; background: #e6f4ec; } :is(.cms-dl-ext-xlsx, .cms-dl-ext-xls, .cms-dl-ext-csv) .cms-dl-ext { background: #107c41; }
.cms-dl-ext-docx, .cms-dl-ext-doc { color: #185abd; background: #e8f0fc; } :is(.cms-dl-ext-docx, .cms-dl-ext-doc) .cms-dl-ext { background: #185abd; }
.cms-dl-body { flex: 1; min-width: 0; }
/* Nhãn tài liệu (DownloadBadges): viên nhỏ trên tiêu đề, màu tự chọn (trống = màu theme). Hiệu ứng khung (is-glow) bật / tắt riêng:
   viền sáng + vệt sáng chạy chậm theo màu --dl-glow (mặc định vàng cam); tắt khi máy giảm chuyển động. */
.cms-dl-badge { display: inline-flex; align-items: center; gap: 4px; margin: 0 0 5px; padding: 2px 9px; border-radius: 999px; font-size: .72rem; font-weight: 700; line-height: 1.5; letter-spacing: .01em; color: #fff; background: var(--cms-primary, #007aff); vertical-align: middle; white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.cms-dl.is-glow { --dl-glow-c: var(--dl-glow, #f5b301); position: relative; overflow: hidden; border-color: color-mix(in srgb, var(--dl-glow-c) 60%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--dl-glow-c) 30%, transparent), 0 10px 26px -12px color-mix(in srgb, var(--dl-glow-c) 60%, transparent); }
.cms-dl.is-glow::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(105deg, transparent 38%, color-mix(in srgb, var(--dl-glow-c) 22%, rgba(255, 255, 255, .5)) 50%, transparent 62%); transform: translateX(-120%); animation: cms-dl-sheen 5s ease-in-out 1.2s infinite; }
@keyframes cms-dl-sheen { 0% { transform: translateX(-120%); } 35%, 100% { transform: translateX(120%); } }
@media (prefers-reduced-motion: reduce) { .cms-dl.is-glow::after { display: none; } }
.cms-dl-title { font-size: 1rem; font-weight: 650; line-height: 1.35; margin: 0 0 3px; overflow-wrap: anywhere; }
.cms-dl-title a { color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-dl-title a:hover { color: var(--cms-primary, #007aff); }
.cms-dl-ver { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 6px; font-size: .72em; font-weight: 700; vertical-align: .12em; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, transparent); }
.cms-dl-sum { margin: 0 0 4px; font-size: .88rem; color: var(--cms-muted, #6b7280); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cms-dl-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: .8rem; color: var(--cms-muted, #6b7280); }
.cms-dl-meta > * + *::before { content: "\00b7"; margin-right: 12px; opacity: .6; }
.cms-dl-meta a { color: inherit; }
.cms-dl-btn { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; padding: 9px 14px; border-radius: 12px; font-size: .88rem; font-weight: 650; color: #fff; background: var(--cms-primary, #007aff); text-decoration: none; white-space: nowrap; transition: filter .2s, transform .15s; }
.cms-dl-btn:hover { color: #fff; filter: brightness(1.08); }
.cms-dl-btn:active { transform: scale(.97); }
.cms-dl--compact { padding: 10px 12px; }
.cms-dl--compact .cms-dl-icon { flex-basis: 44px; width: 44px; height: 44px; border-radius: 11px; }
.cms-dl--compact .cms-dl-icon svg { width: 20px; height: 20px; }
.cms-dl--compact .cms-dl-ext { font-size: 9px; bottom: 4px; }
@media (max-width: 575.98px) {
    .cms-dl { gap: 12px; padding: 12px; }
    .cms-dl-btn span { display: none; }
    .cms-dl-btn { padding: 10px; }
}
.cms-dl-toolbar { display: flex; flex-wrap: wrap; gap: 14px 20px; align-items: center; margin-bottom: 22px; }
.cms-dl-search { display: flex; gap: 8px; flex: 1 1 320px; max-width: 560px; min-width: 0; }
.cms-dl-groups { display: flex; flex-wrap: wrap; gap: 8px; }
.cms-dl-groups a { padding: 6px 12px; border-radius: 999px; font-size: .88rem; border: 1px solid rgba(15, 23, 42, .12); color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-dl-groups a span { opacity: .6; margin-left: 2px; }
.cms-dl-groups a.active { background: var(--cms-primary, #007aff); border-color: var(--cms-primary, #007aff); color: #fff; }
.cms-dl-filter { color: var(--cms-muted, #6b7280); }
.cms-dl-empty { padding: 40px 16px; text-align: center; color: var(--cms-muted, #6b7280); }
/* Hộp tải về ở trang chi tiết */
.cms-dl-box { padding: 20px; border-radius: 20px; background: #fff; border: 1px solid rgba(15, 23, 42, .1); box-shadow: 0 18px 40px -24px rgba(15, 23, 42, .35); scroll-margin-top: 100px; }
.cms-dl-box-head { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; min-width: 0; }
.cms-dl-box-head > div { min-width: 0; }
.cms-dl-box-name { font-weight: 650; overflow-wrap: anywhere; color: var(--cms-text, #1f2933); }
.cms-dl-main { display: flex; width: 100%; align-items: center; justify-content: center; gap: 8px; padding: 13px 18px; border: 0; border-radius: 14px; font-weight: 700; font-size: 1rem; color: #fff; background: var(--cms-primary, #007aff); text-decoration: none; cursor: pointer; box-shadow: 0 10px 24px -12px var(--cms-primary, #007aff); transition: filter .2s, transform .15s; }
.cms-dl-main:hover { color: #fff; filter: brightness(1.08); }
.cms-dl-main:active { transform: scale(.98); }
.cms-dl-main:disabled { opacity: .65; cursor: progress; }
.cms-dl-main[hidden] { display: none; }
.cms-dl-lead { display: grid; gap: 12px; }
.cms-dl-lead[hidden] { display: none; }
.cms-dl-lead-note { display: flex; gap: 8px; margin: 0; font-size: .88rem; color: var(--cms-muted, #6b7280); }
.cms-dl-lead-note svg { flex: 0 0 auto; margin-top: 3px; }
.cms-dl-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 420px) { .cms-dl-row { grid-template-columns: 1fr; } }
.cms-dl-field { min-width: 0; }
.cms-dl-field label { display: block; font-size: .85rem; font-weight: 600; margin-bottom: 4px; color: var(--cms-text, #1f2933); }
.cms-dl-field input { width: 100%; }
.cms-dl-opt { font-weight: 400; color: var(--cms-muted, #6b7280); }
.cms-dl-err { margin-top: 4px; font-size: .8rem; color: #c0262d; }
.cms-dl-err:empty { display: none; }
.cms-dl-msg { padding: 10px 12px; border-radius: 10px; font-size: .9rem; font-weight: 600; color: #c0262d; background: #fdecea; }
.cms-dl-msg.is-ok { color: #1b7f3b; background: #e7f6ec; }
.cms-dl-msg[hidden] { display: none; }
.cms-dl-again { margin-top: 10px; padding: 0; border: 0; background: none; font-size: .82rem; color: var(--cms-muted, #6b7280); text-decoration: underline; cursor: pointer; }
.cms-dl-hash { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin-top: 16px; padding-top: 14px; border-top: 1px dashed rgba(15, 23, 42, .15); font-size: .78rem; color: var(--cms-muted, #6b7280); }
.cms-dl-hash code { flex: 1 1 100%; order: 3; font-size: .72rem; overflow-wrap: anywhere; color: var(--cms-text, #1f2933); background: rgba(15, 23, 42, .04); padding: 6px 8px; border-radius: 8px; }
.cms-dl-hash span { font-weight: 700; }
.cms-dl-copy { margin-left: auto; padding: 3px 10px; border-radius: 8px; border: 1px solid rgba(15, 23, 42, .15); background: #fff; font-size: .78rem; cursor: pointer; color: var(--cms-text, #1f2933); }
.cms-dl-side { margin-top: 18px; padding: 16px; border-radius: 18px; border: 1px solid rgba(15, 23, 42, .1); background: #fff; }
.cms-dl-side h2 { font-size: .95rem; font-weight: 700; margin: 0 0 10px; }
.cms-dl-product { display: flex; align-items: center; gap: 10px; padding: 8px; margin: 0 -8px; border-radius: 12px; color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-dl-product:hover { background: rgba(15, 23, 42, .04); color: var(--cms-primary, #007aff); }
.cms-dl-product img { width: 48px; height: 48px; border-radius: 10px; object-fit: cover; flex: 0 0 auto; }
.cms-dl-product span { flex: 1; min-width: 0; font-weight: 600; font-size: .9rem; }
.cms-dl-changes { padding-left: 1.2em; }
.cms-dl-changes li { margin: 4px 0; }
/* Mục "Tài liệu & phần mềm" trên trang sản phẩm */
.cms-product-downloads { margin-top: 28px; }
.cms-product-downloads h2 { font-size: 1.15rem; margin: 0 0 12px; }
.cms-dl-all { display: inline-block; margin-top: 12px; font-size: .9rem; font-weight: 600; }

/* ---------- Công cụ API (phase 34) ---------- */
.cms-sr { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.cms-tool { max-width: 860px; margin: 0 auto; }
.cms-tool-intro { margin-bottom: 18px; }
.cms-tool-form { display: grid; gap: 14px; }
.cms-tool-field { min-width: 0; }
.cms-tool-field label { display: block; font-weight: 600; font-size: .9rem; margin-bottom: 5px; color: var(--cms-text, #1f2933); }
.cms-tool-field :is(input, textarea, select) { width: 100%; }
.cms-tool-field textarea { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: .85rem; line-height: 1.5; word-break: break-all; min-height: 140px; }
.cms-tool--single .cms-tool-field input { text-align: center; font-size: 1.15rem; padding-block: 12px; letter-spacing: .02em; }
.cms-tool-help { margin-top: 4px; font-size: .82rem; color: var(--cms-muted, #6b7280); }
.cms-tool-err { margin-top: 4px; font-size: .82rem; font-weight: 600; color: #c0262d; }
.cms-tool-err:empty { display: none; }
.cms-tool-submit { display: flex; justify-content: center; }
.cms-tool:not(.cms-tool--single) .cms-tool-submit { justify-content: flex-start; }
.cms-tool-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-width: 170px; padding: 12px 26px; border: 0; border-radius: 12px; font-weight: 700; font-size: 1rem; color: #fff; background: var(--cms-primary, #007aff); cursor: pointer; box-shadow: 0 10px 22px -12px var(--cms-primary, #007aff); transition: filter .2s, transform .15s; }
.cms-tool-btn:hover { filter: brightness(1.08); }
.cms-tool-btn:active { transform: scale(.98); }
.cms-tool-btn:disabled { opacity: .7; cursor: progress; }
.cms-tool.is-loading .cms-tool-btn::before { content: ""; width: 16px; height: 16px; border-radius: 50%; border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; animation: cms-spin .7s linear infinite; }
@keyframes cms-spin { to { transform: rotate(360deg); } }
.cms-tool-result { margin-top: 22px; padding-top: 20px; border-top: 1px solid rgba(15, 23, 42, .08); animation: cms-tool-in .35s ease; }
.cms-tool-result[hidden] { display: none; }
@keyframes cms-tool-in { from { opacity: 0; transform: translateY(6px); } }
.cms-tool--single .cms-tool-html { text-align: center; }
.cms-tool-html { overflow-wrap: anywhere; color: var(--cms-text, #1f2933); }
.cms-tool-html :is(h1, h2, h3, h4) { font-size: 1.35rem; margin: 0 0 12px; }
.cms-tool-html p { margin: 0 0 8px; }
.cms-tool-msg { padding: 12px 14px; border-radius: 12px; font-weight: 600; color: #8a1c1c; background: #fdecea; text-align: center; }
.cms-tool-msg[hidden] { display: none; }
.cms-tool-textbox { position: relative; margin-top: 10px; }
.cms-tool-textbox[hidden] { display: none; }
.cms-tool-textbox pre { margin: 0; max-height: 420px; overflow: auto; padding: 16px 18px; border-radius: 14px; background: rgba(15, 23, 42, .05); border: 1px solid rgba(15, 23, 42, .08); font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: .85rem; line-height: 1.6; white-space: pre-wrap; word-break: break-all; color: var(--cms-text, #1f2933); }
.cms-tool-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 14px; }
.cms-tool-actions[hidden], .cms-tool-act[hidden] { display: none; }
.cms-tool-act { display: inline-flex; align-items: center; gap: 7px; padding: 10px 18px; border-radius: 12px; font-weight: 650; font-size: .92rem; cursor: pointer; border: 1px solid rgba(15, 23, 42, .15); background: #fff; color: var(--cms-text, #1f2933); }
.cms-tool-act:hover { border-color: var(--cms-primary, #007aff); color: var(--cms-primary, #007aff); }
.cms-tool-act--primary { border-color: transparent; background: var(--cms-primary, #007aff); color: #fff; }
.cms-tool-act--primary:hover { color: #fff; filter: brightness(1.08); }

/* ---------- Sơ đồ website (phase 35) ---------- */
.cms-hsm { display: grid; gap: 22px; }
.cms-hsm-group { padding: 22px 24px; border-radius: 18px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); }
.cms-hsm-group h2 { font-size: 1.25rem; margin: 0 0 12px; }
.cms-hsm-group h3 { font-size: 1rem; margin: 0 0 8px; }
.cms-hsm-group :is(h2, h3) a { color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-hsm-group :is(h2, h3) a:hover { color: var(--cms-primary, #007aff); }
.cms-hsm-list { list-style: none; margin: 0; padding: 0; columns: 3 240px; column-gap: 28px; }
.cms-hsm-list li { break-inside: avoid; padding: 4px 0 4px 16px; position: relative; overflow-wrap: anywhere; }
.cms-hsm-list li::before { content: ""; position: absolute; left: 2px; top: .85em; width: 6px; height: 6px; border-radius: 50%; background: var(--cms-primary, #007aff); opacity: .5; }
.cms-hsm-list a { color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-hsm-list a:hover { color: var(--cms-primary, #007aff); text-decoration: underline; }
.cms-hsm-children { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 18px 28px; margin-top: 10px; }
.cms-hsm-children .cms-hsm-list { columns: 1; }
.cms-hsm-group > .cms-hsm-list + .cms-hsm-children { padding-top: 14px; border-top: 1px dashed rgba(15, 23, 42, .12); }
.cms-hsm-empty { color: var(--cms-muted, #6b7280); }

/* ---------- Trung tâm hỗ trợ (phase 37) ---------- */
.cms-kb-hero { max-width: 760px; margin: 0 auto 32px; text-align: center; }
.cms-kb-search { position: relative; display: flex; gap: 8px; width: 100%; max-width: 680px; margin: 0 auto; }
.cms-kb-search-ico { position: absolute; left: 18px; top: 27px; translate: 0 -50%; color: var(--cms-muted, #6b7280); pointer-events: none; display: flex; }
.cms-kb-search input { flex: 1; min-width: 0; height: 54px; padding: 0 16px 0 48px; border-radius: 16px; border: 1px solid rgba(15, 23, 42, .14); background: #fff; font: inherit; color: var(--cms-text, #1f2933); box-shadow: 0 10px 30px -18px rgba(15, 23, 42, .35); }
.cms-kb-search input:focus { outline: none; border-color: var(--cms-primary, #007aff); box-shadow: 0 0 0 4px color-mix(in srgb, var(--cms-primary, #007aff) 15%, transparent); }
.cms-kb-search button { flex: none; padding: 0 22px; border: 0; border-radius: 16px; font-weight: 700; color: #fff; background: var(--cms-primary, #007aff); cursor: pointer; transition: filter .2s; }
.cms-kb-search button:hover { filter: brightness(1.08); }
.cms-kb-search .search-suggest { text-align: left; }
.cms-kb-count { color: var(--cms-muted, #6b7280); margin-bottom: 14px; }
.cms-kb-topics { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); gap: 14px; }
.cms-kb-topic { display: flex; gap: 14px; align-items: flex-start; min-width: 0; padding: 18px; border-radius: 18px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); color: var(--cms-text, #1f2933); text-decoration: none; transition: border-color .2s, box-shadow .2s, transform .2s; }
.cms-kb-topic:hover, .cms-kb-topic.is-active { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 45%, transparent); box-shadow: 0 14px 30px -18px rgba(15, 23, 42, .35); transform: translateY(-2px); color: var(--cms-text, #1f2933); }
.cms-kb-topic-ico { flex: none; width: 48px; height: 48px; border-radius: 14px; display: grid; place-items: center; font-size: 1.4rem; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, #fff); }
.cms-kb-topic-body { display: grid; gap: 2px; min-width: 0; }
.cms-kb-topic-name { font-weight: 700; line-height: 1.3; overflow-wrap: anywhere; }
.cms-kb-topic-desc { font-size: .88rem; color: var(--cms-muted, #6b7280); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cms-kb-topic-count { font-size: .78rem; font-weight: 600; color: var(--cms-primary, #007aff); }
.cms-kb-list { display: grid; gap: 10px; }
.cms-kb-item { display: flex; align-items: center; gap: 14px; min-width: 0; padding: 14px 16px; border-radius: 16px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); color: var(--cms-text, #1f2933); text-decoration: none; transition: border-color .2s, box-shadow .2s; }
.cms-kb-item:hover { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 40%, transparent); box-shadow: 0 10px 26px -16px rgba(15, 23, 42, .3); color: var(--cms-text, #1f2933); }
.cms-kb-item-ico { flex: none; width: 38px; height: 38px; border-radius: 11px; display: grid; place-items: center; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, #fff); }
.cms-kb-item--faq .cms-kb-item-ico { color: #b26a00; background: #fff4e0; }
.cms-kb-item-body { flex: 1; min-width: 0; display: grid; gap: 2px; }
.cms-kb-item-title { font-weight: 650; line-height: 1.35; overflow-wrap: anywhere; }
.cms-kb-item-sum { font-size: .88rem; color: var(--cms-muted, #6b7280); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cms-kb-item-meta { font-size: .78rem; color: var(--cms-muted, #6b7280); }
.cms-kb-item-go { flex: none; color: var(--cms-muted, #6b7280); transition: transform .2s; }
.cms-kb-item:hover .cms-kb-item-go { transform: translateX(3px); color: var(--cms-primary, #007aff); }
.cms-kb-item mark { background: color-mix(in srgb, #f5a524 30%, #fff); color: inherit; padding: 0 2px; border-radius: 3px; }
.cms-kb-faqs { display: grid; gap: 10px; }
.cms-kb-faq { border-radius: 16px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); transition: border-color .2s, box-shadow .2s; }
.cms-kb-faq[open] { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 35%, transparent); box-shadow: 0 10px 26px -18px rgba(15, 23, 42, .3); }
.cms-kb-faq summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 15px 18px; font-weight: 650; cursor: pointer; color: var(--cms-text, #1f2933); }
.cms-kb-faq summary::-webkit-details-marker { display: none; }
.cms-kb-faq summary > span:first-child { min-width: 0; overflow-wrap: anywhere; }
.cms-kb-faq-icon { flex: none; position: relative; width: 26px; height: 26px; border-radius: 50%; background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, #fff); }
.cms-kb-faq-icon::before, .cms-kb-faq-icon::after { content: ""; position: absolute; left: 50%; top: 50%; width: 10px; height: 2px; border-radius: 2px; background: var(--cms-primary, #007aff); translate: -50% -50%; }
.cms-kb-faq-icon::after { rotate: 90deg; transition: rotate .3s; }
.cms-kb-faq[open] .cms-kb-faq-icon::after { rotate: 0deg; }
.cms-kb-faq-a { padding: 0 18px 16px; color: var(--cms-muted, #4b5563); }
.cms-kb-faq-a .prose > :last-child { margin-bottom: 0; }
.cms-kb-faq-more { display: inline-block; margin-top: 8px; font-size: .88rem; font-weight: 600; }
.cms-kb-empty { padding: 32px 16px; text-align: center; color: var(--cms-muted, #6b7280); border-radius: 18px; background: rgba(15, 23, 42, .03); }
.cms-kb-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; font-size: .85rem; color: var(--cms-muted, #6b7280); margin-bottom: 8px; }
.cms-kb-meta a { color: inherit; }
.cms-kb-kind { padding: 2px 9px; border-radius: 99px; font-weight: 700; font-size: .78rem; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, transparent); }
.cms-kb-btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 10px 16px; border: 1px solid transparent; border-radius: 12px; font: inherit; font-weight: 650; font-size: .92rem; color: #fff; background: var(--cms-primary, #007aff); text-decoration: none; cursor: pointer; transition: filter .2s, transform .15s; }
.cms-kb-btn:hover { color: #fff; filter: brightness(1.08); }
.cms-kb-btn:active { transform: scale(.98); }
.cms-kb-btn:disabled { opacity: .6; cursor: progress; }
.cms-kb-btn--ghost { color: var(--cms-text, #1f2933); background: #fff; border-color: rgba(15, 23, 42, .14); }
.cms-kb-btn--ghost:hover { color: var(--cms-primary, #007aff); border-color: var(--cms-primary, #007aff); filter: none; }
.cms-kb-fb { margin-top: 32px; padding: 18px 20px; border-radius: 18px; background: rgba(15, 23, 42, .035); }
.cms-kb-fb-ask { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; }
.cms-kb-fb-btns { display: flex; gap: 8px; }
.cms-kb-fb-btn { display: inline-flex; align-items: center; gap: 7px; padding: 8px 16px; border-radius: 999px; border: 1px solid rgba(15, 23, 42, .14); background: #fff; color: var(--cms-text, #1f2933); font: inherit; font-weight: 600; cursor: pointer; transition: border-color .2s, color .2s, transform .15s; }
.cms-kb-fb-btn:hover { border-color: var(--cms-primary, #007aff); color: var(--cms-primary, #007aff); }
.cms-kb-fb-btn:active { transform: scale(.96); }
.cms-kb-fb-btn:disabled { opacity: .6; cursor: default; }
.cms-kb-fb-form { display: grid; gap: 10px; }
.cms-kb-fb-form[hidden], .cms-kb-fb-ask[hidden], .cms-kb-fb-done[hidden], .cms-kb-fb-error[hidden] { display: none; }
.cms-kb-fb-reasons { display: flex; flex-wrap: wrap; gap: 8px; }
.cms-kb-fb-reasons label { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; background: #fff; border: 1px solid rgba(15, 23, 42, .12); font-size: .88rem; cursor: pointer; }
.cms-kb-fb-reasons label:has(input:checked) { border-color: var(--cms-primary, #007aff); color: var(--cms-primary, #007aff); }
.cms-kb-fb-label { font-size: .88rem; font-weight: 600; }
.cms-kb-fb-form textarea { width: 100%; padding: 10px 12px; border-radius: 12px; border: 1px solid rgba(15, 23, 42, .14); font: inherit; resize: vertical; background: #fff; color: var(--cms-text, #1f2933); }
.cms-kb-fb-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.cms-kb-fb-error { color: #d93025; font-size: .88rem; }
.cms-kb-fb-done { display: flex; align-items: center; gap: 8px; font-weight: 600; color: #1b7f3b; }
.cms-kb-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px 28px; margin-top: 48px; padding: 24px 28px; border-radius: 22px; background: color-mix(in srgb, var(--cms-primary, #007aff) 7%, #fff); border: 1px solid color-mix(in srgb, var(--cms-primary, #007aff) 18%, transparent); }
.cms-kb-cta-text { display: flex; gap: 16px; align-items: center; min-width: 0; flex: 1 1 320px; }
.cms-kb-cta-ico { flex: none; width: 54px; height: 54px; border-radius: 16px; display: grid; place-items: center; color: #fff; background: var(--cms-primary, #007aff); }
.cms-kb-cta h2 { font-size: 1.2rem; margin: 0 0 2px; }
.cms-kb-cta p { margin: 0; color: var(--cms-muted, #6b7280); }
.cms-kb-cta-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.cms-kb-product { display: grid; gap: 16px; margin-bottom: 12px; }
.cms-kb-product-links { display: flex; flex-wrap: wrap; gap: 6px 22px; }
@media (max-width: 575.98px) {
    .cms-kb-search input { height: 50px; }
    .cms-kb-search-ico { top: 25px; }
    .cms-kb-search button { padding: 0 16px; }
    .cms-kb-cta { padding: 20px; }
    .cms-kb-cta-actions .cms-kb-btn { flex: 1 1 auto; }
    .cms-kb-fb-ask { flex-direction: column; align-items: flex-start; }
}

/* ---------- Yêu cầu hỗ trợ (phase 38) ---------- */
.cms-tk-form { display: grid; gap: 18px; }
.cms-tk-set { border: 0; margin: 0; padding: 0; min-width: 0; }
.cms-tk-set legend { font-weight: 700; font-size: 1.05rem; margin-bottom: 12px; padding: 0; }
.cms-tk-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; }
.cms-tk-full { grid-column: 1 / -1; }
.cms-tk-field { display: grid; gap: 6px; min-width: 0; align-content: start; }
.cms-tk-field label { font-size: .9rem; font-weight: 600; color: var(--cms-text, #1f2933); }
.cms-tk-field :is(input, select, textarea), .cms-tk-reply textarea, .cms-tk-rate textarea { width: 100%; min-width: 0; padding: 11px 14px; border-radius: 12px; border: 1px solid rgba(15, 23, 42, .16); background: #fff; font: inherit; color: var(--cms-text, #1f2933); }
.cms-tk-field :is(input, select, textarea):focus, .cms-tk-reply textarea:focus { outline: none; border-color: var(--cms-primary, #007aff); box-shadow: 0 0 0 4px color-mix(in srgb, var(--cms-primary, #007aff) 15%, transparent); }
.cms-tk-field [aria-invalid=true] { border-color: #d93025; }
.cms-tk-field textarea, .cms-tk-reply textarea { resize: vertical; }
.cms-tk-req { color: #d93025; }
.cms-tk-hint { font-size: .8rem; color: var(--cms-muted, #6b7280); }
.cms-tk-err { font-size: .82rem; color: #d93025; }
.cms-tk-err:empty { display: none; }
.cms-tk-note { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 10px 14px; border-radius: 12px; background: color-mix(in srgb, var(--cms-primary, #007aff) 8%, #fff); font-size: .9rem; }
.cms-tk-drop { position: relative; display: flex; align-items: center; justify-content: center; gap: 10px; padding: 18px; border: 2px dashed rgba(15, 23, 42, .15); border-radius: 14px; color: var(--cms-muted, #6b7280); font-size: .9rem; text-align: center; cursor: pointer; transition: border-color .2s, color .2s; }
.cms-tk-drop:hover, .cms-tk-drop:focus-within { border-color: var(--cms-primary, #007aff); color: var(--cms-primary, #007aff); }
.cms-tk-drop input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.cms-tk-drop--sm { padding: 10px; justify-content: flex-start; }
.cms-tk-files { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-size: .88rem; }
.cms-tk-files[hidden] { display: none; }
.cms-tk-files li { padding: 6px 10px; border-radius: 9px; background: rgba(15, 23, 42, .04); overflow-wrap: anywhere; }
.cms-tk-files small { color: var(--cms-muted, #6b7280); margin-left: 6px; }
.cms-tk-msg { padding: 10px 14px; border-radius: 12px; background: #fdecea; color: #b3261e; font-size: .9rem; }
.cms-tk-msg.is-ok { background: #e7f6ec; color: #1b7f3b; }
.cms-tk-msg[hidden] { display: none; }
.cms-tk-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; }
.cms-tk-link { font-size: .9rem; font-weight: 600; }
.cms-tk-notice { display: flex; align-items: center; gap: 8px; padding: 12px 16px; margin-bottom: 18px; border-radius: 14px; background: #e7f6ec; color: #1b7f3b; font-weight: 600; }
.cms-tk-notice--err { background: #fdecea; color: #b3261e; }
.cms-tk-head { display: grid; gap: 18px; padding: 22px 24px; border-radius: 20px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); margin-bottom: 20px; }
.cms-tk-head h2 { font-size: 1.3rem; margin: 8px 0 6px; overflow-wrap: anywhere; }
.cms-tk-code { font-weight: 800; font-size: .9rem; letter-spacing: .02em; margin-right: 8px; color: var(--cms-muted, #6b7280); }
.cms-tk-status { display: inline-block; padding: 3px 11px; border-radius: 99px; font-size: .8rem; font-weight: 700; background: rgba(15, 23, 42, .06); }
.cms-tk-status--new, .cms-tk-status--open { color: #0b63c5; background: #e8f1fd; }
.cms-tk-status--waiting { color: #b26a00; background: #fff4e0; }
.cms-tk-status--resolved { color: #1b7f3b; background: #e7f6ec; }
.cms-tk-status--closed { color: #6b7280; }
.cms-tk-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: .85rem; color: var(--cms-muted, #6b7280); }
.cms-tk-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; list-style: none; margin: 0; padding: 0; counter-reset: s; }
.cms-tk-steps li { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: .8rem; color: var(--cms-muted, #6b7280); text-align: center; }
.cms-tk-steps li::before { content: ""; position: absolute; top: 14px; left: calc(-50% + 18px); right: calc(50% + 18px); height: 2px; background: rgba(15, 23, 42, .1); }
.cms-tk-steps li:first-child::before { display: none; }
.cms-tk-steps span { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; font-weight: 700; background: rgba(15, 23, 42, .07); }
.cms-tk-steps .is-done span, .cms-tk-steps .is-current span { background: var(--cms-primary, #007aff); color: #fff; }
.cms-tk-steps .is-done::before, .cms-tk-steps .is-current::before { background: var(--cms-primary, #007aff); }
.cms-tk-steps .is-current { color: var(--cms-text, #1f2933); font-weight: 700; }
.cms-tk-thread { display: grid; gap: 12px; margin-bottom: 20px; }
.cms-tk-msg-row { display: flex; }
.cms-tk-msg-row.is-me { justify-content: flex-end; }
.cms-tk-bubble { max-width: min(640px, 92%); min-width: 0; padding: 12px 16px; border-radius: 18px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); }
.is-me .cms-tk-bubble { background: color-mix(in srgb, var(--cms-primary, #007aff) 8%, #fff); border-color: color-mix(in srgb, var(--cms-primary, #007aff) 20%, transparent); border-bottom-right-radius: 6px; }
.is-staff .cms-tk-bubble { border-bottom-left-radius: 6px; }
.cms-tk-author { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; font-size: .82rem; margin-bottom: 4px; }
.cms-tk-author time { color: var(--cms-muted, #6b7280); }
.cms-tk-badge { padding: 1px 7px; border-radius: 99px; font-size: .72rem; font-weight: 700; color: #1b7f3b; background: #e7f6ec; }
.cms-tk-body { overflow-wrap: anywhere; line-height: 1.6; }
.cms-tk-attach { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.cms-tk-attach a { display: inline-flex; align-items: center; gap: 5px; max-width: 100%; padding: 5px 10px; border-radius: 9px; font-size: .82rem; background: rgba(15, 23, 42, .05); color: var(--cms-text, #1f2933); text-decoration: none; overflow-wrap: anywhere; }
.cms-tk-attach small { color: var(--cms-muted, #6b7280); }
.cms-tk-event { justify-self: center; padding: 4px 12px; border-radius: 99px; font-size: .78rem; color: var(--cms-muted, #6b7280); background: rgba(15, 23, 42, .04); text-align: center; }
.cms-tk-reply { display: grid; gap: 10px; padding: 18px 20px; border-radius: 18px; background: rgba(15, 23, 42, .035); }
.cms-tk-reply > label { font-weight: 700; }
.cms-tk-rate { display: grid; gap: 10px; margin-top: 20px; padding: 18px 20px; border-radius: 18px; border: 1px solid rgba(15, 23, 42, .09); background: #fff; scroll-margin-top: 100px; }
.cms-tk-rate form { display: grid; gap: 10px; justify-items: start; }
.cms-tk-rate p { margin: 0; color: var(--cms-muted, #6b7280); }
.cms-tk-stars { display: inline-flex; flex-direction: row-reverse; gap: 2px; font-size: 1.9rem; line-height: 1; }
.cms-tk-stars input { position: absolute; opacity: 0; pointer-events: none; }
.cms-tk-stars label { cursor: pointer; color: rgba(15, 23, 42, .18); transition: color .15s, transform .15s; }
.cms-tk-stars label:hover, .cms-tk-stars label:hover ~ label, .cms-tk-stars input:checked ~ label { color: #f5a524; }
.cms-tk-stars input:focus-visible + label { outline: 2px solid var(--cms-primary, #007aff); border-radius: 4px; }
.cms-tk-stars.is-static { flex-direction: row; }
.cms-tk-stars.is-static span { color: rgba(15, 23, 42, .18); }
.cms-tk-stars.is-static .on { color: #f5a524; }
.cms-tk-lookup { gap: 14px; }
@media (max-width: 575.98px) {
    .cms-tk-grid { grid-template-columns: minmax(0, 1fr); }
    .cms-tk-head { padding: 18px; }
    .cms-tk-bubble { max-width: 100%; }
    .cms-tk-actions .cms-kb-btn { flex: 1 1 100%; }
}

/* ---------- Trợ lý chọn sản phẩm (phase 39) ---------- */
.cms-pf { scroll-margin-top: 100px; }
.cms-pf-form { display: grid; gap: 22px; padding: clamp(18px, 3vw, 32px); border-radius: 22px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); box-shadow: 0 18px 40px -26px rgba(15, 23, 42, .35); }
.cms-pf-form[hidden], .cms-pf-step[hidden], .cms-pf-top[hidden], .cms-pf-nav [hidden] { display: none; }
.cms-pf-top { display: flex; align-items: center; gap: 14px; }
.cms-pf-progress { flex: 1; height: 6px; border-radius: 99px; background: rgba(15, 23, 42, .08); overflow: hidden; }
.cms-pf-progress i { display: block; height: 100%; width: 0; border-radius: inherit; background: var(--cms-primary, #007aff); transition: width .35s cubic-bezier(.22, 1, .36, 1); }
.cms-pf-count { font-size: .82rem; font-weight: 600; color: var(--cms-muted, #6b7280); white-space: nowrap; }
.cms-pf-step { border: 0; margin: 0; padding: 0; min-width: 0; }
.cms-pf-step legend { display: flex; align-items: center; gap: 10px; font-size: 1.15rem; font-weight: 700; margin-bottom: 6px; padding: 0; color: var(--cms-text, #1f2933); }
.cms-pf-num { flex: none; width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; font-size: .85rem; color: #fff; background: var(--cms-primary, #007aff); }
.cms-pf-help { margin: 0 0 10px 40px; font-size: .88rem; color: var(--cms-muted, #6b7280); }
.cms-pf-options { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 10px; margin-top: 12px; }
.cms-pf-opt { position: relative; display: flex; align-items: center; gap: 10px; min-height: 58px; padding: 12px 40px 12px 14px; border-radius: 14px; border: 1.5px solid rgba(15, 23, 42, .12); background: #fff; cursor: pointer; transition: border-color .2s, background .2s, transform .15s; }
.cms-pf-opt:hover { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 50%, transparent); }
.cms-pf-opt:active { transform: scale(.98); }
.cms-pf-opt input { position: absolute; opacity: 0; pointer-events: none; }
.cms-pf-opt:has(input:checked) { border-color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 7%, #fff); }
.cms-pf-opt:has(input:focus-visible) { outline: 2px solid var(--cms-primary, #007aff); outline-offset: 2px; }
.cms-pf-opt-ico { font-size: 1.4rem; line-height: 1; }
.cms-pf-opt-label { font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
.cms-pf-check { position: absolute; right: 12px; top: 50%; translate: 0 -50%; width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid rgba(15, 23, 42, .2); transition: background .2s, border-color .2s; }
.cms-pf-step[data-multiple="1"] .cms-pf-check { border-radius: 6px; }
.cms-pf-opt:has(input:checked) .cms-pf-check { border-color: var(--cms-primary, #007aff); background: var(--cms-primary, #007aff) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M13.5 4.5 6.5 11.5 2.5 7.5l1-1 3 3 6-6z'/%3E%3C/svg%3E") center / 14px no-repeat; }
.cms-pf-nav { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; }
.cms-pf-nav [data-pf-back] { margin-right: auto; }
.cms-pf-results:empty { display: none; }
.cms-pf-res { margin-top: 28px; scroll-margin-top: 100px; }
.cms-pf-res-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 16px; margin-bottom: 16px; }
.cms-pf-res-head h2 { margin: 0; font-size: 1.4rem; }
.cms-pf-restart { font-weight: 600; }
.cms-pf-empty { color: var(--cms-muted, #6b7280); }
.cms-pf-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 16px; }
.cms-pf-card { display: flex; flex-direction: column; min-width: 0; border-radius: 20px; background: #fff; border: 1px solid rgba(15, 23, 42, .09); overflow: hidden; }
.cms-pf-card.is-best { border: 2px solid var(--cms-primary, #007aff); box-shadow: 0 18px 40px -24px color-mix(in srgb, var(--cms-primary, #007aff) 60%, transparent); }
.cms-pf-img { display: block; aspect-ratio: 4 / 3; background: rgba(15, 23, 42, .03); }
.cms-pf-img img { width: 100%; height: 100%; object-fit: contain; padding: 14px; }
.cms-pf-body { display: flex; flex-direction: column; gap: 8px; padding: 16px 18px 18px; flex: 1; }
.cms-pf-badge { align-self: flex-start; padding: 3px 10px; border-radius: 99px; font-size: .75rem; font-weight: 700; color: #fff; background: var(--cms-primary, #007aff); }
.cms-pf-badge--near { color: #b26a00; background: #fff4e0; }
.cms-pf-body h3 { font-size: 1.05rem; margin: 0; line-height: 1.35; }
.cms-pf-body h3 a { color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-pf-price { font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-pf-match { display: flex; align-items: center; gap: 10px; }
.cms-pf-meter { flex: 1; height: 8px; border-radius: 99px; background: rgba(15, 23, 42, .08); overflow: hidden; }
.cms-pf-meter i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #f5a524, #1b9e4b); }
.cms-pf-match b { font-size: .9rem; }
.cms-pf-reasons { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-size: .88rem; }
.cms-pf-reasons li { position: relative; padding-left: 22px; }
.cms-pf-reasons li::before { position: absolute; left: 0; top: 0; font-weight: 800; }
.cms-pf-reasons .ok::before { content: "✓"; color: #1b9e4b; }
.cms-pf-reasons .no { color: var(--cms-muted, #6b7280); }
.cms-pf-reasons .no::before { content: "✕"; color: #d93025; }
.cms-pf-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: auto; padding-top: 6px; }
.cms-pf-compare { display: inline-block; margin-top: 16px; font-weight: 600; }
@media (max-width: 575.98px) {
    .cms-pf-options { grid-template-columns: minmax(0, 1fr); }
    .cms-pf-help { margin-left: 0; }
    .cms-pf-nav .cms-kb-btn { flex: 1 1 auto; }
}


/* ---------- Thiết kế khối (mọi block – BlockDesign) ---------- */
.cms-blk { position: relative; }
.cms-blk.has-bg { background-color: var(--blk-bg, transparent); background-image: var(--blk-ov, none), var(--blk-img, none); background-size: cover; background-position: center; }
/* Nền của khối thay cho nền của kiểu trình bày bên trong. */
.cms-blk.has-bg > :first-child { background: transparent !important; }
.cms-blk[data-overlay="dark"] { --blk-ov: linear-gradient(rgba(8, 18, 32, .5), rgba(8, 18, 32, .5)); }
.cms-blk[data-overlay="darker"] { --blk-ov: linear-gradient(rgba(8, 18, 32, .74), rgba(8, 18, 32, .74)); }
.cms-blk[data-overlay="light"] { --blk-ov: linear-gradient(rgba(255, 255, 255, .78), rgba(255, 255, 255, .78)); }
.cms-blk[data-overlay="brand"] { --blk-ov: linear-gradient(120deg, color-mix(in srgb, var(--cms-primary, #007aff) 88%, transparent), color-mix(in srgb, var(--cms-primary, #007aff) 62%, #000 20%)); }
/* Màu chữ theo nền: chỉ đổi phần tiêu đề / đoạn văn của khối, không đổi chữ trong thẻ có nền riêng. */
.cms-blk[data-tone="light"] { color: rgba(255, 255, 255, .88); }
.cms-blk[data-tone="dark"] { color: #334155; }
.cms-blk[data-tone] :is(.we-head, .cms-b-head) :is(h2, h3, p),
.cms-blk[data-tone] > :first-child > :is(.container, .we-container) > :is(h1, h2, h3, p, .section-title, .lead, .text-muted),
.cms-blk[data-tone] :is(.prose, .prose :is(h2, h3, h4, p, li, strong)),
.cms-blk[data-tone] > :first-child > :is(.container, .we-container) > :is(.cms-b-note, figure > figcaption) { color: inherit; }
.cms-blk[data-tone="light"] :is(.we-head h2, .cms-b-head h2, .section-title, .prose :is(h2, h3, h4)) { color: #fff; }
.cms-blk[data-tone="dark"] :is(.we-head h2, .cms-b-head h2, .section-title, .prose :is(h2, h3, h4)) { color: #0f172a; }
.cms-blk[data-tone="light"] .cms-b-eyebrow { color: #fff; background: rgba(255, 255, 255, .16); }
/* Khoảng cách */
.cms-blk[data-pt="none"] > :first-child { padding-top: 0 !important; }
.cms-blk[data-pt="sm"] > :first-child { padding-top: 24px !important; }
.cms-blk[data-pt="lg"] > :first-child { padding-top: clamp(80px, 8vw, 128px) !important; }
.cms-blk[data-pt="xl"] > :first-child { padding-top: clamp(110px, 11vw, 176px) !important; }
.cms-blk[data-pb="none"] > :first-child { padding-bottom: 0 !important; }
.cms-blk[data-pb="sm"] > :first-child { padding-bottom: 24px !important; }
.cms-blk[data-pb="lg"] > :first-child { padding-bottom: clamp(80px, 8vw, 128px) !important; }
.cms-blk[data-pb="xl"] > :first-child { padding-bottom: clamp(110px, 11vw, 176px) !important; }
/* Độ rộng */
.cms-blk[data-width="narrow"] :is(.container, .we-container) { max-width: 880px; }
.cms-blk[data-width="wide"] :is(.container, .we-container) { max-width: 1480px; }
.cms-blk[data-width="full"] :is(.container, .we-container) { max-width: none; }
/* Ẩn theo thiết bị */
@media (max-width: 767.98px) { .cms-blk[data-hide-mobile] { display: none; } }
@media (min-width: 992px) { .cms-blk[data-hide-desktop] { display: none; } }
/* Hiệu ứng xuất hiện: blocks.js gắn .is-wait cho khối còn ở dưới màn hình lúc tải, bỏ khi khối cuộn tới (khối đang thấy không bị ẩn → không nháy) */
.cms-blk.is-wait[data-anim="fade"] { opacity: 0; }
.cms-blk.is-wait[data-anim="up"] { opacity: 0; transform: translateY(36px); }
.cms-blk.is-wait[data-anim="zoom"] { opacity: 0; transform: scale(.96); }
.cms-blk[data-anim]:not([data-anim="none"]):not(.is-wait) { transition: opacity .8s cubic-bezier(.22, 1, .36, 1), transform .8s cubic-bezier(.22, 1, .36, 1); }
.cms-blk[data-anim="none"] :is(.we-reveal, [data-we-stagger] > *) { opacity: 1 !important; transform: none !important; transition: none !important; }
@media (prefers-reduced-motion: reduce) { .cms-blk.is-wait[data-anim] { opacity: 1 !important; transform: none !important; } }

/* ---------- Block mở rộng (phase 42) – view chung Views/Shared/Blocks, class .cms-b-* ----------
   Theme đổi kiểu bằng biến --cms-primary / --cms-text / --cms-muted / --cms-radius hoặc viết đè class. */
.cms-b { --r: var(--cms-radius, 16px); --line: rgba(15, 23, 42, .1); --soft: color-mix(in srgb, var(--cms-primary, #007aff) 8%, #fff); }
.cms-b [hidden], .cms-b-promo [hidden] { display: none !important; }
/* Thẻ có nền riêng giữ màu chữ của theme dù khối đặt nền tối (Thiết kế khối). */
:is(.cms-b-col, .cms-b-tabpanel, .cms-b-tl-card, .cms-b-plan, .cms-b-sc-card, .cms-b-sc-note, .cms-b-eco-nodes li, .cms-b-eco-hub, .cms-b-scr-tabs, .cms-b-scr-frame, .cms-b-table-wrap, .cms-b-cat, .cms-b-member, .cms-b-cert, .cms-b-case, .cms-b-rv, .cms-b-loc, .cms-kb-faq) { color: var(--cms-text, #1f2933); }
.cms-b-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.cms-b-head { max-width: 760px; margin: 0 auto clamp(26px, 3vw, 46px); text-align: center; }
.cms-b-head.is-left { margin-left: 0; text-align: left; }
.cms-b-head h2 { margin-bottom: .35em; }
.cms-b-head p { margin: 0; color: var(--cms-muted, #6b7280); font-size: 1.05rem; }
.cms-b-eyebrow { display: inline-block; margin-bottom: 12px; padding: 5px 12px; border-radius: 999px; font-size: .78rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, transparent); }
.cms-b-note { margin: 18px 0 0; text-align: center; font-size: .9rem; color: var(--cms-muted, #6b7280); }
.cms-b-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.cms-b-link, .cms-b-more { display: inline-block; margin-top: 6px; font-weight: 650; color: var(--cms-primary, #007aff); text-decoration: none; }
.cms-b-link:hover, .cms-b-more:hover { text-decoration: underline; }
.cms-b-tag { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: .75rem; font-weight: 700; color: var(--cms-primary, #007aff); background: color-mix(in srgb, var(--cms-primary, #007aff) 10%, transparent); }
.cms-b-checks { list-style: none; padding: 0; margin: 0 0 18px; display: grid; gap: 8px; }
.cms-b-checks li { position: relative; padding-left: 28px; color: var(--cms-text, #1f2933); }
.cms-b-checks li::before { content: ""; position: absolute; left: 0; top: .2em; width: 18px; height: 18px; border-radius: 50%; background: var(--cms-primary, #007aff) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M12.7 4.3a1 1 0 0 1 0 1.4l-5.5 5.5a1 1 0 0 1-1.4 0L3.3 8.7a1 1 0 1 1 1.4-1.4l1.8 1.8 4.8-4.8a1 1 0 0 1 1.4 0'/%3E%3C/svg%3E") center / 12px no-repeat; }
.cms-kb-btn--light { color: #fff; background: rgba(255, 255, 255, .14) !important; border-color: rgba(255, 255, 255, .55); box-shadow: none !important; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.cms-kb-btn--light:hover { background: rgba(255, 255, 255, .24) !important; }

/* Lưới dùng chung */
.cms-b-grid, .cms-b-cols { display: grid; gap: clamp(16px, 2vw, 26px); grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); }
.cms-b-grid--2, .cms-b-cols--2 { --cols: 2; }
.cms-b-grid--3, .cms-b-cols--3 { --cols: 3; }
.cms-b-grid--4, .cms-b-cols--4 { --cols: 4; }
@media (max-width: 991.98px) { .cms-b-grid--4, .cms-b-cols--4 { --cols: 2; } .cms-b-grid--3, .cms-b-cols--3 { --cols: 2; } }
@media (max-width: 575.98px) { .cms-b-grid, .cms-b-cols { --cols: 1 !important; } }
/* Lưới căn giữa theo số thẻ (đội ngũ, chứng nhận): 3 thẻ không bị lệch trái trong lưới 4 cột */
.cms-b-grid--fit { grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--fit-min, 220px)), 280px)); justify-content: center; }
@media (max-width: 575.98px) { .cms-b-certs .cms-b-grid--fit { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Cột nội dung */
.cms-b-col { min-width: 0; padding: clamp(20px, 2.2vw, 28px); border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-cols.is-center .cms-b-col { text-align: center; }
.cms-b-col h3 { font-size: 1.15rem; font-weight: 750; margin: 0 0 8px; color: var(--cms-text, #1f2933); }
.cms-b-col p { margin: 0 0 6px; color: var(--cms-muted, #6b7280); }
.cms-b-col-img { display: block; width: 100%; aspect-ratio: 16 / 10; object-fit: cover; border-radius: calc(var(--r) * .7); margin-bottom: 16px; }
.cms-b-ico { display: inline-grid; place-items: center; width: 52px; height: 52px; margin-bottom: 14px; border-radius: 15px; font-size: 1.6rem; line-height: 1; color: var(--cms-primary, #007aff); background: var(--soft); }

/* Tab */
.cms-b-tablist { display: flex; gap: 6px; padding: 5px; margin: 0 auto 22px; width: fit-content; max-width: 100%; overflow-x: auto; scrollbar-width: none; border-radius: 14px; background: rgba(118, 118, 128, .1); }
.cms-b-tablist::-webkit-scrollbar { display: none; }
.cms-b-tablist [role="tab"] { flex: none; border: 0; padding: 9px 18px; border-radius: 10px; font: inherit; font-weight: 650; font-size: .95rem; color: var(--cms-muted, #6b7280); background: transparent; cursor: pointer; transition: background .2s, color .2s, box-shadow .2s; }
.cms-b-tablist [role="tab"][aria-selected="true"] { color: var(--cms-text, #1f2933); background: #fff; box-shadow: 0 2px 8px rgba(15, 23, 42, .1); }
.cms-b-tablist [role="tab"]:focus-visible { outline: 2px solid var(--cms-primary, #007aff); outline-offset: 2px; }
.cms-b-tabpanel { padding: clamp(20px, 3vw, 36px); border-radius: var(--r); background: #fff; border: 1px solid var(--line); animation: cms-b-fade .35s ease; }
.cms-b-tabpanel.has-img { display: grid; grid-template-columns: 1.1fr 1fr; gap: clamp(20px, 3vw, 40px); align-items: center; }
.cms-b-tabpanel img { width: 100%; height: auto; max-height: 420px; object-fit: contain; border-radius: calc(var(--r) * .8); }
.cms-b-tabpanel .cms-kb-btn { margin-top: 12px; }
@media (max-width: 767.98px) { .cms-b-tabpanel.has-img { grid-template-columns: 1fr; } .cms-b-tabpanel.has-img img { order: -1; } }
@keyframes cms-b-fade { from { opacity: 0; transform: translateY(6px); } }

/* Dòng thời gian */
.cms-b-tl { list-style: none; margin: 0; padding: 0 0 0 28px; position: relative; }
.cms-b-tl::before { content: ""; position: absolute; left: 7px; top: 6px; bottom: 6px; width: 2px; border-radius: 2px; background: color-mix(in srgb, var(--cms-primary, #007aff) 25%, transparent); }
.cms-b-tl-item { position: relative; padding-bottom: 24px; }
.cms-b-tl-item:last-child { padding-bottom: 0; }
.cms-b-tl-item::before { content: ""; position: absolute; left: -28px; top: 4px; width: 16px; height: 16px; border-radius: 50%; background: #fff; border: 4px solid var(--cms-primary, #007aff); }
.cms-b-tl-year { display: inline-block; margin-bottom: 8px; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-tl-card { padding: 18px 20px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-tl-card img { width: 100%; max-height: 260px; object-fit: cover; border-radius: calc(var(--r) * .7); margin-bottom: 12px; }
.cms-b-tl-card h3 { font-size: 1.1rem; font-weight: 750; margin: 0 0 6px; color: var(--cms-text, #1f2933); }
.cms-b-tl-card p { margin: 0; color: var(--cms-muted, #6b7280); }

/* Khoảng trống / tiêu đề khu vực */
.cms-b-spacer--sm { height: 24px; } .cms-b-spacer--md { height: 48px; } .cms-b-spacer--lg { height: 80px; } .cms-b-spacer--xl { height: 120px; }
.cms-b-spacer { display: flex; align-items: center; }
.cms-b-spacer > .container { width: 100%; }
.cms-b-hr { margin: 0; border: 0; opacity: 1; }
.cms-b-hr--line { border-top: 1px solid var(--line, rgba(15, 23, 42, .1)); }
.cms-b-hr--dots { height: 4px; background: radial-gradient(circle, rgba(15, 23, 42, .25) 1.5px, transparent 2px) center / 14px 4px repeat-x; }
.cms-b-hr--brand { width: 64px; height: 4px; margin: 0 auto; border-radius: 4px; background: var(--cms-primary, #007aff); }
.cms-b-sechead { padding-bottom: 8px !important; }
.cms-b-sechead .cms-b-head { margin-bottom: 0; }
.cms-b-sechead-act { margin-top: 18px; text-align: center; }
.cms-b-sechead.is-left .cms-b-sechead-act { text-align: left; }

/* Bảng giá */
.cms-b-plans { display: grid; gap: 20px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); align-items: stretch; }
.cms-b-plan { position: relative; display: flex; flex-direction: column; padding: 28px 24px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-plan.is-hot { border: 2px solid var(--cms-primary, #007aff); box-shadow: 0 24px 48px -26px color-mix(in srgb, var(--cms-primary, #007aff) 60%, transparent); }
.cms-b-plan-badge { position: absolute; top: -13px; left: 50%; translate: -50% 0; padding: 4px 14px; border-radius: 999px; font-size: .76rem; font-weight: 750; white-space: nowrap; color: #fff; background: var(--cms-primary, #007aff); }
.cms-b-plan h3 { font-size: 1.2rem; font-weight: 750; margin: 0 0 4px; color: var(--cms-text, #1f2933); }
.cms-b-plan-desc { margin: 0 0 12px; font-size: .92rem; color: var(--cms-muted, #6b7280); }
.cms-b-plan-price { margin: 4px 0 18px; color: var(--cms-text, #1f2933); }
.cms-b-plan-price b { font-size: clamp(1.6rem, 1.2rem + 1.2vw, 2.1rem); font-weight: 800; letter-spacing: -.02em; }
.cms-b-plan-price span { margin-left: 4px; color: var(--cms-muted, #6b7280); }
.cms-b-plan-feats { list-style: none; padding: 0; margin: 0 0 22px; display: grid; gap: 9px; flex: 1; }
.cms-b-plan-feats li { position: relative; padding-left: 26px; font-size: .95rem; color: var(--cms-text, #1f2933); }
.cms-b-plan-feats li::before { position: absolute; left: 0; top: 0; width: 18px; text-align: center; font-weight: 800; }
.cms-b-plan-feats li.ok::before { content: "✓"; color: var(--cms-primary, #007aff); }
.cms-b-plan-feats li.no { color: var(--cms-muted, #6b7280); text-decoration: line-through; text-decoration-color: rgba(15, 23, 42, .25); }
.cms-b-plan-feats li.no::before { content: "–"; color: var(--cms-muted, #9ca3af); }
.cms-b-plan .cms-kb-btn { width: 100%; }

/* Giới thiệu sản phẩm (thẻ) – showcase_cards */
.cms-b-sc-grid { display: grid; gap: 24px; grid-template-columns: var(--sc-cols, repeat(2, minmax(0, 1fr))); align-items: stretch; }
.cms-b-sc-card { position: relative; display: flex; flex-direction: column; padding: 28px 26px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); min-width: 0; }
.cms-b-sc-card.is-hot { color: #fff; background: linear-gradient(150deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 55%, #000)); border-color: transparent; box-shadow: 0 28px 56px -30px color-mix(in srgb, var(--cms-primary, #007aff) 75%, transparent); }
.cms-b-sc-badge { align-self: flex-start; margin-bottom: 14px; padding: 4px 12px; border-radius: 999px; font-size: .76rem; font-weight: 750; color: var(--cms-primary, #007aff); background: var(--soft); }
.cms-b-sc-card.is-hot .cms-b-sc-badge { color: #fff; background: rgba(255, 255, 255, .18); }
.cms-b-sc-media { display: grid; place-items: center; height: 210px; margin-bottom: 18px; }
.cms-b-sc-media img { max-width: 100%; max-height: 100%; object-fit: contain; }
.cms-b-sc-card h3 { margin: 0 0 10px; font-size: 1.3rem; font-weight: 800; color: inherit; }
.cms-b-sc-os { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; padding: 0; margin: 0 0 12px; }
.cms-b-sc-os li { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 8px; font-size: .82rem; font-weight: 650; background: var(--soft); }
.cms-b-sc-card.is-hot .cms-b-sc-os li { background: rgba(255, 255, 255, .14); }
.cms-b-sc-text { margin: 0 0 14px; opacity: .85; }
.cms-b-sc-feats { list-style: none; display: grid; gap: 8px; padding: 0; margin: 0 0 22px; flex: 1; }
.cms-b-sc-feats li { position: relative; padding-left: 26px; font-size: .95rem; }
.cms-b-sc-feats li::before { content: "✓"; position: absolute; left: 0; top: 0; width: 18px; text-align: center; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-sc-card.is-hot .cms-b-sc-feats li::before { color: #fff; }
.cms-b-sc-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: auto; }
.cms-b-sc-card.is-hot .cms-kb-btn:not(.cms-kb-btn--ghost) { color: var(--cms-primary, #007aff); background: #fff; }
.cms-b-sc-card.is-hot .cms-kb-btn--ghost { color: #fff; background: transparent; border-color: rgba(255, 255, 255, .5); }
.cms-b-sc-note { list-style: none; display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 28px; margin: 22px 0 0; padding: 16px 20px; border-radius: var(--r); background: var(--soft); font-size: .93rem; }
.cms-b-sc-note li { display: inline-flex; align-items: flex-start; gap: 8px; }
.cms-b-sc-note svg { flex: none; margin-top: 3px; color: var(--cms-primary, #007aff); }
@media (max-width: 767.98px) { .cms-b-sc-grid { grid-template-columns: minmax(0, 1fr); } .cms-b-sc-note { justify-content: flex-start; } }

/* Bảng so sánh */
.cms-b-table-wrap { overflow-x: auto; border-radius: var(--r); border: 1px solid var(--line); background: #fff; }
.cms-b-table-wrap:focus-visible { outline: 2px solid var(--cms-primary, #007aff); }
.cms-b-table { width: 100%; min-width: 560px; border-collapse: collapse; font-size: .95rem; }
.cms-b-table th, .cms-b-table td { padding: 12px 16px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; color: var(--cms-text, #1f2933); }
.cms-b-table thead th { vertical-align: bottom; text-align: center; }
.cms-b-table tbody th { width: 26%; font-weight: 600; color: var(--cms-muted, #6b7280); background: color-mix(in srgb, var(--cms-primary, #007aff) 3%, #fff); }
.cms-b-table tbody td { text-align: center; }
.cms-b-table tr:last-child > * { border-bottom: 0; }
.cms-b-cmp-prod { display: grid; justify-items: center; gap: 8px; font-weight: 700; color: var(--cms-text, #1f2933); text-decoration: none; }
.cms-b-cmp-prod img { width: 96px; height: 96px; object-fit: contain; border-radius: 12px; background: #f8fafc; }
.cms-b-cmp-prod:hover { color: var(--cms-primary, #007aff); }
.cms-b-cmp-price { margin-top: 6px; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-table :is(tbody th, thead th:first-child) { position: sticky; left: 0; z-index: 1; }
.cms-b-table thead th:first-child { background: #fff; }
@media (max-width: 575.98px) { .cms-b-table { font-size: .88rem; } .cms-b-table th, .cms-b-table td { padding: 10px 10px; } .cms-b-table tbody th { width: 112px; min-width: 112px; } .cms-b-cmp-prod img { width: 72px; height: 72px; } }
.cms-b-cmp-act td > * { margin: 3px; }
.cms-b-cmp-act .cms-kb-btn { padding: 8px 12px; font-size: .85rem; }

/* Sản phẩm nổi bật lớn */
.cms-b-spot-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(24px, 4vw, 56px); align-items: center; }
.cms-b-spot-grid.is-right .cms-b-spot-img { order: 2; }
.cms-b-spot-img { display: block; aspect-ratio: 1; border-radius: calc(var(--r) * 1.4); overflow: hidden; background: var(--soft); }
.cms-b-spot-img img { width: 100%; height: 100%; object-fit: contain; transition: transform .6s cubic-bezier(.22, 1, .36, 1); }
.cms-b-spot-img:hover img { transform: scale(1.04); }
.cms-b-spot-sum { color: var(--cms-muted, #6b7280); font-size: 1.05rem; }
.cms-b-spot-price { display: flex; align-items: baseline; gap: 12px; margin: 0 0 20px; }
.cms-b-spot-price b { font-size: 1.8rem; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-spot-price s { color: var(--cms-muted, #9ca3af); }
@media (max-width: 767.98px) { .cms-b-spot-grid { grid-template-columns: 1fr; } .cms-b-spot-grid.is-right .cms-b-spot-img { order: 0; } .cms-b-spot-img { aspect-ratio: 4 / 3; } }

/* Đếm ngược */
.cms-b-cd { display: grid; grid-template-columns: 1fr auto; gap: 18px 32px; align-items: center; padding: clamp(22px, 3vw, 40px); border-radius: calc(var(--r) * 1.3); color: #fff; background: linear-gradient(120deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 60%, #000)); }
.cms-b-cd .section-title, .cms-b-cd-text h2 { color: #fff; margin-bottom: .3em; }
.cms-b-cd-text p { margin: 0; color: rgba(255, 255, 255, .85); }
.cms-b-cd-clock { display: flex; gap: 10px; }
.cms-b-cd-clock[hidden] { display: none; }
.cms-b-cd-clock span { display: grid; justify-items: center; min-width: 74px; padding: 12px 8px; border-radius: 14px; background: rgba(255, 255, 255, .14); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.cms-b-cd-clock b { font-size: clamp(1.6rem, 1.2rem + 1.4vw, 2.3rem); font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; }
.cms-b-cd-clock small { font-size: .74rem; opacity: .8; text-transform: uppercase; letter-spacing: .05em; }
.cms-b-cd-done { margin: 0; font-weight: 650; }
.cms-b-cd .cms-kb-btn { grid-column: 1 / -1; justify-self: start; color: var(--cms-primary, #007aff); background: #fff !important; box-shadow: none !important; }
@media (max-width: 767.98px) { .cms-b-cd { grid-template-columns: 1fr; } .cms-b-cd-clock { justify-content: space-between; } .cms-b-cd-clock span { min-width: 0; flex: 1; } }

/* Dải khuyến mãi */
.cms-b-promo { padding: 14px 0; color: #fff; background: linear-gradient(100deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 70%, #000)); }
.cms-b-promo-in { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px 16px; text-align: center; }
.cms-b-promo-in p { margin: 0; font-weight: 600; }
.cms-b-promo-ico { font-size: 1.3rem; }
.cms-b-promo-code { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border: 1.5px dashed rgba(255, 255, 255, .8); border-radius: 10px; font: inherit; font-weight: 800; letter-spacing: .06em; color: #fff; background: rgba(255, 255, 255, .12); cursor: pointer; }
.cms-b-promo-code small { font-weight: 600; letter-spacing: 0; opacity: .85; font-size: .75rem; }
.cms-b-promo-code:hover { background: rgba(255, 255, 255, .22); }
.cms-b-promo .cms-kb-btn { padding: 7px 16px; color: var(--cms-primary, #007aff); background: #fff !important; box-shadow: none !important; }

/* Lưới danh mục */
.cms-b-catgrid { display: grid; gap: 16px; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); }
.cms-b-catgrid--3 { --cols: 3; } .cms-b-catgrid--4 { --cols: 4; } .cms-b-catgrid--6 { --cols: 6; }
@media (max-width: 991.98px) { .cms-b-catgrid--4, .cms-b-catgrid--6 { --cols: 3; } }
@media (max-width: 575.98px) { .cms-b-catgrid { --cols: 2 !important; gap: 12px; } }
.cms-b-cat { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 16px 12px 18px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); text-align: center; text-decoration: none; transition: border-color .2s, box-shadow .25s, transform .25s; }
.cms-b-cat:hover { border-color: color-mix(in srgb, var(--cms-primary, #007aff) 35%, transparent); box-shadow: 0 16px 34px -20px rgba(15, 23, 42, .35); transform: translateY(-3px); }
.cms-b-cat-img { display: grid; place-items: center; width: 100%; aspect-ratio: 4 / 3; margin-bottom: 8px; border-radius: calc(var(--r) * .7); overflow: hidden; background: var(--soft); font-size: 2rem; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-cat-img img { box-sizing: border-box; width: 100%; height: 100%; object-fit: contain; padding: 8%; }
.cms-b-cat-name { font-weight: 700; color: var(--cms-text, #1f2933); overflow-wrap: anywhere; }
.cms-b-cat-count { font-size: .82rem; color: var(--cms-muted, #6b7280); }

/* Đội ngũ */
.cms-b-member { text-align: center; padding: 22px 18px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-member-photo { display: grid; place-items: center; width: 120px; height: 120px; margin: 0 auto 14px; border-radius: 50%; overflow: hidden; font-size: 2.4rem; font-weight: 800; color: var(--cms-primary, #007aff); background: var(--soft); }
.cms-b-member-photo img { width: 100%; height: 100%; object-fit: cover; }
.cms-b-member h3 { font-size: 1.08rem; font-weight: 750; margin: 0 0 2px; color: var(--cms-text, #1f2933); }
.cms-b-member-role { margin: 0 0 8px; font-size: .88rem; font-weight: 650; color: var(--cms-primary, #007aff); }
.cms-b-member-bio { margin: 0; font-size: .92rem; color: var(--cms-muted, #6b7280); }
.cms-b-member-links { display: flex; justify-content: center; gap: 8px; margin-top: 14px; }
.cms-b-member-links a { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; color: var(--cms-primary, #007aff); background: var(--soft); transition: background .2s, color .2s; }
.cms-b-member-links a:hover { color: #fff; background: var(--cms-primary, #007aff); }

/* Chứng nhận */
.cms-b-cert { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 22px 18px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-cert-img { display: grid; place-items: center; width: 100%; height: 120px; margin-bottom: 14px; font-size: 3rem; }
.cms-b-cert-img img { max-width: 100%; max-height: 120px; object-fit: contain; }
.cms-b-cert h3 { font-size: 1.02rem; font-weight: 750; margin: 0 0 4px; color: var(--cms-text, #1f2933); }
.cms-b-cert p { margin: 0; font-size: .88rem; color: var(--cms-muted, #6b7280); }
.cms-b-cert-year { margin-top: 10px; padding: 2px 10px; border-radius: 999px; font-size: .78rem; font-weight: 700; color: var(--cms-primary, #007aff); background: var(--soft); }

/* Bộ lọc dạng chip (dự án, chi nhánh) */
.cms-b-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: -8px 0 24px; }
.cms-b-chips button { padding: 7px 15px; border-radius: 999px; border: 1px solid var(--line); font: inherit; font-size: .9rem; font-weight: 600; color: var(--cms-text, #1f2933); background: #fff; cursor: pointer; transition: background .2s, color .2s, border-color .2s; }
.cms-b-chips button:hover { border-color: var(--cms-primary, #007aff); }
.cms-b-chips button.is-on { color: #fff; background: var(--cms-primary, #007aff); border-color: var(--cms-primary, #007aff); }
[data-filter-item][hidden] { display: none !important; }

/* Dự án */
.cms-b-case { display: flex; flex-direction: column; border-radius: var(--r); overflow: hidden; background: #fff; border: 1px solid var(--line); }
.cms-b-case-img { width: 100%; aspect-ratio: 16 / 10; object-fit: cover; }
.cms-b-case-body { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; padding: 20px; flex: 1; }
.cms-b-case h3 { font-size: 1.12rem; font-weight: 750; margin: 0; color: var(--cms-text, #1f2933); }
.cms-b-case p { margin: 0; color: var(--cms-muted, #6b7280); font-size: .94rem; }
.cms-b-case-result { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; margin-top: auto; padding-top: 10px; width: 100%; border-top: 1px dashed var(--line); }
.cms-b-case-result b { font-size: 1.6rem; font-weight: 800; color: var(--cms-primary, #007aff); }
.cms-b-case-result span { font-size: .88rem; color: var(--cms-muted, #6b7280); }

/* Đánh giá */
.cms-b-rv-sum { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 12px; margin: -10px 0 26px; color: var(--cms-muted, #6b7280); }
.cms-b-rv-sum b { font-size: 2rem; font-weight: 800; color: var(--cms-text, #1f2933); }
.cms-b .stars { color: #f5a524; letter-spacing: 1px; }
.cms-b-rv-sum .stars { font-size: 1.3rem; }
.cms-b-rv { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 22px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-rv h3 { font-size: 1.02rem; font-weight: 750; margin: 0; color: var(--cms-text, #1f2933); }
.cms-b-rv blockquote { margin: 0; color: var(--cms-text, #374151); flex: 1; overflow-wrap: anywhere; }
.cms-b-rv-imgs { display: flex; gap: 6px; }
.cms-b-rv-imgs img { width: 56px; height: 56px; object-fit: cover; border-radius: 10px; }
.cms-b-rv figcaption { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; padding-top: 10px; border-top: 1px solid var(--line); font-size: .88rem; }
.cms-b-rv figcaption b { color: var(--cms-text, #1f2933); }
.cms-b-rv figcaption a { flex-basis: 100%; color: var(--cms-muted, #6b7280); text-decoration: none; overflow-wrap: anywhere; }
.cms-b-rv figcaption a:hover { color: var(--cms-primary, #007aff); }
.cms-b-rv-ok { font-size: .78rem; font-weight: 700; color: #12a150; }

/* Chi nhánh */
.cms-b-locs-grid.has-map { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 20px; align-items: start; }
.cms-b-loc-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.cms-b-locs-grid.has-map .cms-b-loc-list { grid-template-columns: 1fr; max-height: 520px; overflow-y: auto; padding-right: 4px; }
.cms-b-loc { padding: 18px 20px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.cms-b-loc h3 { font-size: 1.05rem; font-weight: 750; margin: 0 0 8px; color: var(--cms-text, #1f2933); }
.cms-b-loc p { margin: 0 0 4px; font-size: .92rem; color: var(--cms-muted, #6b7280); }
.cms-b-loc-act { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.cms-b-loc-act .cms-kb-btn { padding: 6px 11px; font-size: .84rem; white-space: nowrap; }
.cms-b-loc-act .cms-kb-btn svg { width: 14px; height: 14px; }
.cms-b-map { position: sticky; top: 90px; border-radius: var(--r); overflow: hidden; border: 1px solid var(--line); aspect-ratio: 4 / 3; background: var(--soft); }
.cms-b-map iframe { width: 100%; height: 100%; border: 0; display: block; }
@media (max-width: 991.98px) { .cms-b-locs-grid.has-map { grid-template-columns: 1fr; } .cms-b-locs-grid.has-map .cms-b-loc-list { max-height: none; } .cms-b-map { position: static; } }

/* Ảnh trước / sau */
.cms-b-ba figure { margin: 0; }
.cms-b-ba-box { --ba: 50%; position: relative; overflow: hidden; border-radius: calc(var(--r) * 1.2); user-select: none; touch-action: pan-y; background: var(--soft); }
.cms-b-ba-box > img, .cms-b-ba-before img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; }
.cms-b-ba-before { position: absolute; inset: 0; clip-path: inset(0 calc(100% - var(--ba)) 0 0); }
.cms-b-ba-before img { height: 100%; }
.cms-b-ba-handle { position: absolute; top: 0; bottom: 0; left: var(--ba); width: 3px; translate: -50% 0; background: #fff; box-shadow: 0 0 10px rgba(0, 0, 0, .35); pointer-events: none; }
.cms-b-ba-handle::after { content: "‹ ›"; position: absolute; top: 50%; left: 50%; translate: -50% -50%; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; font-weight: 800; letter-spacing: 2px; color: var(--cms-primary, #007aff); background: #fff; box-shadow: 0 4px 14px rgba(0, 0, 0, .3); }
.cms-b-ba-box input[type="range"] { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: ew-resize; }
.cms-b-ba-box input[type="range"]:focus-visible ~ .cms-b-ba-handle, .cms-b-ba-box:has(input:focus-visible) .cms-b-ba-handle::after { outline: 3px solid var(--cms-primary, #007aff); }
.cms-b-ba-lb { position: absolute; top: 14px; padding: 4px 12px; border-radius: 999px; font-size: .8rem; font-weight: 700; color: #fff; background: rgba(0, 0, 0, .5); pointer-events: none; }
.cms-b-ba-lb.is-l { left: 14px; } .cms-b-ba-lb.is-r { right: 14px; }

/* Slider banner */
.cms-b-slider { position: relative; overflow: hidden; color: #fff; background: #0f172a; --h: clamp(380px, 52vw, 560px); }
.cms-b-slider--md { --h: clamp(300px, 38vw, 420px); }
.cms-b-slider--xl { --h: clamp(460px, 70vw, 720px); }
/* Theo tỉ lệ ảnh: không cắt banner đã thiết kế sẵn (tỉ lệ --ar lấy từ thư viện media, mặc định 3:1). */
.cms-b-slider--auto { container-type: inline-size; }
.cms-b-slider--auto .cms-b-slide { min-height: calc(100cqw / (var(--ar, 3))); }
/* Khung cao hơn tỉ lệ ảnh (slide khác có chữ dài – điện thoại): banner không chữ hiện trọn ảnh thay vì bị cắt. */
.cms-b-slider--auto .cms-b-slide.no-text:not(.has-mimg) .cms-b-slide-pic img { object-fit: contain; }
.cms-b-slides { display: grid; }
.cms-b-slide { grid-area: 1 / 1; position: relative; min-height: var(--h); display: flex; align-items: center; opacity: 0; visibility: hidden; transition: opacity .7s ease, visibility 0s .7s; background: linear-gradient(120deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 45%, #000)); }
.cms-b-slide.is-on { opacity: 1; visibility: visible; transition: opacity .7s ease; z-index: 1; }
.cms-b-slide-pic { display: contents; }
.cms-b-slide-pic img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* Lớp phủ tối – theo tùy chọn từng slide (tự động: chỉ khi slide hiện chữ, ảnh không chữ giữ nguyên độ sáng gốc). */
.cms-b-slide.has-img:not(.cms-b-slide--ov-none)::before { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; --ov: .72; --ov2: .2; background: linear-gradient(var(--ov-dir, 90deg), rgba(8, 18, 32, var(--ov)), rgba(8, 18, 32, var(--ov2))); }
.cms-b-slide--ov-light::before { --ov: .42 !important; --ov2: .08 !important; }
.cms-b-slide--ov-dark::before { --ov: .85 !important; --ov2: .5 !important; }
.cms-b-slide--right { --ov-dir: 270deg; }
.cms-b-slide--center { --ov-dir: 0deg; }
.cms-b-slide--center::before { background: rgba(8, 18, 32, calc((var(--ov) + var(--ov2)) / 2)) !important; }
/* Bấm cả banner (Link khi bấm vào ảnh): lớp link phủ toàn slide, khối chữ nhường thao tác chuột trừ nút. */
.cms-b-slide-link { position: absolute; inset: 0; z-index: 2; }
.cms-b-slide-link:focus-visible { outline: 3px solid #fff; outline-offset: -6px; }
.cms-b-slide-in { position: relative; z-index: 2; padding-top: 48px; padding-bottom: 64px; pointer-events: none; }
.cms-b-slide-in a { pointer-events: auto; }
.cms-b-slide-in > * { max-width: 620px; }
.cms-b-slide--center .cms-b-slide-in { text-align: center; }
.cms-b-slide--center .cms-b-slide-in > * { margin-left: auto; margin-right: auto; }
.cms-b-slide--right .cms-b-slide-in { text-align: right; }
.cms-b-slide--right .cms-b-slide-in > * { margin-left: auto; }
.cms-b-slide h2, .cms-b-slide-title { margin: 0 0 .4em; font-size: clamp(1.8rem, 1.2rem + 2.6vw, 3.2rem); font-weight: 800; line-height: 1.12; letter-spacing: -.02em; color: #fff; }
.cms-b-slide-in p { font-size: 1.1rem; color: rgba(255, 255, 255, .88); }
.cms-b-slide.is-on .cms-b-slide-in > * { animation: cms-b-rise .8s cubic-bezier(.22, 1, .36, 1) both; }
.cms-b-slide.is-on .cms-b-slide-in > :nth-child(2) { animation-delay: .1s; }
.cms-b-slide.is-on .cms-b-slide-in > :nth-child(3) { animation-delay: .2s; }
@keyframes cms-b-rise { from { opacity: 0; transform: translateY(18px); } }
.cms-b-sl-nav { position: absolute; top: 50%; z-index: 3; translate: 0 -50%; width: 46px; height: 46px; border: 0; border-radius: 50%; font-size: 1.8rem; line-height: 1; color: #fff; background: rgba(15, 23, 42, .28); text-shadow: 0 1px 3px rgba(0, 0, 0, .35); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); cursor: pointer; transition: background .2s; }
.cms-b-sl-nav:hover { background: rgba(15, 23, 42, .45); }
.cms-b-sl-nav.is-prev { left: 16px; } .cms-b-sl-nav.is-next { right: 16px; }
.cms-b-sl-dots { position: absolute; left: 0; right: 0; bottom: 20px; z-index: 3; display: flex; justify-content: center; gap: 4px; }
.cms-b-sl-dots button { width: 28px; height: 28px; padding: 0; border: 0; background: none; cursor: pointer; display: grid; place-items: center; }
.cms-b-sl-dots button::before { content: ""; width: 10px; height: 10px; border-radius: 999px; background: rgba(255, 255, 255, .6); box-shadow: 0 0 0 1px rgba(15, 23, 42, .25), 0 1px 4px rgba(0, 0, 0, .3); transition: width .3s, background .3s; }
.cms-b-sl-dots button[aria-current="true"]::before { width: 26px; background: #fff; }
@media (max-width: 767.98px) {
    .cms-b-sl-nav { display: none; }
    /* Ảnh riêng cho điện thoại: khung theo đúng tỉ lệ ảnh (không cắt) – tỉ lệ lấy từ thư viện media. */
    .cms-b-slider:has(.has-mimg) { container-type: inline-size; }
    .cms-b-slide.has-mimg { min-height: calc(100cqw / (var(--m-ar, 1))); }
    .cms-b-slide--right .cms-b-slide-in, .cms-b-slide--right .cms-b-slide-in > * { text-align: left; margin-left: 0; }
}
@media (prefers-reduced-motion: reduce) { .cms-b-slide, .cms-b-slide.is-on { transition: none; } .cms-b-slide.is-on .cms-b-slide-in > * { animation: none; } }

/* Banner video */
.cms-b-vhero { position: relative; display: flex; align-items: center; overflow: hidden; min-height: clamp(420px, 60vw, 640px); color: #fff; background: linear-gradient(120deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 40%, #000)); }
.cms-b-vhero--md { min-height: clamp(340px, 44vw, 480px); }
.cms-b-vhero--full { min-height: 100svh; }
.cms-b-vhero-media { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.cms-b-vhero::after { content: ""; position: absolute; inset: 0; background: rgba(8, 18, 32, var(--ov, .5)); }
.cms-b-vhero[data-overlay="30"] { --ov: .3; } .cms-b-vhero[data-overlay="70"] { --ov: .7; }
.cms-b-vhero-in { position: relative; z-index: 1; padding-top: 64px; padding-bottom: 64px; text-align: center; }
.cms-b-vhero-in h1 { max-width: 900px; margin: 0 auto .4em; font-size: clamp(2rem, 1.3rem + 3vw, 3.6rem); font-weight: 800; line-height: 1.1; letter-spacing: -.02em; color: #fff; }
.cms-b-vhero-in p { max-width: 680px; margin: 0 auto 28px; font-size: 1.15rem; color: rgba(255, 255, 255, .88); }
.cms-b-vhero .cms-b-actions { justify-content: center; }
@media (prefers-reduced-motion: reduce) { .cms-b-vhero video { display: none; } }

/* Danh sách video */
.cms-b-video h3 { font-size: 1.05rem; font-weight: 750; margin: 12px 0 4px; color: var(--cms-text, #1f2933); }
.cms-b-video p { margin: 0; font-size: .92rem; color: var(--cms-muted, #6b7280); }
.cms-b-video-play { position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; padding: 0; border: 0; border-radius: var(--r); overflow: hidden; cursor: pointer; background: linear-gradient(135deg, #1e293b, #0f172a); }
.cms-b-video-play.is-empty { cursor: default; }
.cms-b-video-play img, .cms-b-video-play iframe { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border: 0; }
.cms-b-video-play img { transition: transform .5s ease; }
.cms-b-video-play:hover img { transform: scale(1.04); }
.cms-b-video-ico { position: absolute; top: 50%; left: 50%; translate: -50% -50%; width: 64px; height: 64px; border-radius: 50%; background: rgba(255, 255, 255, .92); box-shadow: 0 8px 26px rgba(0, 0, 0, .35); transition: transform .25s; }
.cms-b-video-ico::after { content: ""; position: absolute; top: 50%; left: 54%; translate: -50% -50%; border-style: solid; border-width: 11px 0 11px 18px; border-color: transparent transparent transparent var(--cms-primary, #007aff); }
.cms-b-video-play:hover .cms-b-video-ico { transform: scale(1.08); }
.cms-b-video-play.is-playing .cms-b-video-ico { display: none; }

/* ---------- Khối danh sách: phân trang "Tải thêm" (phase 45) ---------- */
.cms-more { display: flex; justify-content: center; margin: 32px 0 8px; }
.cms-more__btn { display: inline-flex; align-items: center; gap: 8px; padding: 11px 26px; border-radius: 999px; border: 1.5px solid var(--cms-primary, #0d6efd); color: var(--cms-primary, #0d6efd); font-weight: 600; text-decoration: none; transition: background .2s, color .2s; }
.cms-more__btn:hover { background: var(--cms-primary, #0d6efd); color: #fff; }
.cms-more__btn[aria-busy="true"] { opacity: .6; pointer-events: none; }

/* Hệ sinh thái giải pháp – ecosystem */
.cms-b-eco-group { text-align: center; }
.cms-b-eco-label { margin-bottom: 12px; font-size: .78rem; font-weight: 750; letter-spacing: .12em; text-transform: uppercase; color: var(--cms-primary, #007aff); }
.cms-b-eco-nodes { list-style: none; display: grid; grid-template-columns: repeat(var(--n, 4), minmax(0, 1fr)); gap: 14px; margin: 0; padding: 0; }
.cms-b-eco-nodes li { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 18px 12px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); min-width: 0; }
.cms-b-eco-nodes a { color: inherit; text-decoration: none; }
.cms-b-eco-nodes small { color: var(--cms-muted, #5b6472); }
.cms-b-eco-ico { display: grid; place-items: center; width: 44px; height: 44px; margin-bottom: 6px; border-radius: 12px; color: var(--cms-primary, #007aff); background: var(--soft); font-size: 1.3rem; }
.cms-b-eco-arrow { margin: 10px 0; text-align: center; font-size: 1.6rem; line-height: 1; color: var(--cms-primary, #007aff); }
.cms-b-eco-hub { display: flex; align-items: center; gap: 22px; max-width: 720px; margin: 0 auto; padding: 24px 28px; border-radius: var(--r); color: #fff; background: linear-gradient(150deg, var(--cms-primary, #007aff), color-mix(in srgb, var(--cms-primary, #007aff) 55%, #000)); }
.cms-b-eco-hub img { width: 96px; height: 96px; object-fit: contain; flex: none; }
.cms-b-eco-hub h3 { margin: 0 0 8px; color: #fff; }
.cms-b-eco-hub p { margin: 0 0 12px; opacity: .9; }
.cms-b-eco-hub .cms-kb-btn { color: var(--cms-primary, #007aff); background: #fff; }
.cms-b-eco-badge { display: inline-block; margin-bottom: 8px; padding: 3px 10px; border-radius: 999px; font-size: .74rem; font-weight: 750; background: rgba(255, 255, 255, .18); }
.cms-b-eco-os { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; padding: 0; }
.cms-b-eco-os li { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 8px; font-size: .8rem; background: rgba(255, 255, 255, .14); }
@media (max-width: 767.98px) { .cms-b-eco-nodes { grid-template-columns: repeat(2, minmax(0, 1fr)); } .cms-b-eco-hub { flex-direction: column; text-align: center; } .cms-b-eco-os { justify-content: center; } }

/* Giới thiệu giao diện phần mềm – screen_showcase */
.cms-b-scr-tabs { display: flex; width: fit-content; max-width: 100%; margin: 0 auto 22px; gap: 4px; padding: 5px; overflow-x: auto; border-radius: 999px; background: #fff; border: 1px solid var(--line); }
.cms-b-scr-tabs button { flex: none; display: inline-flex; align-items: center; gap: 6px; padding: 8px 16px; border: 0; border-radius: 999px; background: none; font: inherit; font-weight: 650; color: inherit; cursor: pointer; white-space: nowrap; }
.cms-b-scr-tabs button[aria-selected="true"] { color: #fff; background: var(--cms-primary, #007aff); }
.cms-b-scr-frame { max-width: 960px; margin: 0 auto; overflow: hidden; border-radius: 14px; background: #fff; border: 1px solid var(--line); box-shadow: 0 30px 60px -30px rgba(15, 23, 42, .35); }
.cms-b-scr-bar { display: flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; background: #f1f4f8; border-bottom: 1px solid var(--line); font-size: .78rem; font-weight: 600; color: var(--cms-muted, #5b6472); }
.cms-b-scr-bar i { width: 10px; height: 10px; border-radius: 50%; background: #ff5f57; }
.cms-b-scr-bar i:nth-child(2) { background: #febc2e; }
.cms-b-scr-bar i:nth-child(3) { background: #28c840; }
.cms-b-scr-bar span { flex: 1; margin-right: 42px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cms-b-scr-view { position: relative; aspect-ratio: 16 / 9; background: var(--soft); }
.cms-b-scr-pane { position: absolute; inset: 0; opacity: 0; transition: opacity .5s; }
.cms-b-scr-pane.is-on { opacity: 1; }
.cms-b-scr-pane img { width: 100%; height: 100%; object-fit: cover; object-position: top left; display: block; }
.cms-b-scr-caps { max-width: 680px; min-height: 3em; margin: 20px auto 0; text-align: center; color: var(--cms-muted, #5b6472); }
.cms-b-scr-caps p { margin: 0; }
.cms-b-scr-calls { list-style: none; display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 26px; margin: 14px 0 0; padding: 0; font-size: .93rem; }
.cms-b-scr-calls li { display: inline-flex; align-items: center; gap: 8px; }
.cms-b-scr-calls svg { flex: none; color: var(--cms-primary, #007aff); }
.cms-b-scr-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 20px; }
.cms-b-case-meta { font-size: .82rem; color: var(--cms-muted, #6b7280); }

/* ---- Thư viện ảnh hiệu ứng cuộn (photo_motion) – mặc định lưới ảnh tĩnh; depth-gallery.js thêm .is-fx .is-gl để bật bay xuyên ảnh. ---- */
.cms-b-pm { --pm-gap: clamp(8px, 1vw, 14px); --pm-top: 0px; }
.cms-b-pm-intro { max-width: 780px; margin: 0 auto clamp(26px, 3vw, 46px); padding: 0 16px; text-align: center; }
.cms-b-pm-intro h2 { margin-bottom: .35em; }
.cms-b-pm-intro p { margin: 0; color: var(--cms-muted, #6b7280); font-size: 1.05rem; }
.cms-b-pm-items { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--pm-gap); width: min(1200px, calc(100% - 32px)); margin: 0 auto; }
.cms-b-pm-tile { position: relative; display: block; overflow: hidden; isolation: isolate; aspect-ratio: 4 / 3; border-radius: var(--r); background: #0f172a; color: #fff; text-decoration: none; }
.cms-b-pm-tile.is-lead { grid-column: span 2; grid-row: span 2; }
.cms-b-pm-tile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1s cubic-bezier(.2, .7, .2, 1); }
.cms-b-pm-tile:hover img { transform: scale(1.06); }
.cms-b-pm-cap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 30px 14px 12px; font-size: .85rem; font-weight: 600; line-height: 1.35; color: #fff; background: linear-gradient(transparent, rgba(3, 7, 18, .72)); opacity: 0; transform: translateY(8px); transition: opacity .35s, transform .35s; }
.cms-b-pm-tile:hover .cms-b-pm-cap, .cms-b-pm-tile:focus-visible .cms-b-pm-cap { opacity: 1; transform: none; }
@media (hover: none) { .cms-b-pm-cap { opacity: 1; transform: none; } }
.cms-b-pm-end { padding: 0 16px; margin-top: clamp(26px, 3vw, 44px); text-align: center; }
.cms-b-pm-end p { margin: 0 0 18px; font-size: clamp(1.25rem, 1rem + 1vw, 1.8rem); font-weight: 750; line-height: 1.3; }
.cms-b-pm-meter { display: none; }
@media (max-width: 767.98px) { .cms-b-pm-items { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Bay xuyên ảnh: nền tối kiểu rạp chiếu (cả khi ở dạng lưới) */
.cms-b-pm.is-depth { background: radial-gradient(120% 90% at 50% 0%, #17253d 0%, #070b14 72%); color: #dbe5f2; }
.cms-b-pm.is-depth h2 { color: #fff; }
.cms-b-pm.is-depth .cms-b-pm-intro p { color: rgba(226, 235, 247, .74); }
.cms-b-pm.is-depth .cms-b-eyebrow { color: #a9d6ff; background: rgba(255, 255, 255, .12); }

/* Hiệu ứng (bay xuyên ảnh): khung giữ đứng yên (sticky) bên dưới header, quãng cuộn = chiều cao track (depth-gallery.js đặt).
   Ảnh vẽ trên canvas WebGL; chữ HTML nổi trên canvas chỉ đổi transform / opacity. */
.cms-b-pm.is-fx { padding-top: 0; }
.cms-b-pm.is-fx .cms-b-pm-track { position: relative; }
.cms-b-pm.is-fx .cms-b-pm-stage { position: sticky; top: var(--pm-top); height: calc(100vh - var(--pm-top)); height: calc(100svh - var(--pm-top)); overflow: hidden; contain: layout paint; }
.cms-b-pm.is-fx .cms-b-pm-intro { will-change: transform, opacity; }
.cms-b-pm.is-fx .cms-b-pm-intro h2 { color: #fff; font-size: clamp(2rem, 1.1rem + 3vw, 3.7rem); line-height: 1.12; letter-spacing: -.02em; }

/* Bay xuyên ảnh: vẽ bằng WebGL (wwwroot/js/depth-gallery.js thêm .is-gl + canvas). Thẻ a / img thật vẫn ở trang (ẩn khỏi mắt, còn cho
   SEO, trình đọc màn hình, trình xem ảnh); chữ tiêu đề / câu kết / bộ đếm là HTML nổi trên canvas. */
.cms-b-pm.is-depth.is-fx { padding-bottom: 0; }
.cms-b-pm.is-gl .cms-b-pm-stage { background: #05070d; }
.cms-b-pm-canvas { position: absolute; inset: 0; z-index: 0; display: block; width: 100%; height: 100%; }
.cms-b-pm.is-gl .cms-b-pm-items { position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.cms-b-pm.is-gl :is(.cms-b-pm-intro, .cms-b-pm-end) { position: absolute; z-index: 2; left: 50%; top: 50%; max-width: none; margin: 0; padding: 0; transform: translate(-50%, -50%); will-change: transform, opacity; text-shadow: 0 2px 30px rgba(0, 0, 0, .45); }
.cms-b-pm.is-gl .cms-b-pm-intro { width: min(860px, calc(100% - 48px)); pointer-events: none; }
.cms-b-pm.is-gl .cms-b-pm-end { width: min(760px, calc(100% - 48px)); visibility: hidden; opacity: 0; }
.cms-b-pm.is-gl.has-word .cms-b-pm-end { top: 64%; }   /* chữ lấp lánh (vệt sáng sao băng) ở khoảng 35% chiều cao phía trên */
.cms-b-pm.is-gl .cms-b-pm-end p { color: #fff; font-size: clamp(1.6rem, 1rem + 2.4vw, 3rem); letter-spacing: -.02em; }
.cms-b-pm.is-gl .cms-b-pm-meter { position: absolute; z-index: 3; left: 50%; bottom: 22px; display: flex; align-items: center; gap: 12px; max-width: calc(100% - 48px); transform: translateX(-50%); font-size: .8rem; font-weight: 700; letter-spacing: .08em; color: rgba(255, 255, 255, .7); font-variant-numeric: tabular-nums; white-space: nowrap; pointer-events: none; }
.cms-b-pm-meter i { position: relative; flex: none; display: block; width: 120px; height: 2px; overflow: hidden; border-radius: 2px; background: rgba(255, 255, 255, .18); }
.cms-b-pm-meter i b { position: absolute; inset: 0; background: var(--cms-primary, #4cc3ff); transform-origin: left; transform: scaleX(0); will-change: transform; }
.cms-b-pm-meter span b { color: #fff; }
.cms-b-pm-meter em { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-style: normal; font-weight: 600; letter-spacing: .02em; color: rgba(255, 255, 255, .85); }
.cms-b-pm-meter em:empty { display: none; }
/* Điện thoại: bộ đếm lên đầu khung (đáy màn hình thường có nút liên hệ nổi che) */
@media (max-width: 767.98px) { .cms-b-pm.is-gl .cms-b-pm-meter { top: 16px; bottom: auto; } .cms-b-pm-meter i { width: 64px; } }
